# US Committee Finance Records — FEC Summaries (`nexgensignal/us-committee-finance-records`) Actor

Keyless, pay-per-record FEC committee-summary data. One row per committee — id, name, type, receipts, disbursements, contributions by source, cash on hand, expenditures. Committee summaries ONLY (no contributor files); public domain; no person data.

- **URL**: https://apify.com/nexgensignal/us-committee-finance-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 committee summary records

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

## US Committee Finance Records — FEC Summaries

**Keyless. Pay per record. Every federal political committee's filed financial position — committee summaries only, no donors.**

This actor turns the **US Federal Election Commission (FEC)** bulk committee-summary file into clean, per-committee records — the official filed financial position of every federal political committee. Each run reads the FEC's keyless bulk download and delivers one row per committee: its ID, name, and type, and its aggregate financial figures — total receipts and disbursements, contributions by source, loans, cash on hand, debts, and independent and coordinated expenditures. Committee grain, structured for engineering use, in the public domain, with a **hard scope: only the committee-summary file is read — the individual-contribution files are never fetched, joined, or emitted, and no donor, treasurer, address, or contact data appears.**

### What this is, in one paragraph

Federal political committees file periodic reports with the FEC, and the FEC publishes committee-level financial **summaries** as a bulk file. This actor reads that file and flattens each committee into a single analysis-ready record: the committee ID, name, type, and designation, the filing frequency, and the aggregate financial figures for the cycle — total receipts, transfers from affiliates, individual and other-committee and candidate contributions, loans, total disbursements, refunds, cash on hand at the beginning and close, debts owed, non-federal transfers, contributions to other committees, and independent and party-coordinated expenditures. It is the financial-health layer of federal committees. Values are exactly as filed. You are billed only for records actually delivered.

### Who buys this and for what job

- **Political-finance analysts, compliance teams, and researchers** tracking committee financial positions and money flows at the committee level.
- **Journalism and watchdog products** surfacing committee receipts, spending, and cash on hand as clean rows.
- **Data and civic-tech teams** building committee-finance dashboards without a person-level contributions dump.
- **Data engineers** who want the FEC committee summaries parsed and labelled without handling the pipe-delimited bulk file by hand.

### Public-domain data — public-inspection posture

Two riders travel on every record. First, **licensing**: FEC bulk data is public-inspection disclosure data of the US federal government — no copyright, public domain — free to reuse, including commercially, with attribution to the FEC. One important FEC rule is stated plainly: contributor information may not be used to solicit contributions or for commercial purposes — which is exactly why this actor emits **committee summaries only** and never touches the contributor files. Second, **fitness**: these are filed financial positions as disclosed by the committee — not a political characterization and not an audit. The listing and the records carry no political framing in either direction.

### Hard scope — committee summaries only, never contributions

This is the defining property of this actor. The FEC publishes many bulk files; this actor reads **only** the committee-summary ("webk") file and has **no code path** to the itemized individual-contribution, other-transaction, or operating-expenditure files. The committee-summary file carries **no person field** — the committee name is an organisation, and there is no treasurer, donor, address, or contact column in it. A person-key guard runs on every record as a backstop, and the acceptance suite asserts that even a treasurer or street field injected into a row can never appear in output. The result is aggregate committee financials with no person-level data by construction.

### Pricing

| Event | Free plan | Bronze | Silver | Gold / Platinum / Diamond |
|-------|-----------|--------|--------|---------------------------|
| `committee_summary_record` | $0.05 | $0.045 | $0.04 | $0.0335 |

Delivered before charged. Blocked runs and empty results cost nothing.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `committeeType` | string | — | Optional. Keep only committees of this FEC type code (e.g. Q qualified PAC, N non-qualified PAC, P presidential, H house, S senate). |
| `nameContains` | string | — | Optional. Keep only committees whose name contains this text. |
| `maxRecords` | integer | 500 | Ceiling on records delivered and billed. |

### Output

One JSON object per committee. Real example (values as filed):

```json
{
  "record_id": "C00000059:07/31/2026",
  "committee_id": "C00000059",
  "committee_name": "HALLMARK CARDS, INC. PAC (HALLPAC)",
  "committee_type": "Q",
  "committee_designation": "B",
  "cycle": 2026,
  "total_receipts": 66416.81,
  "individual_contributions": 61416.81,
  "total_disbursements": 100500,
  "cash_on_hand_beginning": 144285.41,
  "cash_on_hand_close": 110202.22,
  "contributions_to_other_committees": 80500,
  "coverage_end_date": "07/31/2026",
  "source": "US Federal Election Commission (FEC) committee summary",
  "licence": "US Federal Election Commission (FEC) ... COMMITTEE SUMMARIES ONLY, no contributor data ...",
  "disclaimer": "Committee financial-summary records ... the individual-contribution files are never fetched, joined, or emitted ...",
  "observed_at": "2026-08-22T00:00:00Z"
}
```

An unbilled `RUN_RECEIPT` records the robots check, the resolved cycle file, the filters, rows seen and delivered, and whether charged equals delivered — plus a notice that only the committee-summary file is read.

### Field reference

Each record is one committee. Identity: `record_id` (committee id + coverage date), `committee_id`, `committee_name`, `committee_type`, `committee_designation`, `filing_frequency`, and `cycle`. Receipts: `total_receipts`, `transfers_from_affiliated`, `individual_contributions`, `other_committee_contributions`, `candidate_contributions`, `candidate_loans`, and `total_loans_received`. Disbursements: `total_disbursements`, `transfers_to_affiliated`, `individual_refunds`, `other_committee_refunds`, `candidate_loan_repayments`, `loan_repayments`, `contributions_to_other_committees`, `independent_expenditures`, and `party_coordinated_expenditures`. Position: `cash_on_hand_beginning`, `cash_on_hand_close`, `debts_owed_by`, and `nonfederal_transfers_received`. Coverage: `coverage_end_date`. Provenance: `source`, `source_url`, `licence`, `attribution`, `disclaimer`, and `observed_at`.

### How a run works

A run first re-reads the source host's robots posture from your runtime — the FEC host, whose Disallows scope only its `/data/` web pages, leaving the `/files/bulk-downloads/` path clear — and stops at the door if that ever changes. It resolves the committee-summary file for the current two-year cycle, downloads it once, parses the pipe-delimited rows (which have no header) against the documented committee-summary layout, applies your optional type and name filters, and flattens each committee to one record — reading **only** committee-summary fields, never a contributor or contact field — delivered **before** it is charged, so a blocked or empty run costs you nothing. The actor stops at your `maxRecords` ceiling and records `charge_equals_delivered` in the receipt.

### Coverage and scope

The committee-summary file holds on the order of **12,500+ committees** for the current cycle. Because each record carries the `committee_type` and `cycle`, segmenting by committee type and comparing across cycles is straightforward, and the aggregate figures support money-flow analysis at the committee level. Pull one committee type, or the whole file to seed a committee-finance table.

### Cost guidance

One `committee_summary_record` per delivered committee: cost = committees delivered × your plan's per-record price. Scope with `committeeType` or `nameContains` to keep runs bounded. The whole file is ~12,500 committees; 1,000 committees is **$50** (Free) / **$33.50** (Gold).

### Honest limitations

- **Committee summaries only.** By design, this actor reads only the committee-summary file; the itemized individual-contribution files are never fetched, joined, or emitted.
- **As filed.** Figures are as disclosed by the committee for the coverage period; this actor reformats and labels, it does not audit.
- **Not a characterization.** The data carries no political framing; it is filed financial facts.
- **No person data** of any kind.

### Differentiation

This is a **distinct FEC job** within a cross-fleet family. The NexGenData fleet already ships **fec-campaign-finance-intelligence** (individual donor **contributions** — person-level, from the openFEC API) and **fec-independent-expenditures** (Schedule E **PAC spending** for or against candidates). This actor is a different layer on a different file: the **committee-level financial summaries** — a committee's total receipts, disbursements, and cash position — with no person-level data at all. Contributions answer "who gave"; independent expenditures answer "who spent for/against a candidate"; this answers "what is this committee's overall financial position." Three different jobs, named here so buyers pick the right one.

### The NexGen Signal family

Part of the NexGen Signal family of pay-per-record data products:

- [US Credit Union Financial Records — NCUA Call Report](https://apify.com/nexgensignal/us-credit-union-financial-records)
- [US Hospital Ownership Records — CMS Owner Edges](https://apify.com/nexgensignal/us-hospital-ownership-records)
- [Treasury Fiscal Records — Rates & Debt](https://apify.com/nexgensignal/treasury-fiscal-records)
- [Grant Opportunity Records — US Grants.gov](https://apify.com/nexgensignal/grant-opportunity-records)
- [Organization Sanctions & LEI Risk](https://apify.com/nexgensignal/organization-sanctions-lei-risk)

*Source: US Federal Election Commission (FEC) bulk downloads (fec.gov). Public-inspection disclosure data of the US federal government, no copyright, public domain; free to reuse, including commercially, with attribution to the FEC. Committee summaries only; the individual-contribution files are never fetched, joined, or emitted, and no donor, treasurer, address, or contact data is present. Filed financial positions as disclosed, not a political characterization or an audit.*

# Actor input Schema

## `committeeType` (type: `string`):

Optional. Keep only committees of this FEC type code (e.g. Q qualified PAC, N non-qualified PAC, P presidential, H house, S senate).

## `nameContains` (type: `string`):

Optional. Keep only committees whose name contains this text.

## `maxRecords` (type: `integer`):

Maximum records delivered and billed.

## Actor input object example

```json
{
  "maxRecords": 500
}
```

# Actor output Schema

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

Delivered records.

# 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 = {
    "maxRecords": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/us-committee-finance-records").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 = { "maxRecords": 500 }

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/us-committee-finance-records").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 '{
  "maxRecords": 500
}' |
apify call nexgensignal/us-committee-finance-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/us-committee-finance-records"
        }
    }
}
```

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/Ixn9fELaaJOAMRS6g/builds/gsCfOFz3afkwFPlYR/openapi.json
