A monitoring API for the U.S. Federal Register. Pull rules, proposed rules, notices, and presidential documents, filter them by type, keyword, agency, and date, and get back a clean feed you can poll for "what changed since last run."
This is the docs repo. The actor itself lives on the Apify Store: george.the.developer/federal-register-monitor.
If you have ever written a script that hits the Federal Register API, dedupes against yesterday's results, and emails your compliance team when a rule from a watched agency shows up, this does that part for you so you can stop babysitting it.
The Federal Register is the daily journal of the U.S. government. Every final rule, proposed rule, notice, and presidential document gets published there. This actor wraps the official Federal Register API and gives you a few things on top of raw JSON:
- Pull by document type rules (
RULE), proposed rules (PRORULE), notices (NOTICE), and presidential documents (PRESDOCU). - Filter by keyword full-text search across titles, abstracts, and document bodies.
- Filter by agency scope a feed to one or more agencies by their Federal Register slug (for example
interior-department,transportation-department). - Filter by date restrict to a publication window with
publishedAfter/publishedBefore, or grab the newest documents first. - Single-document full detail hand it a document number and get the full record back: topics, effective dates, the free-text
datesfield, Regulation ID Numbers (RINs), docket IDs, CFR references, and the agency tree. - Normalized output consistent camelCase field names, flattened agency objects, and dates you can sort on, so you do not have to re-shape the raw API payload every time.
Everything comes from the public Federal Register API. No API key, no scraping, no login.
Government-affairs and compliance teams almost always end up building the same plumbing by hand. Someone wires up the Federal Register endpoints, keeps a list of agencies and keywords they care about, stores the document numbers they have already seen, and re-polls on a schedule to find anything new. Then it breaks when the payload shape shifts or the watchlist grows, and a person ends up eyeballing the daily Federal Register table again.
This hands that back as a clean monitoring feed. You give it a saved set of agencies, keywords, types, and a date window. It returns a normalized dataset you can diff against your last run to surface "new since last run." The watchlist lives in your input, the dedupe lives in your dataset, and you stop re-writing the same poller every quarter.
It is built for monitoring and alerting, not one-off lookups. The single-document mode is there for when an alert fires and you need the full detail to triage it.
flowchart LR
A[Request<br/>type / keyword<br/>agency / date] --> B{mode}
B -->|documents| C[/documents endpoint/]
B -->|search| D[/search endpoint/]
B -->|document| E[/single document/]
C --> F[Federal Register API]
D --> F
E --> F
F --> G{shape}
G -->|list| H[normalize rows]
G -->|single| I[full detail<br/>topics + dates + RINs]
H --> J[(dataset)]
I --> J[(dataset)]
The request goes in with your filters. The mode field picks which Federal Register endpoint to hit. List modes get normalized into flat rows. Single-document mode returns the full detail record. Everything lands in the dataset, ready to diff or forward.
The actor exposes three logical operations, picked with the mode input field. In standby (API) mode these map to query paths; in batch mode you set them in the input JSON.
List documents, newest first, filtered by type, agency, and date. This is the workhorse for a scheduled monitoring run.
| Param | Type | Description |
|---|---|---|
type |
string | RULE, PRORULE, NOTICE, or PRESDOCU. Omit for all types. |
agency |
string | Federal Register agency slug, for example transportation-department. Repeatable. |
keyword |
string | Term to match in title and abstract. |
publishedAfter |
date | YYYY-MM-DD lower bound on publication date. |
publishedBefore |
date | YYYY-MM-DD upper bound on publication date. |
order |
string | newest (default) or oldest. |
maxItems |
integer | Cap on documents returned. |
Full-text search across the document body, ranked by relevance. Use this when the keyword matters more than the date window.
| Param | Type | Description |
|---|---|---|
keyword |
string | Full-text query. Required for this mode. |
type |
string | Optional type filter, same values as above. |
agency |
string | Optional agency slug filter. |
publishedAfter |
date | Optional YYYY-MM-DD lower bound. |
order |
string | relevance (default) or newest. |
maxItems |
integer | Cap on documents returned. |
Fetch one document by its number with full detail. This is what you call after an alert fires.
| Param | Type | Description |
|---|---|---|
documentNumber |
string | The Federal Register document number, for example 2026-11648. Required. |
Every list document is normalized to this row shape:
| Field | Type | Description |
|---|---|---|
documentNumber |
string | Federal Register document number, stable unique ID. Use this for dedupe. |
title |
string | Document title. |
type |
string | Rule, Proposed Rule, Notice, or Presidential Document. |
abstract |
string | Short summary of the document. |
publicationDate |
date | YYYY-MM-DD the document was published in the Federal Register. |
agencies |
array | Flattened agency objects (see below). |
htmlUrl |
string | Canonical Federal Register web page for the document. |
pdfUrl |
string | Direct link to the GPO PDF. |
Each entry in agencies carries:
| Field | Type | Description |
|---|---|---|
name |
string | Display name, for example Interior Department. |
rawName |
string | Original uppercase name from the source. |
id |
integer | Federal Register agency ID. |
slug |
string | Agency slug used in the agency filter. |
parentId |
integer|null | Parent agency ID, or null for a top-level department. |
Single-document mode (mode: document) adds the full detail fields on top of the row above:
| Field | Type | Description |
|---|---|---|
action |
string | The regulatory action, for example Final rule. or Proposed rule. |
effectiveOn |
date|null | YYYY-MM-DD the rule takes effect, when present. |
dates |
string | Free-text dates paragraph from the document (effective dates, comment deadlines). |
topics |
array | List of CFR index topic terms. Good for tagging. |
regulationIdNumbers |
array | Regulation ID Numbers (RINs) tying the document to a rulemaking. |
docketIds |
array | Agency docket identifiers. |
cfrReferences |
array | CFR title and part references the document touches. |
Replace the slug below if you run it from your own Apify account. The verified Store slug is george.the.developer/federal-register-monitor.
curl -X POST "https://api.apify.com/v2/acts/george.the.developer~federal-register-monitor/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "documents",
"type": "RULE",
"agency": "transportation-department",
"order": "newest",
"maxItems": 25
}'import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('george.the.developer/federal-register-monitor').call({
mode: 'documents',
type: 'PRORULE',
agency: 'interior-department',
keyword: 'continental shelf',
publishedAfter: '2026-01-01',
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const doc of items) {
console.log(doc.documentNumber, doc.publicationDate, doc.title);
}from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("george.the.developer/federal-register-monitor").call(run_input={
"mode": "search",
"keyword": "seat belt assembly anchorages",
"type": "RULE",
"order": "relevance",
"maxItems": 20,
})
for doc in client.dataset(run["defaultDatasetId"]).iterate_items():
print(doc["documentNumber"], doc["publicationDate"], doc["title"])Ready-to-run input files live in examples/:
input-documents.jsona scheduled type + agency + date monitoring run.input-search.jsona relevance-ranked keyword search.sample-document.jsona trimmed real output record frommode: document.
Here is a trimmed real record (document 2026-11648, an Interior Department final rule pulled from the live Federal Register API):
{
"documentNumber": "2026-11648",
"title": "Oil and Gas and Sulfur Operations in the Outer Continental Shelf-Documents Incorporated by Reference",
"type": "Rule",
"action": "Final rule.",
"publicationDate": "2026-06-10",
"effectiveOn": "2026-08-10",
"topics": ["Continental shelf", "Oil and gas exploration", "Pipelines", "Sulfur"],
"regulationIdNumbers": ["1014-AA51"],
"agencies": [
{ "name": "Interior Department", "slug": "interior-department", "id": 253, "parentId": null }
],
"htmlUrl": "https://www.federalregister.gov/documents/2026/06/10/2026-11648/oil-and-gas-and-sulfur-operations-in-the-outer-continental-shelf-documents-incorporated-by-reference"
}Pay per event. You pay for what a run actually does, nothing for idle time.
| Event | Price |
|---|---|
| Actor start | $0.25 |
| Document returned | $0.02 |
| Full-text brief (single-document detail) | $0.05 |
Pay-per-event pricing activates 2026-06-24. A run of 25 documents in list mode costs about $0.25 + 25 x $0.02 = $0.75. Pulling one document's full detail adds $0.05.
Government-affairs teams. Save a watchlist of the agencies and keywords your portfolio touches, run it daily, and diff against the last run so a person only ever looks at genuinely new rules and notices. No more scrolling the daily Federal Register table to find the three documents that matter to you.
Compliance teams. Track proposed and final rules from the regulators that govern your industry and route new effective dates straight into your compliance calendar. The normalized effectiveOn and dates fields drop into a deadline tracker without re-parsing free text by hand.
Law firms. Stand up a per-client or per-practice-area monitoring feed keyed on agency and topic, so the regulatory team gets a clean alert when something lands instead of a junior associate doing a manual sweep every morning. The full-detail mode gives you RINs and docket IDs for the memo.
Lobbying and policy shops. Keep saved feeds per issue area and per agency, then poll for new proposed rules to flag comment windows before they close. The dates field surfaces comment deadlines so nothing slips while you decide whether to file.
Trade associations. Monitor the handful of agencies your members care about and turn new rules into member-facing alerts. One saved watchlist covers the whole association instead of every member re-checking the Federal Register on their own.
Compliance SaaS products. Wire the standby API into your platform as the regulatory monitoring layer so you ship rule-tracking features without owning the Federal Register integration yourself. Your product polls, dedupes on documentNumber, and surfaces alerts to your customers.
How do I monitor new federal rules?
Run the actor on a schedule with a saved set of agencies, keywords, and a type of RULE or PRORULE. Each run returns the newest matching documents. Dedupe on documentNumber against your previous run and anything left over is new since last run. That is your alert feed.
Is the Federal Register API free? Yes. The underlying Federal Register API is public and needs no key. This actor wraps it and charges only for the convenience of normalized output, monitoring-shaped modes, and the run itself under pay-per-event pricing.
How do I track rules by a specific agency?
Set the agency field to the agency's Federal Register slug, for example transportation-department or interior-department. The slug appears in every agency object in the output, so you can grab it from a first broad run and then lock your feed to it.
What is a proposed rule?
A proposed rule (PRORULE) is a regulation an agency has published for public comment but has not finalized. It usually carries a comment deadline in the dates field. Final rules (RULE) are the binding version with an effective date. Tracking PRORULE documents lets you weigh in before a rule is locked.
Can I search the full text, not just titles?
Yes. Use mode: search with a keyword. That hits the Federal Register full-text search and ranks results by relevance across the document body, not only the title and abstract.
Run it on the Apify Store: george.the.developer/federal-register-monitor
Federal Register API, regulatory monitoring, rule tracking API, federal rulemaking alerts, compliance monitoring API, Federal Register documents, agency rule feed, proposed rule tracking, regulatory intelligence. If you are building any of that, this saves you the integration.
Data source: the official Federal Register API. This project is not affiliated with the Office of the Federal Register or the U.S. government.