get_fec_disbursements
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).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| cycle | No | Election cycle year (2-year transaction period). Common values: 2026, 2024, 2022. | |
| limit | No | Maximum disbursements to return. Default 50, max 500. | |
| since | No | Inclusive lower bound on disbursement_date (YYYY-MM-DD). | |
| until | No | Inclusive upper bound on disbursement_date (YYYY-MM-DD). | |
| sub_id | No | FEC sub_id (globally unique row ID). Direct doc lookup, fastest. | |
| sort_by | No | Sort key. Default: disbursement_date. | |
| max_amount | No | Inclusive upper bound on disbursement_amount. | |
| min_amount | No | Inclusive lower bound on disbursement_amount in dollars. KeyVex's cached subset holds $1,000+ rows; live queries cover every itemized row. | |
| sort_order | No | Default: desc (most recent / largest first). | |
| entity_type | No | 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. | |
| candidate_id | No | 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. | |
| exclude_memos | No | 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). | |
| recipient_name | No | 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). | |
| recipient_state | No | 2-letter US state code of the recipient (e.g., 'CA', 'TX'). | |
| spender_committee_id | No | FEC committee ID doing the spending (e.g., 'C00580100'). Use get_fec_candidate_profile to find the principal committee for a candidate. | |
| disbursement_purpose_category | No | FEC's normalized purpose bucket (e.g., 'ADVERTISING', 'CONSULTING', 'CONTRIBUTIONS', 'FUNDRAISING', 'TRANSFERS', 'TRAVEL', 'PAYROLL', 'OTHER'). |