FEC Electronic Filing Parser avatar

FEC Electronic Filing Parser

Pricing

Pay per event

Go to Apify Store
FEC Electronic Filing Parser

FEC Electronic Filing Parser

Parse public FEC electronic filing CSVs into filing summaries and schedule-level JSON rows for campaign-finance research.

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

Turn public FEC electronic filing CSVs into clean JSON rows for campaign-finance research, compliance monitoring, journalism, and political-data pipelines.

The actor uses the official OpenFEC filings API to find filing metadata, downloads each filing's public csv_url, parses the raw electronic filing rows, and emits filing summaries plus schedule-level records in an Apify dataset.

What does FEC Electronic Filing Parser do?

FEC Electronic Filing Parser converts Federal Election Commission electronic filing assets into structured dataset items.

It can:

  • 🔎 Find filings from OpenFEC by committee, form type, report year, and receipt-date range.
  • 🎯 Parse exact filings when you already know the FEC filing ID.
  • 📄 Download the official FEC CSV filing asset linked by OpenFEC.
  • 🧾 Emit one filing summary item per filing.
  • 📊 Emit one parsed schedule-row item per raw CSV row.
  • 🧱 Preserve every raw column as stable col001, col002, and so on.
  • 🏷️ Add friendly labels for common row types such as HDR, F3, F3X, F24, SA11AI, and SB17.

Who is it for?

This actor is useful for teams that repeatedly inspect campaign-finance filing data.

  • 📰 Investigative journalists tracking new committee filings.
  • 🗳️ Political data teams building campaign-finance databases.
  • ⚖️ Compliance analysts checking committee reports.
  • 🧑‍💻 Civic-tech developers who need FEC CSV rows as API-ready JSON.
  • 📈 Researchers comparing filings over time.
  • 🏛️ Public-affairs teams monitoring PAC and campaign activity.

Why use this actor?

FEC filing pages are not always convenient for automation. Some document-rendering HTML pages may block automated requests, but OpenFEC metadata and CSV filing assets are public and machine-readable.

This actor focuses on the reliable path:

  • OpenFEC API for search and metadata.
  • FEC CSV assets for source rows.
  • Apify datasets for export, scheduling, integrations, and API access.

Data source

The actor uses public Federal Election Commission data.

Primary source:

  • OpenFEC filings API: https://api.open.fec.gov/v1/filings/
  • CSV filing assets exposed in each filing's csv_url

The actor does not require a browser, cookies, login, or private credentials.

What data can you extract?

Each output item includes filing context such as:

FieldDescription
itemTypefiling_summary or schedule_row
fecFileIdOpenFEC file id such as FEC-870444
numericFilingIdNumeric filing id such as 870444
committeeIdFEC committee id
committeeNameCommittee name from OpenFEC
formTypeForm type such as F3 or F3X
reportYearFiling report year
documentDescriptionOpenFEC filing description
rowTypeCSV row type such as SA11AI or SB17
columnsFlattened object containing all parsed row columns
normalizedSelected friendly fields when row labels are known
csvUrlOfficial FEC CSV file URL
pdfUrlOfficial PDF URL when OpenFEC provides one

How much does it cost to parse FEC filings?

This actor uses pay-per-event pricing.

  • A small start event is charged once per run.
  • Each filing summary or parsed schedule row is charged as one item.

The first-run defaults are intentionally small: one known filing, up to three filings, and up to 100 dataset items. Increase maxItems and provide your own OpenFEC API key for production workloads.

Input options

Filing IDs

Use filingIds when you already know exact filing identifiers.

Example:

{
"filingIds": ["870444"],
"maxItems": 100
}

Use committeeIds, formTypes, and reportYear to discover filings from OpenFEC.

{
"committeeIds": ["C00465880"],
"formTypes": ["F3"],
"reportYear": 2013,
"maxFilings": 3,
"maxItems": 100
}

Date filters

Use minDate and maxDate with YYYY-MM-DD values when you only want filings from a specific receipt-date window.

Output format

The actor writes all results to the default Apify dataset.

Two item types are emitted:

  1. filing_summary — one metadata record per filing.
  2. schedule_row — one parsed row from the filing CSV.

This lets you export a single CSV or JSON dataset while still filtering by itemType downstream.

Example output

{
"itemType": "schedule_row",
"fecFileId": "FEC-870444",
"committeeId": "C00465880",
"committeeName": "FRIENDS OF SCOTT ROBINSON",
"formType": "F3",
"reportYear": 2013,
"rowType": "SB17",
"rowNumber": 4,
"rowColumnCount": 25,
"columns": {
"row_type": "SB17",
"committee_id": "C00465880",
"payee_name": "NGP SOFTWARE"
},
"source": "fec-csv"
}

How to parse one FEC filing

  1. Open the actor on Apify.
  2. Paste one or more FEC filing IDs into filingIds.
  3. Keep maxItems low for the first run.
  4. Start the actor.
  5. Export the dataset as JSON, CSV, Excel, or via API.

How to monitor a committee

  1. Add one or more committee IDs.
  2. Add the form types you care about, for example F3, F3X, or F24.
  3. Set a report year or date range.
  4. Schedule the actor daily, weekly, or monthly.
  5. Send new dataset rows to your warehouse, spreadsheet, or alerting tool.

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/fec-electronic-filing-parser').call({
filingIds: ['870444'],
maxItems: 100,
});
console.log(run.defaultDatasetId);

API usage with Python

from apify_client import ApifyClient
client = ApifyClient('MY_APIFY_TOKEN')
run = client.actor('automation-lab/fec-electronic-filing-parser').call(run_input={
'filingIds': ['870444'],
'maxItems': 100,
})
print(run['defaultDatasetId'])

API usage with cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~fec-electronic-filing-parser/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"filingIds":["870444"],"maxItems":100}'

MCP integration

Use the Apify MCP server to call this actor from Claude Desktop, Claude Code, or other MCP-compatible tools.

MCP URL:

https://mcp.apify.com/?tools=automation-lab/fec-electronic-filing-parser

Claude Code setup:

$claude mcp add apify-fec-parser --transport http https://mcp.apify.com/?tools=automation-lab/fec-electronic-filing-parser

Claude Desktop setup: open Settings → Developer → Edit Config, add the JSON below, save it, and restart Claude Desktop so the Apify MCP server is available.

Cursor setup: open Settings → MCP → Add new global MCP server, use transport HTTP, and paste the MCP URL above.

VS Code setup: install an MCP-compatible extension, add a new HTTP MCP server, and use the MCP URL above for the server endpoint.

Claude Desktop JSON config:

{
"mcpServers": {
"apify-fec-parser": {
"url": "https://mcp.apify.com/?tools=automation-lab/fec-electronic-filing-parser"
}
}
}

Example prompts:

  • "Parse FEC filing 870444 and summarize the schedule row types."
  • "Fetch recent F3 filings for committee C00465880 and export the parsed rows."
  • "Compare raw row counts across the latest filings for this committee."

Tips for reliable runs

  • Provide your own OpenFEC API key for larger runs.
  • Use exact filing IDs when reproducibility matters.
  • Keep maxItems high enough for filings with many schedule rows.
  • Enable includeRawRows only when you need exact source arrays.
  • Treat columns as the full source-preserving representation.
  • Treat normalized as a convenience layer that may expand over time.

Limitations

FEC electronic filing CSV layouts vary by form and schedule. This actor preserves every source column even when a row type is not yet fully labeled.

The actor does not scrape blocked HTML rendering pages. It uses OpenFEC metadata and official CSV assets instead.

The default DEMO_KEY is suitable for small smoke tests, not heavy production use.

Legality

FEC filings are public government records. You are responsible for using exported data in compliance with applicable laws, FEC rules, Apify terms, and your organization's policies.

Do not use the actor to misrepresent official filings. Keep links to the original FEC CSV, PDF, or filing page when publishing analysis.

Integrations

Common workflows include:

  • Send parsed rows to Google Sheets for analyst review.
  • Load schedule rows into BigQuery, Snowflake, or PostgreSQL.
  • Trigger Slack alerts when a committee files a new report.
  • Join parsed FEC rows with committee, candidate, or election-cycle reference tables.
  • Archive raw filing rows for audit evidence.

You may also need other Automation Lab actors for adjacent workflows:

  • SEC filing and company-data actors for public-market research.
  • Government contract and tender scrapers for public-sector intelligence.
  • Website contact and lead enrichment actors for outreach workflows.

FAQ

Why did my run return no filings?

Check that the committee ID, form type, report year, and date filters exist in OpenFEC. Try one exact filingIds value first to verify the parser path.

Why did OpenFEC return a rate-limit error?

The actor defaults to OpenFEC DEMO_KEY. For repeated or large runs, create a free OpenFEC API key and add it to the apiKey input.

Why are some row fields named col001?

FEC row layouts vary. The actor keeps all values under stable column keys and labels common row types where safe.

Changelog

Initial version:

  • OpenFEC filings search.
  • Exact filing ID parsing.
  • CSV row parser.
  • Filing summaries and schedule-row dataset items.
  • Optional raw row arrays.

Support

If you need a specific FEC schedule normalized into named fields, open an issue with sample filing IDs and the row types you want mapped.

Summary

FEC Electronic Filing Parser gives analysts a repeatable way to convert public FEC electronic filings into structured Apify datasets without browser automation or fragile HTML scraping.