CoolFace
Datasetpublic

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.

sourceHugging Faceotherupdated 4h agoView on Hugging Face
1likes424downloads
Dataset Card

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.

CongressYearsRowsListedSlices read in full
1192025-20265,9145,9148 of 8
1182023-202414,25714,2578 of 8
1172021-202221,27021,2708 of 8
1162019-202020,00720,0078 of 8
1152017-201816,50116,5018 of 8
1142015-201615,35915,3598 of 8
1132013-201413,40413,4048 of 8
1122011-201214,85614,8568 of 8
1112009-201017,48317,4838 of 8
1102007-200818,62018,6208 of 8
1092005-200617,15917,1598 of 8
1082003-200414,83314,8338 of 8
1072001-200213,38213,3828 of 8
1061999-200012,41912,4198 of 8
1051997-199810,39310,3938 of 8
1041995-19969,0469,0468 of 8
1031993-199411,07511,0758 of 8
1021991-199213,52213,5228 of 8
1011989-199013,50313,5038 of 8
1001987-198813,29213,2928 of 8
991985-198613,38113,3818 of 8
981983-198414,28014,2808 of 8
971981-198214,97114,9718 of 8
961979-198017,16717,1678 of 8
951977-197823,37823,3788 of 8
941975-197625,29025,2908 of 8
931973-197427,08327,0838 of 8

Listed is the API's count for the slices when they were last read in full or checked.

Use

python
from datasets import load_dataset
summaries = load_dataset("incrediblecrab/crs-bill-summaries", split="train")
sql
-- 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 as data/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

ColumnTypeDescription
idstringcongress-type-number-versionCode, for example 119-hr-8893-00
congressint32The Congress the bill or resolution was introduced in (119 for 2025-2026)
bill_typestringhr, s, hjres, sjres, hconres, sconres, hres or sres
bill_numberint32The bill's number
version_codestringThe API's versionCode: which of the bill's summaries this is (00 for the one at introduction)
action_datestringThe date of the action the summary describes (YYYY-MM-DD)
action_descstringThe action the summary describes, such as "Introduced in House" or "Passed Senate amended"
titlestringThe bill's title as the listing gives it
origin_chamberstringHouse or Senate
current_chamberstringThe chamber the listing gives for the summary
textlarge_stringThe summary as plain text
htmllarge_stringThe summary as the API gives it (HTML)
summary_update_datestringThe API's lastSummaryUpdateDate
fetched_atstringWhen the run that wrote this row ran (UTC); a later read that found the summary unchanged is not recorded

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.
  • —title is 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.json records each such second with its count and how many were read, and each slice's failed is 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 failures in manifest.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).