# 🏛️ Federal Campaign Finance & Political PAC Donor Tracker (`automation_studio/fec-political-donor-tracker`) Actor

Track corporate executives, tech founders, and PAC campaign contributions using the official US Federal Election Commission (FEC) API. Features party split analytics, employer rollups, and Discord/Slack alerts.

- **URL**: https://apify.com/automation\_studio/fec-political-donor-tracker.md
- **Developed by:** [Automation Studio](https://apify.com/automation_studio) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 verified campaign finance & donor leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🏛️ Federal Campaign Finance & Political PAC Donor Tracker (FEC.gov API)

Track and analyze federal political contributions, Super PAC mega-donations, and candidate fundraising using official public records from the **US Federal Election Commission (FEC)**.

Whether you are investigating how Silicon Valley tech leaders fund political campaigns, monitoring corporate executive contributions, or analyzing national party fundraising patterns, this Actor turns complex government filings into structured, actionable intelligence.

***

### ⚖️ Legal & Compliance Notice (52 U.S.C. § 30111(a)(4))

> \[!IMPORTANT]
> **Prohibition Against Commercial Solicitation & Fundraising**:
> Under the Federal Election Campaign Act (**52 U.S.C. § 30111(a)(4)** and **11 CFR § 104.15**), contributor information obtained from FEC reports **may not be sold or used by any person for the purpose of soliciting contributions or for any commercial purpose**.
>
> - **Permitted Uses**: This Actor is designed, maintained, and intended strictly for **investigative journalism, news reporting, academic inquiry, public policy analysis, and corporate ethics/compliance auditing** under the statutory exemptions of 11 CFR § 104.15(c).
> - **Notice**: Users are solely responsible for ensuring their usage complies with all applicable federal, state, and local election laws.

***

### 🌟 Key Features

- **Direct Official FEC Data**: Sourced live from the official **OpenFEC Schedule A REST API** (`api.open.fec.gov`). 100% authentic, verified public records.
- **Executive Portfolio Summary Card**: Automatically computed at the top of every run:
  - **Total Dollar Volume** contributed across all matching records.
  - **Party Breakdown**: Percentage and dollar split between **Democrats (`DEM`)**, **Republicans (`REP`)**, and **Non-partisan / Independents**.
  - **Conduit & Pass-Through Resolution**: Automatically unbundles conduits such as **ActBlue** and **WinRed** to reveal actual political alignments.
  - **Top Recipient Committees**: Identifies the top 5 PACs, joint fundraising committees, or candidate campaigns receiving funds.
- **Rich Itemized Records**: Every record includes contributor full name, employer, occupation, city/state/ZIP, exact contribution amount, transaction date, committee details, and a **direct link to the scanned official filing PDF** on `docquery.fec.gov`.
- **Instant Discord & Slack Alerts**: Configure a webhook to receive real-time alert cards when an executive or employee makes a high-value donation (e.g. >$10,000).
- **Stateful Deduplication**: Built-in Key-Value Store memory tracks previously seen `sub_id` entries, ensuring automated recurring runs only notify you of brand-new donations.

***

### 💰 Transparent Value Pricing & Competitor Comparison

This Actor is engineered under a **Pay-per-Event (PPE)** model designed to give researchers, investigative journalists, and compliance teams **maximum data volume at the lowest cost** on the Apify Store.

#### 🏆 Head-to-Head Competitor Comparison

| Pricing & Capability Metric | 🏛️ Federal FEC Donor Tracker (This Actor) | 🏛️ Capitol Trades Scraper | 📢 Political & Issue Ad Scrapers |
| :--- | :--- | :--- | :--- |
| **Price per 1,000 Results (Free Plan)** | **$0.60** ($0.0006 / record) | **$1.00** ($0.0010 / record) | **$2.00 – $3.50** / 1k |
| **Price per 1,000 Results (Gold Plan)** | **$0.40** ($0.0004 / record) | **$0.70** ($0.0007 / record) | **$1.50 – $2.50** / 1k |
| **Run Initiation Startup Fee** | **$0.00001** (Zero Barrier) | $0.00005 | $0.01 – $0.05 |
| **Platform Compute Footprint** | **256 MB RAM (~1–2s run)** | 512 MB – 1,024 MB | 1,024 MB – 2,048 MB (Puppeteer) |
| **Platform Compute Cost per Run** | **~$0.00001** (80% cheaper) | ~$0.0005+ | ~$0.0030+ |
| **Conduit & PAC Party Resolution** | **Included** (ActBlue / WinRed unpacked) | N/A | N/A |
| **Direct Scanned Filing PDF Links** | **100% of records** (docquery.fec.gov) | N/A | Variable |
| **Cost to Extract 10,000 Records** | **$4.00 – $6.00** | $7.00 – $10.00 | $20.00 – $35.00 |

#### 💡 Why Users Win With This Pricing:

1. **40% – 50% Lower Cost per Record**: Extract nearly double the records for the exact same budget.
2. **Generous Free Trial**: With Apify's $5 monthly free credit, you can extract over **8,300 official campaign contribution records every month for free**.
3. **Zero Risk on Zero Matches**: If an employer filter returns 0 records, you are only billed the nominal $0.00001 start fee — no punitive pricing for testing.
4. **Lightweight Platform Consumption**: Pure asynchronous HTTP calls use only 256MB RAM with no browser bloat, preserving your Apify Compute Unit budget.

***

### 🎯 Target Use Cases

| Persona | Practical Workflow |
| :--- | :--- |
| **Investigative Journalists** | Set up recurring runs for companies like *OpenAI*, *Tesla*, or *Palantir* to break news on executive political giving. |
| **Corporate Compliance & ESG** | Audit political contributions from senior management to ensure alignment with corporate governance standards. |
| **Think Tanks & Policy Analysts** | Track campaign contributions by industry sector (e.g., Defense, Big Tech, Crypto, Energy). |
| **Academic Researchers** | Download structured historical dataset slices across 2020–2026 election cycles for statistical modeling. |

***

### 📥 Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `contributorEmployer` | `string` | `"Google"` | Filter by donor's employer (e.g. `Google`, `Tesla`, or comma-separated `Google, Tesla` to monitor multiple companies). |
| `contributorOccupation` | `string` | `""` | Filter by job title (e.g. `CEO`, or comma-separated `CEO, Founder, Executive`). |
| `contributorName` | `string` | `""` | Filter by donor name (e.g. `Musk, Elon` or semicolon-separated `Musk, Elon; Thiel, Peter`). |
| `contributorState` | `string` | `""` | Filter by 2-letter state code (e.g. `CA`, or comma-separated `CA, NY, TX`). |
| `twoYearTransactionPeriod` | `integer` | `2024` | Election cycle (e.g., `2026`, `2024`, `2022`, `2020`). |
| `minAmount` | `integer` | `1000` | Minimum donation threshold in USD. |
| `maxResults` | `integer` | `100` | Maximum itemized records to extract (up to 2,000). |
| `apiKey` | `string` | `""` | Optional personal OpenFEC API key from `api.data.gov` (1,000 calls/hr). |
| `webhookUrl` | `string` | `""` | Optional Discord or Slack webhook URL for instant donation alerts. |
| `minWebhookAmount` | `integer` | `5000` | Minimum donation amount that triggers a webhook alert. |

***

### 📤 Output Dataset Format

#### 1. Executive Summary Card (Item #1 in Dataset)

```json
{
  "isSummaryCard": true,
  "queryParameters": {
    "contributorEmployer": "Google",
    "twoYearTransactionPeriod": 2024,
    "minAmount": 5000
  },
  "totalContributionsScanned": 100,
  "totalDollarVolume": 482500.0,
  "averageDonation": 4825.0,
  "largestDonation": 50000.0,
  "partyBreakdown": {
    "democratTotal": 318450.0,
    "democratPercent": "66.0%",
    "republicanTotal": 144750.0,
    "republicanPercent": "30.0%",
    "otherTotal": 19300.0,
    "otherPercent": "4.0%"
  },
  "topRecipientCommittees": [
    {
      "committee": "ACTBLUE",
      "totalAmount": 182000.0,
      "donationsCount": 35,
      "party": "Democratic Party (ActBlue Conduit)"
    },
    {
      "committee": "WINRED",
      "totalAmount": 74500.0,
      "donationsCount": 16,
      "party": "Republican Party (WinRed Conduit)"
    }
  ],
  "statutoryDisclaimer": "52 U.S.C. § 30111(a)(4) prohibits using FEC contributor data for commercial solicitation or fundraising.",
  "generatedAt": "2026-09-22T20:25:00.000Z"
}
```

#### 2. Itemized Contribution Record

```json
{
  "subId": "4051220251193594988",
  "transactionId": "14781626",
  "receiptDate": "2024-12-13",
  "amount": 6600.0,
  "aggregateYtd": 6600.0,
  "contributorName": "OSTERLOH, RICK",
  "contributorFirstName": "RICK",
  "contributorLastName": "OSTERLOH",
  "contributorEmployer": "GOOGLE",
  "contributorOccupation": "ENGINEER",
  "city": "MOUNTAIN VIEW",
  "state": "CA",
  "zip": "94043",
  "recipientCommittee": "WINRED",
  "recipientCommitteeId": "C00694323",
  "recipientCommitteeType": "Hybrid PAC",
  "politicalParty": "Republican Party (WinRed Conduit)",
  "pdfUrl": "https://docquery.fec.gov/cgi-bin/fecimg/?202501319751122573",
  "fecFilingForm": "F3X",
  "twoYearPeriod": 2024
}
```

***

### 💰 Pay-Per-Event (PPE) Pricing

This Actor utilizes Apify's transparent **Pay-Per-Event** pricing model:

| Event | Event Code | Price (USD) | Description |
| :--- | :--- | :--- | :--- |
| **Actor Start** | `apify-actor-start` | **$0.002** | Base run fee per query execution |
| **Enriched Contribution Record** | `apify-default-dataset-item` | **$0.001** | ($1.00 per 1,000 records) |

*Compute cost is negligible because this Actor uses lightweight HTTP calls (runs in 2–5 seconds with 256MB RAM).*

# Actor input Schema

## `contributorEmployer` (type: `string`):

Filter by donor's employer or company name (e.g., 'Google', 'Tesla', or comma-separated 'Google, Tesla' to track multiple companies). Leave blank to search all employers.

## `contributorOccupation` (type: `string`):

Filter by occupation or job title (e.g., 'CEO', 'Partner', or comma-separated 'CEO, Founder, Executive').

## `contributorName` (type: `string`):

Filter by individual donor's name ('LAST, FIRST' or partial name, e.g., 'Musk, Elon' or separate multiple donors with semicolons 'Musk, Elon; Thiel, Peter').

## `contributorState` (type: `string`):

Filter by two-letter US state postal abbreviation (e.g., 'CA', or comma-separated 'CA, NY, TX').

## `twoYearTransactionPeriod` (type: `string`):

The two-year federal election cycle to examine. 2024 covers the 2023-2024 cycle; 2026 covers the 2025-2026 cycle.

## `minAmount` (type: `integer`):

Filter out small donations below this dollar threshold (e.g., 1000 to highlight major contributors). Set to 0 to include all contributions.

## `maxAmount` (type: `integer`):

Optional upper bound on contribution amount in USD.

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

Maximum number of itemized contribution records to retrieve.

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

Optional: Your personal free API key from api.data.gov or api.open.fec.gov (1,000 requests/hr). If left blank, the Actor automatically uses the shared default key.

## `webhookUrl` (type: `string`):

Optional: Webhook URL to receive instant alert cards when high-value donations are detected.

## `minWebhookAmount` (type: `integer`):

Only dispatch webhook alerts for donations equal to or greater than this dollar amount.

## `includeSummaryInDataset` (type: `boolean`):

If enabled, includes the Executive Summary Card as record #1 in the dataset. When disabled (recommended for clean CSV/Excel exports), keeps dataset rows strictly tabular and stores the summary card in the Key-Value Store OUTPUT tab.

## Actor input object example

```json
{
  "contributorEmployer": "Google",
  "twoYearTransactionPeriod": "2024",
  "minAmount": 1000,
  "maxResults": 100,
  "minWebhookAmount": 5000,
  "includeSummaryInDataset": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing verified individual and executive political contributions, committee details, and scanned filing PDF links

## `summary` (type: `string`):

Aggregated dollar volume, party breakdown percentages, top funded PACs, and top individual contributors

# 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 = {
    "contributorEmployer": "Google",
    "twoYearTransactionPeriod": "2024"
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_studio/fec-political-donor-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 = {
    "contributorEmployer": "Google",
    "twoYearTransactionPeriod": "2024",
}

# Run the Actor and wait for it to finish
run = client.actor("automation_studio/fec-political-donor-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 '{
  "contributorEmployer": "Google",
  "twoYearTransactionPeriod": "2024"
}' |
apify call automation_studio/fec-political-donor-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation_studio/fec-political-donor-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/hWb2SUSdvwPIGaMPC/builds/bbSDE0FJP4eds3qJz/openapi.json
