Tools / FEC Campaign Finance - Super PAC, Candidates & Donors Search
FEC Campaign Finance - Super PAC, Candidates & Donors Search
Search US federal candidates (House, Senate, President) by name, state, office, party and election cycle via the FEC's official open.fec.gov API, with each candidate's campaign financial totals (receipts, disbursements, cash on hand, individual contributions) included. Three transaction modes cover the money itself: donor contributions (Schedule A) by donor name, employer, occupation, city or ZIP code, committee spending (Schedule B) by vendor/recipient, and independent expenditures (Schedule E) for or against a named candidate. Every transaction row includes the FEC's own committee classification (`committeeType`/`committeeDesignation`, e.g. Super PAC vs. candidate committee) at no extra cost. No API key needed, no login required. Optional watch mode (watchLabel) delivers only rows new since your last run in any transaction mode.
Run it
Pay-per-result on Apify, no FetchSmith account needed. Use your own Apify API token, or hit Run on the Store page with no token at all.
curl -X POST "https://api.apify.com/v2/acts/fetchsmith~fec-campaign-finance-scraper/run-sync-get-dataset-items?clean=true" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"candidateId": "P80001571", "electionYear": 2024, "maxResults": 5, "searchMode": "independentExpenditures", "supportOppose": "O"}'
Returns the rows as JSON when the run finishes. A hosted FetchSmith API (one key, no Apify account, see API docs) is planned but not open yet.
Output fields
candidateId name party office state district incumbentChallenge candidateStatus electionYears cycles firstFileDate fecUrl receipts disbursements cashOnHandEnd individualContributions individualItemizedContributions individualUnitemizedContributions refundedIndividualContributions coverageStartDate coverageEndDate contributorName contributorEmployer contributorOccupation contributorCity contributorState contributorZip contributionAmount contributionDate contributorAggregateYtd committeeId committeeName candidateIds committeeType committeeDesignation imageNumber transactionId subId pdfUrl recipientName recipientCity recipientState disbursementAmount disbursementDate disbursementDescription disbursementPurposeCategory disbursementCategory lineNumberLabel candidateName electionCycle candidateOffice candidateOfficeState candidateParty supportOppose payeeName expenditureAmount expenditureDate disseminationDate expenditureDescription expenditureCategory officeTotalYtd electionType filingForm isNotice
Sample output
{
"candidateId": "P80001571",
"candidateName": "TRUMP, DONALD J",
"candidateOffice": "P",
"candidateParty": "REP",
"committeeDesignation": "Unauthorized",
"committeeId": "C00804856",
"committeeName": "REPUBLICAN ACCOUNTABILITY PAC",
"committeeType": "Super PAC (Independent Expenditure-Only)",
"disseminationDate": "2024-07-17",
"expenditureAmount": 100.0,
"expenditureDescription": "ADVERTISING - EXTREMEREACH AZ",
"filingForm": "F24",
"isNotice": true,
"officeTotalYtd": 112395.99,
"payeeName": "EXTREME REACH, INC.",
"pdfUrl": "https://docquery.fec.gov/cgi-bin/fecimg/?202407199661322773",
"subId": "4021820261309017009",
"supportOppose": "oppose",
"transactionId": "500543378"
}
Guides
- A committee's FEC candidate_ids field says "plural" 430 times — and 426 of those are one person, not a joint fundraiser — 2.06% of FEC committees carry 2+ candidate_ids. Measured on two election cycles with named-candidate verification (20/20 same person), only ~1% of that 2.06% is a real multi-candidate joint fundraising committee. The rest is one person holding a House id and a Senate id at once — a shape our own Actor mislabeled through three builds before this fix.
- The FEC's donor-search API accepts a page number on every request — and silently ignores it on three of four — api.open.fec.gov's /schedules/schedule_a/, schedule_b/ and schedule_e/ endpoints take a page= parameter, return 200, and hand back page 1 forever. Only /candidates/ actually pages. The real cursor is a field nobody reads by default.
- The FEC publishes campaign finance as key-free JSON — and its three rate limits contradict each other — api.open.fec.gov serves every US federal candidate and their fundraising totals with no account, via DEMO_KEY. The header says 10 calls, the error says 40, and Retry-After says come back in 16 hours. All three are on the same response.
Only publicly accessible pages are read. Respect the source site's terms when using the data.