By the fastCRW team · Catalogue figures checked 2026-11-05 against GET /v1/data · Verify independently before relying on any figure.
To track US policy with an agent, you need four public sources: bills from Congress.gov, rules and notices from the Federal Register, public dockets from Regulations.gov, and federal spending from USAspending. Each has its own key rules, parameter names and response shape. Through the Pergamon catalogue, one fastCRW API key reaches all four, and every response carries its source and attribution line. This guide walks through the calls a policy agent needs.
Who publishes what
| Source | Publishes | Capabilities used here |
|---|---|---|
| Congress.gov | Bills and their actions | bill, bill-actions |
| Federal Register | Rules, proposed rules and notices | documents |
| Regulations.gov | Regulatory dockets and documents | dockets |
| USAspending | Federal awards by agency and year | agency-awards |
Campaign finance from the FEC is in the same catalogue, but it is a different case. It runs on your machine and needs your own FEC key. Its row is covered below.
Fetch one bill
A bill is identified by three values: the Congress number, the bill type and the bill number. Congress.gov accepts the bill type in lower case. This call asks for H.R. 1 of the 118th Congress:
curl "https://api.fastcrw.com/v1/data/congress/bill?congress=118&billType=hr&billNumber=1" \
-H "Authorization: Bearer $CRW_API_KEY"
In our run the response carried type: "HR" and the title Lower Energy Costs Act under data.bill, along with introducedDate (2023-03-14), originChamber, sponsors, subjects, summaries, textVersions and latestAction. Use the same three options on bill-actions to get the list of actions the bill went through:
curl "https://api.fastcrw.com/v1/data/congress/bill-actions?congress=118&billType=hr&billNumber=1" \
-H "Authorization: Bearer $CRW_API_KEY"
Rules and notices from the Federal Register
The Federal Register is the daily journal of federal rules and notices. The documents capability takes a term and returns matching documents. The Python SDK is the shortest way to read the result:
# pip install crw
from crw import CrwClient
client = CrwClient() # reads CRW_API_KEY
result = client.get_data("federalregister", "documents", {"term": "artificial intelligence"})
print(result["provenance"]["attributionText"])
print(result["data"]["count"], "matches")
for doc in result["data"]["results"][:3]:
print(doc["title"])
In our run the search for "artificial intelligence" returned 1618 matches, and the first document title was "NIST Artificial Intelligence Consortium". The count moves as new documents are published, so treat it as a snapshot.
Dockets and comments from Regulations.gov
A docket groups the proposed rule, the comments and the supporting material for one action. Search dockets with searchTerm:
curl "https://api.fastcrw.com/v1/data/regulations/dockets?searchTerm=artificial%20intelligence" \
-H "Authorization: Bearer $CRW_API_KEY"
The first page returned 25 dockets in our run. The first title was "Establishment of Reporting Requirements for the Development of Advanced Artificial Intelligence Models and Computing Clusters". The same provider also has a comments capability that takes a commentOnId, for the comments themselves.
Money: federal awards by agency and year
USAspending needs two values: toptier_code, which identifies the top-level agency, and fiscal_year. Both are required. This call uses code 075 for fiscal year 2025:
curl "https://api.fastcrw.com/v1/data/usaspending/agency-awards?toptier_code=075&fiscal_year=2025" \
-H "Authorization: Bearer $CRW_API_KEY"
In our run the response had toptier_code: "075", fiscal_year: 2025 and a transaction_count of 330557. It returns totals and counts for the agency, not a line-by-line list of awards. Use the award figures as a starting point and check the USAspending site for the detail.
Campaign finance: runs on your machine
FEC is a client-run source. Its calls cost 0 credits and run through the local crw-mcp on your machine, using your own FEC key. Check which keys are missing:
npx -y crw-mcp connectors list
npx -y crw-mcp connectors set-key fec
The FEC row in the catalogue carries this licence text, quoted as published: "Don’t use campaign finance information disclosed on fec.gov or through openFEC, the FEC's API, for commercial purposes including, but not limited to training data for large language models, machine learning models or artificial intelligence models, including generative artificial intelligence models." If your agent is a commercial product, do not feed FEC data into it without reading that line first.
Let the agent discover the call
Discovery is free. This find call with a category filter returns the capabilities that match "regulation" among public record sources. The first three providers in our run were cpscrecalls, fec and federalregister:
curl "https://api.fastcrw.com/v1/data/find?query=regulation&category=Public%20records&limit=5" \
-H "Authorization: Bearer $CRW_API_KEY"
An MCP client uses the same two tools:
{"name": "crw_find_data", "arguments": {"query": "regulation", "category": "Public records"}}
{"name": "crw_get_data", "arguments": {"provider": "federalregister", "capability": "documents", "options": {"term": "artificial intelligence"}}}
You need no key of your own for the four server sources above.
What it costs
Find calls are free. Each server call in this post costs 1 credit, and a failed call is not billed. FEC calls cost 0 credits because they run on your machine. See pricing for plan prices.
What this does not do
- It does not forecast votes or outcomes. It returns what was published, with the dates on each record.
- Counts are snapshots. A match count from one run will differ on the next day's run.
- Agency totals are not award lists. Use USAspending's own pages for line-level detail.
- It does not replace the text. A bill record, a rule summary or a docket index tells you what was published and when. Read the bill text, the rule itself or the comments before you quote them as a position.
- Each source keeps its own terms. Quote the licence line from each response rather than assuming one licence covers all four.
Reading a bill record
The bill record repeats the Congress number, the bill type and the number, and adds the title. Keep the Congress number in every key you store. Congresses last two years, so the 118th Congress covered 2023 and 2024, and a bill number such as H.R. 1 means one bill in one Congress and a different bill in the next. A key built from the bill number alone will merge two different bills.
Page through a bill's action history
A bill with a long life has many actions, and the action list is paginated. Pass limit and offset on the Pergamon call to move through it. This call asks for the first two actions of H.R. 1 in the 118th Congress:
curl "https://api.fastcrw.com/v1/data/congress/bill-actions?congress=118&billType=hr&billNumber=1&limit=2&offset=0" \
-H "Authorization: Bearer $CRW_API_KEY"
In our run the response reported pagination.count of 93 actions. The first action was dated 2023-03-30 and was a House floor action. The pagination.next field holds the upstream Congress.gov address for the next page. To get the next page, send offset on the same Pergamon call.
From a docket to its documents
A docket is the container, and the documents inside it are what you usually want. The documents capability searches documents by searchTerm across all dockets:
curl "https://api.fastcrw.com/v1/data/regulations/documents?searchTerm=artificial%20intelligence" \
-H "Authorization: Bearer $CRW_API_KEY"
The first page held 25 documents in our run, and the response carries an aggregation by document type in data.meta. The top buckets were Report with 654 documents, an EPA publication type with 459, and Background Material with 348. To list the documents of one docket, use docket-documents with a docketId.
Combine sources for one question
A question such as "what happened to this rule" touches more than one source. Start from the Federal Register document. If the document names a docket, read that docket from Regulations.gov. Check USAspending only when the question is about money. Each step is a separate call with its own provenance block, so store the provenance per step. A single attribution line for the whole answer would hide which source said what.
A weekly policy watch
Most policy monitoring is a diff, not a dashboard. Store the identifiers you have already seen, for each bill, docket and rule. Run the same search on a schedule, and treat only identifiers you have not seen before as new. Keep the search term and the run date with each alert, because the match count on a search is a snapshot.
Federal Register records carry the attribution line "Source: Federal Register (US Government Publishing Office)". Keep that line when you show a record to a user, and link to the original document rather than a copy of its text.
Errors you will see
- Unknown name. A wrong provider or capability returns HTTP 404 with
errorCodeunknown_data_source. Runfindto get the exact names. - Upstream failure. A source that fails returns
success: falsewithupstream_error, orupstream_timeouton a timeout. A failed call is not billed, so retry with a short wait rather than in a tight loop. - Client-run source over REST. FEC returns HTTP 409 with
client_execution_requiredif you call it over REST. Run it through the localcrw-mcpinstead.
Sources
- Congress.gov API documentation
- Federal Register API documentation
- Regulations.gov API documentation
- USAspending API documentation
Related: Regulatory compliance monitoring · Public data API for AI agents · Pergamon catalogue
