US Bills Change Feed avatar

US Bills Change Feed

Pricing

$5.00 / 1,000 results

Go to Apify Store
US Bills Change Feed

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

Jesse Hawkins

Maintained by Community

Actor 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 typeWhat it isExample bill_id
hrHouse bill119-hr-2821
sSenate bill119-s-5475
hresHouse simple resolution119-hres-1627
sresSenate simple resolution119-sres-445
hjresHouse joint resolution119-hjres-219
sjresSenate joint resolution119-sjres-218
hconresHouse concurrent resolution119-hconres-119
sconresSenate concurrent resolution119-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_id is congress-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_url is the BILLSTATUS XML this row was read from; listing_url is the listing it was found in; sha256 is 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_url is 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:

  1. A pattern made only of capitals and digits is an acronym and matches case-sensitively: FDA matches FDA, never fda. Every other pattern matches case-insensitively.
  2. A match must stand on its own: the character on each side may not be a letter or a digit. FDA matches FDA-approved and (FDA), and not FDAAA.
  3. 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 FDIC tag, and "the Internal Revenue Code of 1986" gets no IRS tag. 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) and DOT. 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 for 119/hr on 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 why maxItems tops 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. Read latest_action and latest_action_date to see what moved. Measured on 2026-10-16: of 980 changes in the 119th Congress since 2026-10-09, 82 were new and 898 updated.
  • 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.
  • hamdt and samdt (amendments), treaty, hdoc and sdoc are 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/hr against 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.gov is 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.