Congress.gov API
active Ingestion health: delivering Legislative · Tier 1 · API · Library of Congress
Official site (opens in a new tab) · All sources
What this source is
The Library of Congress's official API for structured legislative data: committee meetings with witnesses and documents, nominations, treaties, bill actions and cosponsors, House roll-call votes (beta), daily Congressional Record metadata, and CRS reports. Fills the committee-activity and nominations coverage the pipeline currently lacks entirely.
Identity and registry record
- Registry id
congress-gov-api- Agency / parent organization
- Library of Congress
- Branch
- legislative
- Type
- API
- Status
- active
- Tier
- 1
- URL (home)
- https://github.com/LibraryOfCongress/api.congress.gov (opens in a new tab)
- URL (index)
- https://api.congress.gov/v3/bill (opens in a new tab)
- Registered
- 2026-07-28
- Registry notes
- Documented rate limit 5,000 req/hour — far above our §4 posture. Endpoint docs read from the official LoC GitHub repo 2026-07-28 (incl. CommitteeMeetingEndpoint.md, CRSReportEndpoint.md). The crsreport endpoint is registered separately as crs-reports. Senate votes are NOT here (House only) — see senate-xml. Gate 3 (2026-07-31, live through the identified client, ONE endpoint only): the api.data.gov key we already hold authenticates here (200 with data), and /v3/bill answers JSON. What the source publishes in total vs what we see: the endpoint enumerates 429,331 bill records across all Congresses and exposes, per record, ONLY the measure's identity and its LATEST action — not the full action history, not cosponsors, not text; the committee-meeting, nomination, treaty and beta House-roll-call endpoints this entry also describes are NOT ingested and stay future work. Volume measured: 749 records were updated across 2026-07-30 and 350 by 19:20 ET on 07-31, against a page of 250 per poll and an hourly collector — roughly 8x headroom on the observed ~31/hour update rate, with the loop's dedupe accumulating a day across polls; a burst of >250 updates inside one poll interval is the one loss case and is not currently detected. Three limits disclosed rather than papered over: (a) actionDate (when it happened) is not updateDate (when the record changed) — 250 records all updated 07-31 carried actions from 1997 to 07-30, so items are dated and bounded by actionDate; (b) the record is published the morning AFTER the action (0 actions dated 07-31 anywhere on the page; 97 dated 07-30; the bulk of a day's actions entered between 08:00 and 12:00 UTC the next day), so BILLACTIONS is dated by the publisher like govinfo collections and the lag is a standing digest disclosure; (c) two actions on one bill on one day collapse to a single item, because only the latest is exposed. The cited link is the www.congress.gov bill page, which answers 403 to our identified client (verified on three bill URLs) — hence wants_article() is False: we ingest what the API offers and never force what the website refuses. Sending sort as a pre-encoded 'updateDate%2Bdesc' made the service return ASCENDING order (records from 1995), so the parameter is passed with a literal space and the order is verified by reading dates, never assumed.
How we ingest it
- Channel
- API
- Method
- Conditional GET of one page of the bill endpoint per poll (limit=250, sort=updateDate+desc, api.data.gov key in request PARAMETERS so the fetch log redacts it). The congress-bill-actions adapter emits one item per bill whose latestAction.actionDate falls inside config.INDEX_LOOKBACK_DAYS and never fetches an article page. Stored under the BILLACTIONS collection (GUIDE §3 bill actions), dated by the publisher's actionDate, never AGENCYPR.
- Adapter
- congress-bill-actions
- Poll cadence
- about every 60 minutes while the collector runs
- Request budget
- the agency class: at most 1,500 requests per day shared across every agency web source, counted from the fetch log (failed requests count too)
- Politeness
- robots.txt is honored as observed — including each host's crawl-delay, exactly — and every request identifies itself as fapd/0.1 (Free Agentic Publication Digester; +https://fapd.info/bot.html; contact: hustleyourcity@gmail.com); a refusal is recorded, never evaded
- Capture and hash
- captured raw content is hashed (SHA-256) into the day's committed provenance manifest, hash-chained day to day (PROVENANCE.md)
Ingestion health
Ingestion health: delivering 116 item(s) in the last 14 days; most recent 2026-07-30; 4 of 122 request(s) to api.congress.gov returned no content.
This label has held since 2026-08-03T18:46:01Z (UTC) and was last re-checked 2026-08-03T19:51:47Z (UTC).
Counts are of our own requests, retries included. A 4xx or 5xx is the server declining to return content — that may be load, maintenance, on-demand generation, or a limit the publisher sets, and we cannot tell which from outside. Nothing here is a measurement of the publisher.
Ingestion statistics
These figures describe this project's ingestion of this source — items we recorded and requests we made — and nothing else. They are not a measurement of the publisher.
Last 24 hours
Last 24 hours: 24 request(s) (23 answered, 1 returned no content) · 2 item(s) ingested
Last 14 days
Items ingested: 116 in 14 days (8.29 per day) · most recent 2026-07-30
Content length: 467 characters average, 446 median (shortest 291, longest 872)
Delivery mode: feed-only — the feed's own summary — the source publishes no more than this through this channel
Our requests to api.congress.gov: 122 request(s) · 118 answered · 4 declined (4xx) · 0 server declined (5xx) · 0 no response — 3.3% returned no content
last answered request 2026-08-03T19:42:14.150+00:00 UTC.
116 item(s) in the last 14 days; most recent 2026-07-30; 4 of 122 request(s) to api.congress.gov returned no content.
All time
Our requests to api.congress.gov, all time (since 2026-08-01): 122 request(s) · 118 answered · 4 returned no content
Request counts begin 2026-07-30, the day this service went into production; earlier development-machine traffic is excluded. Counts before 2026-08-03 include unmarked source-probe traffic; probes are labeled and excluded thereafter.
Last 30 days, day by day
| Day | requests |
|---|---|
| 2026-07-30 | 0 |
| 2026-07-31 | 0 |
| 2026-08-01 | 46 |
| 2026-08-02 | 55 |
| 2026-08-03 | 21 |
| Day | items |
|---|---|
| 2026-07-05 | 0 |
| 2026-07-06 | 0 |
| 2026-07-07 | 0 |
| 2026-07-08 | 0 |
| 2026-07-09 | 0 |
| 2026-07-10 | 0 |
| 2026-07-11 | 0 |
| 2026-07-12 | 0 |
| 2026-07-13 | 0 |
| 2026-07-14 | 0 |
| 2026-07-15 | 0 |
| 2026-07-16 | 0 |
| 2026-07-17 | 0 |
| 2026-07-18 | 0 |
| 2026-07-19 | 0 |
| 2026-07-20 | 0 |
| 2026-07-21 | 0 |
| 2026-07-22 | 0 |
| 2026-07-23 | 0 |
| 2026-07-24 | 0 |
| 2026-07-25 | 0 |
| 2026-07-26 | 0 |
| 2026-07-27 | 9 |
| 2026-07-28 | 3 |
| 2026-07-29 | 7 |
| 2026-07-30 | 97 |
| 2026-07-31 | 0 |
| 2026-08-01 | 0 |
| 2026-08-02 | 0 |
| 2026-08-03 | 0 |
| Day | ms |
|---|---|
| 2026-07-30 | — |
| 2026-07-31 | — |
| 2026-08-01 | 288 |
| 2026-08-02 | 274 |
| 2026-08-03 | 620 |