Returns FEC Schedule B disbursements — itemized records of money flowing OUT of a federal committee to organisations: vendor payments, media / ad buys, consulting firms, payroll services, and committee-to-committee transfers
Returns FEC Schedule B disbursements — itemized records of money flowing OUT of a federal committee to organisations: vendor payments, media / ad buys, consulting firms, payroll services, and committee-to-committee transfers. The OUT-flow counterpart to get_fec_contributions (Schedule A, money IN). ORGANISATIONS ONLY: per-record rows are served only when FEC codes the payee as a committee or organisation (COM, CCM, PAC, PTY, ORG). Rows naming a natural person — individual payees (IND), candidates (CAN), 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). Refunds of contributions to individuals are withheld with them. Source: api.open.fec.gov/v1/schedules/schedule_b/ — the official FEC public-disclosure API. Live queries cover every itemized row; the cached fallback subset carries a $1,000+ ingestion floor (filters small-vendor / payroll noise). Publication-lag caveat: disbursements only surface when the spending committee FILES its report — monthly filers lag ~20 days, quarterly filers up to ~50 days after the spend. Short since/until windows on recent dates will miss rows whose reports haven't been filed yet. Killer query patterns: - What does candidate X's campaign spend money on? Pass spender_committee_id (their principal campaign committee from get_fec_candidate_profile). Sort by amount DESC for big spends. - Which campaigns pay consulting firm Y? Pass recipient_name='Y'. - Ad-spending patterns: disbursement_purpose_category='ADVERTISING' + cycle=2026 + sort_by=disbursement_amount DESC. - Money moving between committees: disbursement_purpose_category= 'TRANSFERS' — recipient_committee_id on each row names the receiving committee. Filter combinations note: server-side indexes support one equality filter (spender_committee_id / candidate_id / disbursement_purpose_category / recipient_state) combined with date or amount sort + cycle. Other filters (recipient_name substring, entity_type, exclude_memos) are applied client-side after a wider pre-fetch. Purpose categories (disbursement_purpose_category): ADVERTISING, CONSULTING, CONTRIBUTIONS, FUNDRAISING, PAYROLL (labeled 'SALARIES' on some rows), TRANSFERS, TRAVEL, ADMINISTRATIVE, MATERIALS, EVENTS, LOANS, REFUNDS, POLLING, OTHER. Memo rows: FEC tags certain aggregate / subtotal rows with memoed_subtotal=true. These DUPLICATE dollars already counted on other rows — KeyVex DEFAULTS to exclude_memos=true to show real money movement; pass exclude_memos=false to include the raw memo rows (e.g. for matching FEC's own row counts).
Request
- Base URL: https://api.keyvex.com
- URL: https://api.keyvex.com/v1/fec-disbursements
- Auth: API key in header x-api-key
Query parameters
FEC sub_id (globally unique row ID). Direct doc lookup, fastest.
FEC committee ID doing the spending (e.g., 'C00580100'). Use get_fec_candidate_profile to find the principal committee for a candidate.
Case-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).
FEC 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.
2-letter US state code of the recipient (e.g., 'CA', 'TX').
FEC's normalized purpose bucket (e.g., 'ADVERTISING', 'CONSULTING', 'CONTRIBUTIONS', 'FUNDRAISING', 'TRANSFERS', 'TRAVEL', 'PAYROLL', 'OTHER').
Recipient 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.
Inclusive lower bound on disbursement_amount in dollars. KeyVex's cached subset holds $1,000+ rows; live queries cover every itemized row.
Inclusive upper bound on disbursement_amount.
Inclusive lower bound on disbursement_date (YYYY-MM-DD).
Inclusive upper bound on disbursement_date (YYYY-MM-DD).
Election cycle year (2-year transaction period). Common values: 2026, 2024, 2022.
When 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 key. Default: disbursement_date.
Default: desc (most recent / largest first).
Maximum disbursements to return. Default 50, max 500.
Response
JSON envelope: { results: [...], count, has_more }.
Changes
No recorded changes to this operation across all 1 revision of this API.