# FEC Campaign Finance Scraper — Donations & PACs (`copious_atoll/fec-campaign-finance`) Actor

Extract FEC campaign finance data including candidate fundraising, individual donations, PAC contributions, and disbursements. Search by candidate, state, party, election year, or committee. Free API, no proxy needed.

- **URL**: https://apify.com/copious\_atoll/fec-campaign-finance.md
- **Developed by:** [Grim R](https://apify.com/copious_atoll) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## FEC Campaign Finance Scraper

Extract campaign finance data from the Federal Election Commission (FEC) API. Search candidates, individual donations, PAC contributions, disbursements, and committee details. Filter by candidate name, state, political party, election year, and office type. Returns structured political contributions data ready for analysis, journalism, or compliance research.

> **Disclaimer:** This actor is unofficial and is not affiliated with, sponsored by, or endorsed by the Federal Election Commission (FEC).

### What campaign finance data can you extract?

This campaign finance scraper wraps the free FEC API to extract four types of political finance data:

- **Candidates** — Search and retrieve candidate profiles with fundraising totals, party affiliation, office sought, election years, and financial summaries
- **Contributions (Schedule A)** — Individual donations to campaigns and PACs including donor name, amount, date, employer, occupation, and recipient committee
- **Disbursements (Schedule B)** — Campaign spending records showing where political money goes: vendors, amounts, purposes, and payment dates
- **Committees** — PAC and committee details including type, designation, filing frequency, treasurer, and connected organizations

### How to search FEC campaign finance data

**By candidate name:** Enter a name like "Biden" or "Trump" in the search query to find matching candidates and their fundraising data.

**By state:** Use a two-letter state code (CA, TX, NY) to filter candidates, donors, or committees by state.

**By party:** Filter by political party code — DEM for Democrat, REP for Republican, LIB for Libertarian, GRE for Green.

**By election year:** Set the election cycle (2024, 2022, 2020) to scope results to a specific campaign season.

**By office:** Filter candidates running for president, senate, or house seats.

**By ID:** Use FEC candidate IDs (e.g., P80001571) or committee IDs (e.g., C00703975) for precise lookups with detailed financial totals.

### Output example

Each result varies by mode. Here is a candidate search result:

```json
{
    "type": "candidate",
    "candidate_id": "P80001571",
    "name": "BIDEN, JOSEPH R JR",
    "party": "DEM",
    "office": "P",
    "state": "DE",
    "election_years": [2020, 2024],
    "incumbent_challenge": "I",
    "candidate_status": "C"
}
```

### How much does it cost to scrape FEC data?

This actor uses **pay-per-event pricing**. You pay per result returned.

- **$0.00005 per actor start** (Apify default)
- **Per-result charge** based on the number of records extracted
- **No proxy costs** — FEC is a free government API, no proxy needed

A typical candidate search returns 10-100 results at minimal cost. Contribution searches can return thousands of donation records for deeper analysis.

**Tip:** Use the `maxResults` parameter to control costs. Start with 100 and increase as needed. Get a free API key at https://api.data.gov/signup/ to avoid DEMO\_KEY rate limits.

### Who uses FEC campaign finance data?

- **Journalists and newsrooms** — investigate political donations, track dark money, follow the money in elections
- **Political researchers** — analyze donation patterns, party fundraising trends, and campaign spending
- **Compliance teams** — monitor political contribution limits and disclosure requirements
- **Nonprofit watchdogs** — track PAC spending and corporate political contributions
- **Data scientists** — build models on political donation data, predict election outcomes from fundraising
- **Campaign strategists** — benchmark fundraising performance against competitors
- **Civic tech developers** — build transparency tools and voter information platforms

### Tips for best results

- **Use DEMO\_KEY for testing**, but get a free key at https://api.data.gov/signup/ for production use (higher rate limits).
- **Start with candidates mode** to find candidate IDs, then use those IDs to fetch specific contributions or disbursements.
- **Filter by election year** to reduce noise — FEC data spans decades of elections.
- **Use committee mode** to research PACs and Super PACs by name or ID.
- **Combine filters** — search for Republican senate candidates in Texas for 2024 by setting party=REP, office=senate, state=TX, electionYear=2024.

### FEC API rate limits

With DEMO\_KEY: 40 requests per hour. With a free registered key: 1,000 requests per hour. This actor includes automatic rate limiting (0.5s between requests) and retry with exponential backoff for rate limit responses.

### Input parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| mode | string | Data type: candidates, contributions, disbursements, or committees |
| searchQuery | string | Name search for candidates, donors, recipients, or committees |
| state | string | Two-letter US state code (CA, TX, NY) |
| party | string | Party code: DEM, REP, LIB, GRE |
| electionYear | integer | Election cycle year (2024, 2022, etc.) |
| office | string | Office: president, senate, or house |
| candidateId | string | FEC candidate ID for specific lookups |
| committeeId | string | FEC committee ID for specific lookups |
| maxResults | integer | Maximum results to return (1-5000, default 100) |
| apiKey | string | FEC API key (DEMO\_KEY works for testing) |

### Integrations

Export your data as JSON, CSV, or Excel. Schedule runs to monitor new campaign filings automatically. Use webhooks to trigger downstream workflows when new donation data is detected.

This actor works as an **MCP server** — AI agents can discover and use it to access FEC campaign finance data programmatically.

# Actor input Schema

## `mode` (type: `string`):

What type of campaign finance data to extract. Candidates: search and get candidate info/totals. Contributions: individual donations (Schedule A). Disbursements: campaign spending (Schedule B). Committees: PAC and committee details.

## `searchQuery` (type: `string`):

Search by candidate or committee name. Example: 'Biden', 'Trump', 'ActBlue'.

## `state` (type: `string`):

Two-letter US state code to filter results (e.g., CA, TX, NY). Leave empty for all states.

## `party` (type: `string`):

Political party code. Common values: DEM (Democrat), REP (Republican), LIB (Libertarian), GRE (Green). Leave empty for all parties.

## `electionYear` (type: `integer`):

Election cycle year (even years, e.g. 2024, 2022). Filters candidates and financial data to a specific election cycle.

## `office` (type: `string`):

Filter candidates by office sought.

## `candidateId` (type: `string`):

FEC candidate ID for specific candidate lookups (e.g., P80001571 for Biden). Used to fetch detailed financial totals.

## `committeeId` (type: `string`):

FEC committee ID for specific committee/PAC lookups (e.g., C00703975).

## `maxResults` (type: `integer`):

Maximum number of results to return.

## `apiKey` (type: `string`):

FEC API key. DEMO\_KEY works for testing (limited to 40 requests/hour). Get a free unlimited key at https://api.data.gov/signup/

## Actor input object example

```json
{
  "mode": "candidates",
  "electionYear": 2024,
  "maxResults": 100,
  "apiKey": "DEMO_KEY"
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "candidates",
    "searchQuery": "",
    "electionYear": 2024,
    "maxResults": 100,
    "apiKey": "DEMO_KEY"
};

// Run the Actor and wait for it to finish
const run = await client.actor("copious_atoll/fec-campaign-finance").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "candidates",
    "searchQuery": "",
    "electionYear": 2024,
    "maxResults": 100,
    "apiKey": "DEMO_KEY",
}

# Run the Actor and wait for it to finish
run = client.actor("copious_atoll/fec-campaign-finance").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "candidates",
  "searchQuery": "",
  "electionYear": 2024,
  "maxResults": 100,
  "apiKey": "DEMO_KEY"
}' |
apify call copious_atoll/fec-campaign-finance --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=copious_atoll/fec-campaign-finance",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/zeu8bDehfrpchOfHc/builds/uLDkVAALxdIjEK1Qr/openapi.json
