Skip to content

September 22, 2026 · 11 min read

FEC Campaign Finance Data Scraper: $5.00 per 1,000 results (2026)

By Crawlerbros Engineering Team

Extract US campaign finance data from the Federal Election Commission using an official API that replaces OpenSecrets after its April 2025 discontinuation. The actor provides candidates, committees, receipts, disbursements, and financial totals through 9 input controls with 1 required parameter. Each result costs $0.005, equaling $5.00 per 1,000 results. This tool is built for political researchers, journalists, and academic investigators, and it is not intended for real-time transactional monitoring.

What does a FEC Campaign Finance Data Scraper run cost?

Each result costs $0.005 on the free tier, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.01 per GB of Actor memory.

Apify plan Per result Per 1,000 results
FREE $0.005 $5.00
BRONZE $0.00433 $4.33
SILVER $0.00367 $3.67
GOLD $0.003 $3.00
PLATINUM $0.003 $3.00
DIAMOND $0.003 $3.00

Billing scales directly with record volume at $0.005 per result, making the maxItems parameter the primary driver of your final invoice. The cheapest way to verify whether the output answers your research question before committing budget is to execute a trial run with maxItems capped at 10.

How do you run FEC Campaign Finance Data Scraper from the API?

The schema marks 1 of its 9 controls as required: mode. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for FEC Campaign Finance Data Scraper, so the request works once your token is in place.

Call the synchronous endpoint to start a run and receive dataset items in one request:

curl -X POST "https://api.apify.com/v2/acts/crawlerbros~fec-campaign-finance-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"searchCandidates","office":"P","electionYear":"2024","party":"","state":"","contributorState":"","committeeType":"","maxItems":10}'

The same run from Python, using the official client:

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run_input = {
  "mode": "searchCandidates",
  "office": "P",
  "electionYear": "2024",
  "party": "",
  "state": "",
  "contributorState": "",
  "committeeType": "",
  "maxItems": 10
}

run = client.actor("crawlerbros~fec-campaign-finance-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

And from Node.js:

import { ApifyClient } from 'apify-client'

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })

const input = {
  "mode": "searchCandidates",
  "office": "P",
  "electionYear": "2024",
  "party": "",
  "state": "",
  "contributorState": "",
  "committeeType": "",
  "maxItems": 10
}

const run = await client.actor('crawlerbros~fec-campaign-finance-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)

Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.

Which FEC Campaign Finance Data Scraper inputs matter, and which can you skip?

The mode control dictates whether the Actor queries candidates, committees, receipts, disbursements, or financial totals. Practitioners should leave geographic and party filters blank on an initial run to establish baseline connectivity before applying strict narrowing parameters.

  • mode (string): What to fetch from the FEC API. Default: "searchCandidates".
  • office (string): Filter candidates by office sought. Default: "".
  • electionYear (string): Filter by election cycle year. Default: "".
  • party (string): Filter by political party. Default: "".
  • state (string): Filter candidates or committees by US state abbreviation (e.g. CA, TX, NY). Default: "".
  • contributorState (string): Filter receipts by contributor's state (mode=receipts only). Default: "".
  • committeeType (string): Filter committees by type (mode=searchCommittees only). Default: "".
  • apiKey (string): FEC API key - uses DEMO_KEY (30 req/hr) by default. Get a free key at api.data.gov for higher rate limits.
  • maxItems (integer): Hard cap on emitted records. Default: 50.

Fixed-choice controls: mode accepts searchCandidates, searchCommittees, receipts, disbursements, candidateTotals; office accepts , `P`, `S`, `H`; `electionYear` accepts , 2024, 2022, 2020, 2018, 2016; party accepts , `DEM`, `REP`, `IND`, `LIB`, `GRN`; `state` accepts , AL, AK, AZ, AR, CA; contributorState accepts , `AL`, `AK`, `AZ`, `AR`, `CA`; `committeeType` accepts , C, D, H, I, N.

Move one control per run. Compare each new sample against the previous one and keep the accepted, uncertain, and excluded counts side by side. A control that increases volume without improving decision quality still bills at $0.005 per result.

What does FEC Campaign Finance Data Scraper return?

The returned records supply structured financial identifiers, committee metadata, and transaction amounts suitable for network analysis and compliance auditing. They conspicuously lack real-time bank verification and proprietary sentiment metrics.

The Actor does not publish a per-field output list, so treat the first run as the specification: collect a small sample and record which fields are present before anything downstream depends on them.

How do you build the workflow end to end?

Open FEC Campaign Finance Data Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

  1. Set the mode parameter to searchCandidates to test connectivity against the official endpoint.
  2. Set maxItems to 10 to limit output volume during initial verification.
  3. Leave office, electionYear, party, and state blank to inspect unfiltered response headers.
  4. Execute the run and verify that candidateId and name fields arrive populated in the output dataset.
  5. Switch the mode parameter to receipts to target campaign contribution records.
  6. Set contributorState to TX to restrict the receipt payload during validation.
  7. Inspect contributionReceiptAmount and contributionReceiptDate in the returned records to confirm data types before scaling up maxItems.

How do you apply it? Three worked playbooks

These are FEC Campaign Finance Data Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

Use case 1: Political research

Outcome: Track campaign finance activity across elections and candidates

Configure: Set mode to searchCandidates, office to P, and maxItems to 50.

Working method: Execute a baseline extraction for presidential candidates, verify entity metadata structures, and then expand electionYear parameters to compare multi-cycle fundraising figures.

Deliverable: A structured JSON dataset containing presidential candidate profiles, party affiliations, and profile URLs.

Stop condition: Zero records returned when querying active election years.

Use case 2: Journalism

Outcome: Investigate donor networks, PAC spending, and campaign war chests

Configure: Set mode to searchCommittees, committeeType to U, and maxItems to 100.

Working method: Pull Super PAC registrations for a specific state, check treasurer names against known filings, and monitor for newly registered committees.

Deliverable: A list of independent expenditure committees including registration location and treasurer metadata.

Stop condition: Committee records lacking committeeId identifiers.

Use case 3: Academic research

Outcome: Analyze fundraising patterns, party spending, and donor geography

Configure: Set mode to receipts, electionYear to 2024, and contributorState to TX.

Working method: Filter incoming contributions by geographic origin, analyze individual donor concentration, and cross-reference contribution amounts against reporting thresholds.

Deliverable: An itemized list of contribution receipts containing donor names, employers, amounts, and transaction identifiers.

Stop condition: Receipt amounts returning negative or null values.

What breaks, and how do you design around it?

  • Test a small, representative input against your acceptance criteria before increasing scope.

The default DEMO_KEY enforces a strict cap of 30 requests per hour, which will throttle large extractions. Register for a free key on api.data.gov and populate the apiKey field to bypass this bottleneck.

When should you not use FEC Campaign Finance Data Scraper?

Do not use this Actor if you require real-time transaction feeds or millisecond-latency alerts on campaign filings, because the underlying Federal Election Commission API updates only when committees submit batch reports. If you need immediate notification of single filings, writing a custom polling script against the raw RSS feeds of electronic filings is a better approach. For high-frequency financial modeling or algorithmic trading inputs, this dataset introduces too much reporting lag. Furthermore, if your research is confined strictly to historical cycles prior to modern electronic filing standards, manual archival searches or specialized academic databases will yield cleaner results than a REST API wrapper. Avoid this tool when your project budget cannot absorb incremental data costs for millions of itemized contributions.

What should you check before trusting the output?

  • Verify that candidateId fields match the standard format such as P80001571 on candidate modes.
  • Check that contributionReceiptAmount arrives as a numeric value rather than a string.
  • Stop scheduled runs immediately if contributionReceiptDate values return null across consecutive records.
  • Ensure committeeId is present and non-empty when running in searchCommittees mode.
  • Check that disbursementAmount contains valid decimal figures in disbursements mode.

None of this proves a record is correct. It gives a scheduled FEC Campaign Finance Data Scraper run defined points where it should stop instead of quietly passing bad data downstream.

Frequently asked questions

How do I avoid rate limits when fetching thousands of contribution receipts?

The default DEMO_KEY restricts usage to 30 requests per hour. To lift this restriction, register for a free key on api.data.gov and paste your token into the apiKey parameter before launching the run.

What is the financial cost per record when running this Actor?

Each result costs $0.005, which translates to $5.00 per 1,000 results. Your total expenditure is directly proportional to the volume of items requested through the configuration parameters.

Can I filter campaign contribution receipts by specific employer or occupation?

The input schema supports filtering receipts by contributorState, but you cannot filter directly by employer or occupation at the API query level. You must pull the receipt dataset and filter the records locally in your analysis environment.

Why are some House candidates missing district numbers in search results?

Statewide or presidential candidates do not contest specific congressional districts, leaving district fields unpopulated. For House candidates, ensure your office filter is set correctly to retrieve district identifiers.

How should I handle pagination when extracting large volumes of campaign disbursements?

The Actor manages internal pagination automatically up to your specified maxItems ceiling. Keep your item cap modest during initial tests to verify data structure before requesting thousands of records.

Where to go next

Start with the FEC Campaign Finance Data Scraper Actor page for the current input schema, pricing tier, and run history.

If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:

Readers running FEC Campaign Finance Data Scraper commonly pair it with:

  • Leafly Cannabis Strain Scraper Scrape cannabis strains from Leafly - get trending strains or look up specific strains by slug.
  • 365Scores Sports Data Scraper Scrape 365Scores (365scores.com) public API for live sports scores, standings, and competition data.
  • DeviantArt Scraper Scrape DeviantArt - the world's largest online art community.
  • MLB Baseball Stats Scraper Scrape the official MLB Stats API - comprehensive baseball data including teams, player batting/pitching stats, schedules, and standings.
  • Zapier App Directory Scraper Scrape the Zapier App Directory, search 9,000+ apps by keyword, browse by category, or fetch details for specific apps.
  • Google Maps Photos Scraper Extract photos from any Google Maps place - carousel scraping with max-resolution URLs, contributor info, and category metadata.
  • OpenInsider Scraper Scrape SEC Form 4 insider trading data from OpenInsider.com - browse recent purchases and sales, filter by ticker, date range, transaction type, and value.
  • SEC EDGAR Filings Scraper Scrape SEC EDGAR filings (10-K, 10-Q, 8-K, Form 4 insider trades, 13F holdings) for any US public company.

Related guides:

Resources

  • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-22.

  • Actor last updated by its maintainers on 2026-07-16.

  • Run outcome figures cover the 30 day public window ending 2026-09-22.

  • FEC Campaign Finance Data Scraper on Apify

● Featured actors

FEC Campaign Finance Data Scraper

Scrape US campaign finance data from the Federal Election Commission (FEC) - candidates, committees, contributions, and expenditures. Replaces OpenSecrets (API discontinued April 2025). Free official FEC API, no registration required.

Run on Apify ↗