US Bills Change Feed
Pricing
$5.00 / 1,000 results
US Bills Change Feed
US bills and resolutions new or changed since a date, for policy, government-affairs and compliance teams: govinfo BILLSTATUS for any Congress, titles, latest actions, a new or updated tag, and agency_tags.
Pricing
$5.00 / 1,000 results
Rating
0.0
(0)
Developer
Jesse Hawkins
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Share
US bills and resolutions that are new or changed since a date, for
policy, government-affairs and compliance teams. One run returns the
change set of a Congress from govinfo's BILLSTATUS bulk data:
all eight measure types, one row per measure, each row saying whether
the measure is new or updated, with its title, its latest action,
and agency_tags naming the federal agencies the Congress
publishes in its text.
Use it as a legislative-tracking feed (what moved in the House and
Senate since your last run), a bill-watch for one agency (FDA,
Medicare, EPA, 107 tags in all), or the change layer on top of a
bill corpus you already hold. It reads the official govinfo bulk
data service (www.govinfo.gov/bulkdata) directly, with no key and
no browser.
Run it on a schedule, with since a day or two before your last run,
and keep the rows whose bill_id and last_modified you do not hold
yet.
What you get
One row per measure whose BILLSTATUS file on govinfo changed on or
after since:
| Measure type | What it is | Example bill_id |
|---|---|---|
hr | House bill | 119-hr-2821 |
s | Senate bill | 119-s-5475 |
hres | House simple resolution | 119-hres-1627 |
sres | Senate simple resolution | 119-sres-445 |
hjres | House joint resolution | 119-hjres-219 |
sjres | Senate joint resolution | 119-sjres-218 |
hconres | House concurrent resolution | 119-hconres-119 |
sconres | Senate concurrent resolution | 119-sconres-10 |
new or updated. A row is new when the measure's own
introducedDate is on or after since: it was introduced inside your
window. Every other row is updated: the measure existed before
since, and govinfo rewrote its BILLSTATUS file inside the window,
because an action, a committee referral, a cosponsor or a summary
landed.
The clock. last_modified is govinfo's own
formattedLastModifiedTime for that file, read as UTC. govinfo
publishes it without a zone, so treat it as a govinfo timestamp:
comparing two runs of this feed compares like with like.
Input
{"since": "2026-10-09","congresses": [119],"billTypes": ["hr", "s"],"maxItems": 500}
since(required): a date,YYYY-MM-DD, or a number of days back, such as"7".congresses: whole numbers. Empty reads the 119th. govinfo answered 200 for the 112th through the 119th on 2026-10-16.billTypes: any of the eight names above. Empty reads all eight.maxItems: stop after this many rows in all. Each route gives its newest changes first. Default 1,000; the most is 10,000, because every row costs one extra request (see Limits).
Output
{"bill_id": "119-hr-2821","congress": 119,"type": "hr","number": 2821,"measure": "House bill","title": "FDA Modernization Act 3.0","change_type": "updated","last_modified": "2026-09-20T05:23:00Z","introduced_date": "2025-04-10","latest_action": "Received in the Senate.","latest_action_date": "2026-07-21","policy_area": "Health","origin_chamber": "House","update_date": "2026-09-19T23:40:10Z","agency_tags": ["FDA"],"agency_tag_count": 1,"status_file_bytes": 34504,"source_url": "https://www.govinfo.gov/bulkdata/BILLSTATUS/119/hr/BILLSTATUS-119hr2821.xml","listing_url": "https://www.govinfo.gov/bulkdata/json/BILLSTATUS/119/hr","legislation_url": "https://www.congress.gov/bill/119th-congress/house-bill/2821","fetched_at": "2026-10-16T12:00:00Z","sha256": "..."}
bill_idiscongress-type-number, the key of the 1mp US bills and official summaries library (61,585 rows, 116th to 119th Congress), so a feed row joins a library row.source_urlis the BILLSTATUS XML this row was read from;listing_urlis the listing it was found in;sha256is the SHA-256 of the XML bytes. Store it, and you can see whether the file changed between two runs without reading it again.legislation_urlis the congress.gov page, for a person to open. The Actor does not fetch it.
agency_tags
This is the join, and it is the reason to buy the feed rather than
the files. agency_tags is the sorted list of federal agencies and
programs named in the measure's title, its latest action and
its policy area, from a written vocabulary of 107 tags, 214
patterns.
The rules, so you can reproduce a tag by hand:
- A pattern made only of capitals and digits is an acronym and
matches case-sensitively:
FDAmatchesFDA, neverfda. Every other pattern matches case-insensitively. - A match must stand on its own: the character on each side may not
be a letter or a digit.
FDAmatchesFDA-approvedand(FDA), and notFDAAA. - Naming the head of a department names the department: "Secretary
of the Interior" tags
Department of the Interior.
It is string matching, and nothing else. A tag says the agency's name appears in text govinfo publishes. It does not say the measure affects that agency, that it will pass, or what it means. There is no legal interpretation anywhere in this Actor.
Measured on 2026-10-16 over every BILLSTATUS file of the 119th
Congress, House bills (10,833 measures, all 10,833 parsed): 828
(7.64%) carried at least one tag, 80 of the 107 tags appeared at
least once, and 8 measures carried FDA. The reading is the Actor's
own parser over each file's title, latest action and policy area,
re-run by the cycle after rule 3 was implemented; an earlier note of
834 (7.70%) in the build's draft is superseded by this one. The
commonest tags were USPS (112), Medicare (81), Social Security
(60), Medicaid (55) and Department of Veterans Affairs (51).
Known misses:
- Most measures are short named Acts ("Clergy Act", "RESULTS Act") and name no agency at all. That is why the rate is near 8% and not near 50%.
- A statute's name is not its agency: "the Federal Deposit Insurance
Act" gets no
FDICtag, and "the Internal Revenue Code of 1986" gets noIRStag. Only the agency's own name sets a tag. - Seven acronyms are left out on purpose, because Congress uses the
same letters for something else:
SEC("Sec. 5"),ACA,ICE,VA(Virginia),DOE(Energy and Education share it),CHIP(and the CHIPS Act) andDOT. Those agencies are in the vocabulary under their full names, so a measure that writes "Immigration and Customs Enforcement" is tagged and one that writes only "ICE" is not. - A measure that names a committee, not an agency, is untagged: committees are not agencies.
The cross-feed question this answers. The 1mp FDA Change Feed
returns FDA's own decisions (510(k), PMA, recalls, Drugs@FDA) new or
changed since a date. Run both with the same since, filter this
feed to agency_tags containing FDA, and you have the bills and
the decisions for one agency in one window.
Limits
- One route is one listing; one row is one more request. A route
is one
(congress, type)pair. Reading it is a single request for the whole listing (3,863,398 bytes for119/hron 2026-10-16, 10,834 entries). Each row in the change set then costs one request for that measure's BILLSTATUS XML. Requests are paced 0.25 s apart, so 1,000 rows takes about four minutes. That is whymaxItemstops out at 10,000. - govinfo rewrites a file when anything on the measure changes, so
a one-line committee referral and a floor vote look the same in
last_modified. Readlatest_actionandlatest_action_dateto see what moved. Measured on 2026-10-16: of 980 changes in the 119th Congress since 2026-10-09, 82 werenewand 898updated. - No bill text and no summary. This is a change feed over BILLSTATUS: the measure's administrative record. For the full text and the official CRS summary, use the 1mp US bills library.
hamdtandsamdt(amendments),treaty,hdocandsdocare not measure types in BILLSTATUS and are refused by name with a reason, not skipped in silence.- BILLSUM is not read. Its listing answers 200 and carries the
same clock field, but it holds only measures CRS has summarised
(3,395 entries for
119/hragainst BILLSTATUS's 10,834 on 2026-10-16) and carries no latest action. A BILLSUM change shows up as a BILLSTATUS change anyway. api.govinfo.govis not used. It carries the same data behind an api.data.gov key, and a key is something no buyer should have to supply. Everything here comes from the keyless bulk-data service.
What it will not do
- No personal data. Sponsors, cosponsors and committee members name people, and no field of a row carries one. The Actor does not read those elements at all.
- No interpretation, no prediction, no legal advice. A row is the record govinfo publishes.
- No login, no browser, no proxy, no key.
Source and licence
govinfo, U.S. Government Publishing Office. Every BILLSTATUS file
carries this statement in its dublinCore dc:rights element:
"Pursuant to Title 17 Section 105 of the United States Code, this
file is not subject to copyright protection and is in the public
domain." www.govinfo.gov/robots.txt, read 2026-10-16, does not
disallow /bulkdata/, and lists a sitemap for the BILLSTATUS
collection.
FAQ
Which Congresses can I read? govinfo answered 200 for the 112th through the 119th on 2026-10-16. The default is the 119th. The 1mp US bills library covers the 116th to the 119th, so a Congress outside that range gets a warning in the run log.
How far back can since go? As far as you like. The window is
bounded by what govinfo has rewritten, not by the Actor.
Why is a measure updated when nothing seems to have happened?
govinfo rewrites the whole BILLSTATUS file for any change, including a
new cosponsor or a newly published summary. Compare sha256 between
runs to see whether the bytes really changed.
Do I get the bill text? No. Titles, latest actions and the administrative fields only. The 1mp US bills library has the text and the official summary.
Do I need an API key or a proxy? No.
Can I filter to one agency? Not in the input: filter the output on
agency_tags. Every row is tagged, so one run gives you the whole
window and you keep what you need.
Why does a run return fewer rows than maxItems? Because the
window held fewer changes. A window with no changes succeeds with no
rows and says so in the run's status message.
Use with AI agents (MCP)
Add this Actor to Apify's MCP server as a tool:
https://mcp.apify.com?tools=1mp/us-bills-change-feed
An MCP client, for example Claude or Cursor, can then ask for the bills that changed since a date, or the ones that name an agency. A run needs an Apify account; the client signs in when it first connects.
Not affiliated with the U.S. Government Publishing Office, the Library of Congress or congress.gov. The data is the public's; please credit "govinfo, U.S. Government Publishing Office" where you publish it.
Price
$5.00 per 1,000 rows ($0.005 a row), billed per row returned, with no start fee. The same rate as the 1mp FDA Change Feed, so a buyer of both pays one price.
Changelog
- 0.1 (2026-10-16): first release.