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).
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "get_fec_disbursements"
}
}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'). |