# FEC Schedule A Contributions Search

> FEC Schedule A Contributions Search is a paid API for AI agents from 2s.io, paid per call via x402, $0.0012/call, status unknown (last checked 2026-09-14).

Search and filter 264M+ itemized federal campaign contributions from FEC Schedule A filings by contributor, recipient, amount, date, cycle, and more.

## Facts

- Endpoint: GET https://2s.io/api/gov/fec-contributions
- Price: $0.0012/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/2s-io-ea690cd3
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_PX3lOR7pbnGs4GoND3fuA

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability 2s-io-ea690cd3
```

Example prompt: Pull all individual contributions over $2,500 to committee C00703975 from New York during the 2024 cycle, sorted by contribution amount descending — I'm trying to identify the biggest donors.

## When to prefer this

Use this endpoint when you need itemized federal campaign contribution data at the individual transaction level, especially for investigative research, donor profiling, employer/occupation breakdowns, or cycle-specific analysis. Prefer this over general political data APIs when you need FEC Schedule A specifics like aggregate YTD, receipt type, memo, and PDF filing links across 264M+ historical records.

## Known failure modes

- No results returned if committeeId or candidateId is invalid or has no filings
- Empty result set for very restrictive filter combinations (narrow date + amount + geography)
- Invalid twoYearTransactionPeriod (must be an even year) may return no results
- Pagination past available records returns empty results
- contributorName partial matching may miss variations in name spelling
- API returns error if required queryParams structure is malformed

## How this service works

Search FEC Schedule A — every itemized contribution to a federal political committee (>264M rows across all cycles). Filter by recipient committeeId or candidateId, contributor name / city / state / zip / employer / occupation, amount range, cycle (twoYearTransactionPeriod e.g. 2024), date range, isIndividual (true = individuals only; false = committee-to-committee). Sort by contribution date or amount, asc/desc. Requires at least one scope (committeeId, candidateId, twoYearTransactionPeriod cycle, or a date range) — an unscoped query scans every cycle and times out. The investigative-journalism + political-research goldmine: who gives, how much, when, working where, doing what. Each row carries the contribution receipt date, amount, contributor aggregate YTD, receipt type, memo, entity type, and link to the underlying PDF filing.

## Output

Returns a paginated list of itemized FEC Schedule A contribution records, each containing contributor name, employer, occupation, city, state, zip, contribution date, receipt amount, aggregate YTD, receipt type, memo text, entity type, and a link to the underlying PDF filing. Up to 100 results per page.

## Example request

```json
{
 "input": {
  "type": "http",
  "method": "GET",
  "queryParams": {
   "page": 1,
   "perPage": 25,
   "maxAmount": 50000,
   "minAmount": 1000,
   "sortField": "contribution_receipt_amount",
   "isIndividual": true,
   "sortDirection": "desc",
   "twoYearTransactionPeriod": 2024
  }
 }
}
```

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method",
    "queryParams"
   ],
   "properties": {
    "type": {
     "const": "http"
    },
    "method": {
     "const": "GET"
    },
    "queryParams": {
     "properties": {
      "page": {
       "type": "integer",
       "default": 1,
       "minimum": 1
      },
      "maxDate": {
       "type": "string"
      },
      "minDate": {
       "type": "string",
       "description": "YYYY-MM-DD."
      },
      "perPage": {
       "type": "integer",
       "default": 25,
       "maximum": 100,
       "minimum": 1
      },
      "maxAmount": {
       "type": "number"
      },
      "minAmount": {
       "type": "number"
      },
      "sortField": {
       "enum": [
        "contribution_receipt_date",
        "contribution_receipt_amount"
       ],
       "type": "string"
      },
      "candidateId": {
       "type": "string"
      },
      "committeeId": {
       "type": "string"
      },
      "isIndividual": {
       "type": "boolean"
      },
      "sortDirection": {
       "enum": [
        "asc",
        "desc"
       ],
       "type": "string",
       "default": "desc"
      },
      "contributorZip": {
       "type": "string"
      },
      "contributorCity": {
       "type": "string"
      },
      "contributorName": {
       "type": "string"
      },
      "contributorState": {
       "type": "string"
      },
      "contributorEmployer": {
       "type": "string"
      },
      "contributorOccupation": {
       "type": "string"
      },
      "twoYearTransactionPeriod": {
       "type": "integer",
       "description": "Even-year cycle."
      }
     }
    }
   }
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/2s-io-ea690cd3/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from 2s.io](https://www.zero.xyz/host/2s.io/llms.txt)
