Skip to content

Instantly share code, notes, and snippets.

@spdaly
Created March 19, 2026 18:31
Show Gist options
  • Select an option

  • Save spdaly/3eb861e5dfde0fc2831163ecab353b38 to your computer and use it in GitHub Desktop.

Select an option

Save spdaly/3eb861e5dfde0fc2831163ecab353b38 to your computer and use it in GitHub Desktop.
Exploring the FEC Candidates Database (2026) - weball26 dataset analysis with sqlite-utils

Exploring the FEC Candidates Database (2026)

2026-03-19T18:17:18Z by Showboat 0.6.1

This document explores the FEC 'weball26' dataset — a bulk download of all federal candidate financial summaries for the 2026 election cycle. The data was loaded into fed-data.db using sqlite-utils. Let's start by understanding the shape of the data.

uvx sqlite-utils tables fed-data.db --counts --columns
[{"table": "candidates", "count": 3579, "columns": ["CAND_ID", "CAND_NAME", "CAND_ICI", "PTY_CD", "CAND_PTY_AFFILIATION", "TTL_RECEIPTS", "TRANS_FROM_AUTH", "TTL_DISB", "TRANS_TO_AUTH", "COH_BOP", "COH_COP", "CAND_CONTRIB", "CAND_LOANS", "OTHER_LOANS", "CAND_LOAN_REPAY", "OTHER_LOAN_REPAY", "DEBTS_OWED_BY", "TTL_INDIV_CONTRIB", "CAND_OFFICE_ST", "CAND_OFFICE_DISTRICT", "SPEC_ELECTION", "PRIM_ELECTION", "RUN_ELECTION", "GEN_ELECTION", "GEN_ELECTION_PERCENT", "OTHER_POL_CMTE_CONTRIB", "POL_PTY_CONTRIB", "CVG_END_DT", "INDIV_REFUNDS", "CMTE_REFUNDS"]}]

3,579 candidates with 30 columns covering financials, party, state/district, and election type. Key columns:

  • CAND_ICI: Incumbent (I), Challenger (C), or Open seat (O)
  • TTL_RECEIPTS / TTL_DISB: Total money raised and spent
  • COH_COP: Cash on hand at close of period
  • CAND_OFFICE_ST / CAND_OFFICE_DISTRICT: State and district (00 = Senate/statewide)

Let's look at the breakdown by candidate status and party.

uvx sqlite-utils query fed-data.db "SELECT CAND_ICI, CASE CAND_ICI WHEN 'I' THEN 'Incumbent' WHEN 'C' THEN 'Challenger' WHEN 'O' THEN 'Open Seat' ELSE 'Unknown' END as status, count(*) as count, printf('$%,.0f', sum(TTL_RECEIPTS)) as total_raised, printf('$%,.0f', avg(TTL_RECEIPTS)) as avg_raised FROM candidates GROUP BY CAND_ICI ORDER BY count DESC" --table
CAND_ICI    status        count  total_raised    avg_raised
----------  ----------  -------  --------------  ------------
C           Challenger     2010  $448,872,304    $223,320
O           Open Seat       856  $316,996,415    $370,323
I           Incumbent       672  $1,026,035,397  $1,526,838
            Unknown          41  $1,528,688      $37,285

Incumbents are only 19% of candidates but raised 57% of all money — averaging $1.5M vs $223K for challengers. The fundraising advantage is roughly 7:1. Open seat candidates fall in between at $370K average.

Now let's look at party breakdown.

uvx sqlite-utils query fed-data.db "SELECT CAND_PTY_AFFILIATION as party, count(*) as candidates, printf('$%,.0f', sum(TTL_RECEIPTS)) as total_raised, printf('$%,.0f', avg(TTL_RECEIPTS)) as avg_raised, printf('$%,.0f', max(TTL_RECEIPTS)) as max_raised FROM candidates GROUP BY CAND_PTY_AFFILIATION ORDER BY count(*) DESC LIMIT 15" --table
party      candidates  total_raised    avg_raised    max_raised
-------  ------------  --------------  ------------  ------------
DEM              1716  $987,000,624    $575,175      $43,231,398
REP              1629  $758,680,126    $465,734      $14,500,290
IND                97  $28,817,099     $297,083      $21,334,881
LIB                28  $221,809        $7,922        $109,991
DFL                18  $11,398,858     $633,270      $3,287,670
OTH                14  $2,154,094      $153,864      $2,087,842
NPA                13  $51,053         $3,927        $20,455
UN                 11  $202,050        $18,368       $124,336
NNE                10  $26,894         $2,689        $11,100
GRE                10  $68,320         $6,832        $52,303
W                   6  $2,313,846      $385,641      $2,312,308
UNK                 5  $2,431,121      $486,224      $2,431,016
NON                 4  $35,830         $8,958        $14,600
IDP                 3  $8,460          $2,820        $8,454
CON                 3  $676            $225          $676

Democrats (1,716) and Republicans (1,629) dominate, together making up 93% of candidates. Democrats have raised $987M vs $758M for Republicans — a $228M edge in total, though this partly reflects having more candidates. DFL (Democratic-Farmer-Labor) is Minnesota's Democratic affiliate.

Notice that single max-raised Democrat hit $43M — let's find out who that is, and see the top fundraisers overall.

uvx sqlite-utils query fed-data.db "SELECT CAND_NAME, CAND_PTY_AFFILIATION as party, CAND_ICI as status, CAND_OFFICE_ST as state, CAND_OFFICE_DISTRICT as dist, printf('$%,.0f', TTL_RECEIPTS) as raised, printf('$%,.0f', TTL_DISB) as spent, printf('$%,.0f', COH_COP) as cash_on_hand FROM candidates ORDER BY TTL_RECEIPTS DESC LIMIT 15" --table
CAND_NAME                  party    status    state      dist  raised       spent        cash_on_hand
-------------------------  -------  --------  -------  ------  -----------  -----------  --------------
OSSOFF, T. JONATHAN        DEM      I         GA            0  $43,231,398  $22,671,225  $25,550,739
KRISHNAMOORTHI, S          DEM      O         IL               $30,481,291  $23,905,475  $6,575,816
OCASIO-CORTEZ, ALEXANDRIA  DEM      I         NY           14  $23,658,045  $13,983,781  $13,408,910
KELLY, MARK                DEM      I         AZ            0  $22,203,173  $11,721,386  $14,884,220
SANDERS, BERNARD           IND      I         VT            0  $21,334,881  $10,149,517  $21,926,125
COOPER, ROY                DEM      O         NC            0  $21,070,824  $6,842,849   $14,227,974
TALARICO, JAMES            DEM      C         TX            0  $20,694,809  $15,906,718  $4,788,090
WEIL, JOSHUA JOSEPH        DEM      C         FL            6  $15,933,478  $15,933,478  $0
WEIL, JOSHUA JOSEPH        DEM      C         FL            0  $15,933,478  $15,933,478  $0
BOOKER, CORY A.            DEM      I         NJ            0  $15,471,158  $4,758,900   $21,904,744
JOHNSON, JAMES MICHAEL     REP      I         LA            4  $14,500,290  $6,600,178   $9,152,489
BROWN, SHERROD             DEM      C         OH            0  $14,356,451  $4,456,809   $9,899,642
WARNER, MARK ROBERT        DEM      I         VA            0  $12,141,616  $4,329,263   $13,365,586
MURPHY, CHRISTOPHER S      DEM      I         CT            0  $11,631,864  $6,329,938   $10,828,701
JEFFRIES, HAKEEM           DEM      I         NY            8  $10,327,241  $9,417,063   $5,864,742

Jon Ossoff (D-GA) leads all fundraisers at $43.2M — he's the incumbent Georgia Senator gearing up for 2026. AOC and Krishnamoorthi are notable for running for higher office (both seeking Senate seats). Bernie Sanders raised $21.3M but has $21.9M cash on hand — more than he raised this cycle, thanks to carryover.

Joshua Weil (FL) appears twice — once for district 6 and once for district 00 (Senate) — likely running for both or a data artifact.

The top 15 is overwhelmingly Democratic (13 of 15). Speaker Mike Johnson is the lone Republican at $14.5M. Let's check the top Republican fundraisers specifically.

uvx sqlite-utils query fed-data.db "SELECT CAND_NAME, CAND_ICI as status, CAND_OFFICE_ST as state, CAND_OFFICE_DISTRICT as dist, printf('$%,.0f', TTL_RECEIPTS) as raised, printf('$%,.0f', COH_COP) as cash_on_hand FROM candidates WHERE CAND_PTY_AFFILIATION = 'REP' ORDER BY TTL_RECEIPTS DESC LIMIT 10" --table
CAND_NAME                 status    state      dist  raised       cash_on_hand
------------------------  --------  -------  ------  -----------  --------------
JOHNSON, JAMES MICHAEL    I         LA            4  $14,500,290  $9,152,489
FLEMING, JOHN C. JR.      C         LA            0  $8,681,836   $2,115,984
SCALISE, STEVE MR         I         LA            1  $7,843,280   $5,528,286
COLLINS, SUSAN M.         I         ME            0  $7,393,291   $8,039,234
HUSTED, JON               I         OH            0  $7,348,700   $5,963,439
EMMER, THOMAS EARL JR.    I         MN            6  $6,763,927   $4,945,131
BARR, GARLAND ANDY        I         KY            6  $6,489,657   $6,471,050
BARR, GARLAND ANDY        O         KY            0  $6,489,657   $6,471,050
CRUZ, RAFAEL EDWARD  TED  I         TX            0  $6,442,446   $2,467,066
KIM, YOUNG                I         CA           40  $6,339,771   $5,496,764

Republican fundraising is notably lower at the top — Speaker Mike Johnson's $14.5M leads, but the #2 Republican (John Fleming at $8.7M) would rank around 20th overall. Susan Collins ($7.4M) has more cash on hand than she raised this cycle — strong carryover from prior cycles.

Andy Barr (KY) appears twice — likely both his House seat and a Senate exploratory. Let's look at the geographic distribution — which states have the most candidates and money?

uvx sqlite-utils query fed-data.db "SELECT CAND_OFFICE_ST as state, count(*) as candidates, printf('$%,.0f', sum(TTL_RECEIPTS)) as total_raised, printf('$%,.0f', avg(TTL_RECEIPTS)) as avg_raised FROM candidates GROUP BY CAND_OFFICE_ST ORDER BY sum(TTL_RECEIPTS) DESC LIMIT 15" --table
state      candidates  total_raised    avg_raised
-------  ------------  --------------  ------------
TX                348  $166,659,867    $478,908
CA                331  $132,081,387    $399,037
NY                170  $118,635,307    $697,855
IL                165  $102,896,464    $623,615
FL                236  $94,541,269     $400,599
GA                114  $89,094,836     $781,534
NC                125  $63,703,071     $509,625
AZ                 88  $62,820,740     $713,872
MI                114  $60,987,909     $534,982
LA                 41  $58,116,545     $1,417,477
OH                 88  $52,099,381     $592,038
NJ                122  $46,538,207     $381,461
PA                 90  $44,917,555     $499,084
KY                 50  $44,250,213     $885,004
VA                116  $43,624,294     $376,071

Texas leads in both candidate count (348) and total money ($167M), followed by California ($132M). But the most interesting column is average raised per candidate:

  • Louisiana averages $1.4M/candidate — inflated by Speaker Johnson's war chest and a competitive Senate race
  • Georgia averages $782K — Ossoff's $43M anchor plus competitive House races
  • Arizona averages $714K — a perennial swing state

Now let's look at the cash-on-hand picture — who's sitting on the biggest war chests vs who's already spent it all?

uvx sqlite-utils query fed-data.db "SELECT CAND_NAME, CAND_PTY_AFFILIATION as party, CAND_OFFICE_ST as state, printf('$%,.0f', COH_COP) as cash_on_hand, printf('$%,.0f', TTL_RECEIPTS) as raised, printf('%.0f%%', (COH_COP * 100.0 / TTL_RECEIPTS)) as pct_banked FROM candidates WHERE TTL_RECEIPTS > 1000000 ORDER BY COH_COP DESC LIMIT 10" --table
CAND_NAME             party    state    cash_on_hand    raised       pct_banked
--------------------  -------  -------  --------------  -----------  ------------
OSSOFF, T. JONATHAN   DEM      GA       $25,550,739     $43,231,398  59%
SANDERS, BERNARD      IND      VT       $21,926,125     $21,334,881  103%
BOOKER, CORY A.       DEM      NJ       $21,904,744     $15,471,158  142%
KENNEDY, JOHN NEELY   REP      LA       $17,412,628     $5,973,246   292%
THUNE, JOHN R.        REP      SD       $17,018,310     $2,793,133   609%
KHANNA, ROHIT         DEM      CA       $15,454,963     $9,579,628   161%
NUNES, DEVIN G.       REP      CA       $15,321,497     $2,225,712   688%
TORRES, RITCHIE JOHN  DEM      NY       $14,935,105     $5,052,480   296%
KELLY, MARK           DEM      AZ       $14,884,220     $22,203,173  67%
COOPER, ROY           DEM      NC       $14,227,974     $21,070,824  68%

The 'pct_banked' column reveals a fascinating pattern. Candidates with >100% banked have more cash than they raised this cycle — meaning they carried over massive war chests from prior cycles:

  • John Thune (R-SD): 609% — raised only $2.8M this cycle but sits on $17M. As Senate Majority Leader, he's stockpiled from years of fundraising.
  • Devin Nunes (R-CA): 688% — left Congress for Trump Media CEO role but still has $15.3M in campaign funds.
  • Cory Booker (D-NJ): 142% — carryover from his presidential campaign.
  • Bernie Sanders: 103% — similarly sitting on prior-cycle money.

Let's look at the spending efficiency — candidates who burned through everything.

uvx sqlite-utils query fed-data.db "SELECT CAND_NAME, CAND_PTY_AFFILIATION as party, CAND_OFFICE_ST as state, printf('$%,.0f', TTL_RECEIPTS) as raised, printf('$%,.0f', TTL_DISB) as spent, printf('$%,.0f', COH_COP) as cash_left, printf('$%,.0f', DEBTS_OWED_BY) as debt FROM candidates WHERE TTL_RECEIPTS > 500000 ORDER BY DEBTS_OWED_BY DESC LIMIT 10" --table
CAND_NAME                    party    state    raised      spent       cash_left    debt
---------------------------  -------  -------  ----------  ----------  -----------  -----------
SCOTT, RICK SEN              REP      FL       $1,289,827  $1,292,783  $795,408     $24,138,834
MCCORMICK, DAVE              REP      PA       $3,486,813  $3,259,267  $833,024     $21,148,697
MORENO, BERNIE               REP      OH       $1,879,101  $785,798    $1,471,623   $8,289,894
JOHNSON, RON HAROLD MR.      REP      WI       $814,324    $531,823    $1,190,547   $8,027,317
SHREVE, JEFFERSON            REP      IN       $2,296,135  $308,424    $2,119,426   $7,900,000
CONSTANTINO, ANTHONY THOMAS  REP      NY       $5,005,073  $2,256,726  $5,055,234   $7,600,000
CHATZKY, PETER               DEM      NY       $6,051,760  $527,684    $5,524,076   $5,501,000
LYNCH, MARK                  REP      SC       $5,573,433  $999,022    $4,574,411   $5,050,000
ISSA, DARRELL                REP      CA       $1,491,705  $491,497    $2,644,824   $5,024,682
TRONE, DAVID                 DEM      MD       $6,010,148  $2,383,972  $3,630,017   $5,000,000

Several candidates carry enormous debts — mostly from self-funding:

  • Rick Scott (R-FL): $24.1M in debt, having famously spent over $100M of his own money across campaigns
  • Dave McCormick (R-PA): $21.1M — self-funded much of his Senate bid
  • The pattern is clear: candidates who loan their campaigns large sums show up here when those loans aren't repaid

Finally, let's see the self-funding picture directly — who's putting their own money in?

uvx sqlite-utils query fed-data.db "SELECT CAND_NAME, CAND_PTY_AFFILIATION as party, CAND_OFFICE_ST as state, printf('$%,.0f', CAND_CONTRIB + CAND_LOANS) as self_funded, printf('$%,.0f', TTL_RECEIPTS) as total_raised, printf('%.0f%%', ((CAND_CONTRIB + CAND_LOANS) * 100.0 / TTL_RECEIPTS)) as pct_self FROM candidates WHERE TTL_RECEIPTS > 500000 AND (CAND_CONTRIB + CAND_LOANS) > 0 ORDER BY (CAND_CONTRIB + CAND_LOANS) DESC LIMIT 10" --table
CAND_NAME                    party    state    self_funded    total_raised    pct_self
---------------------------  -------  -------  -------------  --------------  ----------
FLEMING, JOHN C. JR.         REP      LA       $8,125,000     $8,681,836      94%
CHATZKY, PETER               DEM      NY       $5,751,005     $6,051,760      95%
TRONE, DAVID                 DEM      MD       $5,406,107     $6,010,148      90%
TRONE, DAVID                 DEM      MD       $5,406,107     $6,010,148      90%
LYNCH, MARK                  REP      SC       $5,050,000     $5,573,433      91%
CONSTANTINO, ANTHONY THOMAS  REP      NY       $5,000,000     $5,005,073      100%
MORRIS, NATE                 REP      KY       $4,452,000     $6,005,803      74%
ARQUETTE, ADAM PEREZ         REP      KY       $3,329,000     $3,329,000      100%
OBERWEIS, JAMES MR.          REP      FL       $3,102,051     $3,358,586      92%
O'DONNELL, MARTY             REP      NV       $3,007,000     $3,154,409      95%

Self-funding is heavily Republican — 7 of the top 10 self-funders are GOP candidates. Anthony Constantino (R-NY) and Adam Arquette (R-KY) are at 100% self-funded. John Fleming (R-LA) put $8.1M of his own money into his Senate race — 94% of his total.

David Trone (D-MD), a liquor store magnate, appears twice (same pattern as other dual-filing candidates).

Let's wrap up with a summary of the overall financial picture.

uvx sqlite-utils query fed-data.db "SELECT count(*) as total_candidates, printf('$%,.0f', sum(TTL_RECEIPTS)) as total_raised, printf('$%,.0f', sum(TTL_DISB)) as total_spent, printf('$%,.0f', sum(COH_COP)) as total_cash_on_hand, printf('$%,.0f', sum(DEBTS_OWED_BY)) as total_debt, printf('$%,.0f', sum(TTL_INDIV_CONTRIB)) as from_individuals, printf('$%,.0f', sum(OTHER_POL_CMTE_CONTRIB)) as from_pacs, printf('$%,.0f', sum(POL_PTY_CONTRIB)) as from_parties FROM candidates" --table
  total_candidates  total_raised    total_spent     total_cash_on_hand    total_debt    from_individuals    from_pacs     from_parties
------------------  --------------  --------------  --------------------  ------------  ------------------  ------------  --------------
              3579  $1,793,432,804  $1,913,224,075  $807,162,521          $611,374,847  $1,104,462,728      $246,282,327  $2,627,674

Summary

The 2026 FEC candidate universe shows $1.79 billion raised across 3,579 candidates, with $1.91 billion spent (more than raised, thanks to carryover from prior cycles). Key takeaways:

  1. Incumbency is everything: 672 incumbents raised $1.03B — more than the 2,866 challengers and open-seat candidates combined
  2. Individual donors dominate: $1.1B (62%) came from individual contributions vs $246M from PACs and just $2.6M from parties directly
  3. Democrats lead in fundraising: $987M vs $759M for Republicans, though Republicans have more self-funders
  4. Massive carryover war chests: Total cash on hand ($807M) is 45% of total raised, meaning many incumbents are sitting on years of accumulated funds
  5. $611M in debt: Largely from candidate self-loans, concentrated among wealthy Republican candidates
  6. Texas and California generate the most total money, but Louisiana and Georgia have the highest per-candidate averages due to marquee races
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment