# FEC Campaign Finance Scraper - Donors, PACs & Lobbying (`scrapesage/fec-campaign-finance-scraper`) Actor

Scrape US federal campaign finance from the FEC: donors (name, employer, occupation, ZIP, amount), PACs, candidates, disbursements, independent expenditures & filings - plus Senate lobbying disclosures. Filter by name, employer, state or committee. Monitor mode. Export JSON, CSV, Excel.

- **URL**: https://apify.com/scrapesage/fec-campaign-finance-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, News, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 contribution / donor records

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 — Donors, PACs, Candidates & Lobbying

Extract **complete US federal campaign finance data** straight from the **FEC (OpenFEC)** — individual **donors** (name, employer, occupation, ZIP, amount), **PACs & committees** (with treasurer, email, phone, website & address), **candidates** (with financial totals), **disbursements**, **independent expenditures** and **filings** — plus **US Senate lobbying disclosures** (registrant firms, clients, lobbyists, issues & spending) in the **same actor**.

No login, no scraping headaches — fast, structured JSON from official government data sources with 99%+ reliability. The lobbying mode works with **no API key at all**.

### Why this campaign finance scraper?

Most FEC scrapers do one thing — dump individual contributions and stop. This actor ships the **richest dataset in the category** and is the only one that also covers **lobbying disclosures** and surfaces **committee contact details** as ready-to-use leads.

| Data | Typical scrapers | This actor |
|---|---|---|
| Individual donors (name, employer, occupation, ZIP, amount, YTD) | ✅ | ✅ |
| Candidates + financial totals (receipts, cash on hand, debts) | partial | ✅ |
| Committees & PACs **with treasurer, email, phone, website, address** | ❌ | ✅ |
| Disbursements / spending (Schedule B) | ❌ | ✅ |
| Independent expenditures — support/oppose (Schedule E) | ❌ | ✅ |
| Committee filings & financial reports + document links | ❌ | ✅ |
| **US Senate lobbying disclosures** (firm, client, lobbyists, issues, $) | ❌ | ✅ |
| Lead score (0–100) on every record | ❌ | ✅ |
| Monitor mode — only new records since last run | ❌ | ✅ |
| No start fee | — | ✅ |

### Use cases

- **Political & donor lead generation** — find high-value donors by employer, occupation, location or candidate; reach committees directly via treasurer name, email and phone.
- **Compliance, KYC & due diligence** — screen people and organizations against FEC contributions, PAC activity and registered federal lobbying.
- **Journalism & political research** — follow the money: who funds whom, which Super PACs spend for or against a candidate, and who lobbies Congress on which issues.
- **Opposition & competitive research** — map a candidate's donors, vendors (disbursements) and the independent expenditures supporting or opposing them.
- **Lobbying & government-affairs intelligence** — track lobbying firms, their clients, named lobbyists and issue areas; spot new registrations.
- **Market & trend analysis** — aggregate contributions by employer, occupation, state or cycle for the 2024 and 2026 election cycles.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. For FEC modes, get a **free api.data.gov key** at [api.data.gov/signup](https://api.data.gov/signup) (instant, 1,000 requests/hour) and paste it into **fecApiKey**. The **lobbying** mode needs no key.
3. Pick a **mode**, set your filters (donor name, employer, committee, candidate, state, cycle…), and click **Start**.
4. Watch results stream into the dataset, then **export** as JSON, CSV, Excel, XML or RSS — or pull them via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "mode": "contributions",
    "fecApiKey": "YOUR_FREE_API_DATA_GOV_KEY",
    "contributorEmployer": "Google",
    "contributorOccupation": "Software Engineer",
    "state": "CA",
    "minAmount": 200,
    "twoYearTransactionPeriod": 2026,
    "maxResults": 500,
    "monitorMode": false
}
````

- **mode** *(required)* — what to scrape:
  - `contributions` — individual donors (Schedule A) — the donor lead-gen mode.
  - `candidates` — federal candidates, optionally with financial totals.
  - `committees` — committees & PACs with full contact details (treasurer, email, phone, website, address).
  - `disbursements` — committee spending (Schedule B).
  - `independentExpenditures` — Super PAC spending for/against candidates (Schedule E).
  - `filings` — committee filings & financial reports.
  - `lobbying` — US Senate LDA lobbying disclosures (**no API key needed**).
- **fecApiKey** — free key from [api.data.gov/signup](https://api.data.gov/signup). Required for all FEC modes; the default `DEMO_KEY` is shared and rate-limited (~40 req/hour) so use your own for real runs.
- **searchQuery** — name to match (candidate name in `candidates`, committee/PAC name in `committees`).
- **contributorName / contributorEmployer / contributorOccupation** — donor filters (contributions mode).
- **committeeId / candidateId** — scope contributions, disbursements, independent expenditures or filings to one committee or candidate.
- **office / party / state / cycle** — candidate filters; `state` also filters committees and donor contributions.
- **twoYearTransactionPeriod** — even-year period for contributions/disbursements (e.g. 2026 covers 2025–2026; defaults to 2026).
- **supportOppose** — keep only independent expenditures that support or oppose the candidate.
- **minAmount / maxAmount / minDate / maxDate** — amount and date filters.
- **registrantName / clientName / lobbyistName / issueCode / filingYear / filingType** — lobbying filters.
- **startUrls** — paste fec.gov candidate/committee URLs or lda.senate.gov filing URLs to scrape directly.
- **includeCandidateTotals** *(default true)* — add receipts, cash on hand and debts to each candidate.
- **includeCommitteeDetails** *(default true)* — fetch full committee contact details (the lead data).
- **maxResults** *(default 200)* — cap per run.
- **monitorMode** *(default false)* — remember records from previous runs and emit only new ones.

### Output

Every record carries a `type` field plus a set of normalized fields (`name`, `amount`, `date`, `state`, `leadScore`, `url`) and the full source-faithful fields for that record type.

A **contribution** (donor) record:

```json
{
    "type": "contribution",
    "contributorName": "Schmidt, Keith",
    "contributorType": "individual",
    "contributorEmployer": "Google INC.",
    "contributorOccupation": "Software Engineer",
    "contributorCity": "Chicago",
    "contributorState": "IL",
    "contributorZip": "606475211",
    "contributionReceiptAmount": 50,
    "contributionReceiptDate": "2024-12-31",
    "contributorAggregateYtd": 600,
    "recipientCommitteeName": "Democratic Party Of Wisconsin Federal",
    "recipientCommitteeType": "Party - Qualified",
    "isIndividual": true,
    "leadScore": 45,
    "url": "https://docquery.fec.gov/cgi-bin/fecimg/?202505129760929412"
}
```

A **committee / PAC** record (lead data):

```json
{
    "type": "committee",
    "committeeId": "C00890293",
    "committeeName": "American Environmental Justice PAC, LLC",
    "committeeType": "Super PAC (Independent Expenditure-Only)",
    "treasurerName": "Smith, Robert",
    "email": "americanenvironmentaljustice@gmail.com",
    "phone": "6783275898",
    "addressStreet": "4514 Chamblee Dunwoody Road, Ste 463",
    "addressCity": "Atlanta",
    "state": "GA",
    "leadScore": 80,
    "url": "https://www.fec.gov/data/committee/C00890293/"
}
```

A **lobbying** filing record:

```json
{
    "type": "lobbyingFiling",
    "filingType": "Registration",
    "filingYear": 2024,
    "registrantName": "Tarplin, Downs & Young, LLC",
    "registrantContactName": "Jennifer B. Young",
    "registrantContactPhone": "+1 202-555-0140",
    "registrantCity": "Washington",
    "registrantState": "DC",
    "clientName": "Amazon.Com Services LLC",
    "clientDescription": "Leading technology company",
    "issueCodes": ["Medicare/Medicaid", "Health Issues"],
    "lobbyists": [{ "name": "Jane Doe", "coveredPosition": "Legislative Assistant, Rep. Smith" }],
    "lobbyistCount": 10,
    "leadScore": 75,
    "url": "https://lda.senate.gov/filings/public/filing/140ae80b-4066-49ae-9acc-d428cc4bd65a/print/"
}
```

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly to track new donors, filings or lobbying activity in a cycle, state or for a specific committee.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, compliance flag) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/fec-campaign-finance-scraper').call({
    mode: 'committees',
    searchQuery: 'climate',
    includeCommitteeDetails: true,
    maxResults: 300,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} committee leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new donor or committee leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored search finds new filings.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find the top donors who work at Goldman Sachs this cycle" or "list lobbying firms working for Pfizer" and let it run this scraper.

### More scrapers from scrapesage

Build a complete **public-records & B2B intelligence stack**:

- **[SAM.gov Scraper](https://apify.com/scrapesage/sam-gov-scraper)** — US federal contract opportunities and contacts.
- **[Google Ads Transparency Scraper](https://apify.com/scrapesage/google-ads-transparency-scraper)** — who's advertising what on Google (great alongside political ad data).
- **[Facebook Ad Library Scraper](https://apify.com/scrapesage/facebook-ad-library-scraper)** — political and brand ad intelligence from Meta & Instagram.
- **[LinkedIn Jobs Scraper](https://apify.com/scrapesage/linkedin-jobs-scraper)** — job postings as hiring-intent signals.
- **[Product Hunt Scraper](https://apify.com/scrapesage/product-hunt-scraper)** — launches, makers and leads.
- **[Eventbrite Scraper](https://apify.com/scrapesage/eventbrite-scraper)** — events plus organizer contact leads.
- **[Bark Listing Scraper](https://apify.com/scrapesage/bark-listing-scraper)** — service-provider leads from Bark.

### Tips

- **Get a free key**: FEC modes use [api.data.gov](https://api.data.gov/signup) (1,000 req/hour, instant). `DEMO_KEY` is only for quick trials — it's shared and rate-limited.
- **Donor leads**: combine `contributorEmployer` or `contributorOccupation` with `state` and `minAmount` to build targeted, high-value prospect lists.
- **Committee leads**: `committees` mode with `includeCommitteeDetails` returns treasurer, email, phone and address — ideal for B2B outreach to PACs and campaigns.
- **Recurring monitoring**: turn on `monitorMode` and add a [Schedule](https://docs.apify.com/platform/schedules) to capture only new contributions, filings or lobbying registrations each day.
- **Big result sets**: contribution data is huge — narrow with employer/occupation/state/date filters and `maxResults` to keep runs fast and focused.

### FAQ

**Do I need an API key?** For FEC modes (contributions, candidates, committees, disbursements, independent expenditures, filings) you need a **free** [api.data.gov](https://api.data.gov/signup) key — it takes seconds. The **lobbying** mode uses the keyless US Senate LDA database and needs nothing.

**Where does the data come from?** Official US government sources: the FEC's [OpenFEC API](https://api.open.fec.gov/developers/) and the US Senate [Lobbying Disclosure Act database](https://lda.senate.gov/api/). All data is public record.

**Which election cycles are covered?** All of them. Contributions and disbursements are organized into two-year transaction periods (e.g. 2026, 2024, 2022); candidates and committees go back decades.

**Can I export to Google Sheets, CSV or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**Is the contact data for committees real?** Yes — committee treasurer names, emails, phones and addresses come straight from the FEC's own committee records (Form 1 filings). The `committees` mode with `includeCommitteeDetails` surfaces them.

**How do I monitor new filings automatically?** Enable `monitorMode` and create a [Schedule](https://docs.apify.com/platform/schedules). The actor remembers what it has already returned and emits only new records each run — and it doesn't conflict with Apify Schedules.

**Is this legal?** This actor collects publicly available government data only. You are responsible for using it in compliance with applicable laws (including the FEC's rules that campaign-finance data may not be used to solicit contributions or for commercial purposes) and each source's terms.

**A field is null — why?** Some records genuinely don't include every field (e.g. a committee with no website, a lobbying filing with no listed phone). Fields are `null` only when the source doesn't provide the value.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

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

Which dataset to extract. FEC modes need a free api.data.gov key (see fecApiKey). The 'lobbying' mode uses the keyless US Senate LDA database and works out of the box.

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

Free key from https://api.data.gov/signup (1,000 req/hour). Required for all FEC modes; not used by the 'lobbying' mode. Leave as DEMO\_KEY to try the actor, but DEMO\_KEY is rate-limited to ~40 req/hour and shared — get your own free key for real runs.

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

Name to search. For 'candidates' it matches candidate name; for 'committees' it matches committee/PAC name. Ignored by other modes (use the specific filters below).

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

contributions mode: full or partial donor name (person or organization), e.g. 'Smith' or 'John Smith'.

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

contributions mode: filter donors by employer, e.g. 'Google' or 'Goldman Sachs'.

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

contributions mode: filter donors by occupation, e.g. 'attorney', 'physician', 'CEO'.

## `recipientName` (type: `string`):

disbursements mode: filter by the payee/recipient name a committee paid, e.g. a vendor or consultant.

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

FEC committee ID (e.g. C00401224). Scopes contributions, disbursements, independent expenditures or filings to one committee/PAC/campaign.

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

FEC candidate ID (e.g. P00000001, H4MI03185, S0...). Scopes independent expenditures or filings to one candidate.

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

candidates mode: restrict to an office.

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

Two-letter state code (e.g. CA, TX, NY). Filters candidates by state, committees by state, and contributions by the donor's state.

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

candidates mode: 3-letter party code, e.g. DEM, REP, LIB, IND, GRE.

## `cycle` (type: `integer`):

Even-numbered two-year cycle, e.g. 2026, 2024, 2022. Applies to candidates and independent expenditures.

## `twoYearTransactionPeriod` (type: `integer`):

Even-numbered year that anchors a 2-year transaction period for contributions and disbursements (e.g. 2026 covers 2025-2026). Defaults to 2026 if left blank.

## `supportOppose` (type: `string`):

independentExpenditures mode: keep only spending that supports or opposes the candidate.

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

Only keep contributions / disbursements / independent expenditures at or above this dollar amount.

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

Only keep records at or below this dollar amount.

## `minDate` (type: `string`):

Earliest receipt/disbursement/expenditure date to include (FEC schedule modes), e.g. 2025-01-01.

## `maxDate` (type: `string`):

Latest receipt/disbursement/expenditure date to include (FEC schedule modes), e.g. 2026-06-30.

## `registrantName` (type: `string`):

lobbying mode: filter by the lobbying firm / registrant name, e.g. 'Akin Gump'.

## `clientName` (type: `string`):

lobbying mode: filter by the client the lobbyist works for, e.g. 'Amazon', 'Pfizer'.

## `lobbyistName` (type: `string`):

lobbying mode: filter by an individual lobbyist's name.

## `issueCode` (type: `string`):

lobbying mode: 3-letter general issue area code, e.g. HCR (health), TAX, DEF, ENV, TEC. See the README for the full list.

## `filingYear` (type: `integer`):

lobbying mode: filing year, e.g. 2026, 2025, 2024. Defaults to 2026 if left blank.

## `filingType` (type: `string`):

lobbying mode: restrict to a filing type.

## `startUrls` (type: `array`):

Optional fec.gov candidate/committee URLs or lda.senate.gov filing URLs to scrape directly. Auto-detected and routed; overrides the search filters for those records.

## `includeCandidateTotals` (type: `boolean`):

candidates mode: add receipts, disbursements, cash-on-hand and debts for each candidate's current cycle (one extra request per candidate).

## `includeCommitteeDetails` (type: `boolean`):

committees mode: fetch the full committee record (treasurer, email, website, phone, full address) for each result (one extra request per committee). This is the lead-gen data.

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

Maximum number of records to return for this run.

## `monitorMode` (type: `boolean`):

Remember records seen in previous runs (in a named key-value store) and emit only records that are new since last run. Ideal for daily Schedules that track new donors, filings or lobbying activity. Does not conflict with Apify Schedules.

## `proxyConfiguration` (type: `object`):

Proxy used for outbound requests. The default Apify Proxy is recommended for stable, retried requests; the gov APIs have no anti-bot.

## Actor input object example

```json
{
  "mode": "contributions",
  "fecApiKey": "DEMO_KEY",
  "office": "",
  "supportOppose": "",
  "filingType": "",
  "includeCandidateTotals": true,
  "includeCommitteeDetails": true,
  "maxResults": 200,
  "monitorMode": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped records as JSON items in the default dataset.

# 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("scrapesage/fec-campaign-finance-scraper").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("scrapesage/fec-campaign-finance-scraper").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 '{}' |
apify call scrapesage/fec-campaign-finance-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "FEC Campaign Finance Scraper - Donors, PACs & Lobbying",
        "description": "Scrape US federal campaign finance from the FEC: donors (name, employer, occupation, ZIP, amount), PACs, candidates, disbursements, independent expenditures & filings - plus Senate lobbying disclosures. Filter by name, employer, state or committee. Monitor mode. Export JSON, CSV, Excel.",
        "version": "0.1",
        "x-build-id": "GQ99IDUBPiIzl7RzV"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~fec-campaign-finance-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-fec-campaign-finance-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapesage~fec-campaign-finance-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-fec-campaign-finance-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapesage~fec-campaign-finance-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-fec-campaign-finance-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "What to scrape",
                        "enum": [
                            "contributions",
                            "candidates",
                            "committees",
                            "disbursements",
                            "independentExpenditures",
                            "filings",
                            "lobbying"
                        ],
                        "type": "string",
                        "description": "Which dataset to extract. FEC modes need a free api.data.gov key (see fecApiKey). The 'lobbying' mode uses the keyless US Senate LDA database and works out of the box.",
                        "default": "contributions"
                    },
                    "fecApiKey": {
                        "title": "FEC API key (api.data.gov)",
                        "type": "string",
                        "description": "Free key from https://api.data.gov/signup (1,000 req/hour). Required for all FEC modes; not used by the 'lobbying' mode. Leave as DEMO_KEY to try the actor, but DEMO_KEY is rate-limited to ~40 req/hour and shared — get your own free key for real runs.",
                        "default": "DEMO_KEY"
                    },
                    "searchQuery": {
                        "title": "Search query (name)",
                        "type": "string",
                        "description": "Name to search. For 'candidates' it matches candidate name; for 'committees' it matches committee/PAC name. Ignored by other modes (use the specific filters below)."
                    },
                    "contributorName": {
                        "title": "Contributor / donor name",
                        "type": "string",
                        "description": "contributions mode: full or partial donor name (person or organization), e.g. 'Smith' or 'John Smith'."
                    },
                    "contributorEmployer": {
                        "title": "Contributor employer",
                        "type": "string",
                        "description": "contributions mode: filter donors by employer, e.g. 'Google' or 'Goldman Sachs'."
                    },
                    "contributorOccupation": {
                        "title": "Contributor occupation",
                        "type": "string",
                        "description": "contributions mode: filter donors by occupation, e.g. 'attorney', 'physician', 'CEO'."
                    },
                    "recipientName": {
                        "title": "Disbursement recipient name",
                        "type": "string",
                        "description": "disbursements mode: filter by the payee/recipient name a committee paid, e.g. a vendor or consultant."
                    },
                    "committeeId": {
                        "title": "Committee ID (FEC)",
                        "type": "string",
                        "description": "FEC committee ID (e.g. C00401224). Scopes contributions, disbursements, independent expenditures or filings to one committee/PAC/campaign."
                    },
                    "candidateId": {
                        "title": "Candidate ID (FEC)",
                        "type": "string",
                        "description": "FEC candidate ID (e.g. P00000001, H4MI03185, S0...). Scopes independent expenditures or filings to one candidate."
                    },
                    "office": {
                        "title": "Office (candidates)",
                        "enum": [
                            "",
                            "H",
                            "S",
                            "P"
                        ],
                        "type": "string",
                        "description": "candidates mode: restrict to an office.",
                        "default": ""
                    },
                    "state": {
                        "title": "State (2-letter)",
                        "type": "string",
                        "description": "Two-letter state code (e.g. CA, TX, NY). Filters candidates by state, committees by state, and contributions by the donor's state."
                    },
                    "party": {
                        "title": "Party (candidates)",
                        "type": "string",
                        "description": "candidates mode: 3-letter party code, e.g. DEM, REP, LIB, IND, GRE."
                    },
                    "cycle": {
                        "title": "Election cycle",
                        "type": "integer",
                        "description": "Even-numbered two-year cycle, e.g. 2026, 2024, 2022. Applies to candidates and independent expenditures."
                    },
                    "twoYearTransactionPeriod": {
                        "title": "Transaction period (contributions/disbursements)",
                        "type": "integer",
                        "description": "Even-numbered year that anchors a 2-year transaction period for contributions and disbursements (e.g. 2026 covers 2025-2026). Defaults to 2026 if left blank."
                    },
                    "supportOppose": {
                        "title": "Support / oppose (independent expenditures)",
                        "enum": [
                            "",
                            "S",
                            "O"
                        ],
                        "type": "string",
                        "description": "independentExpenditures mode: keep only spending that supports or opposes the candidate.",
                        "default": ""
                    },
                    "minAmount": {
                        "title": "Minimum amount (USD)",
                        "type": "integer",
                        "description": "Only keep contributions / disbursements / independent expenditures at or above this dollar amount."
                    },
                    "maxAmount": {
                        "title": "Maximum amount (USD)",
                        "type": "integer",
                        "description": "Only keep records at or below this dollar amount."
                    },
                    "minDate": {
                        "title": "From date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Earliest receipt/disbursement/expenditure date to include (FEC schedule modes), e.g. 2025-01-01."
                    },
                    "maxDate": {
                        "title": "To date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Latest receipt/disbursement/expenditure date to include (FEC schedule modes), e.g. 2026-06-30."
                    },
                    "registrantName": {
                        "title": "Lobbying registrant (firm)",
                        "type": "string",
                        "description": "lobbying mode: filter by the lobbying firm / registrant name, e.g. 'Akin Gump'."
                    },
                    "clientName": {
                        "title": "Lobbying client",
                        "type": "string",
                        "description": "lobbying mode: filter by the client the lobbyist works for, e.g. 'Amazon', 'Pfizer'."
                    },
                    "lobbyistName": {
                        "title": "Lobbyist name",
                        "type": "string",
                        "description": "lobbying mode: filter by an individual lobbyist's name."
                    },
                    "issueCode": {
                        "title": "Lobbying issue code",
                        "type": "string",
                        "description": "lobbying mode: 3-letter general issue area code, e.g. HCR (health), TAX, DEF, ENV, TEC. See the README for the full list."
                    },
                    "filingYear": {
                        "title": "Lobbying filing year",
                        "type": "integer",
                        "description": "lobbying mode: filing year, e.g. 2026, 2025, 2024. Defaults to 2026 if left blank."
                    },
                    "filingType": {
                        "title": "Lobbying filing type",
                        "enum": [
                            "",
                            "registration",
                            "report",
                            "amendment",
                            "termination"
                        ],
                        "type": "string",
                        "description": "lobbying mode: restrict to a filing type.",
                        "default": ""
                    },
                    "startUrls": {
                        "title": "Start URLs (optional)",
                        "type": "array",
                        "description": "Optional fec.gov candidate/committee URLs or lda.senate.gov filing URLs to scrape directly. Auto-detected and routed; overrides the search filters for those records.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "includeCandidateTotals": {
                        "title": "Include candidate financial totals",
                        "type": "boolean",
                        "description": "candidates mode: add receipts, disbursements, cash-on-hand and debts for each candidate's current cycle (one extra request per candidate).",
                        "default": true
                    },
                    "includeCommitteeDetails": {
                        "title": "Include committee contact details",
                        "type": "boolean",
                        "description": "committees mode: fetch the full committee record (treasurer, email, website, phone, full address) for each result (one extra request per committee). This is the lead-gen data.",
                        "default": true
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of records to return for this run.",
                        "default": 200
                    },
                    "monitorMode": {
                        "title": "Monitor mode (only new records)",
                        "type": "boolean",
                        "description": "Remember records seen in previous runs (in a named key-value store) and emit only records that are new since last run. Ideal for daily Schedules that track new donors, filings or lobbying activity. Does not conflict with Apify Schedules.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy used for outbound requests. The default Apify Proxy is recommended for stable, retried requests; the gov APIs have no anti-bot.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
