Campaign finance & influence

FEC Disbursements (Schedule B)

Itemized committee DISBURSEMENTS, the money-OUT counterpart to Schedule A contributions. Itemized payments a federal committee reports to organisations: vendor payments, media buys, consulting firms, polling, payroll services, rent, and committee-to-committee transfers, with payee name/city/state, purpose category, amount, and date. Rows naming a natural person, individual payees (including refunds to individual contributors), candidates, unclassified payees, and people a filer coded as an organisation, are withheld per record under the FEC sale-or-use rule (11 CFR 104.15). Queries run live against the FEC API (full itemized coverage for the current cycle) with a cached $1K+ subset as outage fallback. Note the reporting lag: disbursements surface when monthly or quarterly reports are FILED, up to ~50 days after the spend date.

EndpointGET /v1/fec-disbursements
SourceFEC Schedule B (api.open.fec.gov)
Authx-api-key, paid plans only (Basic and up)

Live from the data

Loading the latest numbers…

What it returns

One record per itemized disbursement to an organisation or committee (FEC sub_id); natural persons are withheld. memoed_subtotal rows are excluded by default (they double-count dollars), pass exclude_memos=false for the raw rows. spender_committee_id joins to FEC candidate/committee profiles. See the live example below for the full field set.

Filters

sub_idFEC sub_id (globally unique row ID). Direct doc lookup, fastest.
spender_committee_idFEC committee ID doing the spending (e.g., 'C00580100'). Use get_fec_candidate_profile to find the principal committee for a candidate.
recipient_nameCase-insensitive substring against the payee's filed name (vendor, consulting firm or committee, natural persons are withheld, so a person's name returns nothing). Substring filter (client-side on the cached path).
candidate_idFEC candidate ID tied to the disbursement (e.g., 'S6PA00091'). NOTE: only populated on candidate-linked rows; most vendor payments carry no candidate_id, prefer spender_committee_id for a campaign's full spending picture.
recipient_state2-letter US state code of the recipient (e.g., 'CA', 'TX').
disbursement_purpose_categoryFEC's normalized purpose bucket (e.g., 'ADVERTISING', 'CONSULTING', 'CONTRIBUTIONS', 'FUNDRAISING', 'TRANSFERS', 'TRAVEL', 'PAYROLL', 'OTHER').
entity_typeRecipient entity type code, ORGANISATION types only: COM (committee), CCM (candidate committee), PAC, PTY (party), ORG (organization, most vendors). IND (individual), CAN (candidate, a natural person) and UNK (unclassified) are not accepted: those rows are withheld under 11 CFR 104.15.
min_amountInclusive lower bound on disbursement_amount in dollars. KeyVex's cached subset holds $1,000+ rows; live queries cover every itemized row.
max_amountInclusive upper bound on disbursement_amount.
sinceInclusive lower bound on disbursement_date (YYYY-MM-DD).
untilInclusive upper bound on disbursement_date (YYYY-MM-DD).
cycleElection cycle year (2-year transaction period). Common values: 2026, 2024, 2022.
exclude_memosWhen true (DEFAULT), filters out rows flagged memoed_subtotal=true, FEC's aggregate / subtotal duplicates that double-count the same dollars across multiple rows. Pass exclude_memos=false to include them (useful for matching FEC's own raw row counts).
sort_bySort key. Default: disbursement_date.
sort_orderDefault: desc (most recent / largest first).
limitMaximum disbursements to return. Default 50, max 500.

Example request

curl "https://api.keyvex.com/v1/fec-disbursements?sub_id=4022320261311748072" \
  -H "x-api-key: YOUR_KEY"

Response

{
  "results": [
    {
      "sub_id": "4022320261311748072",
      "disbursement_amount": 1141.46,
      "disbursement_date": "2026-01-26",
      "disbursement_date_source": null,
      "date_corrected": false,
      "date_correction_basis": null,
      "disbursement_description": "PROCESSING FEE",
      "disbursement_purpose_category": "OTHER",
      "disbursement_type": "",
      "disbursement_type_description": "",
      "recipient_name": "ANEDOT",
      "recipient_city": "NEW ORLEANS",
      "recipient_state": "LA",
      "recipient_zip": "70112",
      "recipient_committee_id": "",
      "spender_committee_id": "C00027466",
      "spender_committee_type": "Y",
      "spender_committee_designation": "U",
      "spender_committee_org_type": "",
      "beneficiary_committee_name": "",
      "candidate_id": "",
      "candidate_name": "",
      "candidate_office": "",
      "candidate_office_state": "",
      "candidate_office_district": "",
      "payee_first_name": "",
      "payee_last_name": "",
      "entity_type": "ORG",
      "entity_type_desc": "ORGANIZATION",
      "category_code": "",
      "election_type": "",
      "fec_election_year": null,
      "two_year_transaction_period": 2026,
      "report_type": "M2",
      "report_year": null,
      "file_number": 1949363,
      "line_number": "21B",
      "line_number_label": "Other Federal Operating Expenditures",
      "transaction_id": "SB21B.I576592",
      "image_number": "202602209837787748",
      "pdf_url": "https://docquery.fec.gov/cgi-bin/fecimg/?202602209837787748",
      "memo_text": "",
      "memo_code": "",
      "memoed_subtotal": false,
      "original_sub_id": "",
      "amendment_indicator": "A",
      "filing_form": "F3X",
      "load_date": "2026-02-24T02:36:07",
      "source_url": "https://www.fec.gov/data/disbursements/?committee_id=C00027466&data_type=processed",
      "scraped_at": "2026-07-09T18:16:14.032Z"
    }
  ],
  "count": 1,
  "has_more": false
}

Example questions you can answer

Related datasets

Query FEC Disbursements (Schedule B) from your AI

Hand any AI your key + the OpenAPI spec and it can pull this dataset directly. Paid plans only (Basic and up): a free key does not include this dataset.

See plans OpenAPI spec → REST docs →
← All 60+ datasets