Federal Register Monitor: New Rules & Notices to JSON
Pricing
Pay per event
Federal Register Monitor: New Rules & Notices to JSON
Pricing
Pay per event
Rating
0.0
(0)
Developer
David-Solal Chalmeau
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Security
Limited permissionsShare
Federal Register Monitor
Watch the US Federal Register — the official daily journal of federal rules, proposed rules, notices and
presidential documents — and get one flat, ready-to-use row per published document, with the deadline fields that
actually drive decisions (commentsCloseOn, effectiveOn).
It reads the official Federal Register API (https://www.federalregister.gov/api/v1/documents.json): public,
keyless, no login, no proxies. You give it keywords and/or agency slugs and a publication window; it gives you
documents.
What you get
One dataset row per delivered document:
documentNumber,documentTitle,documentType(display),typeCode(RULE/PRORULE/NOTICE/PRESDOCU),subtypeabstract,excerpt(the API's match snippet, HTML stripped and bounded),action,datespublicationDate,signingDate,effectiveOn,commentsCloseOncitation(e.g.91 FR 67565),volume,startPage,endPage,pageLengthagencies(slug,name,id,parentId),agencyNames,agencySlugsdocketIds,regulationIdNumbers,topics,significant(EO 12866 flag),executiveOrderNumber,presidentialDocumentNumber,proclamationNumber,correctionOfhtmlUrl,pdfUrl(govinfo),rawTextUrl,bodyHtmlUrl,jsonUrl— the document itself is one fetch awayquery,queryType(keyword/agency),matchedKeywords— which watch produced the rowtotalMatches,truncated— how many documents the query really matched, and whether you are seeing a slicesources,issues,fetchedAt— provenance and a machine-readable account of anything that was not available
Input
{"keywords": ["ozone", "MOVES6"],"agencies": ["environmental-protection-agency"],"documentTypes": ["RULE", "PRORULE"],"daysBack": 30,"maxResultsPerKeyword": 5,"significantOnly": false}
keywords— full-text search terms, max 40. Each term is one query; duplicates (case/space variants) are collapsed.agencies— Federal Register agency slugs, max 20 (e.g.food-and-drug-administration). With keywords they narrow each search; without keywords each agency is watched on its own. Multiple agencies are OR'd by the API.documentTypes— any ofRULE,PRORULE,NOTICE,PRESDOCU. Unknown codes are rejected up front (see limits).daysBack(default 7, max 365), or explicitfromDate/toDateinYYYY-MM-DDwhich override it.maxResultsPerKeyword(default 20, max 100) — newest documents kept per watch. The API ignores (coerces) smallper_pagevalues, so the Actor applies this bound itself: you are never delivered or charged for more documents per watch than you asked for.significantOnly— only documents flagged significant under EO 12866.
Values above a hard cap (40 keywords, 20 agencies, 365 days, 100 results) are clamped, never silently: the run's
stats carry truncatedInputs and a free INPUT_CLAMPED row names each field, the value you asked for and the value
actually used.
Example output
Real, trimmed row from a live run ({"keywords": ["ozone"], "daysBack": 7}):
{"documentNumber": "2026-21843","documentTitle": "Official Release of the MOVES6 Motor Vehicle Emissions Model for SIPs and Transportation Conformity","documentType": "Notice","typeCode": "NOTICE","publicationDate": "2026-10-27","effectiveOn": "2026-10-27","commentsCloseOn": null,"citation": "91 FR 67565","volume": 91,"startPage": 67565,"endPage": 67570,"pageLength": 6,"agencies": [{ "slug": "environmental-protection-agency", "name": "Environmental Protection Agency", "id": 145, "parentId": null }],"agencySlugs": ["environmental-protection-agency"],"docketIds": ["FRL-13436-01-OAR"],"regulationIdNumbers": [],"topics": [],"significant": null,"htmlUrl": "https://www.federalregister.gov/documents/2026/10/27/2026-21843/official-release-of-the-moves6-motor-vehicle-emissions-model-for-sips-and-transportation-conformity","pdfUrl": "https://www.govinfo.gov/content/pkg/FR-2026-10-27/pdf/2026-21843.pdf","rawTextUrl": "https://www.federalregister.gov/documents/full_text/text/2026/10/27/2026-21843.txt","query": "ozone","queryType": "keyword","matchedKeywords": ["ozone"],"totalMatches": 1,"truncated": false,"sources": ["federal-register-api:documents.json"],"issues": [],"fetchedAt": "2026-10-28T14:16:55.402Z"}
A watch that matched nothing, a rejected query, an upstream failure or a page of documents that cannot be turned into
rows is still delivered — as a row with error (NO_MATCH, QUERY_REJECTED, UPSTREAM_FAILED,
REQUEST_BUDGET_EXHAUSTED, NO_USABLE_DOCUMENTS) — and is not charged. Such a row keeps the watch term and the
date window it covered, and carries issues describing the failure. A clamped input produces one INPUT_CLAMPED row
(no watch term: it describes the input itself), also free. A document that survives the usable filter but still cannot
be mapped into a row becomes a free CHECK_FAILED row: input names the document it failed on (or the watch, when the
document has no usable documentNumber) and message carries the reason.
Free rows are not documents and are not covered by the dataset schema. They carry error and message
(input too, on a CHECK_FAILED row) — the free-row-only keys, FREE_ROW_FIELDS in src/lib/map.js — plus the watch
fields (query, queryType, publicationDateFrom, publicationDateTo, issues, fetchedAt).
dataset_schema.json declares only the document fields: Apify validates every declared field against every pushed row,
so a free-row-only key must never be declared there.
Pricing
Pay per event: document-returned at $0.0018 per delivered document (plus a $0.00005 Actor start). One charge
per document that reaches your dataset, no matter how many of your watch terms matched it. Watches that return
nothing, upstream failures and rejected queries are free.
Limits, and what this Actor does not guarantee
- Newest-first slices, not exhaustive sets. Each watch returns at most
maxResultsPerKeyworddocuments; when the query matched more, every row saystruncated: trueandtotalMatchescarries the API's count. There is no deep pagination: the API capscountat 10000 andtotal_pagesat 50. totalMatchescan read10000when the true number is larger (the API's own ceiling); such rows carryUPSTREAM_COUNT_CAPPEDinissues.- Document types are validated client-side. The API does not ignore an unknown
conditions[type]value: it narrows to nothing ({"count": 0}), so a typo would otherwise be a silent run of empty results. Rejecting it up front turns that into a clear error before anything is fetched or charged. - An invalid agency slug is reported by the API as HTTP 400; that watch becomes a free
QUERY_REJECTEDrow carrying the upstream message. excerptis the API's snippet for the document, HTML-stripped and bounded;nullwhen the API returns none. A keyword watch that gets no snippet carriesNO_EXCERPTinissues. Agency-only watches frequently get an excerpt too (the API echoes the opening of the abstract) — do not readexcerptas proof a term matched.significantisnullwhen the API omits the flag — that is "not reported", not "not significant".FederalRegister.govis a prototype edition of the journal; the official legal text is the govinfo PDF (pdfUrl). Regulations.gov comment links are not resolved by this Actor.- Politeness: requests are paced at 2 per second and each run runs at most 30 watches, one upstream request each (a wider input
is reported as
REQUEST_BUDGET_EXHAUSTEDrows, free). No personal data is collected; only published documents.