# Federal Register Documents: Rules, Notices & Comment Dates (`yadroo/federal-register-documents`) Actor

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.

- **URL**: https://apify.com/yadroo/federal-register-documents.md
- **Developed by:** [Samat Makatov](https://apify.com/yadroo) (community)
- **Categories:** Business, News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 document row returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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: Rules, Notices & Comment Dates

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.

### Use cases

- **Comment-deadline calendar** — `documentTypes: ["PRORULE"]` with `commentsOpenOnly` gives every proposed rule whose
  comment window is still open, with the closing date, the days left and the comment link. Sort your calendar by
  `daysUntilCommentsClose`.
- **Compliance dates in your part of the code** — `cfrTitle: 40` (plus a `cfrPart`) with `effectiveWithinDays: 120`
  lists 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"` returns the proposed rule, the extensions
  and the final rule under the same agency docket, in publication order.
- **Keyword watch for a policy area** — full-text search over the whole document (`searchTerm`), a relative window
  (`lookbackDays`) and `onlyNew`, on a daily schedule: each run pays only for documents it has not delivered before.
- **Executive orders as data** — `documentTypes: ["PRESDOCU"]` with `presidentialDocumentTypes: ["executive_order"]`
  fills `executiveOrderNumber`, `signingDate` and `presidentName` for 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** — `includeFullText` attaches 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.

| Field | Type | Default | Allowed values / notes |
|---|---|---|---|
| `mode` | string | `documents` | `documents`, `publicInspection`, `agencies` — see [Modes](#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](#document-types) |
| `agencySlugs` | string\[] | all agencies | Slugs such as `environmental-protection-agency`; several are OR-ed. Short names (`EPA`) and printed names work too |
| `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 no earlier run of the same filters delivered |
| `includeFullText` | boolean | `false` | Attach the plain text — one extra request per row |
| `fullTextMaxChars` | integer | `20000` | 500–200000. Cut length of `fullText` |
| `sortBy` | string | `newest` | `newest`, `oldest`, `relevance`, `executiveOrderNumber` — see [Sort orders](#sort-orders) |
| `maxItems` | integer | `50` | 1–5000 rows |
| `fields` | string\[] | all | Keep only these output fields, in this order |

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` |

Everyday words are accepted and corrected with a warning: `"proposed rule"` becomes `PRORULE`, a misspelled `RULEZ`
becomes `RULE`. Kinds of presidential document: `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 logged (`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**

```json
{ "mode": "documents", "agencySlugs": ["environmental-protection-agency"], "documentTypes": ["RULE"], "lookbackDays": 120, "maxItems": 25 }
```

**Proposed rules that are still open for comment**

```json
{ "mode": "documents", "documentTypes": ["PRORULE"], "commentsOpenOnly": true, "sortBy": "newest", "maxItems": 25 }
```

**Rules taking effect in the next 120 days in CFR title 40**

```json
{ "mode": "documents", "documentTypes": ["RULE"], "cfrTitle": 40, "effectiveWithinDays": 120, "maxItems": 20 }
```

**Executive orders published this year**

```json
{ "mode": "documents", "documentTypes": ["PRESDOCU"], "presidentialDocumentTypes": ["executive_order"], "publishedFrom": "2026-01-01", "sortBy": "newest", "maxItems": 20 }
```

**A daily keyword watch that never repeats itself**

```json
{ "mode": "documents", "searchTerm": "artificial intelligence", "lookbackDays": 7, "onlyNew": true, "maxItems": 100 }
```

**Notices of one agency with the full text attached, for an LLM**

```json
{ "mode": "documents", "agencySlugs": ["environmental-protection-agency"], "documentTypes": ["NOTICE"], "lookbackDays": 60, "includeFullText": true, "fullTextMaxChars": 20000, "maxItems": 5 }
```

**Today's filing desk, before anything is printed**

```json
{ "mode": "publicInspection", "maxItems": 30 }
```

**The agency dictionary**

```json
{ "mode": "agencies", "searchTerm": "commission", "maxItems": 40 }
```

### Output

One real row, from run `UJShD4PM8Qh1q8YeC` (input: `{"mode": "documents", "searchTerm": "artificial intelligence"}`):

```json
{
  "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` |
| `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.

#### 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, whether the 10 000-document window was hit, and the run's status message.

### Use it from code / agents

```bash
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}'
```

```js
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();
```

```python
from apify_client import ApifyClient
client = 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 a run that writes only the `found: false` row of an unmatched docket. Apify plan discounts
lower the per-row price: −10 % on Bronze, −20 % on Silver, −30 % on Gold and above.

| Run | Rows | Cost at list price |
|---|---|---|
| The default input (50 newest documents for a keyword) | 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** |

Compute is negligible next to that: 256 MB, no browser, and the runs behind this README finished in three to five
seconds. `includeFullText` costs one extra request per row on the source side but no extra event.

### 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 stops after 140 requests. If the source ever starts refusing requests systematically, the honest fix is to
  narrow the query, not to work around the block.
- **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 `publicationDate` is 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 and `inspectionIssueDate` tells you which day you got.
- **Empty fields are the source's, not a bug.** `effectiveOn` exists for final rules and some notices; `commentsCloseOn`
  for proposals; `significant` is set on a minority of documents; `topics` and `cfrCitations` are empty for most
  notices; `commentUrl` is 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.
- **`onlyNew` is 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 first run of a new combination returns everything it finds.
- **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](https://apify.com/yadroo/sec-edgar-filings),
[openfda-records](https://apify.com/yadroo/openfda-records),
[cisa-kev-vulnerabilities](https://apify.com/yadroo/cisa-kev-vulnerabilities),
[bls-release-calendar](https://apify.com/yadroo/bls-release-calendar),
[us-treasury-yields](https://apify.com/yadroo/us-treasury-yields).

# Actor input Schema

## `mode` (type: `string`):

`documents` searches the Federal Register itself: every rule, proposed rule, notice and presidential document back to 1994 (scanned issues to 1936), including the ones already scheduled for the next issues. `publicInspection` reads the filing desk instead — papers signed and filed by an agency that will be printed in the coming days; it is the earliest a document can be seen. `agencies` writes one row per agency with the slug you need for *Agencies* below. Filters in the sections below apply to `documents`; `publicInspection` accepts document types and a filing date, `agencies` accepts a name search.

## `searchTerm` (type: `string`):

Full-text search over the whole document, not only the title. Quote a phrase (`"comment period"`) to keep the words together; several words without quotes are matched as a phrase-less query. In mode `agencies` this is a plain name filter (`commission`, `bureau`, `energy`). Empty = every document the other filters allow, newest first.

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

Keep only these kinds of document. Empty = all four. The output field `type` carries the readable form (`Rule`, `Proposed Rule`, `Notice`, `Presidential Document`), `subtype` the finer label the source prints (for example `Executive Order`).

## `agencySlugs` (type: `array`):

Agency slugs, e.g. `environmental-protection-agency`, `securities-and-exchange-commission`, `food-and-drug-administration`, `energy-department`. Several slugs are combined with OR. A department slug also brings in its sub-agencies. Run mode `agencies` once for the full dictionary — the source answers an unknown slug with an error, so this actor checks your slugs first and names the closest match instead of returning an empty run.

## `presidentialDocumentTypes` (type: `array`):

Narrows presidential documents further. Use it with document type *Presidential document*; on its own it also works, because only presidential documents carry these labels. Executive orders come with `executiveOrderNumber` and `signingDate` filled.

## `sections` (type: `array`):

The six subject areas the source itself sorts documents into. Broader than *Topics* and useful when you do not know which agency publishes what you look for.

## `topics` (type: `array`):

Index terms as slugs: `air-pollution-control`, `imports`, `reporting-and-recordkeeping-requirements`, `endangered-and-threatened-species`. A slug is the printed topic lower-cased with hyphens instead of spaces — the `topics` field of any row shows the printed form. Several topics are combined with OR.

## `docketId` (type: `string`):

One agency docket number, e.g. `EPA-HQ-OAR-2021-0317` or `CMS-4217-NC`, to follow a single rulemaking through its proposed rule, extensions and final rule. Exact match on the docket the agency prints.

## `cfrTitle` (type: `integer`):

Keep documents that change this title of the Code of Federal Regulations (40 = environment, 21 = food and drugs, 17 = securities, 12 = banks, 14 = aeronautics). The way to watch the part of the code your compliance work touches.

## `cfrPart` (type: `string`):

A part inside the CFR title above, e.g. `52` with title 40, or `1308` with title 21. Needs *CFR title* to be set. Output field `cfrCitations` lists the citations of a document (`40 CFR 52`), `cfrTitles` the title numbers alone.

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

Keep documents the unified agenda marks as significant under Executive Order 12866 — the rules with a large economic or policy effect. The flag is set on a minority of documents, so combine it with a wide date window.

## `publishedFrom` (type: `string`):

YYYY-MM-DD, earliest publication date. Empty = no lower bound.

## `publishedTo` (type: `string`):

YYYY-MM-DD, latest publication date. Documents already scheduled for the coming issues carry a future publication date, so leave this empty to see them.

## `lookbackDays` (type: `integer`):

Relative window for scheduled runs: 1 = today's issue, 7 = the last week. Documents scheduled for the coming issues are always included. Ignored when *Published from* is set.

## `effectiveWithinDays` (type: `integer`):

Keep documents whose effective date falls between today and N days from now — the deadline a company has to comply with. Only final rules and some notices carry an effective date; rows come with `daysUntilEffective`.

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

Keep documents whose comment period closes today or later, so nothing on the list is already past. Pair it with document type *Proposed rule*; rows come with `commentsCloseOn`, `daysUntilCommentsClose` and the comment link where the source has one.

## `availableOn` (type: `string`):

YYYY-MM-DD, the filing desk of one day, for mode `publicInspection` only. Empty = the newest day that has filings: agencies file on business days, so a Sunday run returns Friday's desk and the row field `inspectionIssueDate` says which day it is.

## `onlyNew` (type: `boolean`):

Remember every document number in this actor's key-value store and write only the ones that were not there on the previous run. The first run writes what it finds, later runs write what appeared since — the cheap way to run a watch list on a schedule without paying twice for the same document.

## `includeFullText` (type: `boolean`):

Add `fullText` (the plain-text version the source publishes) and `fullTextChars` to every row. This is one extra request per row, so keep *Max rows* small when you turn it on; the abstract, action line and date paragraph are in every row anyway, for free.

## `fullTextMaxChars` (type: `integer`):

Long rules run past a million characters. The text is cut at this length (`fullTextTruncated` says whether it was) to keep dataset rows and LLM prompts manageable.

## `sortBy` (type: `string`):

`relevance` needs *Search words* — without them the run falls back to `newest` and says so in the status message. `executiveOrderNumber` only orders presidential documents. Mode `agencies` is always sorted by name.

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

Stop after this many rows. A busy weekday brings 100-400 documents, a year of one agency's rules a few hundred. The source serves at most 10 000 documents per query — narrow the dates or the agency to go deeper.

## `fields` (type: `array`):

Keep only these fields, in this order, e.g. \["documentNumber", "title", "commentsCloseOn", "url"]. Empty = every field the mode produces.

## Actor input object example

```json
{
  "mode": "documents",
  "searchTerm": "artificial intelligence",
  "significantOnly": false,
  "commentsOpenOnly": false,
  "onlyNew": false,
  "includeFullText": false,
  "fullTextMaxChars": 20000,
  "sortBy": "newest",
  "maxItems": 50
}
```

# Actor output Schema

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

No description

# 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 = {
    "searchTerm": "artificial intelligence"
};

// Run the Actor and wait for it to finish
const run = await client.actor("yadroo/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 = { "searchTerm": "artificial intelligence" }

# Run the Actor and wait for it to finish
run = client.actor("yadroo/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 '{
  "searchTerm": "artificial intelligence"
}' |
apify call yadroo/federal-register-documents --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yadroo/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/mOMXZO1cTCbJO9fpg/builds/Jc26lG1AQKTV4z0Tf/openapi.json
