FEC Campaign Finance Scraper: Donors & Committees
Pricing
from $9.23 / 1,000 results
FEC Campaign Finance Scraper: Donors & Committees
Scrape US federal campaign finance from the OpenFEC API: candidates, committees and itemized contributions. Extract donor name, employer, occupation, amount, date, receipts, disbursements and treasurer contacts. Export to JSON, CSV or Excel.
Pricing
from $9.23 / 1,000 results
Rating
5.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
FEC Campaign Finance Scraper: Donors & Committees
Here is one real result, with every field the actor returns in contributions mode:
{"transactionId": "IA2512","subId": "4121220241075839599","committeeId": "C00406892","committeeName": "APPLIED MATERIALS, INC. POLITICAL ACTION COMMITTEE","committeeType": "PAC - Qualified","contributorName": "WERNER, JOSEPH","contributorFirstName": "JOSEPH","contributorLastName": "WERNER","contributorEmployer": "APPLIED MATERIALS, INC.","contributorOccupation": "DIR., APPLICATION TECHNOLOGY","contributorCity": "SANTA CLARA","contributorState": "CA","contributorZip": "95054","entityType": "INDIVIDUAL","isIndividual": true,"contributionReceiptAmount": 57.69,"contributionReceiptDate": null,"contributorAggregateYtd": 461.52,"electionType": "P","fecElectionYear": null,"receiptType": "CONTRIBUTION","memoCode": null,"memoText": null,"candidateId": null,"candidateName": null,"candidateOffice": null,"candidateOfficeState": null,"candidateOfficeDistrict": null,"twoYearTransactionPeriod": 2024,"reportType": "30G","filingForm": "F3X","imageNumber": "202411269720049014","pdfUrl": "https://docquery.fec.gov/cgi-bin/fecimg/?202411269720049014","url": "https://www.fec.gov/data/committee/C00406892/","observedAt": "2026-08-10T14:18:20.127Z","error": null}
The most complete FEC campaign finance scraper available. It returns every field the OpenFEC data exposes for itemized donor contributions, candidates, and committees, including donor employer and occupation, receipt amounts and dates, and links to the source filing image, and gives you three data modes plus a full set of filters to target exactly the records you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor queries US Federal Election Commission (OpenFEC) data in one of three modes and writes one normalized record per result to the run's dataset:
contributionsreturns itemized individual donor records: name, employer, occupation, city/state/ZIP, receipt amount and date, year-to-date aggregate, the receiving committee, and links to the source filing image.candidatesreturns candidates with office, party, state and total receipts and disbursements.committeesreturns committees with type, treasurer and filing contacts.
You pass an OpenFEC API key (the free DEMO_KEY works for testing but is heavily rate limited) and any of the filters below. Missing source values are returned as null, never invented.
Quickstart
Open the actor, paste this into the input, and press Run. It returns 10 itemized contributions from the 2024 cycle using the demo key.
{"mode": "contributions","apiKey": "DEMO_KEY","twoYearTransactionPeriod": 2024,"maxRecords": 10}
For production volume, get a free key at api.data.gov/signup and pass it as apiKey. For contributions, a transaction period, committee, or contributor filter is strongly recommended to keep the query fast.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
mode | enum | no | contributions | What to scrape: contributions (Schedule A donor records), candidates, or committees. |
apiKey | string | no | DEMO_KEY | Your api.data.gov / OpenFEC API key. DEMO_KEY is heavily rate limited (about 30 requests/hour). |
maxRecords | integer | no | 10 | Maximum records to collect. Free Apify plans are capped at 10 per run. |
search | string | no | (empty) | Free-text search. Matches contributor name in contributions, and the name in candidates/committees. |
twoYearTransactionPeriod | integer | no | 2024 | Even-numbered election cycle for contributions (2024 covers 2023-2024). Scopes and speeds the search. |
committeeId | string | no | (empty) | FEC committee ID that received the contributions, for example C00401224. |
contributorState | string | no | (empty) | Two-letter US state of the donor, for example CA. |
contributorEmployer | string | no | (empty) | Filter contributions by the donor's reported employer. |
contributorOccupation | string | no | (empty) | Filter contributions by the donor's reported occupation. |
minDate | string | no | (empty) | Earliest contribution receipt date (YYYY-MM-DD). |
maxDate | string | no | (empty) | Latest contribution receipt date (YYYY-MM-DD). |
minAmount | integer | no | (none) | Only contributions of at least this many USD. |
maxAmount | integer | no | (none) | Only contributions of at most this many USD. |
office | enum | no | (any) | Candidate office: H (House), S (Senate), P (President). Applies to candidates. |
candidateState | string | no | (empty) | Two-letter US state the candidate is running in. Applies to candidates. |
party | string | no | (empty) | Three-letter party code, for example DEM, REP, IND. Applies to candidates. |
electionYear | integer | no | (none) | Year the candidate is or was on the ballot. Applies to candidates. |
committeeType | enum | no | (any) | Committee type code (for example O for Super PAC). Applies to committees. |
committeeState | string | no | (empty) | Two-letter US state of the committee. Applies to committees. |
Filters combine with logical AND. Filters outside the selected mode are ignored.
Output reference
Fields depend on mode. The table below is contributions mode (the default). Types: string, number, integer, boolean, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
transactionId | string | FEC transaction ID. |
subId | string | OpenFEC unique sub ID for the record. |
committeeId | string | ID of the committee that received the contribution. |
committeeName | string | Name of the receiving committee. |
committeeType | string | Human-readable committee type. |
contributorName | string | Donor name as filed. |
contributorFirstName | string | Donor first name, or null. |
contributorLastName | string | Donor last name, or null. |
contributorEmployer | string | Donor reported employer, or null. |
contributorOccupation | string | Donor reported occupation, or null. |
contributorCity | string | Donor city. |
contributorState | string | Donor two-letter state. |
contributorZip | string | Donor ZIP code. |
entityType | string | Filer entity type, for example INDIVIDUAL. |
isIndividual | boolean | true when the contributor is an individual. |
contributionReceiptAmount | number | Contribution amount in USD. |
contributionReceiptDate | string | Receipt date (YYYY-MM-DD) when reported, else null. |
contributorAggregateYtd | number | Donor year-to-date aggregate to the committee, or null. |
electionType | string | Election type code, for example P (primary), G (general). |
fecElectionYear | integer | FEC election year when reported, else null. |
receiptType | string | Receipt type, for example CONTRIBUTION. |
memoCode | string | Memo code when present, else null. |
memoText | string | Memo text when present, else null. |
candidateId | string | Linked candidate ID when present, else null. |
candidateName | string | Linked candidate name, or null. |
candidateOffice | string | Linked candidate office, or null. |
candidateOfficeState | string | Linked candidate office state, or null. |
candidateOfficeDistrict | string | Linked candidate office district, or null. |
twoYearTransactionPeriod | integer | Election cycle the transaction falls in. |
reportType | string | Report type code, for example 30G. |
filingForm | string | Filing form, for example F3X. |
imageNumber | string | FEC filing image number. |
pdfUrl | string | Link to the source filing image on docquery.fec.gov. |
url | string | FEC.gov page for the committee. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
In candidates mode records carry candidate identity, office, party, state and total receipts/disbursements; in committees mode they carry committee identity, type, treasurer and filing contacts.
Example output record
Real record from a live run (input {"mode": "contributions", "apiKey": "DEMO_KEY", "twoYearTransactionPeriod": 2024, "maxRecords": 10}):
{"transactionId": "IA2512","subId": "4121220241075839599","committeeId": "C00406892","committeeName": "APPLIED MATERIALS, INC. POLITICAL ACTION COMMITTEE","committeeType": "PAC - Qualified","contributorName": "WERNER, JOSEPH","contributorFirstName": "JOSEPH","contributorLastName": "WERNER","contributorEmployer": "APPLIED MATERIALS, INC.","contributorOccupation": "DIR., APPLICATION TECHNOLOGY","contributorCity": "SANTA CLARA","contributorState": "CA","contributorZip": "95054","entityType": "INDIVIDUAL","isIndividual": true,"contributionReceiptAmount": 57.69,"contributionReceiptDate": null,"contributorAggregateYtd": 461.52,"electionType": "P","fecElectionYear": null,"receiptType": "CONTRIBUTION","memoCode": null,"memoText": null,"candidateId": null,"candidateName": null,"candidateOffice": null,"candidateOfficeState": null,"candidateOfficeDistrict": null,"twoYearTransactionPeriod": 2024,"reportType": "30G","filingForm": "F3X","imageNumber": "202411269720049014","pdfUrl": "https://docquery.fec.gov/cgi-bin/fecimg/?202411269720049014","url": "https://www.fec.gov/data/committee/C00406892/","observedAt": "2026-08-10T14:18:20.127Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~fec-campaign-finance-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"mode":"contributions","apiKey":"DEMO_KEY","twoYearTransactionPeriod":2024,"contributorState":"CA","maxRecords":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~fec-campaign-finance-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"mode":"committees","apiKey":"<YOUR_FEC_KEY>","committeeType":"O","maxRecords":100}'
Apify CLI:
apify call scrapers_lat/fec-campaign-finance-scraper \--input '{"mode":"candidates","office":"P","electionYear":2024,"maxRecords":10}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per record returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records per run. Upgrade for higher
maxRecords. - OpenFEC rate limits. The default
DEMO_KEYis limited to roughly 30 requests per hour. Use your own free api.data.gov key for production volume.
FAQ and troubleshooting
A run returned 0 records. Why? The filters matched nothing, or the query was too broad and timed out on the demo key. Narrow it (add a committee, contributor, or cycle filter) or use your own API key. Zero-result runs are not charged.
Do I need my own API key?
Not for testing. DEMO_KEY works but is heavily rate limited. For real volume, get a free key at api.data.gov and pass it as apiKey.
Why is contributionReceiptDate null?
Not every itemized record in OpenFEC carries a receipt date. Missing source values are returned as null, never invented.
How do I find a committee ID?
Run the actor in committees mode (optionally with a search term) to look up committees and their IDs, then filter contributions by committeeId.
Is this an official FEC tool? No. This actor is independent and has no affiliation with the FEC. It reads only data that is publicly available through the OpenFEC API. Use it in accordance with the OpenFEC terms of service.
Related scrapers
- FDIC Banks & Financial Institutions Scraper: US FDIC-insured banks with financials.
- SEC EDGAR Company Filings Scraper: SEC filings by ticker or CIK.
- USAspending Federal Award Scraper: US federal prime awards.
- OFAC Sanctions List Scraper: US Treasury OFAC SDN and Consolidated lists.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with the FEC. Accesses only publicly available OpenFEC data. Use in accordance with the OpenFEC terms of service.
