Federal Register Documents: Rules, Notices & Comment Dates
Pricing
from $1.40 / 1,000 document row returneds
Federal Register Documents: Rules, Notices & Comment Dates
Rules, proposed rules, notices and presidential documents from the official Federal Register API: filter by keyword, agency, CFR title, topic, docket, publication window, effective date or open comment window. Rows carry citation, dates, docket ids, abstract and text links.
Pricing
from $1.40 / 1,000 document row returneds
Rating
0.0
(0)
Developer
Samat Makatov
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
40 minutes ago
Last modified
Categories
Share
Every rule, proposed rule, notice and presidential document the US government publishes in the Federal Register, as dataset rows: document number, title, agency, subject topics, publication and effective date, comment deadline, docket ids, CFR citations, abstract and links to the PDF and the plain text. It reads the official Federal Register JSON API — no API key, no login, no proxy, no browser — and also covers the public-inspection desk, where filings appear hours to days before they are printed. Written for compliance and policy teams, lawyers, journalists and agent pipelines that need the regulatory record as data instead of a web page.
Need it tailored to your workflow? Missing a field, a filter, another source or a different output format? Open an issue and describe what you need — we read every request and adapt the actor.
Use cases
- Comment-deadline calendar —
documentTypes: ["PRORULE"]withcommentsOpenOnlygives every proposed rule whose comment window is still open, with the closing date, the days left and the comment link. Sort your calendar bydaysUntilCommentsClose. - Compliance dates in your part of the code —
cfrTitle: 40(plus acfrPart) witheffectiveWithinDays: 120lists the final rules that change your corner of the CFR and when they bite. - Follow one rulemaking end to end —
docketId: "EPA-HQ-OAR-2021-0317"withsortBy: "oldest"returns the proposed rule, the extensions and the final rule under the same agency docket, in publication order (the defaultnewestlists the latest document first). - Keyword watch for a policy area — full-text search over the whole document (
searchTerm), a relative window (lookbackDays) andonlyNew, on a daily schedule: each run pays only for documents it has not delivered before. - Executive orders as data —
documentTypes: ["PRESDOCU"]withpresidentialDocumentTypes: ["executive_order"]fillsexecutiveOrderNumber,signingDateandpresidentNamefor newsroom tables and legal blogs. - Earliest signal on a new rule —
mode: "publicInspection"reads the filing desk: what agencies have signed and filed for the coming issues, with the exact filing time in UTC. - A corpus for an LLM —
includeFullTextattaches the published plain text of each document, cut at a length you choose, ready for summarising, classification or retrieval.
Input
No field is required: with the defaults the actor returns the 50 newest documents. The Console form comes prefilled with
the example search words artificial intelligence; API calls, schedules, tasks and MCP get no search words unless they
send them.
| Field | Type | Default | Allowed values / notes |
|---|---|---|---|
mode | string | documents | documents, publicInspection, agencies — see Modes |
searchTerm | string | empty | Full-text search over the whole document. Quote a phrase: "comment period". In agencies it filters the dictionary by name |
documentTypes | string[] | all four | RULE, PRORULE, NOTICE, PRESDOCU — see Document types |
agencySlugs | string[] | all agencies | Slugs such as environmental-protection-agency; several are OR-ed. Short names (EPA), printed names and obvious typos are resolved, and every correction is named in the status message |
presidentialDocumentTypes | string[] | all four | executive_order, proclamation, memorandum, determination |
sections | string[] | all six | money, environment, world, science-and-technology, business-and-industry, health-and-public-welfare |
topics | string[] | all topics | Index-term slugs, e.g. air-pollution-control. Printed names are slugified for you |
docketId | string | empty | One agency docket, exact match, e.g. CMS-4217-NC |
cfrTitle | integer | empty | 1–50. 40 environment, 21 food and drugs, 17 securities, 12 banks, 14 aeronautics, 49 transportation |
cfrPart | string | empty | A part inside that title, e.g. 52. Needs cfrTitle |
significantOnly | boolean | false | Only documents the unified agenda marks significant under EO 12866 |
publishedFrom | string | empty | YYYY-MM-DD, earliest publication date |
publishedTo | string | empty | YYYY-MM-DD, latest publication date. Leave empty to see issues already scheduled |
lookbackDays | integer | empty | 1–3650. Relative window for scheduled runs; ignored when publishedFrom is set |
effectiveWithinDays | integer | empty | 1–3650. Effective date between today and N days from now |
commentsOpenOnly | boolean | false | Comment period closes today or later |
availableOn | string | newest desk | YYYY-MM-DD, publicInspection only. Empty = the newest day that has filings |
onlyNew | boolean | false | Write only document numbers (agency slugs in agencies) no earlier run of the same filters delivered |
includeFullText | boolean | false | Attach the plain text — one extra request per row, so at most 120 rows per run |
fullTextMaxChars | integer | 20000 | 500–200000. Cut length of fullText |
sortBy | string | newest | newest, oldest, relevance, executiveOrderNumber — see Sort orders |
maxItems | integer | 50 | 1–5000 rows (at most 120 with includeFullText) |
fields | string[] | all | Keep only these output fields, in this order. rowType (and found on a found:false row) always stays. A wrong letter case or an obvious typo is corrected, a name the mode does not have is ignored — both with a warning — and a list with no valid name stops the run before anything is billed |
All dates are UTC. Relative windows (lookbackDays, effectiveWithinDays, commentsOpenOnly) are measured from the
UTC day the run starts, so a scheduled task keeps working without edits.
Reference
Modes
| Mode | Endpoint it reads | What a row is | Filters it uses |
|---|---|---|---|
documents | the search over published and already scheduled documents | one Federal Register document | every filter in the table above |
publicInspection | the filing desk, before printing | one filing waiting for its issue | documentTypes, availableOn, sortBy, maxItems |
agencies | the agency dictionary | one agency | searchTerm (name filter), maxItems |
A filter a mode cannot use is never applied silently: the run says so in its status message and in SUMMARY.warnings.
Document types
| Value | Printed as type | What it is |
|---|---|---|
RULE | Rule | A final rule — the text that changes the Code of Federal Regulations, with an effective date |
PRORULE | Proposed Rule | A proposal open for public comment, including advance notices (ANPRM) and supplements |
NOTICE | Notice | Everything else an agency must announce: meetings, information collections, grants, determinations, extensions |
PRESDOCU | Presidential Document | Signed by the President; subtype carries the finer label, e.g. Executive Order |
documentTypes takes exactly these four values — the input form offers them as a list, and the platform rejects any
other value before the run starts. Kinds of presidential document (presidentialDocumentTypes, a list as well):
executive_order (fills executiveOrderNumber), proclamation, memorandum, determination.
Agency slugs
The Federal Register rejects a slug it does not know with an HTTP error, so this actor checks your slugs against the
dictionary first. An obvious typo is corrected and named in the status message and in SUMMARY.agencyCorrections
(enviromental-protection-agency → environmental-protection-agency); a word that matches nothing stops the run and
names the closest candidates, so you
never get another agency's documents by accident. Short names and printed names are resolved too (EPA,
Food and Drug Administration). Run {"mode": "agencies"} once for the full list — 473 agencies on 26 September 2026.
Frequently used: environmental-protection-agency, securities-and-exchange-commission, food-and-drug-administration,
energy-department, labor-department, transportation-department, treasury-department, agriculture-department,
homeland-security-department, health-and-human-services-department, federal-communications-commission,
nuclear-regulatory-commission. A department slug also brings in its sub-agencies.
Topics
Topics are the index terms the Federal Register itself assigns, as slugs: the printed term lower-cased, spaces replaced
by hyphens (Air pollution control → air-pollution-control). You may pass either form. Common ones:
air-pollution-control, imports, reporting-and-recordkeeping-requirements, endangered-and-threatened-species,
incorporation-by-reference, administrative-practice-and-procedure. The topics field of any row shows the printed
forms for the document you are looking at, which is the easiest way to discover new slugs. Subject areas (sections)
are the six broad buckets above and are useful when you do not know which agency publishes what you are after.
Sort orders
| Value | Effect |
|---|---|
newest | Newest publication date first (default) |
oldest | Oldest first — the natural order for reading a docket's history |
relevance | Best match for searchTerm. Without search words the run falls back to newest and says so |
executiveOrderNumber | Descending order number; meaningful for presidential documents only |
In publicInspection the rows are ordered by filing time (oldest reverses it); in agencies by name.
Examples
Final rules one agency published in the last four months
{ "mode": "documents", "agencySlugs": ["environmental-protection-agency"], "documentTypes": ["RULE"], "lookbackDays": 120, "maxItems": 25 }
Every document of one rulemaking, oldest first
{ "mode": "documents", "docketId": "EPA-HQ-OAR-2021-0317", "sortBy": "oldest", "maxItems": 20 }
Proposed rules that are still open for comment
{ "mode": "documents", "documentTypes": ["PRORULE"], "commentsOpenOnly": true, "sortBy": "newest", "maxItems": 25 }
Rules taking effect in the next 120 days in CFR title 40
{ "mode": "documents", "documentTypes": ["RULE"], "cfrTitle": 40, "effectiveWithinDays": 120, "maxItems": 20 }
Executive orders published this year
{ "mode": "documents", "documentTypes": ["PRESDOCU"], "presidentialDocumentTypes": ["executive_order"], "publishedFrom": "2026-01-01", "sortBy": "newest", "maxItems": 20 }
A daily keyword watch that never repeats itself
{ "mode": "documents", "searchTerm": "artificial intelligence", "lookbackDays": 7, "onlyNew": true, "maxItems": 100 }
Notices of one agency with the full text attached, for an LLM
{ "mode": "documents", "agencySlugs": ["environmental-protection-agency"], "documentTypes": ["NOTICE"], "lookbackDays": 60, "includeFullText": true, "fullTextMaxChars": 20000, "maxItems": 5 }
Today's filing desk, before anything is printed
{ "mode": "publicInspection", "maxItems": 30 }
The agency dictionary
{ "mode": "agencies", "searchTerm": "commission", "maxItems": 40 }
Output
One real row, from run UJShD4PM8Qh1q8YeC (input: {"mode": "documents", "searchTerm": "artificial intelligence"}):
{"rowType": "document","documentNumber": "2026-19535","title": "Request for Information; Medicare Part D Reasonable and Relevant Pharmacy Contracting Standards","type": "Proposed Rule","subtype": null,"action": "Request for information.","abstract": "This request for information (RFI) solicits input from interested parties for purposes of establishing standards for reasonable and relevant pharmacy contract terms and conditions under the Medicare prescription drug benefit. …","datesNote": "To be assured consideration, comments must be received at one of the addresses provided below, by November 23, 2026.","excerpt": "… Opportunities for the use of artificial intelligence (AI) with respect to Part D pharmacy reimbursement; …","agencyNames": ["Health and Human Services Department", "Centers for Medicare & Medicaid Services"],"primaryAgency": "Health and Human Services Department","topics": [],"publicationDate": "2026-09-24","effectiveOn": null,"commentsCloseOn": "2026-11-23","commentsOpen": true,"daysUntilEffective": null,"daysUntilCommentsClose": 58,"signingDate": null,"executiveOrderNumber": null,"presidentName": "Donald Trump","citation": "91 FR 60568","volume": 91,"startPage": 60568,"endPage": 60572,"pageLength": 5,"docketIds": ["CMS-4217-NC"],"regulationIdNumbers": ["0938-AW08"],"cfrTitles": [42],"cfrCitations": ["42 CFR 423"],"significant": null,"commentUrl": "http://www.regulations.gov/commenton/CMS_FRDOC_0001-4452","pdfUrl": "https://www.govinfo.gov/content/pkg/FR-2026-09-24/pdf/2026-19535.pdf","rawTextUrl": "https://www.federalregister.gov/documents/full_text/text/2026/09/24/2026-19535.txt","fullText": null,"fullTextChars": null,"fullTextTruncated": null,"url": "https://www.federalregister.gov/documents/2026/09/24/2026-19535/request-for-information-medicare-part-d-reasonable-and-relevant-pharmacy-contracting-standards","fetchedAt": "2026-09-26T21:55:50.417Z"}
Document rows (rowType: "document")
| Field | Type | Meaning / when it is empty |
|---|---|---|
documentNumber | string | The Federal Register document number, e.g. 2026-19535. Stable identifier |
title | string | Printed title |
type | string | Rule, Proposed Rule, Notice or Presidential Document |
subtype | string | Finer label where the source prints one (Executive Order); usually null |
action | string | The "ACTION:" line, e.g. Final rule.; null for presidential documents |
abstract | string | The summary paragraph; null for presidential documents and some notices |
datesNote | string | The "DATES:" paragraph in the agency's own words |
excerpt | string | Matching snippet, only when searchTerm is used; highlighting removed |
agencyNames | string[] | Every agency that signed the document, department first |
primaryAgency | string | First entry of agencyNames |
topics | string[] | Index terms as printed; empty for many notices and all presidential documents |
publicationDate | string | YYYY-MM-DD; can be in the future for a scheduled issue |
effectiveOn | string | Effective date; null for most notices and proposed rules |
commentsCloseOn | string | Comment closing date; null for final rules |
commentsOpen | boolean | commentsCloseOn is today or later; null when there is no comment date |
daysUntilEffective | number | Whole UTC days from the run day; negative when already in force |
daysUntilCommentsClose | number | Whole UTC days from the run day; negative when the window has closed |
signingDate | string | Presidential documents only |
executiveOrderNumber | number | Executive orders only |
presidentName | string | The president in office at publication — the source fills it on every document |
citation | string | Federal Register citation, e.g. 91 FR 60568 |
volume, startPage, endPage, pageLength | number | Position in the printed issue |
docketIds | string[] | Agency docket numbers; empty when the agency prints none |
regulationIdNumbers | string[] | RIN numbers linking the document to the unified agenda |
cfrTitles | number[] | CFR titles the document touches, e.g. [40] |
cfrCitations | string[] | Printed citations, e.g. ["40 CFR 228"]; empty for notices |
significant | boolean | Significant under EO 12866; null on the majority of documents |
commentUrl | string | Where the source sends comments; often null |
pdfUrl | string | The official PDF of the issue page |
rawTextUrl | string | Plain-text version of the document |
fullText, fullTextChars, fullTextTruncated | string / number / boolean | Filled only with includeFullText |
fullTextError | string | With includeFullText: why this row has no fullText (no plain text published, HTTP 404, or the request failed); null otherwise |
url | string | The document's page |
fetchedAt | string | ISO 8601 UTC |
A docketId that matches nothing yields one row with found: false and the docket you asked for, never an empty
success. With onlyNew that row is written once; later runs that still find nothing say so in the status message and
write nothing.
Public-inspection rows (rowType: "publicInspection")
The same identity fields plus filingType (regular or special), filedAt (exact filing time converted to UTC),
publicationDate (the issue it is scheduled for), inspectionIssueDate (which desk day the row comes from), numPages,
subject and editorialNote. abstract, topics and the CFR fields do not exist before printing.
Agency rows (rowType: "agency")
slug (the value for agencySlugs), name, shortName, description, parentSlug, parentName, childSlugs,
agencyUrl (the agency's own site), url and fetchedAt.
Dataset views: Documents (the overview), Deadlines (comment and effective dates with the days left), Document details (abstract, action, executive order number, text length), Public inspection, Agency dictionary.
Every run also writes a SUMMARY record to the default key-value store: the endpoint and first request URL, the
filters as they were actually applied, the total number of matches, rows written, requests spent, agency slug
corrections, the full-text counts (attached / not published / failed), why the run stopped early if it did, whether the
10 000-document window was hit, and the run's status message.
Use it from code / agents
curl -X POST "https://api.apify.com/v2/acts/yadroo~federal-register-documents/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"documentTypes":["PRORULE"],"commentsOpenOnly":true,"fields":["documentNumber","title","primaryAgency","commentsCloseOn","daysUntilCommentsClose","url"],"maxItems":25}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('yadroo/federal-register-documents').call({ cfrTitle: 40, documentTypes: ['RULE'], effectiveWithinDays: 120, maxItems: 20 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("yadroo/federal-register-documents").call(run_input={"searchTerm": "artificial intelligence", "lookbackDays": 30, "maxItems": 50})items = client.dataset(run["defaultDatasetId"]).list_items().items
Use fields to hand an agent only the columns it reasons about — it makes prompts far shorter and costs nothing extra.
For a retrieval pipeline, add includeFullText with a small maxItems and index fullText per documentNumber.
MCP: add https://mcp.apify.com to Claude / Cursor / any MCP client and call the yadroo/federal-register-documents
tool with the same JSON input.
Pricing
Pay per event: $0.001 per run start + $0.002 per dataset row. The start event is charged on every run, including a
run that finds nothing, and the found: false row of an unmatched docket is a billed row like any other. Bronze −10 %,
Silver −20 %, Gold and above −30 % on the row price; the start event is the same on every plan; platform usage is
included.
| Run | Rows | Cost at list price |
|---|---|---|
| The Console example input (50 newest documents for "artificial intelligence") | 50 | $0.001 + 50 × $0.002 = $0.101 |
| A comment-deadline list | 25 | $0.001 + 25 × $0.002 = $0.051 |
| Five notices with the full text attached | 5 | $0.001 + 5 × $0.002 = $0.011 |
A daily watch that finds nothing new (onlyNew) | 0 | $0.001 + 0 = $0.001 |
Runs take 256 MB, no browser, and the ones behind this README finished in three to five seconds. includeFullText
costs one extra request per row on the source side but no extra event.
Maximum cost per run. The run reads your limit before it starts, writes rows only while the limit pays for them, and then ends with "Stopped at your spending limit: N rows delivered" — no row is stored, billed or remembered past it, and no further page or document text is requested.
Limits & FAQ
- 10 000 documents per query. The source serves at most 10 000 results for one set of filters, however deep you
page. When a run hits that ceiling it says so in the status message and in
SUMMARY.resultWindowHit— narrow the date window, the agency or the CFR title and run again. - No published rate limit. The API needs no key and documents no request quota, so this actor stays deliberately
polite: requests are sequential with a short pause, 429 and 5xx answers are retried with backoff and
Retry-After, and a run makes at most 140 requests; when it gets there it ends with what it has written and says so. If the source ever starts refusing requests systematically, the honest fix is to narrow the query, not to work around the block. - Full text: at most 120 rows per run. Each text is one request, so a larger
maxItemsis lowered to 120 with a note in the status message. A document the source publishes no plain text for, or whose text request fails, is still written, withfullTextErrorsaying why; after three failed text requests in a row the run stops asking and ends with what it has. A row is never written without the text because the run ran out of requests or time. - Timeout. Rows are written page by page. A run that gets close to its timeout stops starting new requests and ends SUCCEEDED with "Stopped before the run timeout: N rows saved"; a restart of the run on Apify's side never writes or bills a row twice.
- Only the JSON API is read. The site's HTML pages sit behind a bot wall; this actor never touches them. It fetches
nothing outside
federalregister.gov. - Freshness. Documents appear with the issue they are scheduled for, so
publicationDateis often a few days in the future. The filing desk (publicInspection) is the earliest view: agencies file on business days, usually from 08:45 US Eastern, so a weekend run returns Friday's desk andinspectionIssueDatetells you which day you got. - Empty fields are the source's, not a bug.
effectiveOnexists for final rules and some notices;commentsCloseOnfor proposals;significantis set on a minority of documents;topicsandcfrCitationsare empty for most notices;commentUrlis published only sometimes. - Coverage. Full text from 1994 onward; scanned issues reach back to 1936 but carry fewer structured fields.
- A wrong filter value is not answered with an empty run. Unknown agency slugs are corrected or rejected by name; unknown topic, section or presidential-document values are rejected by the source and repeated back to you as the input to change.
onlyNewis per filter combination, stored in a named key-value store, so two scheduled tasks on this actor do not eat each other's memory — the record key holds a hash of the exact filters, so long filter sets no longer share a record. The run date,lookbackDays, the sort order,maxItemsandfieldsare not part of the combination. The first run of a new combination returns everything it finds; a document is remembered only once it was written, so a run stopped by your spending limit leaves the rest for the next run.- Licensing. Federal Register documents are works of the US Government published by the Office of the Federal Register and are in the public domain. The actor reads only public endpoints and collects no personal data beyond the names of officials that the documents themselves print.
Made by Yadroo. Sibling actors: sec-edgar-filings, openfda-records, cisa-kev-vulnerabilities, bls-release-calendar, us-treasury-yields.