🗳️ fec¶
Federal Election Commission campaign finance data. Contains candidate and committee registrations, itemized contributions, expenditures, and inter-committee transfers. Covers all federal elections (President, Senate, House) with data from 1980 to present. Bulk downloads are pipe-delimited files with no headers.
14 datasets · 232 columns
candidates · table¶
All federal candidates registered with the FEC. Includes candidate ID, name, party, office sought, state, district, incumbent/challenger status, and principal campaign committee. One record per candidate per election cycle. Source: cn{YY}.zip bulk download (pipe-delimited, no header).
| Column | Type | Null | Description |
|---|---|---|---|
candidate_ |
string | no | FEC candidate ID (e.g., H0AL01234, S0AK00567, P80000722) |
candidate_ |
string | yes | Candidate name (LAST, FIRST MIDDLE) |
party |
string | yes | Party affiliation code (DEM, REP, LIB, GRN, IND, etc.) |
office |
string | yes | Office sought (H=House, S=Senate, P=President) |
state |
string | yes | Two-letter state abbreviation (US postal code) |
district |
string | yes | Congressional district number (00 for at-large/Senate/President) |
cd_ |
string | yes | Enriched 4-digit congressional-district FIPS (state_fips + zero-padded district) — FK to geo.congressional_districts.cd_fips. Computed at materialization for House candidates only (office=H); NULL for Senate/President/unmapped jurisdictions. Mirrors the candidate_district_profile view join logic. |
incumbent_ |
string | yes | Incumbent/challenger/open status (I, C, O) |
candidate_ |
string | yes | Candidate status (C=statutory candidate, F=statutory candidate for future, N=not yet, P=statutory candidate in prior) |
principal_ |
string | yes | Principal campaign committee ID |
street1 |
string | yes | Mailing address street line 1 |
street2 |
string | yes | Mailing address street line 2 |
city |
string | yes | Mailing address city |
state_ |
string | yes | Mailing address state |
zip |
string | yes | Mailing address ZIP code |
election_ |
integer | yes | Election year (even-numbered) |
committees · table¶
All political committees registered with the FEC. Includes PACs, party committees, campaign committees, and Super PACs. Contains committee type, designation, connected organization, treasurer, and filing frequency. Source: cm{YY}.zip bulk download (pipe-delimited, no header). To reach a committee's connected organization FROM another schema rather than by name, join ref.canonical_org_entity on fec_committee_id = committee_id — that table carries one foreign key per source, so the org's LEI/SEC CIK and its committee_id sit in the same row and the join is exact. Matching connected_org_name as text finds the wrong entities and misses orgs filing under a differently-worded name.
| Column | Type | Null | Description |
|---|---|---|---|
committee_ |
string | no | FEC committee ID (e.g., C00000042) |
committee_ |
string | yes | Committee name |
treasurer_ |
string | yes | Committee treasurer name |
street1 |
string | yes | Committee street address line 1 |
street2 |
string | yes | Committee street address line 2 |
city |
string | yes | Committee city |
state |
string | yes | Committee state (two-letter postal) |
zip |
string | yes | Committee ZIP code |
designation |
string | yes | Committee designation: A=Authorized by candidate, B=Lobbyist/Registrant PAC, D=Leadership PAC, J=Joint fundraiser, P=Principal campaign committee, U=Unauthorized |
committee_ |
string | yes | Committee type code: H=House, S=Senate, P=Presidential, D=Delegate, U=Single-candidate independent, V=PAC with non-contribution account, W=PAC with non-contribution account (nonqualified), X=Party nonqualified, Y=Party qualified, Z=National party nonfederal, N=PAC nonqualified, Q=PAC qualified, I=Independent expenditure filer (person), C=Communication cost filer, E=Independent expenditure filer (not a committee), O=Super PAC |
connected_ |
string | yes | Connected organization name (for corporate/labor/trade PACs) |
candidate_ |
string | yes | Candidate ID (for authorized committees) |
filing_ |
string | yes | Filing frequency (A=administratively terminated, D=debt, M=monthly, Q=quarterly, T=terminated, W=waived) |
org_ |
string | yes | Interest group category (C=corporation, L=labor, M=membership, T=trade, V=cooperative, W=corp without capital stock) |
party |
string | yes | Party affiliation |
candidate_committee_linkages · table¶
Links between candidates and their authorized committees. Shows which committees are authorized by which candidates, including the linkage type and election year context. Source: ccl{YY}.zip (pipe-delimited, no header).
| Column | Type | Null | Description |
|---|---|---|---|
candidate_ |
string | no | FEC candidate ID (e.g., H0AL01234, S0AK00567, P80000722) |
election_ |
integer | yes | Election year (even-numbered) |
fec_ |
integer | yes | FEC election year for this record |
committee_ |
string | no | FEC committee ID (e.g., C00000042) |
committee_ |
string | yes | Committee type code: H=House, S=Senate, P=Presidential, D=Delegate, U=Single-candidate independent, V=PAC with non-contribution account, W=PAC with non-contribution account (nonqualified), X=Party nonqualified, Y=Party qualified, Z=National party nonfederal, N=PAC nonqualified, Q=PAC qualified, I=Independent expenditure filer (person), C=Communication cost filer, E=Independent expenditure filer (not a committee), O=Super PAC |
committee_ |
string | yes | Committee designation (A=authorized, P=principal) |
linkage_ |
long | yes | Unique linkage identifier |
individual_contributions · table¶
Itemized individual (donor-level) contributions to federal committees exceeding $200 per cycle. transaction_type spans both ordinary contributions (15/15E/22Y) AND code 10 (giving to Super PACs/Hybrid PACs/nonfederal soft-money accounts) — 10 is uncapped and by dollar volume is typically the single largest code (2024: $6.2B vs. $3.6B for 15), so a query that only knows 15/15E/22Y silently undercounts total giving, especially per-donor. See the transaction_type column comment for the full code list. Largest FEC dataset (~4-5GB per cycle, 20M+ records); contains donor name, employer, occupation, amount, date, and memo text (vectorized for inferred relationship discovery). Distinct from committee_contributions (committee-to-candidate money) and intercommittee_transactions (committee-to-committee transfers). Source: indiv{YY}.zip (pipe-delimited, no header).
| Column | Type | Null | Description |
|---|---|---|---|
committee_ |
string | no | FEC committee ID (e.g., C00000042) |
amendment_ |
string | yes | Amendment indicator (N=new, A=amendment, T=termination) |
report_ |
string | yes | Report type (e.g., 12G=pre-general, 12P=pre-primary, 30G=post-general, Q1-Q3=quarterly, YE=year-end) |
transaction_ |
string | yes | Primary/general indicator (P=primary, G=general) |
image_ |
string | yes | Microfilm image number |
transaction_ |
string | yes | FEC transaction type code (source: FEC transaction-type-code-descriptions). 15=contribution (individual/partnership/LLC), 15C=contribution from candidate, 15E=earmarked contribution, 22Y=contribution refund, 10=contribution to Super PAC/Hybrid PAC/nonfederal soft-money account (uncapped, no 15/15E individual limit — usually the largest single code by dollar volume, e.g. $6.2B vs $3.6B for 15 in 2024), 11=Native American Tribe contribution, 21Y=Native American Tribe refund, 20Y=nonfederal refund, 24I=earmarked passed by intermediary committee (intermediary out), 24T=earmarked passed from intermediary's treasury (treasury out), 19=electioneering communication donation received, 30/30E/30T=Convention Account receipt (individual/earmarked/tribe), 31/31E/31T=Headquarters Account receipt (individual/earmarked/tribe), 32/32E/32T=Recount Account receipt (individual/earmarked/tribe), 41Y=Headquarters Account refund, 42Y=Recount Account refund. |
entity_ |
string | yes | Entity type (IND=individual, COM=committee, ORG=organization, PAC=PAC, CAN=candidate) |
contributor_ |
string | yes | Contributor name (LAST, FIRST MIDDLE) |
city |
string | yes | Contributor city |
state |
string | yes | Contributor state (two-letter postal) |
zip_ |
string | yes | Contributor ZIP code |
employer |
string | yes | Contributor employer name |
occupation |
string | yes | Contributor occupation |
transaction_ |
date | yes | Transaction date |
amount |
double | yes | Transaction amount in USD (negative for refunds) |
other_ |
string | yes | Other committee ID (for transfers/earmarks) |
transaction_ |
string | yes | Transaction ID assigned by filer |
filing_ |
long | yes | FEC filing ID number |
memo_ |
string | yes | Memo code (X=memo item, not counted in totals) |
memo_ |
string | yes | Memo text (earmark info, conduit, purpose descriptions) |
sub_ |
long | yes | FEC unique record identifier |
committee_contributions · table¶
Committee-to-candidate transactions (PACs, party committees), spanning direct contributions and coordinated/independent spending via transaction_type codes (24K=direct contribution, 24C=coordinated party expenditure, 24E=independent for, 24A=independent against, 24F=communication cost for). Each row carries a candidate_id, distinguishing it from intercommittee_transactions (committee-to-committee transfers with no candidate link). Source: pas2{YY}.zip (pipe-delimited, no header).
| Column | Type | Null | Description |
|---|---|---|---|
committee_ |
string | no | FEC committee ID (e.g., C00000042) |
amendment_ |
string | yes | Amendment indicator (N=new, A=amendment, T=termination) |
report_ |
string | yes | Report type |
transaction_ |
string | yes | Primary/general indicator |
image_ |
string | yes | Microfilm image number |
transaction_ |
string | yes | Transaction type code (24A=independent against, 24C=coordinated, 24E=independent for, 24F=comm cost for, 24K=direct contribution) |
entity_ |
string | yes | Entity type |
contributor_ |
string | yes | Contributing committee/entity name |
city |
string | yes | Contributor city |
state |
string | yes | Contributor state |
zip_ |
string | yes | Contributor ZIP code |
employer |
string | yes | Employer (if applicable) |
occupation |
string | yes | Occupation (if applicable) |
transaction_ |
date | yes | Transaction date |
amount |
double | yes | Transaction amount in USD (negative for refunds) |
other_ |
string | yes | Candidate ID or other committee ID |
candidate_ |
string | no | FEC candidate ID (e.g., H0AL01234, S0AK00567, P80000722) |
transaction_ |
string | yes | Transaction ID |
filing_ |
long | yes | FEC filing ID number |
memo_ |
string | yes | Memo code |
memo_ |
string | yes | Memo text (purpose, earmark info) |
sub_ |
long | yes | FEC unique record identifier |
intercommittee_transactions · table¶
Transactions between political committees — transfers, joint fundraising allocations, and other inter-committee financial activity — with no candidate_id column, unlike committee_contributions (which links each row to a specific candidate). Shows the flow of money between PACs, party committees, and campaign committees. Source: oth{YY}.zip (pipe-delimited, no header).
| Column | Type | Null | Description |
|---|---|---|---|
committee_ |
string | no | FEC committee ID (e.g., C00000042) |
amendment_ |
string | yes | Amendment indicator (N=new, A=amendment, T=termination) |
report_ |
string | yes | Report type |
transaction_ |
string | yes | Primary/general indicator |
image_ |
string | yes | Microfilm image number |
transaction_ |
string | yes | Transaction type code |
entity_ |
string | yes | Entity type |
contributor_ |
string | yes | Contributing entity name |
city |
string | yes | City |
state |
string | yes | State |
zip_ |
string | yes | ZIP code |
employer |
string | yes | Employer |
occupation |
string | yes | Occupation |
transaction_ |
date | yes | Transaction date |
amount |
double | yes | Transaction amount in USD (negative for refunds) |
other_ |
string | yes | Other committee ID (receiving/sending) |
transaction_ |
string | yes | Transaction ID |
filing_ |
long | yes | FEC filing ID number |
memo_ |
string | yes | Memo code |
memo_ |
string | yes | Memo text |
sub_ |
long | yes | FEC unique record identifier |
operating_expenditures · table¶
Itemized operating expenditures by political committees. Shows how committees spend their money — consultants, media buys, travel, rent, staffing, etc. Purpose text is vectorized for spending pattern analysis. Source: oppexp{YY}.zip (pipe-delimited, no header).
| Column | Type | Null | Description |
|---|---|---|---|
committee_ |
string | no | FEC committee ID (e.g., C00000042) |
amendment_ |
string | yes | Amendment indicator (N=new, A=amendment, T=termination) |
report_ |
integer | yes | Report year |
report_ |
string | yes | Report type |
image_ |
string | yes | Microfilm image number |
line_ |
string | yes | Line number on form |
form_ |
string | yes | Form type (SB/F3, etc.) |
schedule_ |
string | yes | Schedule type description |
payee_ |
string | yes | Name of payee |
city |
string | yes | Payee city |
state |
string | yes | Payee state |
zip_ |
string | yes | Payee ZIP code |
transaction_ |
date | yes | Transaction date |
amount |
double | yes | Transaction amount in USD (negative for refunds) |
transaction_ |
string | yes | Primary/general indicator |
purpose |
string | yes | Purpose of expenditure (e.g., MEDIA BUY, CONSULTING, TRAVEL, RENT) |
category |
string | yes | Disbursement category code |
category_ |
string | yes | Disbursement category description |
memo_ |
string | yes | Memo code |
memo_ |
string | yes | Memo text |
entity_ |
string | yes | Entity type |
sub_ |
long | yes | FEC unique record identifier |
filing_ |
long | yes | FEC filing ID number |
transaction_ |
string | yes | Transaction ID |
back_ |
string | yes | Back-reference transaction ID |
independent_expenditures · table¶
Independent expenditures — spending by committees and individuals for or against candidates that is not coordinated with the candidate's campaign. Includes Super PAC spending. Source: independent_expenditure_{YYYY}.csv (CSV with headers).
| Column | Type | Null | Description |
|---|---|---|---|
candidate_ |
string | yes | FEC candidate ID |
candidate_ |
string | yes | Candidate name |
spender_ |
string | yes | Committee/spender ID |
spender_ |
string | yes | Committee/spender name |
election_ |
integer | yes | FEC election year |
support_ |
string | yes | Support/oppose indicator (S=support, O=oppose) |
purpose |
string | yes | Purpose of expenditure |
payee |
string | yes | Payee name |
transaction_ |
date | yes | Expenditure date |
amount |
double | yes | Expenditure amount in USD |
candidate_ |
string | yes | Office sought (H/S/P) |
candidate_ |
string | yes | Candidate state |
candidate_ |
string | yes | Candidate district |
candidate_ |
string | yes | Candidate party |
prev_ |
long | yes | Previous file number (for amendments) |
amendment_ |
string | yes | Amendment indicator |
filing_ |
long | yes | FEC filing ID number |
transaction_ |
string | yes | Transaction ID |
image_ |
string | yes | Image number |
electioneering_communications · table¶
Electioneering communications — broadcast, cable, or satellite ads that mention a federal candidate within 30 days of a primary or 60 days of a general election. Carries the reported disbursement amount plus, when one ad buy names multiple candidates, number_of_candidates and calculated_candidate_share to apportion the cost per candidate. Source: ElectioneeringComm_{YYYY}.csv (CSV with headers).
| Column | Type | Null | Description |
|---|---|---|---|
candidate_ |
string | yes | FEC candidate ID |
candidate_ |
string | yes | Candidate name |
candidate_ |
string | yes | Office sought (H/S/P) |
candidate_ |
string | yes | Candidate state |
candidate_ |
string | yes | Candidate district |
committee_ |
string | yes | Committee ID |
committee_ |
string | yes | Committee/organization name |
payee_ |
string | yes | Payee name |
disbursement_ |
string | yes | Description of the communication/disbursement |
disbursement_ |
date | yes | Disbursement date |
communication_ |
date | yes | Communication date |
amount |
double | yes | Reported disbursement amount in USD |
number_ |
integer | yes | Number of candidates targeted |
calculated_ |
double | yes | Calculated per-candidate share of disbursement |
communication_costs · table¶
Communication costs reported by corporations and labor organizations for internal communications (to employees, members) mentioning federal candidates, with a support_oppose (S/O) flag per candidate. Distinct from electioneering_communications, which covers public broadcast/cable/satellite ads rather than internal member communications. Source: CommunicationCosts_{YYYY}.csv (CSV with headers).
| Column | Type | Null | Description |
|---|---|---|---|
committee_ |
string | yes | Committee ID |
committee_ |
string | yes | Reporting organization name |
candidate_ |
string | yes | FEC candidate ID |
candidate_ |
string | yes | Candidate name |
candidate_ |
string | yes | Office sought (H/S/P) |
candidate_ |
string | yes | Candidate state |
candidate_ |
string | yes | Candidate district |
party |
string | yes | Candidate party affiliation |
support_ |
string | yes | Support/oppose indicator (S=support, O=oppose) |
communication_ |
string | yes | Communication type code (24A, 24N, etc.) |
communication_ |
string | yes | Communication class |
transaction_ |
date | yes | Transaction date. Unlike every other FEC bulk table (which use MMDDYYYY_OR_SLASH), CommunicationCosts_{year}.csv's TRANSACTION_DT is YYYYMMDD (e.g. "20260330") — verified directly against the raw cached response for both 2024 and 2026, not assumed from the shared *transaction_date_column anchor other tables use. |
amount |
double | yes | Transaction amount in USD |
purpose |
string | yes | Purpose of communication |
filing_ |
long | yes | FEC filing ID number |
candidate_summaries · table¶
Aggregated per-candidate financial summary for each election cycle — one row per candidate, not a transaction. Includes total receipts, disbursements, cash on hand, debts, and individual contributions split into itemized (>$200) vs unitemized (<=$200), plus party/other-committee contribution totals. Rolls up the transaction-level individual_contributions and committee_contributions tables rather than replacing them. Source: candidate_summary_{YYYY}.csv (CSV with headers).
| Column | Type | Null | Description |
|---|---|---|---|
candidate_ |
string | no | FEC candidate ID (e.g., H0AL01234, S0AK00567, P80000722) |
candidate_ |
string | yes | Candidate name (LAST, FIRST MIDDLE) |
incumbent_ |
string | yes | Incumbent/challenger/open status |
office |
string | yes | Office sought (H=House, S=Senate, P=President) |
state |
string | yes | Two-letter state abbreviation (US postal code) |
district |
string | yes | Congressional district number (00 for at-large/Senate/President) |
party |
string | yes | Party affiliation (DEM, REP, LIB, GRN, IND, etc.) |
total_ |
double | yes | Total receipts |
transfers_ |
double | yes | Transfers from authorized committees |
total_ |
double | yes | Total disbursements |
transfers_ |
double | yes | Transfers to authorized committees |
cash_ |
double | yes | Cash on hand at beginning of period |
cash_ |
double | yes | Cash on hand at end of period |
contributions_ |
double | yes | Contributions from the candidate |
loans_ |
double | yes | Loans from the candidate |
other_ |
double | yes | Other loans |
loan_ |
double | yes | Candidate loan repayments |
other_ |
double | yes | Other loan repayments |
debts_ |
double | yes | Debts owed by committee |
total_ |
double | yes | Total individual contributions |
individual_ |
double | yes | Itemized individual contributions (>$200) |
individual_ |
double | yes | Unitemized individual contributions (<=$200) |
pac_ |
double | yes | Contributions from political party committees |
other_ |
double | yes | Contributions from other political committees |
coverage_ |
date | yes | Coverage end date |
refunds_ |
double | yes | Refunds to individuals |
refunds_ |
double | yes | Refunds to committees |
committee_summaries · table¶
Aggregated per-committee financial summary for each election cycle — one row per committee, not a transaction. Includes total receipts, disbursements, cash on hand, debts, independent expenditures, party coordinated expenditures, and the nonfederal (non-election-account) share of transfers and expenditures. Rolls up the transaction-level committee_contributions and intercommittee_transactions tables rather than replacing them. Source: committee_summary_{YYYY}.csv (CSV with headers).
| Column | Type | Null | Description |
|---|---|---|---|
committee_ |
string | no | FEC committee ID (e.g., C00000042) |
committee_ |
string | yes | Committee name |
committee_ |
string | yes | Committee type code |
designation |
string | yes | Committee designation |
filing_ |
string | yes | Filing frequency |
total_ |
double | yes | Total receipts |
transfers_ |
double | yes | Transfers from affiliates |
individual_ |
double | yes | Total individual contributions |
other_ |
double | yes | Contributions from other political committees |
candidate_ |
double | yes | Candidate contributions |
candidate_ |
double | yes | Candidate loans |
total_ |
double | yes | Total loans received |
total_ |
double | yes | Total disbursements |
transfers_ |
double | yes | Transfers to affiliates |
refunds_ |
double | yes | Refunds to individuals |
refunds_ |
double | yes | Refunds to committees |
candidate_ |
double | yes | Candidate loan repayments |
total_ |
double | yes | Total loan repayments |
cash_ |
double | yes | Cash on hand beginning of period |
cash_ |
double | yes | Cash on hand end of period |
debts_ |
double | yes | Debts owed by committee |
nonfederal_ |
double | yes | Nonfederal transfers received |
contributions_ |
double | yes | Contributions to other committees |
independent_ |
double | yes | Independent expenditures |
party_ |
double | yes | Party coordinated expenditures |
nonfederal_ |
double | yes | Nonfederal share of expenditures |
coverage_ |
date | yes | Coverage end date |
connected_ |
string | yes | Connected organization name (for corporate/labor PACs) |
party |
string | yes | Party affiliation |
state |
string | yes | Committee state |
active_candidates · view¶
Federal candidates flagged as certified active (candidate_status = 'C') in fec.candidates. Not filtered to a single cycle — rows span every loaded election year, distinguished by the year column. Single-schema view using only fec tables.
View — columns are resolved by the query engine at runtime.
candidate_district_profile · view¶
Enriches FEC candidates with geographic state and congressional district data. House candidates (office=H) are matched to their TIGER district boundary via state_fips + zero-padded district number. Senate/presidential rows get state geography only (no CD match).
View — columns are resolved by the query engine at runtime.