Skip to content

🗳️ 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.

19 datasets · 377 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_id string no FEC candidate ID (e.g., H0AL01234, S0AK00567, P80000722)
candidate_name 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_fips 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_challenger string yes Incumbent/challenger/open status (I, C, O)
candidate_status string yes Candidate status (C=statutory candidate, F=statutory candidate for future, N=not yet, P=statutory candidate in prior)
principal_committee_id 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_address string yes Mailing address state
zip string yes Mailing address ZIP code
election_year 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_id string no FEC committee ID (e.g., C00000042)
committee_name string yes Committee name
treasurer_name 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_type 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_org_name string yes Connected organization name (for corporate/labor/trade PACs)
candidate_id string yes Candidate ID (for authorized committees)
filing_frequency string yes Filing frequency (A=administratively terminated, D=debt, M=monthly, Q=quarterly, T=terminated, W=waived)
org_type 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_id string no FEC candidate ID (e.g., H0AL01234, S0AK00567, P80000722)
election_year integer yes Election year (even-numbered)
fec_election_year integer yes FEC election year for this record
committee_id string no FEC committee ID (e.g., C00000042)
committee_type 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_designation string yes Committee designation (A=authorized, P=principal)
linkage_id 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). DIRECTION: committee_id is the RECIPIENT committee (join fec.committees on committee_id + year for its details) and contributor_name is genuinely the donor (individual) here — unlike committee_contributions/intercommittee_transactions, this table's column names match their roles. PERFORMANCE: always filter on the year partition first — this is the largest FEC table by row count and an unfiltered or non-partition-filtered aggregate can exceed a 30s query timeout. Donor-name lookup ("what has this person given") is NOT currently supported even with a year filter: contributor_name has no sort order/clustering, so a name-filtered scan of one year's partition (tens of millions of rows) still exceeds the 30s statement timeout in production — confirmed 2026-09-29 (see kenstott/govdata-ops#780). Do not attempt a name-filtered query against this table until #780's remediation (a donor-summary table or sortOrder+ reprocess) lands.

Column Type Null Description
committee_id string no FEC committee ID (e.g., C00000042)
amendment_indicator string yes Amendment indicator (N=new, A=amendment, T=termination)
report_type string yes Report type (e.g., 12G=pre-general, 12P=pre-primary, 30G=post-general, Q1-Q3=quarterly, YE=year-end)
transaction_pgi string yes Primary/general indicator (P=primary, G=general)
image_num string yes Microfilm image number
transaction_type 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_type string yes Entity type (IND=individual, COM=committee, ORG=organization, PAC=PAC, CAN=candidate)
contributor_name string yes Contributor name (LAST, FIRST MIDDLE)
city string yes Contributor city
state string yes Contributor state (two-letter postal)
zip_code string yes Contributor ZIP code
employer string yes Contributor employer name
occupation string yes Contributor occupation
transaction_date date yes Transaction date
amount double yes Transaction amount in USD (negative for refunds)
other_id string yes Other committee ID (for transfers/earmarks)
transaction_id string yes Transaction ID assigned by filer
filing_id long yes FEC filing ID number
memo_cd string yes Memo code (X=memo item, not counted in totals)
memo_text string yes Memo text (earmark info, conduit, purpose descriptions)
sub_id 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). DIRECTION: committee_id is the DONOR/filing committee (the PAC or party committee that made this expenditure — join fec.committees on committee_id + year for its name/type/connected organization); contributor_name and other_id both identify the RECIPIENT (candidate's authorized committee) — contributor_name is its name despite the field's name, other_id is its FEC committee ID (join fec.committees on other_id + year for the recipient's own details), and candidate_id is the recipient candidate. amount is signed per transaction_type — a negative value is a refund/adjustment against a prior contribution, not new money moving; net (don't just sum) amount when computing a total given/received. PERFORMANCE: always filter on the year partition — an aggregate filtered only by candidate_id (or any other non-partition column) across all years can exceed a 30s query timeout.

Column Type Null Description
committee_id string no FEC committee ID (e.g., C00000042)
amendment_indicator string yes Amendment indicator (N=new, A=amendment, T=termination)
report_type string yes Report type
transaction_pgi string yes Primary/general indicator
image_num string yes Microfilm image number
transaction_type string yes Transaction type code (24A=independent against, 24C=coordinated, 24E=independent for, 24F=comm cost for, 24K=direct contribution)
entity_type string yes Entity type of the DONOR named by committee_id (CAN=candidate, CCM=candidate committee, COM=committee, IND=individual, ORG=organization, PAC=political action committee, PTY=party organization)
contributor_name string yes RECIPIENT committee name (the candidate's authorized committee receiving this transaction, e.g. "MCCONNELL SENATE COMMITTEE" — despite the field name, this is not the donor; see table comment for the full direction mapping)
city string yes Contributor city
state string yes Contributor state
zip_code string yes Contributor ZIP code
employer string yes Employer (if applicable)
occupation string yes Occupation (if applicable)
transaction_date date yes Transaction date
amount double yes Transaction amount in USD (negative for refunds)
other_id string yes RECIPIENT committee's FEC committee ID (the candidate's authorized committee named in contributor_name — join fec.committees on other_id + year for its details)
candidate_id string no FEC candidate ID (e.g., H0AL01234, S0AK00567, P80000722)
transaction_id string yes Transaction ID
filing_id long yes FEC filing ID number
memo_cd string yes Memo code
memo_text string yes Memo text (purpose, earmark info)
sub_id 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). DIRECTION: committee_id is the FILING committee (whose oth-schedule report this row came from) and is constant across every row for one filer; entity_type, contributor_name, and other_id together describe the COUNTERPARTY committee/entity for that one transaction (entity_type/contributor_name vary row to row even though committee_id doesn't — join fec.committees on other_id + year for the counterparty's details). Unlike committee_contributions, whether money moved INTO or OUT OF the filing committee is NOT fixed by column position — it depends on transaction_type (see FEC Schedule L code descriptions); amount is signed (negative = refund/reversal) regardless. PERFORMANCE: always filter on the year partition first.

Column Type Null Description
committee_id string no FEC committee ID (e.g., C00000042)
amendment_indicator string yes Amendment indicator (N=new, A=amendment, T=termination)
report_type string yes Report type
transaction_pgi string yes Primary/general indicator
image_num string yes Microfilm image number
transaction_type string yes Transaction type code
entity_type string yes Entity type of the COUNTERPARTY committee named by other_id/contributor_name, not of committee_id (CAN=candidate, CCM=candidate committee, COM=committee, IND=individual, ORG=organization, PAC=political action committee, PTY=party organization)
contributor_name string yes COUNTERPARTY committee/entity name for this transaction (not necessarily the payer — see table comment; committee_id is the filing committee, this is the other party)
city string yes City
state string yes State
zip_code string yes ZIP code
employer string yes Employer
occupation string yes Occupation
transaction_date date yes Transaction date
amount double yes Transaction amount in USD (negative for refunds)
other_id string yes Counterparty committee's FEC committee ID (join fec.committees on other_id + year for its details); direction (sender vs. receiver relative to committee_id) is governed by transaction_type, not by this column
transaction_id string yes Transaction ID
filing_id long yes FEC filing ID number
memo_cd string yes Memo code
memo_text string yes Memo text
sub_id 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_id string no FEC committee ID (e.g., C00000042)
amendment_indicator string yes Amendment indicator (N=new, A=amendment, T=termination)
report_year integer yes Report year
report_type string yes Report type
image_num string yes Microfilm image number
line_num string yes Line number on form
form_type string yes Form type (SB/F3, etc.)
schedule_type string yes Schedule type description
payee_name string yes Name of payee
city string yes Payee city
state string yes Payee state
zip_code string yes Payee ZIP code
transaction_date date yes Transaction date
amount double yes Transaction amount in USD (negative for refunds)
transaction_pgi 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_description string yes Disbursement category description
memo_cd string yes Memo code
memo_text string yes Memo text
entity_type string yes Entity type
sub_id long yes FEC unique record identifier
filing_id long yes FEC filing ID number
transaction_id string yes Transaction ID
back_ref_transaction_id 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). FEC accepts filings without amount-plausibility vetting, so the bulk file carries spam/prank line items of $50M to $10B (e.g. 2022 and 2024 candidates filing $9,999,999,999-scale "expenditures"); a raw SUM(amount) is inflated roughly 10x to 23x in 2022, 2024 and 2026. Every row is kept and amount is never altered; amount_implausible marks the rows to exclude. Any total, ranking or per-candidate aggregate of amount must filter WHERE amount_implausible IS NOT TRUE. A filer amending a filing resubmits the whole thing under a new file_num (amendment_indicator A1/A2/A3, prev_file_num naming the file_num it replaces) rather than correcting it in place, so the superseded filing's rows stay in this table alongside the amendment — use the independent_expenditures_current view (superseded_by_amendment) to exclude them from a SUM/count.

Column Type Null Description
candidate_id string yes FEC candidate ID
candidate_name string yes Candidate name
spender_id string yes Committee/spender ID
spender_name string yes Committee/spender name
election_year integer yes FEC election year
support_oppose string yes Support/oppose indicator (S=support, O=oppose). Case is normalized to upper case because some filers enter a lowercase 's'. A value that is not S or O (a filer keystroke error such as the digit 0) is NULL; the amendment rows that supersede such a filing carry the corrected indicator.
purpose string yes Purpose of expenditure
payee string yes Payee name
transaction_date date yes Expenditure date as filed (source exp_date, DD-MON-YY). NULL where the filer left exp_date blank (about 20% of 2026 rows and 35-41% of 2022-2024 rows); the dissemination and receipt dates are not carried in this table.
amount double yes Expenditure amount in USD
candidate_office string yes Office sought (H/S/P)
candidate_state string yes Candidate state
candidate_district string yes Candidate district
candidate_party string yes Candidate party
prev_file_num long yes Previous file number (for amendments)
amendment_indicator string yes Amendment indicator
filing_id long yes FEC filing ID number
transaction_id string yes Transaction ID
image_num string yes Image number
amount_implausible boolean yes True when amount is at or above $50,000,000. The largest independent expenditure line item that corroborates against a real ad buy in the 2010-2026 bulk files is about $32M (a 2020 Future Forward USA PAC ad buy); the 45 line items at or above $50M come from spender names such as 'TANKING', 'Republican Emo Girl' and candidate 'SquarePants, SpongeBob', filings FEC published unvetted. The flag is a fixed cutoff, so smaller spam entries (e.g. a $25M line item from the same filer as a $850M one) are not caught. The row and its amount are kept as filed. Exclude with WHERE amount_implausible IS NOT TRUE before summing or ranking amount. NULL when amount is NULL.

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_id string yes FEC candidate ID
candidate_name string yes Candidate name
candidate_office string yes Office sought (H/S/P)
candidate_state string yes Candidate state
candidate_district string yes Candidate district
committee_id string yes Committee ID
committee_name string yes Committee/organization name
payee_name string yes Payee name
disbursement_description string yes Description of the communication/disbursement
disbursement_date date yes Disbursement date
communication_date date yes Communication date
amount double yes Reported disbursement amount in USD
number_of_candidates integer yes Number of candidates targeted
calculated_candidate_share 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_id string yes Committee ID
committee_name string yes Reporting organization name
candidate_id string yes FEC candidate ID
candidate_name string yes Candidate name
candidate_office string yes Office sought (H/S/P)
candidate_state string yes Candidate state
candidate_district string yes Candidate district
party string yes Candidate party affiliation
support_oppose string yes Support/oppose indicator (S=support, O=oppose)
communication_type string yes Communication type code (24A, 24N, etc.)
communication_class string yes Communication class
transaction_date 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_id 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_id string no FEC candidate ID (e.g., H0AL01234, S0AK00567, P80000722)
candidate_name string yes Candidate name (LAST, FIRST MIDDLE)
incumbent_challenger 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_receipts double yes Total receipts
transfers_from_auth double yes Transfers from authorized committees
total_disbursements double yes Total disbursements
transfers_to_auth double yes Transfers to authorized committees
cash_begin double yes Cash on hand at beginning of period
cash_end double yes Cash on hand at end of period
contributions_from_candidate double yes Contributions from the candidate
loans_from_candidate double yes Loans from the candidate
other_loans double yes Other loans
loan_repayments_candidate double yes Candidate loan repayments
other_loan_repayments double yes Other loan repayments
debts_owed_by double yes Debts owed by committee
total_individual_contributions double yes Total individual contributions
individual_itemized double yes Itemized individual contributions (>$200)
individual_unitemized double yes Unitemized individual contributions (<=$200)
pac_contributions double yes Contributions from political party committees
other_committee_contributions double yes Contributions from other political committees
coverage_end_date date yes Coverage end date
refunds_individual double yes Refunds to individuals
refunds_committee 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. Party affiliation and connected organization are not in this file; join to committees on committee_id for them. Source: committee_summary_{YYYY}.csv (CSV with headers).

Column Type Null Description
committee_id string no FEC committee ID (e.g., C00000042)
committee_name string yes Committee name
committee_type string yes Committee type code
designation string yes Committee designation
filing_frequency string yes Filing frequency
total_receipts double yes Total receipts
transfers_from_affiliates double yes Transfers from affiliates
individual_contributions double yes Total individual contributions
other_political_contributions double yes Contributions from other political committees
candidate_contributions double yes Candidate contributions
candidate_loans double yes Candidate loans
total_loans_received double yes Total loans
total_disbursements double yes Total disbursements
transfers_to_affiliates double yes Transfers to affiliates
refunds_individual double yes Refunds to individuals
refunds_committee double yes Refunds to committees
candidate_loan_repayments double yes Candidate loan repayments
total_loan_repayments double yes Total loan repayments
cash_begin double yes Cash on hand beginning of period
cash_end double yes Cash on hand end of period
debts_owed_by double yes Debts owed by committee
nonfederal_transfers_received double yes Nonfederal transfers received
contributions_to_committees double yes Contributions to federal candidates and other committees
independent_expenditures double yes Independent expenditures
party_coordinated_expenditures double yes Party coordinated expenditures
nonfederal_expenditure_share double yes Shared non-federal operating expenditures
coverage_end_date date yes Coverage end date
state string yes Committee state

ca_contributions · table

Itemized contributions received by California state candidates, parties, and ballot-measure committees (Cal-Access Form 401/460/465 Schedule A/C/I), including intermediary/conduit and loan-interest detail. One row per contribution line item; PK is (filing_id, amend_id, line_item, form_type) — an intermediary contribution files a companion record (form_type I) alongside its underlying contribution (form_type A) sharing the same filing_id/amend_id/line_item, so form_type is required to disambiguate. rec_type is 'RCPT' for the vast majority of rows but a real minority (~0.006%) are 'E530' — Form 497 24-hour/10-day late contribution reports, co-mingled into the same TSV by the source. Source: Cal-Access full-database export, RCPT_CD.TSV member. Covers 2000-present. A small number of source rows (<0.001%) have a NULL filing_id/amend_id/line_item — a known Cal-Access export data-quality gap, not a transform defect.

Column Type Null Description
filing_id long no Cal-Access filing ID (PK component; joins across all CA tables)
amend_id integer no Amendment sequence (0 = original filing)
line_item integer no Line item number within the filing's schedule
rec_type string yes Record type — constant per file (RCPT in RCPT_CD, EXPN in EXPN_CD, S496 in S496_CD)
form_type string yes Schedule/form code (A=contributions, E=expenditures, F496=late IE, ...)
transaction_id string yes Filer-assigned transaction ID
entity_type string yes Entity code (IND=individual, COM=committee, OTH=other, PTY=party, SCC=small contributor committee). Always NULL on ca_independent_expenditures — S496_CD has no ENTITY_CD column in the source.
contributor_name_last string yes Contributor last/entity name
contributor_name_first string yes Contributor first name
contributor_name_title string yes Contributor name title
contributor_name_suffix string yes Contributor name suffix
contributor_city string yes Contributor address city
contributor_state string yes Contributor address state
contributor_zip string yes Contributor address ZIP
contributor_employer string yes Contributor employer
contributor_occupation string yes Contributor occupation
contributor_self_employed string yes Self-employed indicator
transaction_type string yes Transaction type code
receipt_date date yes Date the contribution was received
date_thru date yes Period-covered end date (for periodic/in-kind items)
amount double yes Contribution amount
cumulative_ytd double yes Cumulative year-to-date amount from this contributor
cumulative_other double yes Cumulative other-period amount
contribution_description string yes Free-text description (e.g. in-kind contribution detail)
committee_id string yes Cal-Access filer ID of the receiving committee (join to ca_filers.filer_id)
treasurer_name_last string yes Committee treasurer last name
treasurer_name_first string yes Committee treasurer first name
treasurer_name_title string yes Committee treasurer name title
treasurer_name_suffix string yes Committee treasurer name suffix
treasurer_city string yes Treasurer address city
treasurer_state string yes Treasurer address state
treasurer_zip string yes Treasurer address ZIP
intermediary_name_last string yes Intermediary/conduit last name (Form 401/460 Schedule I)
intermediary_name_first string yes Intermediary first name
intermediary_name_title string yes Intermediary name title
intermediary_name_suffix string yes Intermediary name suffix
intermediary_city string yes Intermediary address city
intermediary_state string yes Intermediary address state
intermediary_zip string yes Intermediary address ZIP
intermediary_employer string yes Intermediary employer
intermediary_occupation string yes Intermediary occupation
intermediary_self_employed string yes Intermediary self-employed indicator
candidate_name_last string yes Candidate last name (denormalized race context for this item)
candidate_name_first string yes Candidate first name
candidate_name_title string yes Candidate name title
candidate_name_suffix string yes Candidate name suffix
office_code string yes Office sought code (e.g. ASM=Assembly, SEN=Senate, GOV=Governor)
office_description string yes Office sought description (e.g. STATE ASSEMBLY, STATE SENATE)
jurisdiction_code string yes Jurisdiction code (ST=statewide, ASM/SEN district, local)
jurisdiction_description string yes Jurisdiction description
district_number string yes Legislative district number (for Assembly/Senate races)
office_seat_holder_code string yes Office sought/held indicator
ballot_measure_name string yes Ballot measure name (for ballot-measure committees)
ballot_measure_number string yes Ballot measure number
ballot_measure_jurisdiction string yes Ballot measure jurisdiction
support_oppose string yes Support/oppose indicator (S=support, O=oppose) for candidate/measure items
memo_code string yes Memo code (item is informational, not counted in totals)
memo_refno string yes Memo reference number (links memo item to parent transaction)
back_reference_transaction_id string yes Back-reference transaction ID (amendment linkage)
xref_schedule string yes Cross-reference schedule name
xref_match string yes Cross-reference match indicator
interest_rate double yes Loan interest rate (loan-shaped contributions only)
intermediary_committee_id string yes Intermediary's own Cal-Access filer ID, when the intermediary is a committee

ca_expenditures · table

Itemized expenditures by California state candidates, parties, and ballot-measure committees (Cal-Access Form 401/460/465 Schedule D/E). One row per expenditure line item; PK is (filing_id, amend_id, line_item, form_type) — Schedule D (subvendor/agent detail, form_type D) files a companion record alongside its Schedule E parent (form_type E) sharing the same filing_id/amend_id/line_item, so form_type is required to disambiguate. Source: Cal-Access full-database export, EXPN_CD.TSV member. Covers 2000-present. A small number of source rows (<0.001%) have a NULL filing_id/amend_id/line_item — a known Cal-Access export data-quality gap, not a transform defect.

Column Type Null Description
filing_id long no Cal-Access filing ID (PK component; joins across all CA tables)
amend_id integer no Amendment sequence (0 = original filing)
line_item integer no Line item number within the filing's schedule
rec_type string yes Record type — constant per file (RCPT in RCPT_CD, EXPN in EXPN_CD, S496 in S496_CD)
form_type string yes Schedule/form code (A=contributions, E=expenditures, F496=late IE, ...)
transaction_id string yes Filer-assigned transaction ID
entity_type string yes Entity code (IND=individual, COM=committee, OTH=other, PTY=party, SCC=small contributor committee). Always NULL on ca_independent_expenditures — S496_CD has no ENTITY_CD column in the source.
payee_name_last string yes Payee last/entity name
payee_name_first string yes Payee first name
payee_name_title string yes Payee name title
payee_name_suffix string yes Payee name suffix
payee_city string yes Payee address city
payee_state string yes Payee address state
payee_zip string yes Payee address ZIP
expenditure_date date yes Expenditure date
amount double yes Expenditure amount
cumulative_ytd double yes Cumulative year-to-date amount to this payee
cumulative_other double yes Cumulative other-period amount
check_number string yes Check number
expenditure_code string yes Expenditure category code (e.g. WEB, TRC, POL, CTB, IND)
expenditure_description string yes Free-text expenditure description
agent_name_last string yes Agent/intermediary last name making the expenditure on the filer's behalf
agent_name_first string yes Agent first name
agent_name_title string yes Agent name title
agent_name_suffix string yes Agent name suffix
committee_id string yes Cal-Access filer ID of the spending committee (join to ca_filers.filer_id)
treasurer_name_last string yes Committee treasurer last name
treasurer_name_first string yes Committee treasurer first name
treasurer_name_title string yes Committee treasurer name title
treasurer_name_suffix string yes Committee treasurer name suffix
treasurer_city string yes Treasurer address city
treasurer_state string yes Treasurer address state
treasurer_zip string yes Treasurer address ZIP
candidate_name_last string yes Candidate last name (denormalized race context for this item)
candidate_name_first string yes Candidate first name
candidate_name_title string yes Candidate name title
candidate_name_suffix string yes Candidate name suffix
office_code string yes Office sought code (e.g. ASM=Assembly, SEN=Senate, GOV=Governor)
office_description string yes Office sought description (e.g. STATE ASSEMBLY, STATE SENATE)
jurisdiction_code string yes Jurisdiction code (ST=statewide, ASM/SEN district, local)
jurisdiction_description string yes Jurisdiction description
district_number string yes Legislative district number (for Assembly/Senate races)
office_seat_holder_code string yes Office sought/held indicator
ballot_measure_name string yes Ballot measure name (for ballot-measure committees)
ballot_measure_number string yes Ballot measure number
ballot_measure_jurisdiction string yes Ballot measure jurisdiction
support_oppose string yes Support/oppose indicator (S=support, O=oppose) for candidate/measure items
memo_code string yes Memo code (item is informational, not counted in totals)
memo_refno string yes Memo reference number (links memo item to parent transaction)
back_reference_transaction_id string yes Back-reference transaction ID (amendment linkage)
xref_schedule string yes Cross-reference schedule name
xref_match string yes Cross-reference match indicator
general_from_election_fund string yes General-purpose-from-election-fund flag

ca_independent_expenditures · table

California Form 496 "24/48-hour" late independent-expenditure reports — the state's closest counterpart to FEC independent_expenditures / the "dark money" IE disclosure this gap was filed for. One row per IE line item; PK is (filing_id, amend_id, line_item). Unlike ca_contributions/ca_expenditures, Form 496 carries no denormalized committee/candidate/race columns in the source file itself (entity_type is always NULL here — S496_CD has no ENTITY_CD column) — resolve the spender/target via the CVR cover page (not yet sourced) or the filing_id. Source: Cal-Access full-database export, S496_CD.TSV member. Covers 2000-present.

Column Type Null Description
filing_id long no Cal-Access filing ID (PK component; joins across all CA tables)
amend_id integer no Amendment sequence (0 = original filing)
line_item integer no Line item number within the filing's schedule
rec_type string yes Record type — constant per file (RCPT in RCPT_CD, EXPN in EXPN_CD, S496 in S496_CD)
form_type string yes Schedule/form code (A=contributions, E=expenditures, F496=late IE, ...)
transaction_id string yes Filer-assigned transaction ID
entity_type string yes Entity code (IND=individual, COM=committee, OTH=other, PTY=party, SCC=small contributor committee). Always NULL on ca_independent_expenditures — S496_CD has no ENTITY_CD column in the source.
amount double yes Independent expenditure amount
expenditure_date date yes Independent expenditure date
expenditure_description string yes Free-text description (e.g. "mailer")
memo_code string yes Memo code (item is informational, not counted in totals)
memo_refno string yes Memo reference number
date_thru date yes Period-covered end date

ca_filers · table

California Cal-Access filer registry — every registered filer (candidate, committee, party, ballot-measure committee, lobbyist client, etc.), one row per filer-name/status record. filer_id is the join key to ca_contributions.committee_id and ca_expenditures.committee_id. Source: Cal-Access full-database export, FILERNAME_CD.TSV member. Not a strict 1-row-per-filer table — a filer with a name or status change over time carries multiple rows (xref_filer_id + effective_date vary). A small number of source rows (<0.01%) have a NULL xref_filer_id/filer_id — a known Cal-Access export data-quality gap, not a transform defect.

Column Type Null Description
xref_filer_id string no Cross-reference filer ID
filer_id string no Cal-Access filer ID (join key from ca_contributions/ca_expenditures committee_id)
filer_type string yes Filer type (e.g. CLIENT, RECIPIENT, CANDIDATE/OFFICEHOLDER, PARTY)
status string yes Filer status (e.g. ACTIVE, INACTIVE, TERMINATED)
effective_date date yes Date this name/status record became effective
name_last string yes Filer last/entity name
name_first string yes Filer first name
name_title string yes Filer name title
name_suffix string yes Filer name suffix
address1 string yes Address line 1
address2 string yes Address line 2
city string yes City — Cal-Access occasionally concatenates "CITY, ST ZIP" into this field rather than populating state/zip separately (observed live in sampled rows); carried as-is.
state string yes State
zip string yes ZIP code
phone string yes Phone number
fax string yes Fax number
email string yes Email address

independent_expenditures_current · view

independent_expenditures with amendment supersession resolved. A filer amending a Schedule E filing resubmits the whole filing under a new file_num (amendment_indicator A1/A2/A3, prev_file_num naming the file_num it replaces) rather than correcting it in place, so superseded_by_amendment is true when some other row's prev_file_num names this row's filing_id. Amendments chain (N -> A1 -> A2 -> A3); every link except the last in a chain is marked superseded. amount_implausible is untouched by this view — combine both filters (WHERE superseded_by_amendment IS NOT TRUE AND amount_implausible IS NOT TRUE) before summing or ranking amount. Live-verified 2026: 1,472 of 19,735 rows superseded, removing $107.8M of $1.75B from a raw amount_implausible-filtered SUM.

View — columns are resolved by the query engine at runtime.

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.