KeyVex
Campaign finance & influence

Campaign Contributions

Returns FEC Schedule A contribution data — money flowing INTO federal committees — in aggregated form: totals by employer, state, candidate, committee, or cycle, plus a top-donor leaderboard. Individual contributions are served as aggregates only (no per-record name search, no contact info), the presentation the FEC's sale-or-use rule (11 CFR 104.15) explicitly permits.

EndpointGET /v1/fec-contributions
SourceFEC Schedule A
Authx-api-key — a free key works

What it returns

Three modes, one endpoint:

Filters

group_byAggregate mode: employer | state | candidate | committee | cycle. employer/state require recipient_committee_id + cycle (the FEC computes those per committee); cycle requires candidate_id or recipient_committee_id.
leaderboardLeaderboard mode: top individual donors (name + employer + summed total). Requires cycle + exactly one scope: recipient_committee_id | candidate_id | contributor_state | contributor_employer.
recipient_committee_idFEC committee ID (e.g., 'C00401224'). Aggregate/leaderboard scope, or per-record filter. Use the FEC Candidates dataset to find a candidate's principal committee.
candidate_idFEC candidate ID (e.g., 'S8GA00180'). Aggregate/leaderboard scope, or per-record filter.
contributor_state2-letter state code. Leaderboard scope (top donors from a state) or per-record filter.
contributor_employerEmployer name. Leaderboard scope only — top donors reporting this employer.
entity_typePer-record mode — NON-INDIVIDUAL types only: COM, CCM, PAC, PTY, CAN, ORG. Individual (IND) rows are served aggregated only.
sub_idPer-record direct lookup by FEC sub_id (returned only for non-individual rows).
cycleElection cycle year (2-year transaction period). Common values: 2026, 2024, 2022.
min_amountLeaderboard: itemization floor for aggregated rows (default 1000; 200 = FEC itemization floor). Per-record: inclusive lower bound on amount.
max_amountPer-record mode: inclusive upper bound on amount.
since / untilPer-record mode: bounds on contribution_receipt_date (YYYY-MM-DD).
exclude_memosPer-record mode: when true (DEFAULT), filters memoed_subtotal duplicates that double-count dollars. Leaderboards always exclude them.
sort_by / sort_orderPer-record mode sort. Default: contribution_receipt_date desc.
limitMax rows / donors to return. Default 50 (leaderboard 100), max 500.

Example request

curl "https://api.keyvex.com/v1/fec-contributions?group_by=candidate&cycle=2026&limit=1" \
  -H "x-api-key: YOUR_KEY"

Response

{
  "results": [
    {
      "group_by": "candidate",
      "cycle": 2026,
      "key": "S8GA00180",
      "label": "OSSOFF, T. JONATHAN",
      "candidate_id": "S8GA00180",
      "candidate_name": "OSSOFF, T. JONATHAN",
      "party": "DEM",
      "office": "S",
      "total_amount": 81146109.47,
      "contribution_count": null,
      "individual_itemized_contributions": 28672552.7,
      "disbursements": 52973406.68,
      "cash_on_hand": 32504436.28,
      "source_url": "https://www.fec.gov/data/candidate/S8GA00180/?cycle=2026",
      "scraped_at": "2026-07-15T18:20:11.000Z"
    }
  ],
  "count": 1,
  "has_more": true,
  "source": "live"
}

Example questions you can answer

Related datasets

Query Campaign Contributions from your AI

Hand any AI your key + the OpenAPI spec and it can pull this dataset directly. Free key = full data, 60 requests/day.

Get a free key OpenAPI spec → REST docs →
← All 60+ datasets