# FEC Campaign Finance Tracker — PAC, Donor, Candidate Spending (`gochujang/fec-campaign-finance-tracker`) Actor

Track US federal campaign finance from the FEC API. Search donations, PAC spending, candidate fundraising totals, and top donors. Filter by candidate, committee, state, party, and date. Free FEC API key included (DEMO\_KEY). Alternative to Bloomberg Government ($8k+/year).

- **URL**: https://apify.com/gochujang/fec-campaign-finance-tracker.md
- **Developed by:** [Hojun Lee](https://apify.com/gochujang) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

### What does FEC Campaign Finance Tracker do?

**FEC Campaign Finance Tracker** pulls **political donation data** and campaign spending records directly from the Federal Election Commission's official public API. It returns structured data on candidate fundraising totals, individual contributions (Schedule A), campaign disbursements (Schedule B), and PAC / Super PAC committee profiles. This **FEC campaign finance tracker** replaces manual searching on fec.gov with a fully programmable **election spending API** that works out of the box using `DEMO_KEY` — no registration required.

All other commercial services (Bloomberg Government, OpenSecrets) derive their data from the same FEC source and charge $500–$8,000+/year. This actor gives you direct, unmarketed access to the same **political donation data** at **$0.001 per record**.

***

### Why use FEC Campaign Finance Tracker?

- **Political research and journalism** — Track fundraising trends across election cycles, surface the largest donors to any candidate, and expose PAC spending patterns without a data subscription
- **Corporate political spending analysis** — Identify which companies fund which candidates via PACs and Super PACs, and map the corporate-political network
- **Donor network mapping** — Trace large individual contributions across multiple committees to build donor relationship graphs
- **Election forecasting** — Use fundraising velocity and cash-on-hand as leading indicators of electoral viability for quantitative models
- **Compliance and opposition research** — Monitor competing candidates' financial positions, detect unusual spending spikes, and stay ahead of FEC filing deadlines

***

### How to use FEC Campaign Finance Tracker

1. Open the actor on Apify and click **Try for free**
2. Choose a `mode`: `candidates`, `donations`, `disbursements`, or `committees`
3. Apply filters: `candidateName`, `party`, `office`, `state`, `electionYear`, or `minAmount`
4. The default `DEMO_KEY` works immediately (60 req/hour). For production, register a free key at [api.data.gov/signup](https://api.data.gov/signup/) for 1,000 req/hour
5. Set `maxResults` (up to 1,000) and click **Start**
6. Download results as JSON or CSV, or integrate via Apify API

| Source | Cost | Data |
|--------|------|------|
| Bloomberg Government | $8,000+/year | FEC + more |
| OpenSecrets API | $500+/year | FEC-derived |
| **This Actor** | $0.001/record | Direct FEC API |
| FEC Website | Free (manual) | FEC |

***

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `mode` | string | `candidates` | `candidates`, `donations`, `disbursements`, or `committees` |
| `candidateName` | string | — | Candidate name search (e.g. `"Trump"`, `"Harris"`) |
| `committeeName` | string | — | PAC or committee name search |
| `office` | string | — | `P` (President), `S` (Senate), `H` (House) |
| `state` | string | — | 2-letter state code (e.g. `CA`, `TX`) |
| `party` | string | — | `DEM`, `REP`, or `IND` |
| `electionYear` | integer | `2024` | Election cycle (e.g. `2024`, `2022`, `2020`) |
| `minAmount` | number | `0` | Minimum donation or disbursement in USD |
| `fecApiKey` | string | `DEMO_KEY` | FEC API key — `DEMO_KEY` included |
| `maxResults` | integer | `100` | Max records returned (up to 1,000) |

***

### Output

#### Mode: `candidates` — fundraising totals

```json
[
  {
    "type": "candidate_total",
    "candidate_id": "P80001571",
    "candidate_name": "BIDEN, JOSEPH R JR",
    "party_full": "Democrat",
    "office_full": "President",
    "state": "US",
    "election_year": 2024,
    "total_receipts": 97432891.23,
    "total_disbursements": 88120044.00,
    "cash_on_hand": 9312847.23,
    "debts_owed_by_committee": 0,
    "coverage_start_date": "2023-01-01",
    "coverage_end_date": "2024-06-30"
  }
]
```

#### Mode: `donations` — individual contributions (Schedule A)

```json
[
  {
    "type": "donation",
    "contributor_name": "SMITH, JOHN",
    "contributor_city": "NEW YORK",
    "contributor_state": "NY",
    "contributor_employer": "GOLDMAN SACHS",
    "contributor_occupation": "INVESTMENT BANKER",
    "contribution_receipt_amount": 3300.00,
    "contribution_receipt_date": "2024-03-15",
    "committee_name": "ACTBLUE",
    "candidate_name": "BIDEN, JOSEPH R JR",
    "entity_type": "Individual"
  }
]
```

***

### Data fields

| Field | Type | Description |
|-------|------|-------------|
| `type` | string | Record type: `candidate_total`, `donation`, `disbursement`, or `committee` |
| `candidate_id` | string | FEC candidate ID (P/S/H prefix) |
| `candidate_name` | string | Candidate name in FEC format (`LASTNAME, FIRSTNAME`) |
| `party_full` | string | Full party name |
| `office_full` | string | `President`, `Senate`, or `House` |
| `election_year` | integer | Election cycle year |
| `total_receipts` | number | Total donations received in USD |
| `total_disbursements` | number | Total campaign spending in USD |
| `cash_on_hand` | number | Remaining cash in USD |
| `contribution_receipt_amount` | number | Individual donation amount in USD |
| `contributor_employer` | string | Donor's employer (Schedule A itemized donations) |
| `disbursement_amount` | number | Spending amount in USD (Schedule B) |
| `purpose_full` | string | Spending purpose description |
| `committee_type_full` | string | PAC type (e.g. Super PAC, Party Committee) |

***

### Cost estimation

| Event | Price | Example |
|-------|-------|---------|
| Per record returned | $0.001 | — |
| **100 records** | **~$0.10** | Top donor list for one candidate |
| **1,000 records** | **~$1.00** | Full 2024 presidential donor sweep |
| **Top 50 candidates** | **~$0.05** | Full candidate fundraising landscape |

***

### FAQ

**Does this cover state-level campaign finance?**
No. The FEC only covers **federal elections** (President, Senate, House). For state-level finance data, check your state's elections board — most have their own public portals.

**Why do some individual donations not appear in Schedule A?**
The FEC only itemizes contributions over **$200 per election**. Small-dollar donations bundled through platforms like ActBlue are reported in aggregate and may not appear as individual records.

**How current is the data?**
FEC data is updated within 24–48 hours of official FEC filing deadlines. For real-time campaign events, check fec.gov directly. The actor pulls from the live FEC API with no caching.

> **Disclaimer:** This actor accesses publicly available **election spending data** from the Federal Election Commission's open API. The developer is not affiliated with the FEC or any political party or candidate. Data is provided for research and informational purposes only.

***

**Keywords:** FEC campaign finance tracker, political donation data, election spending API, PAC tracker, Super PAC, candidate fundraising, FEC API, OpenSecrets alternative, federal election data, campaign finance scraper

***

### Related actors

- [Polymarket Prediction Tracker](https://apify.com/gochujang/polymarket-prediction-tracker) — Election prediction market probabilities to pair with FEC fundraising momentum data
- [Metaculus Forecasts Tracker](https://apify.com/gochujang/metaculus-forecasts-tracker) — Political forecasts to cross-reference with campaign finance indicators
- [Google News Scraper](https://apify.com/gochujang/google-news-scraper) — Political news coverage to contextualize donation spikes around key events

### Feedback

If this actor powers your political research, a review helps others find it: [Leave a review on Apify Store](https://apify.com/gochujang/fec-campaign-finance-tracker#reviews)

# Actor input Schema

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

What to query: candidates (fundraising totals), donations (Schedule A individual contributions), disbursements (Schedule B spending), committees (PACs/Super PACs)

## `candidateName` (type: `string`):

Search by candidate name (e.g. 'Biden', 'Trump')

## `committeeName` (type: `string`):

Search by committee or PAC name

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

Filter by office sought

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

2-letter state code (e.g. CA, TX, NY)

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

Political party: DEM, REP, IND

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

Election cycle year (e.g. 2024, 2022)

## `minAmount` (type: `number`):

Only include donations/disbursements above this amount

## `fecApiKey` (type: `string`):

FEC API key (DEMO\_KEY works for testing, free key at api.data.gov for higher limits)

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

Maximum number of records to return (up to 1,000).

## Actor input object example

```json
{
  "mode": "candidates",
  "electionYear": 2024,
  "minAmount": 0,
  "fecApiKey": "DEMO_KEY",
  "maxResults": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("gochujang/fec-campaign-finance-tracker").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 = {}

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

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

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

```

## CLI example

```bash
echo '{}' |
apify call gochujang/fec-campaign-finance-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gochujang/fec-campaign-finance-tracker"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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