FEC Campaign Finance Scraper avatar

FEC Campaign Finance Scraper

Pricing

Pay per event

Go to Apify Store
FEC Campaign Finance Scraper

FEC Campaign Finance Scraper

Download official FEC campaign-finance bulk data for candidates, committees, contributions, and disbursements. Filter by cycle, IDs, state, and party.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Download searchable Federal Election Commission campaign-finance rows from public bulk data files.

The actor streams official FEC ZIP files, filters rows locally, and returns normalized JSON for candidates, committees, contributions, and disbursements. It does not require an OpenFEC API key.

What does FEC Campaign Finance Scraper do?

FEC Campaign Finance Scraper helps you collect campaign-finance data from official Federal Election Commission bulk downloads.

It can extract:

  • ๐Ÿง‘โ€๐Ÿ’ผ Candidate master records
  • ๐Ÿ›๏ธ Committee master records
  • ๐Ÿ’ต Individual contribution records
  • ๐Ÿ” Committee-to-candidate contribution records
  • ๐Ÿงพ Operating disbursement records

Each output row includes normalized IDs, names, dates, amounts, source URL, row number, raw FEC fields, and scrapedAt.

Who is it for?

This scraper is useful for:

  • ๐Ÿ—ณ๏ธ Political compliance teams monitoring committees and candidate filings
  • ๐Ÿ“ฐ Journalists investigating federal campaign money flows
  • ๐Ÿ”Ž Donor researchers looking for contribution patterns
  • ๐Ÿ“Š Campaign-intelligence vendors building recurring data pipelines
  • ๐Ÿงช Civic data analysts who need reproducible FEC extracts
  • ๐Ÿงพ Legal and audit teams checking finance records by cycle

Why use this actor?

The FEC provides excellent public bulk data, but it is packaged as large pipe-delimited ZIP files. This actor makes those files easier to use in automation:

  • No browser automation
  • No login
  • No OpenFEC API key
  • Bounded maxItems for cost control
  • Filters for candidate IDs, committee IDs, states, and parties
  • Normalized JSON output ready for export

Data sources

The actor downloads files from official FEC bulk-download URLs such as:

  • https://www.fec.gov/files/bulk-downloads/2024/cn24.zip
  • https://www.fec.gov/files/bulk-downloads/2024/cm24.zip
  • https://www.fec.gov/files/bulk-downloads/2024/indiv24.zip
  • https://www.fec.gov/files/bulk-downloads/2024/pas224.zip
  • https://www.fec.gov/files/bulk-downloads/2024/oppexp24.zip

Supported datasets

Input dataTypeFEC file familyTypical use
candidatesCandidate masterCandidate IDs, names, party, office, state
committeesCommittee masterCommittee IDs, names, treasurer, connected org
individual_contributionsIndividual contributionsDonor names, employers, dates, amounts
committee_contributionsCommittee contributionsPAC/committee support to candidates
disbursementsOperating expendituresPayees, purposes, dates, amounts

How much does it cost to extract FEC campaign finance data?

This actor uses pay-per-event pricing: a small start fee plus a per-row charge for each saved dataset item.

Use a small maxItems value for tests. Increase maxItems for production exports after confirming your filters.

Input options

FieldTypeDescription
dataTypestringFEC dataset to download and parse
cycleintegerEven-numbered election cycle, for example 2024
maxItemsintegerMaximum matching rows to save
candidateIdsstring[]Optional FEC candidate ID filters
committeeIdsstring[]Optional FEC committee ID filters
statesstring[]Optional two-letter state filters
partiesstring[]Optional party filters such as DEM or REP

Example input

{
"dataType": "committees",
"cycle": 2024,
"states": ["NY"],
"maxItems": 100
}

Output data

Each item can include the following fields:

FieldDescription
dataTypeDataset selected in the input
cycleFEC election cycle year
candidateIdFEC candidate ID when available
candidateNameCandidate or recipient name when available
committeeIdFEC committee ID when available
committeeNameCommittee name when available
contributorNameIndividual or entity contributor name
recipientNameRecipient candidate name
payeeNameDisbursement payee name
transactionDateNormalized transaction date
amountContribution or disbursement amount
stateState from the FEC row
partyParty from master records
officeCandidate office when available
rowNumberRow number in the bulk file
sourceUrlOfficial FEC ZIP URL
scrapedAtISO timestamp for collection
rawOriginal parsed FEC columns

Output example

{
"dataType": "committees",
"cycle": 2024,
"committeeId": "C00001743",
"committeeName": "LOCAL 1814 ILA POLITICAL ACTION AND EDUCATION FUND",
"state": "NY",
"sourceUrl": "https://www.fec.gov/files/bulk-downloads/2024/cm24.zip",
"scrapedAt": "2026-07-04T03:00:15.705Z",
"raw": { "committeeId": "C00001743" }
}

How to run

  1. Choose a dataType.
  2. Choose an even-numbered cycle.
  3. Add filters if you know candidate IDs, committee IDs, states, or parties.
  4. Set maxItems.
  5. Run the actor and export the dataset as JSON, CSV, Excel, or via API.

Tips for better results

  • Start with committees or candidates to find IDs.
  • Use candidateIds or committeeIds before running large transaction exports.
  • Use states to reduce broad candidate, committee, and transaction pulls.
  • Keep maxItems low for exploratory work.
  • For historical analysis, run one cycle at a time.

Integrations

You can connect the scraper to:

  • Google Sheets or Airtable for campaign monitoring dashboards
  • BI tools for political spending analysis
  • Databases for recurring compliance archives
  • Alerting workflows that watch for new donor or committee patterns
  • LLM research agents that summarize campaign-finance activity

API usage: Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/fec-campaign-finance-scraper').call({
dataType: 'committees',
cycle: 2024,
states: ['NY'],
maxItems: 100,
});
console.log(run.defaultDatasetId);

API usage: Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/fec-campaign-finance-scraper').call(run_input={
'dataType': 'candidates',
'cycle': 2024,
'states': ['CA'],
'parties': ['DEM'],
'maxItems': 100,
})
print(run['defaultDatasetId'])

API usage: cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~fec-campaign-finance-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"dataType":"committees","cycle":2024,"states":["NY"],"maxItems":100}'

MCP usage

Use this actor from Claude Desktop or Claude Code through Apify MCP:

https://mcp.apify.com/?tools=automation-lab/fec-campaign-finance-scraper

Add the MCP server in Claude Code:

$claude mcp add apify-fec-campaign-finance "https://mcp.apify.com/?tools=automation-lab/fec-campaign-finance-scraper"

Claude Desktop JSON configuration:

{
"mcpServers": {
"apify-fec-campaign-finance": {
"url": "https://mcp.apify.com/?tools=automation-lab/fec-campaign-finance-scraper"
}
}
}

Example prompts:

  • "Run the FEC campaign finance scraper for 2024 NY committees and summarize labor PACs."
  • "Extract 2024 candidate master rows for California Democrats."
  • "Pull committee contribution rows for a candidate ID and prepare a CSV."

Legality

This actor collects public government data published by the Federal Election Commission. Users are responsible for complying with Apify terms, FEC data-use expectations, and any rules that apply to their analysis, publication, or compliance workflow.

FAQ

Do I need an OpenFEC API key?

No. The actor uses public FEC bulk downloads, not authenticated OpenFEC API endpoints.

Troubleshooting

Why did I get fewer rows than maxItems?

Your filters may be narrow for that cycle and dataset. Remove filters or try a different data type.

Why are some fields empty?

FEC bulk files have different columns per dataset. The actor keeps unavailable fields empty and preserves parsed original values in raw.

Explore other automation-lab actors for government, compliance, and public-data workflows:

Changelog

  • Initial version: HTTP-only FEC bulk-data streamer with filters and normalized output.

Notes

For very broad transaction pulls, FEC files can be large. The actor streams ZIP contents and stops at maxItems, but targeted filters are still recommended for faster runs.