Openfec Search Contributions
openfec_search_contributionsSearch itemized individual contributions (Schedule A) or get aggregate breakdowns by size, state, employer, or occupation. Use to answer "who is funding this committee?" Itemized mode requires a committee_id. Aggregate by_size/by_state can use candidate_id instead.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Query mode. "itemized" returns individual contribution records (keyset pagination). "by_size" aggregates by contribution size bucket. "by_state" aggregates by contributor state. "by_employer" aggregates by employer. "by_occupation" aggregates by occupation. | itemized |
| page | No | Page number (1-indexed) for aggregate modes. Explicit page is rejected in itemized mode, which paginates with cursor. Defaults to 1 for aggregates. | |
| sort | No | Sort field. A "-" prefix sorts descending: use "-contribution_receipt_amount" for the largest receipts first, since the ascending form leads with the most negative rows (refunds, reattributions, redesignations). Itemized only; OpenFEC sorts by "-contribution_receipt_date" when omitted. | |
| cycle | No | Two-year election cycle (e.g., 2024). Even years only. Defaults to current cycle for itemized mode. | |
| cursor | No | Opaque pagination cursor from a previous response of this tool. Itemized mode only (keyset pagination). Valid only for an otherwise-identical call — changing any other argument, including sort, rejects the cursor; omit it to start over. | |
| max_date | No | Latest contribution date (YYYY-MM-DD). Itemized only. | |
| min_date | No | Earliest contribution date (YYYY-MM-DD). Itemized only. | |
| per_page | No | Results per page. Itemized mode sends at most 30 upstream, keeping the response under a 100,000-byte budget; a page bounded below your request reports truncated and cap, and next_cursor continues it. | |
| max_amount | No | Maximum contribution amount in dollars. Itemized only. | |
| min_amount | No | Minimum contribution amount in dollars. Itemized only. | |
| candidate_id | No | Candidate ID (e.g., P00003392). Get IDs from openfec_search_candidates results. Enables by_size and by_state aggregates without a committee_id. | |
| committee_id | No | Receiving committee ID (e.g., C00703975). Get IDs from openfec_search_committees results. | |
| is_individual | No | Only individual contributions (excludes committee-to-committee transfers). Itemized only. | |
| contributor_zip | No | ZIP code prefix (starts-with match). Itemized only. | |
| contributor_city | No | Contributor city. Itemized only. | |
| contributor_name | No | Full-text donor name search. Itemized only. | |
| contributor_state | No | Two-letter state code (e.g., CA). Itemized only. | |
| contributor_employer | No | Full-text employer search. Itemized only. | |
| contributor_occupation | No | Full-text occupation search. Itemized only. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| cap | No | The per_page this call applied in place of the one requested — the page-size ceiling for this tool and scope. Present only when truncated is true. | |
| mode | No | Query mode as the server resolved it. "by_size" and "by_state" resolve to "by_size_candidate" / "by_state_candidate" when scoped by candidate_id — a different endpoint with different row shapes — so read this rather than assuming the mode you sent. | |
| count | No | Total matching contributions (itemized mode). Check count_is_approximate before quoting it as a figure. | |
| error | No | Present when the call failed. Absent on success. | |
| shown | No | Rows in this page. Present only when truncated is true. | |
| notice | No | Guidance when the response needs context: how to broaden a search that matched nothing, which requested position ran out when contributions did match, that the total is an estimate, or that the page was bounded below the per_page requested and how to continue. | |
| results | No | Contribution result set; itemized records or aggregate buckets depending on mode. | |
| committee | No | The committee every row in this response belongs to, carried once instead of repeated in each row. Present only when the query was scoped to a single committee_id; otherwise each row keeps its own committee object. | |
| truncated | No | True when this page holds fewer rows than the per_page requested because a full page would exceed the 100,000-byte response budget, and more rows remain. Absent on a complete page, including a naturally short last page. | |
| pagination | No | Page-based pagination info (aggregate modes only). | |
| totalCount | No | Total matching contributions or aggregate rows. | |
| next_cursor | No | Pagination cursor for the next page of itemized results. Null when no more pages. | |
| search_criteria | No | Echo of the search filters this call applied, as the server parsed them, minus paging arguments. Always present — compare it against what you sent to confirm every filter was honoured. | |
| count_is_approximate | No | True when OpenFEC reports count as an estimate rather than a tally, which it does on its highest-volume queries. Absent means the count is a tally. |