incrediblecrab/crs-bill-summaries
US Bill and Resolution Summaries (Congressional Research Service) Every summary of a bill or resolution of the United States Congress that the Congressional Research Service (CRS) wrote and the Congress.gov API lists, from the 93rd Congress (1973-1974) on, with its text. CRS summarizes a measure when it is introduced and again at later actions, such as passing a chamber, so a bill can have several summaries; action_desc names the action. Nothing here is edited by hand. The… See the full description on the dataset page: https://huggingface.co/datasets/incrediblecrab/crs-bill-summaries.
US Bill and Resolution Summaries (Congressional Research Service)
Every summary of a bill or resolution of the United States Congress that the Congressional Research Service (CRS) wrote and the Congress.gov API lists, from the 93rd Congress (1973-1974) on, with its text. CRS summarizes a measure when it is introduced and again at later actions, such as passing a chamber, so a bill can have several summaries; action_desc names the action.
Nothing here is edited by hand. The pipeline, its tests and its schedule are in github.com/incrediblecrab/crs-service-products, and this card is rendered from manifest.json in the same commit.
Status
421,845 of 421,845 summaries (100.0%) as of 2026-09-26T00:28:58Z UTC, when the API last listed 421,845. 216 of 216 slices (one congress and bill type each) have been read in full.
Last complete sync: 2026-09-25T22:33:30Z UTC.
Listed is the API's count for the slices when they were last read in full or checked.
Use
from datasets import load_dataset
summaries = load_dataset("incrediblecrab/crs-bill-summaries", split="train")-- DuckDB, straight from the Hub: every summary of H.R. 1 of the 119th Congress, oldest first
SELECT version_code, action_date, action_desc, text FROM 'hf://datasets/incrediblecrab/crs-bill-summaries/data/*.parquet' WHERE congress = 119 AND bill_type = 'hr' AND bill_number = 1 ORDER BY action_date, version_code;Files
data/{congress}-{type}.parquet: one row per summary of one congress and bill type, sorted by id, such asdata/119-hr.parquet. The congress has three digits (093-hr) so the files sort in order. The 8 types are hr, s, hjres, sjres, hconres, sconres, hres, sres.manifest.json: per slice, the row count, SHA-256, the API's count, when it was last read in full and any windows it could not read; the last listing; the last 20 runs.
Schema
How it stays current
A GitHub Actions job is scheduled every 12 hours, at 00:00 and 12:00 UTC. It reads the summaries whose updateDate is at most 48 hours older than the newest the previous run saw, and commits the slices they changed with this card. Once a day, on the first run at least 20 hours after the last check, it also asks the API for each slice's count, reads again in full each slice whose count differs from its rows here, and the 8 slices read longest ago once that was more than 30 days ago. A slice read in full loses the summaries the API no longer lists.
The listing orders summaries by updateDate, but summaries that share one come back in a different order from one request to the next, so paging by offset skips some and repeats others: one pass over the House bills of the 100th Congress read 6,644 distinct summaries of 6,765 on September 25, 2026. So the pipeline reads windows of updateDates instead, moving each window's end down to the oldest second on its page, and pages a second that fills a whole page in several orders until it has read that second's count. That read all 6,765 of those summaries in 102 requests.
The job writes with Hugging Face Trusted Publishing, so no write token is stored anywhere. manifest.json names each run's writer: github-actions for this job, local for the same pipeline run from a computer. GitHub starts scheduled jobs late, or drops them, when it is busy, so a new summary can take more than 12 hours to appear. Each run downloads manifest.json and the slices it updates, and the Hub counts a download for each 5 minutes in which a run reads files, so part of this dataset's download count is this job.
Known gaps
- Only the summaries: not the bills' text, actions, cosponsors or status, which the API lists elsewhere.
- The API lists no summaries before the 93rd Congress.
titleis the one title the listing gives with the summary; a bill has several, and the listing does not say which this is.- In a second that holds more summaries than one page, every order the pipeline tries may still miss some.
manifest.jsonrecords each such second with its count and how many were read, and each slice'sfailedis how many it lists that are not here; the status above totals both. - A summary the pipeline cannot read keeps its earlier row, if it has one, and is listed with its error under
failuresinmanifest.json; later runs try it again.
License
CRS summaries are works of the United States Government and are not subject to copyright in the United States (17 U.S.C. § 105).
