Analyst Notes: Untangling campaign finance data

How we combined four FEC data sources to get accurate campaign finance data.

Published Oct 12, 2026by

When I set out to write about how much federal candidates were raising and spending for the 2026 midterm elections, I thought it would be a cinch: campaign finance data, managed by the Federal Election Commission (FEC), has publicly available campaign, candidate, and finance data, all the way back to the 1980 election (an analyst’s dream!).

The FEC is an independent federal government agency that oversees campaign finance laws and public disclosure of campaign data. They even have pages dedicated to reporting aggregations of money raised and spent for this year’s midterms.

So, my first stop was the FEC’s campaign finance data page.

Screenshot showing search data for affordability over time.

So much data!

I downloaded the 2025–2026 “Candidate summary” file. This file is a gold mine of a candidate’s finances, including critical data points to understanding candidate fundraising and spending:

  • Total receipts: how much money a candidate has raised
  • Total disbursements: how much they’ve spent
  • Candidate name: for example, “Martha Washington”
  • Candidate ID number: something like “H8VA01233,” which is a unique candidate identifier and indicates which race they are running in. “H” is for “House, “S” is for Senate, and “P” is for president.
  • Candidate party affiliation: Democrat, Republican, Independent, Green, other

Wait a minute: seeing double

And struck gold, I had! Specific values for fundraising and spending as far as my mouse could scroll. But my excitement quickly hit a snag — I was seeing duplicate candidate names with identical values in multiple races. This data gold started to feel like fool’s gold.

Generally, I was noticing three kinds of duplicates:

1) A candidate, in a House AND Senate race, with identical financial information.

Screenshot showing search data for affordability over time.

Duplicate names, different identification numbers

2) A candidate, in a House AND Senate race, with different financial information.

Screenshot showing search data for affordability over time.

Duplicate names, different IDs and different financial info

3) A candidate, in a House OR Senate race, with identical financial information but different unique identifiers.

Screenshot showing search data for affordability over time.

Duplicate names, different IDs in the same race

Duplicated candidate line items introduced data complications. It meant that I couldn’t simply aggregate the “total receipts” (aka total fundraised) column, because it would artificially increase the “total fundraised” or the “total spent” value. And it also meant that I didn’t know with certainty which race a candidate was running in.

So which, of all of these duplicate candidates, should I have kept? And was the FEC data wrong??

No, the FEC data wasn’t wrong. But it was trickier to navigate than I expected! I needed to figure out how to de-duplicate.

Finding more data

The FEC provides a lot of data files, all with different variations of campaign/candidate funding data. But I needed backup. This when my rockstar colleague Nicole (wearing huge sunglasses and a guitar slung over her shoulder, backlit by a spotlight and smoke machine fog) came to my aid.

She helped me identify another file that would aid in my effort: The “Candidate master” file, under the “Candidate files” section. This file had a column with information I was missing from the “Candidate summary” file:

  • Election year: Candidate's election year from a Statement of Candidacy or state ballot list

The original file didn't have a year column; could it have been that some of the duplicates were the same candidates running in different election cycles?

The new file also had some familiar columns as seen in the “Candidate summary” file, like:

  • Identification number
  • Candidate’s name
  • Party affiliation

If you’re a vlookup aficionado like myself (or a more sophisticated data mapper), you may have recognized the same thing I did: that I can use the unique “Identification” number from both files in order to map “Election year” into the “Candidate summary” file.

Here is a visual aid to show how I used the overlapping columns, from different files, to map an election year value to each candidate:

Screenshot showing search data for affordability over time.

Combining two data sources

Great! With this addition, I could eliminate any candidates with an election year value that wasn't 2026.

But there were still duplicates: some candidates had multiple line items for the 2026 election.

Nicole (strumming a dramatic power chord on her guitar, holding her hand high in the air for emphasis) found yet another file, “Statements of candidacy,” that had yet another data point that would allow us to de-duplicate:

  • Receipt date: filing date of candidate’s race

This column showed the filing date of each candidate’s race. In an instance where a candidate began a 2026 House campaign and later switched to a 2026 Senate campaign (or vice versa), this line item tells us which race is the current, active race.

Screenshot showing search data for affordability over time.

I used "Receipt date” to de-duplicate candidates on when they entered their race.

This was the case with Colin Allred, who filed a Senate race in July 2025, but filed separately for a House race in December 2025. Knowing this, we could eliminate the Senate race.

Screenshot showing search data for affordability over time.

I de-duplicated candidate line items on receipt date, aka the date a candidate filed for a race.

But there was one last consideration: a single candidate can have multiple committees that report funding. Which committee should we pick?

Campaign finance refresher: committees

Before I get into Nicole’s third and final data discovery, remember that candidates are required to have a principal campaign committee registered with the FEC to raise and spend campaign funds. A candidate can also authorize other committees, but only one is designated “principal” on the FEC paperwork.

Remember also that the “Candidate summary” file is a summary of all receipts and disbursements from all committees. So when Nicole found a file called “Candidate-committee linkages,” which included committee designations, it was her shredding guitar solo that was the third and final de-duplication solution.

This file gave us:

  • Committee ID: A unique nine-character alpha-numeric code assigned to each committee by the FEC. The committee ID for a specific committee always remains the same.
  • Committee designation: where “P” = principal campaign committee of a candidate

By filtering on principal committees, we could map principal committees to candidates and use the funding data associated with them.

Screenshot showing search data for affordability over time.

With more data, I could de-duplicate candidates for the current 2025–2026 midterm.

Similar to the “election year” filter, we only included candidates in this analysis based on funding from their principal committee.

Voila! De-duplicated data

Okay, it wasn’t quite as simple as “voila,” but finding more data points, restricting data based on election year and principal committee, and de-duplicating based on receipt date allowed us to knock out the large majority of redundancies with high confidence.

Some candidates still did (and do, as we update these pages) require manual review to make sure we’re getting the correct candidate line item.

But this approach of data combination, filtering, automated duplication flagging, and review of low confidence duplications, allowed us to set up a system that gives us automated, up-to-date candidate campaign finance information.

Screenshot showing search data for affordability over time.

Candidate finance data, without duplicates!

Get more Analyst Notes

Analyst Notes: Untangling campaign finance data | USAFacts