# Federal Register Documents Scraper (US Rules) (`knotty_mistveil/federal-register-documents`) Actor

US Federal Register rules, proposed rules, notices and presidential documents from the official API: agency, docket, RIN, CFR part, comment deadline.

- **URL**: https://apify.com/knotty\_mistveil/federal-register-documents.md
- **Developed by:** [Jason](https://apify.com/knotty_mistveil) (community)
- **Categories:** Business, News, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 document returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Federal Register Documents Scraper (US Rules)

Pulls documents from the **Federal Register**, the daily journal of the United States government, through the official `federalregister.gov` API v1. No API key, no account, no HTML parsing. You get one flat JSON record per document with its title, type and action line, the abstract, every publishing agency, the publication and effective dates, the public comment deadline, the agency docket numbers, the RIN, the CFR parts the document touches, the *91 FR 57089* citation, the page count, the EO 12866 significance flag and links to the document page and its GPO PDF — filtered by document type, publication-date window, agency, keyword, docket and comment deadline. The API held **1,007,899 documents** on 8 September 2026, back to 3 January 1994, and the Federal Register adds about **100 a business day**.

The Actor's own contribution is completeness. The API refuses to page past its 10,000th hit and reports a count of exactly 10,000 for anything larger, so a scraper that simply pages stops at 10,000 records and still looks finished. This one measures each publication-date window first and halves it until every part is readable, then reads the parts newest-first: a full-year download of 2025 returned **23,690 documents in about a minute**, matching the API's own month-by-month counts exactly, with `windowExhausted: true` in the run summary to say so.

### What you get

Every record contains:

| Field | Description |
| --- | --- |
| `id` | Federal Register document number, for example `2026-18279` |
| `source` | `federal-register`, constant |
| `url` | The public document page on federalregister.gov |
| `pdfUrl` | The GPO PDF of the document (`govinfo.gov`); falls back to the public-inspection PDF |
| `title` | Document title, for example `Safety Zone; Laguna Madre, South Padre Island, TX` |
| `type` | `Rule`, `Proposed Rule`, `Notice` or `Presidential Document` |
| `subtype` | Only for presidential documents: `Executive Order`, `Proclamation`, `Determination`, `Notice`, `Other` (1.0% of documents) |
| `action` | The document's own ACTION line, e.g. `Temporary final rule.`, `Notice of proposed rulemaking.` (70.7%) |
| `abstract` | The agency's summary paragraph (74.0%) |
| `agencies` | Every publishing agency, in the order the document lists them, e.g. `["Homeland Security Department", "Coast Guard"]` |
| `agencySlugs` | The federalregister.gov slug for each agency the Office of the Federal Register could match — the values the `agencies` input filters on |
| `publicationDate` | Date the document appeared in the Federal Register, `YYYY-MM-DD` |
| `effectiveOn` | Date a rule takes effect, or `null` (14.8% carry one) |
| `commentsCloseOn` | Public comment deadline, or `null` (33.2% carry one) |
| `docketIds` | The agency's own docket numbers, exactly as printed: `["EPA-HQ-OW-2026-6965", "FRL 13340-01-OW"]` (73.5%) |
| `rins` | Regulation Identifier Numbers, e.g. `["1625-AA00"]` (12.8%) |
| `cfrReferences` | The CFR parts the document affects, as citation strings: `["33 CFR 165"]`, or `["17 CFR Chapter I", "17 CFR 279"]` (19.9%) |
| `citation` | Federal Register citation, e.g. `91 FR 57089` |
| `pageLength` | Printed pages the document occupies |
| `significant` | `true` when deemed significant under Executive Order 12866, `false` when explicitly not, `null` when the Office of the Federal Register recorded no flag (91.6%) |
| `fetchedAt` | ISO timestamp of the run that produced the record |

Coverage percentages were measured on all 2,562 documents published between 1 August and 8 September 2026. `citation`, `pageLength`, `pdfUrl`, `url`, `title` and `publicationDate` were present on every one of them.

The dataset ships three views: **Overview** (dates, type, agencies, action, citation, link), **Rulemaking references** (docket, RIN, CFR parts, significance) and **Comment deadlines** (deadline first, with the abstract and the PDF link).

### Input

| Input | Type | Default | Description |
| --- | --- | --- | --- |
| `documentTypes` | string\[] | all four | Any of `RULE` (final rule), `PRORULE` (proposed rule), `NOTICE`, `PRESDOCU` (presidential document). |
| `daysBack` | integer | `7` | Look-back window in days on the publication date, ending today and inclusive at both ends, so `7` covers 8 calendar dates. Ignored when `dateFrom`/`dateTo` are set. Max 12,000, which reaches the start of the archive. |
| `dateFrom` | string | – | Start of the publication-date window, `YYYY-MM-DD`, inclusive. Anything earlier than `1994-01-03` is treated as `1994-01-03`. |
| `dateTo` | string | today | End of the publication-date window, `YYYY-MM-DD`, inclusive. |
| `agencies` | string\[] | all | A slug (`environmental-protection-agency`), a short name (`EPA`), or part of a name (`housing`). A parent department also returns its sub-agencies. An unmatched term stops the run instead of being ignored. |
| `keywords` | string\[] | none | Full-text search, run once per term and merged, so terms are **ORed**. Words *inside* one term are ANDed by the API: `"air quality"` needs both words. |
| `docketIds` | string\[] | all | Agency docket numbers as the Federal Register prints them. One search per docket, merged. |
| `significantOnly` | boolean | `false` | Keep only documents flagged significant under EO 12866 (286 of the 17,833 documents published in 2026 to 8 September, 1.6%). |
| `commentsOpenOnly` | boolean | `false` | Keep only documents whose comment period is still open (`commentsCloseOn` on or after today, as a **US Eastern** calendar date — the calendar the Federal Register prints deadlines on). Documents with no comment period are dropped. |
| `maxItems` | integer | `500` | Stop after this many documents. You are charged per document, so this is also the cost cap. Newest publication date first, so a value below the window's volume drops the **oldest** documents in it. |

Example — every proposed rule from the EPA in the last 30 days that you can still comment on:

```json
{
  "documentTypes": ["PRORULE"],
  "daysBack": 30,
  "agencies": ["EPA"],
  "commentsOpenOnly": true,
  "maxItems": 200
}
```

Example — a daily watch on significant rulemaking across the whole government, run on a schedule:

```json
{ "documentTypes": ["RULE", "PRORULE"], "daysBack": 2, "significantOnly": true, "maxItems": 100 }
```

Example — everything on two topics, whoever published it, for the last quarter:

```json
{ "daysBack": 90, "keywords": ["per- and polyfluoroalkyl", "wetland"], "maxItems": 1000 }
```

Example — a complete year of the Federal Register, all four types (23,690 records for 2025):

```json
{ "dateFrom": "2025-01-01", "dateTo": "2025-12-31", "maxItems": 100000 }
```

Bad input fails fast: an unknown document type, an agency term that matches no agency, or a malformed date stops the run with that message as its status, before any search request is made.

### Output example

A real record from a live run on 8 September 2026 (`{"daysBack": 3, "maxItems": 5}`), unedited:

```json
{
  "id": "2026-18279",
  "source": "federal-register",
  "url": "https://www.federalregister.gov/documents/2026/09/08/2026-18279/safety-zone-laguna-madre-south-padre-island-tx",
  "pdfUrl": "https://www.govinfo.gov/content/pkg/FR-2026-09-08/pdf/2026-18279.pdf",
  "title": "Safety Zone; Laguna Madre, South Padre Island, TX",
  "type": "Rule",
  "subtype": null,
  "action": "Temporary final rule.",
  "abstract": "The Coast Guard is establishing a temporary safety zone for navigable waters on the Laguna Madre. The safety zone is needed to protect personnel, vessels, and the marine environment from potential hazards associated with an over water fireworks display. Entry of vessels or persons into this zone is prohibited unless specifically authorized by the Captain of the Port, Sector Corpus Christi, or their designated representative.",
  "agencies": ["Homeland Security Department", "Coast Guard"],
  "agencySlugs": ["homeland-security-department", "coast-guard"],
  "publicationDate": "2026-09-08",
  "effectiveOn": "2026-09-05",
  "commentsCloseOn": null,
  "docketIds": ["Docket Number USCG-2026-1094"],
  "rins": ["1625-AA00"],
  "cfrReferences": ["33 CFR 165"],
  "citation": "91 FR 57089",
  "pageLength": 2,
  "significant": false,
  "fetchedAt": "2026-09-08T05:23:23.808Z"
}
```

A proposed rule from the same run carries the fields a rule does not: `"type": "Proposed Rule"`, `"commentsCloseOn": "2026-12-07"` and `"action": "Proposed rule."` — for example `2026-18282`, "Unleashing Unlicensed Spectrum for Direct-to-Device", Federal Communications Commission, `47 CFR 2`, 15 pages. A presidential document carries `"type": "Presidential Document"` with a `subtype` — all 25 of them in the August-September sample had one — `"agencies": ["Executive Office of the President"]`, and neither a docket nor a RIN (none of those 25 carried either).

Every run also writes a `SUMMARY` record to the key-value store with the resolved window, the filters used, the number of requests and publication-date segments, how many documents each filter dropped, any GPO typesetting code left unresolved in the text (`unresolvedMarkup`), and the `windowExhausted` completeness flag (see *Limits and freshness*).

### Pricing

Pay per result: **US$0.002 per document delivered** (US$2 per 1,000 documents). You are charged only for records pushed to the dataset; a run that returns nothing costs nothing. Runs on the Apify free plan are limited by the platform's free-tier usage allowance.

### Data source and licence

- Search: `GET https://www.federalregister.gov/api/v1/documents.json`. Agency list: `GET https://www.federalregister.gov/api/v1/agencies.json`. Both are public. The Office of the Federal Register's own API documentation states that "FederalRegister.gov APIs do not require API keys; all you need is an HTTP client or browser." Human-readable docs: <https://www.federalregister.gov/developers/documentation/api/v1>; the machine-readable OpenAPI description the page renders is at <https://www.federalregister.gov/api/v1/documentation.json> (both read 8 September 2026).
- **This Actor only calls the API.** The site's HTML pages sit behind a bot check that sends automated requests to a CAPTCHA page; the `api/v1` endpoints do not, which is the access route the publisher offers for programmatic use. Nothing here parses a web page or works around that check.
- **Licence.** The Federal Register is published by the Office of the Federal Register, National Archives and Records Administration, and its contents are written by federal officers and employees as part of their official duties. That makes them US Government works: not subject to domestic copyright under 17 U.S.C. § 105, and free to reuse commercially. The online edition is the official legal edition under 44 U.S.C. 4101 and 1 CFR 5.10 (<https://www.govinfo.gov/help/fr>, read 8 September 2026).
- The standard US Government Work terms at <https://www.usa.gov/government-copyright> (read 8 September 2026) add two restrictions that apply here: you "cannot use government materials in a way that implies endorsement by a government agency, official, or employee", and you "cannot use federal government trademarks or federal government agency logos without permission." Attribute as "Source: Federal Register" and link to the document page.
- **Personal data.** The fields this Actor publishes are agency-authored bibliographic metadata, not contact records: no email address or telephone number appeared in the `title` or `abstract` of any of the 2,562 documents sampled for 1 August to 8 September 2026. A named individual does appear in a small minority of titles: 9 of those 2,562 titles (0.35%) matched a name-shaped pattern and 6 of the 9 really were a person, every one of them an enforcement or licensing action the agency is required to publish — DEA registration decisions ("Stephen Bossenberry, M.D.; Decision and Order") and FDA debarment orders. The Federal Register publishes those names lawfully as part of the official record; how you then use them is your responsibility under the applicable regime. Agency contact names, emails and phone numbers live in the documents' `FOR FURTHER INFORMATION CONTACT` sections, which are part of the full text and are **not** returned by this Actor.

### Limits and freshness

- **Volumes, measured 8 September 2026** by counting through the API itself: **1,007,899 documents** in total, from 3 January 1994 (the oldest publication date the API serves) to 8 September 2026. By year: 30,830 in 2024, 23,690 in 2025, 17,833 in 2026 to 8 September. Six 8-day windows sampled across June to September 2026 held **461 to 629 documents** (about 100 per business day, and none at weekends or on federal holidays); 31-day windows held 1,985 to 2,290. Of the 2,562 documents published between 1 August and 8 September 2026, **80.0% were notices**, 12.6% final rules, 6.4% proposed rules and 1.0% presidential documents, and 30.6% still had an open comment period on 8 September.
- **Size `maxItems` to the window, and check `windowExhausted`.** `maxItems` counts records kept after filtering and the stream is newest-first, so a value below the window's volume drops the **oldest** documents in it — but never silently. The run stops the moment the cap is filled and warns `maxItems (N) reached before the window was exhausted`, and the `SUMMARY` record carries `limitReached: true` with `windowExhausted: false`. `windowExhausted: true` is the guarantee that you hold the complete window: it is set only when every publication-date segment was read to its end and every record kept was delivered. The default `maxItems` of 500 covers a quiet week (461 documents for 1–8 September 2026) but not a busy one (629 for 25 August–1 September); use 800 for a guaranteed complete week of all four types, or narrow `documentTypes` — a week of rules and proposed rules alone was 63 to 91 documents.
- **The API's 10,000-hit paging cap, and how this Actor gets past it.** `documents.json` answers any page that would reach past the 10,000th hit with `HTTP 400 Pagination limit exceeded. No more than 10000 items can be requested at a time`, and it reports `count: 10000` for every result set larger than that — so the cap is invisible from a single response. The Actor measures each publication-date window with a one-row request first and, whenever the count reaches 10,000, halves the window and measures both halves, repeating until every part is readable; the halves are then read newest-first, which keeps the output in strict publication-date order across the seams. Downloading all of 2025 this way took **4 segments, 32 requests and 57 to 77 seconds** across three runs on different days (56.6 s, 64.6 s, 76.6 s - the spread is the network, not the Actor) and returned **23,690 records** — the same total as the API's own twelve monthly counts added up, month for month, with no duplicate document number anywhere in the set. `maxItems` tops out at 100,000, so the full 1994-2026 archive is a run per year (23,000 to 35,000 documents each) rather than a single run, on the same machinery.
- **Speed, measured 8 September 2026** on this Actor: 461 documents (a 7-day window) in 3.6 s over 2 requests; 2,007 documents (30 days) in 6.3 s over 4 requests; 23,690 documents (a full year) in 56.6 to 76.6 s over 32 requests — roughly 300 to 420 records a second, network-bound. A run that only needs a handful asks for only a handful: `{"daysBack": 3, "maxItems": 5}` sizes its page to 5 rows and finishes in two requests.
- **Rate limits.** The Federal Register documents none for these endpoints and sends no rate-limit headers. 20 consecutive requests with no pacing, and 20 more at five concurrent, all returned HTTP 200 (measured 8 September 2026). The Actor issues requests one at a time anyway and retries 429 and 5xx responses with exponential back-off, honouring `Retry-After`.
- **Freshness, and what is *not* here.** The day's issue is in the API well before the working day starts: at 05:23 UTC on 8 September 2026 (01:23 US Eastern) `documents.json` already held 69 documents dated 2026-09-08, and nothing dated later. Publication runs on business days only — the 2,562 documents sampled fell on 26 publication dates between 1 August and 8 September 2026: every weekday in that span except Labor Day, and not one weekend date. Documents filed for a *future* issue are on the separate public-inspection desk — 6 of the 77 documents on it on 8 September 2026 were for the next day's issue — and this Actor does not read that endpoint, so a document reaches you on its publication date, not two days earlier. Run an overlapping window (`daysBack: 2` daily) rather than one that exactly abuts the previous run. Dates are calendar dates as the Federal Register publishes them (US Eastern), with no time component.
- **Text arrives resolved — and what cannot be resolved stays visible.** The Federal Register is typeset by the Government Publishing Office, and three of the GPO's typesetting conventions survive into the API's plain-text fields. Measured over **212,338 documents** — every document of seven complete calendar years (1996, 2001, 2006, 2011, 2016, 2021, 2025):

  - **Angle-bracket locator codes**, in 1.13% of documents. The wrappers `<INF>`/`<SUP>` (sub- and superscript) and the font switches `<RM>`, `<IT>`, `<CS>` print nothing and are removed, keeping their text: `SO<INF>2</INF>` → `SO2`, `ACTION: <RM>Notice.` → `ACTION: Notice.`. The symbol codes become their character: `<bullet>` → `•`, `<plus-minus>` → `±`, `<Register>` → `®`, `<Copyright>` → `©`, `<gr-thn-eq>`/`<ls-thn-eq>` → `≥`/`≤`, `<brit-pound>` → `£`, `<difference>` → `~`, the whole `<greek-…>` family → its Greek letter (`<greek-m>` → `μ`, `<greek-a>` → `α`, `<greek-oh>` → `ω`, `<greek-D>` → `Δ`), and `<greek-i>` → `#`, which is the one member of that family the Federal Register does not set as a letter.
  - **Square-bracket entity names**, in 0.35% of documents: `A[ntilde]o Nuevo` → `Año Nuevo`, `30[deg]03[min]38[sec]` → `30°03′38″`, `Northeast Gateway[supreg]` → `Northeast Gateway®`, `Vig[eacute]e Le Brun` → `Vigée Le Brun`, `T[uuml]rkiye` → `Türkiye`. Only names in the table are touched, so bracketed prose — `[CFR]`, `[sic]`, a species name, an agency's own acronym — is published exactly as written.
  - **The backslash superscript marker**, in 0.42% of documents: `15 <greek-m>g/m\3\` → `15 μg/m³`, `enriched \15\N` → `enriched ¹⁵N`.

  **The vocabulary is not closed, and this Actor does not pretend otherwise.** Every entry in both tables was checked against the Federal Register's own typeset rendition of the same passage — the GPO XML behind `full_text_xml_url`, or the rendered `body_html_url` — and **a code outside them is published exactly as the API sent it, never deleted**, counted by name under `unresolvedMarkup` in the `SUMMARY` record, and warned about in the run log. That matters more than the table: an unknown code that is silently dropped turns `15 <greek-m>g/m\3\` into `15 g/m3` — wrong by a factor of a million, and indistinguishable from correct data downstream. Over those 212,338 documents, 11,054 locator-code occurrences resolved and **4 did not** (`<pound>` and `<script-l>`, both inside the same five-document typesetting artefact), so they were left in the text and reported. A bare `<` in ordinary prose ("fewer than < 5 units") and an address in angle brackets (`<Rules_Comments@ao.uscourts.gov>`) are not markup and are left alone. No HTML character reference (`&amp;`, `&ndash;`) appeared anywhere in the sample, so there is nothing to decode.
- **Missing values are the agency's, not the Actor's.** The percentages in *What you get* are how often each optional field is actually filled; the rest stay `null` or `[]` rather than being guessed. Two specific cases are worth knowing. `significant` is `null` for 91.6% of documents because the flag is recorded only where OIRA reviewed the rulemaking — `null` means "no flag recorded", not "not significant"; `significantOnly: true` selects only the documents flagged `true`. And an agency name the Office of the Federal Register could not match to its own agency list arrives with a raw name and nothing else (62 of the 4,104 agency entries in the August–September sample (1.5%), usually an agency's own typo — "Rual Housing Service"). Those names are published in `agencies` so the record stays faithful, but never invented into a slug, so `agencySlugs` can be shorter than `agencies`. A handful of archive documents carry no publisher at all and arrive with `agencies: []` — 435 of the 212,338 documents in seven complete years (0.21%), of which 428 fall in 1996, 3 in 2001, 4 in 2006 and none at all from 2011 onwards.
- **What the API filters, and what this Actor filters.** Document type, date window, agency, keyword, docket and the significance flag are all applied by the API. Two things are not. `commentsOpenOnly` has no server-side equivalent (`conditions[comments_close_on]` is rejected as "not a valid field"), so it is applied to each record after it arrives, against today's **US Eastern** date rather than the UTC one — a deadline of "today" in Washington is still open for the four or five hours each day when UTC has already rolled over. And several `keywords` cannot be ORed in one request: the API ANDs the words of a single `conditions[term]` and treats a bare `OR` as another word — on 8 September 2026 `wetland OR pesticide` returned 17 hits where `wetland` alone returned 166 and `pesticide` alone 221 — so the Actor runs one search per keyword (and per docket id) and merges the results newest-first, dropping duplicates. One more edge worth knowing about the agency filter: the server in front of the API rejects a request line over 8 KB (measured 8 September 2026 — a 7,839-character URL returned 200, an 8,485-character one HTTP 414), which caps the filter at roughly 110 agency slugs. A term broad enough to exceed that, such as a single letter, stops the run during validation with the slug count in the message instead of failing on the first request.

### Use cases

- **Regulatory monitoring for a compliance or government-affairs team:** a scheduled daily run over your agencies and CFR parts, so a new proposed rule reaches your tracker on its publication date with the docket, the RIN and the comment deadline already on the record.
- **Comment-deadline pipeline for law firms and lobbying shops:** `commentsOpenOnly` with `documentTypes: ["PRORULE"]` gives you every rulemaking still open for comment, with the deadline as the first column in the dataset's *Comment deadlines* view and the docket number you need to file at regulations.gov.
- **Policy research and regulatory-burden datasets:** download whole years — 23,690 records for 2025 in under a minute — or work back through the archive to 1994 a year at a time, and analyse volumes, page counts, significance and CFR coverage by agency — with `windowExhausted: true` as the evidence that the download is complete rather than truncated at the API's 10,000-record cap.

### Support

Open an issue on the Actor's Issues tab on Apify Store. Replies within 14 days. Bug reports that name the run id and the input used are fixed fastest.

# Actor input Schema

## `documentTypes` (type: `array`):

Which of the Federal Register's four document types to return. Default: all four.

## `daysBack` (type: `integer`):

Look-back window in days on the publication date, ending today and inclusive at both ends (7 covers 8 calendar dates). Ignored when Date from / Date to are set. The archive starts on 3 January 1994, so 12000 reaches all of it.

## `dateFrom` (type: `string`):

Start of the publication-date window, YYYY-MM-DD (inclusive). Overrides Days back. Anything before 1994-01-03 is treated as 1994-01-03, the oldest document the API serves.

## `dateTo` (type: `string`):

End of the publication-date window, YYYY-MM-DD (inclusive). Defaults to today.

## `agencies` (type: `array`):

Publishing agencies. A federalregister.gov slug (environmental-protection-agency), a short name (EPA, FDA, SEC, FCC) or part of an agency name (housing) all work, and a term that matches nothing stops the run instead of being ignored. A parent department also returns its sub-agencies: homeland-security-department includes Coast Guard and FEMA. Empty = every agency.

## `keywords` (type: `array`):

Full-text search over the document, run once per term and merged, so terms are ORed. Words inside one term are ANDed by the API: "air quality" returns documents containing both words. Empty = no keyword filter.

## `docketIds` (type: `array`):

Agency docket numbers exactly as the Federal Register prints them, for example EPA-HQ-OW-2026-6965 or FRL-13502-01-R4. One search runs per docket and the results are merged. Empty = every docket.

## `significantOnly` (type: `boolean`):

Keep only documents the Office of Information and Regulatory Affairs deemed significant under Executive Order 12866 - the economically or politically important rulemakings. About 1.6% of documents carry the flag: 286 of the 17,833 published in 2026 to 8 September.

## `commentsOpenOnly` (type: `boolean`):

Keep only documents whose public comment period has not closed yet (comment deadline on or after today, as a US Eastern calendar date - the calendar the Federal Register prints its deadlines on). Documents with no comment period at all are dropped.

## `maxItems` (type: `integer`):

Stop after this many documents. You are charged per document delivered, so this is also the cost cap. Newest publication date first, so a value below the window's volume drops the OLDEST documents in the window. Measured 8 September 2026: the Federal Register publishes about 100 documents per business day, so 7 days is about 460 documents and 30 days about 2,000.

## Actor input object example

```json
{
  "documentTypes": [
    "RULE",
    "PRORULE",
    "NOTICE",
    "PRESDOCU"
  ],
  "daysBack": 7,
  "agencies": [],
  "keywords": [],
  "docketIds": [],
  "significantOnly": false,
  "commentsOpenOnly": false,
  "maxItems": 500
}
```

# Actor output Schema

## `results` (type: `string`):

All documents returned by the run, one JSON object each. Append ?format=csv or ?format=xlsx to download a spreadsheet.

## `summary` (type: `string`):

Counts, the publication-date window used, how the window was split to get past the API's paging cap, the filters applied, any GPO typesetting code left unresolved in the text, and the windowExhausted completeness flag, written at the end of the run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "documentTypes": [
        "RULE",
        "PRORULE",
        "NOTICE",
        "PRESDOCU"
    ],
    "daysBack": 7,
    "agencies": [],
    "keywords": [],
    "docketIds": [],
    "significantOnly": false,
    "commentsOpenOnly": false,
    "maxItems": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("knotty_mistveil/federal-register-documents").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "documentTypes": [
        "RULE",
        "PRORULE",
        "NOTICE",
        "PRESDOCU",
    ],
    "daysBack": 7,
    "agencies": [],
    "keywords": [],
    "docketIds": [],
    "significantOnly": False,
    "commentsOpenOnly": False,
    "maxItems": 500,
}

# Run the Actor and wait for it to finish
run = client.actor("knotty_mistveil/federal-register-documents").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "documentTypes": [
    "RULE",
    "PRORULE",
    "NOTICE",
    "PRESDOCU"
  ],
  "daysBack": 7,
  "agencies": [],
  "keywords": [],
  "docketIds": [],
  "significantOnly": false,
  "commentsOpenOnly": false,
  "maxItems": 500
}' |
apify call knotty_mistveil/federal-register-documents --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,knotty_mistveil/federal-register-documents"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/I0msNmeRLEWPfRh3N/builds/U3EHe6cC4f4Hblx55/openapi.json
