# Federal Register Scraper: Rules, Notices & Executive Orders (`tidyharvest/federal-register-scraper`) Actor

Pull US Federal Register documents for one or many search terms: final and proposed rules, notices and executive orders with agencies, effective dates, comment deadlines, dockets, RINs, CFR parts, full text and PDF links. No proxy. $0.80 per 1,000 documents.

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

## Pricing

from $0.48 / 1,000 document scrapeds

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 Scraper: Rules, Notices & Executive Orders

Pull **US federal regulations** straight from the **Federal Register**: final rules, proposed rules, agency notices and **executive orders**, with agencies, effective dates, **comment deadlines**, docket IDs, RINs, CFR parts and links to the official PDF. **$0.80 per 1,000 documents**, no start fee.

It reads the official FederalRegister.gov API, so there is no browser, no proxy and no blocking: a default run returns 50 documents in a few seconds. Filters run on the API side, so you only pay for documents that match.

### What you can do with it

- **Regulatory monitoring and compliance alerts:** schedule a daily run for your agencies (EPA, FDA, SEC, FAA...) or CFR parts and get every new rule and its effective date.
- **Comment-period tracking:** list proposed rules still open for public comment, with the closing date and the regulations.gov comment link.
- **Tomorrow's documents today:** *public inspection* mode returns documents filed for publication in the next business day(s), before they appear in the daily issue.
- **Executive order tracking:** every executive order, proclamation or memorandum with its number and signing date.
- **Legal, policy and lobbying research:** follow a docket or RIN across its whole history, or search the full text since 1994.
- **AI and RAG pipelines:** turn on full text to feed rules and notices to an LLM or search index.

### How to use it

1. Pick filters: search terms, agencies, document types, a date range, or tick *Open for comment only* / *Significant only*. Or paste document numbers.
2. Set *Max documents* (default 50) and click **Start**.
3. Download the results as JSON, CSV or Excel, or call the actor from the API and schedule it.

Running with no input returns the last 30 days' final rules, newest first (50 documents).

### Input

| Field | What it does |
|---|---|
| `mode` | `search` (published documents) or `publicInspection` (documents being published next). |
| `query` | Full-text search, same syntax as the site's search box. |
| `queries`, `maxItemsPerQuery` | Several search terms in one run, each with the same filters; rows carry `searchQuery`, and a document found twice is returned once. |
| `agencies` | Names, abbreviations or slugs: `EPA`, `DOL`, `Department of Energy`, `Food and Drug Administration`, `securities-and-exchange-commission`. |
| `documentTypes` | `RULE`, `PRORULE`, `NOTICE`, `PRESDOCU` (default `RULE`; clear it for all types). |
| `presidentialDocumentTypes` | `executive_order`, `proclamation`, `memorandum`, ... |
| `dateFrom` / `dateTo` | Publication date range. Empty = last 30 days for a filter-only run. |
| `effectiveFrom` | Rules effective on or after a date. |
| `significantOnly`, `commentsOpenOnly` | EO 12866 significant documents; comment period still open. |
| `docketId`, `regulationIdNumber`, `cfr` | Follow a docket, a RIN, or a CFR title/part (`40 CFR 60`). |
| `documentNumbers` | Fetch exact documents (`2026-20902`); search filters are ignored. |
| `sort` | `newest`, `oldest` or `relevance`. |
| `includeFullText` | Adds the plain full text (one extra request per document, up to 1,000 per run). |
| `maxItems` | Hard cap on results and cost (max 10,000). |

Example: proposed EPA rules still open for comment

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

Example: three topics across all agencies since July, 100 documents each

```json
{ "queries": ["artificial intelligence", "PFAS", "tariff"], "documentTypes": [], "dateFrom": "2026-07-01", "maxItemsPerQuery": 100, "maxItems": 300 }
```

Example: every executive order this year

```json
{ "presidentialDocumentTypes": ["executive_order"], "dateFrom": "2026-01-01", "maxItems": 500 }
```

### Output

One item per document:

```json
{
  "documentNumber": "2026-19774",
  "title": "National Emission Standards for Hazardous Air Pollutants for Gasoline Distribution Facilities and Standards of Performance for Bulk Gasoline Terminals Reconsideration",
  "type": "Proposed Rule",
  "action": "Proposed rule; reconsideration of final rule.",
  "abstract": "On May 8, 2024, the U.S. Environmental Protection Agency (EPA) published ...",
  "agencyNames": ["Environmental Protection Agency"],
  "agencySlugs": ["environmental-protection-agency"],
  "publicationDate": "2026-09-28",
  "effectiveOn": null,
  "commentsCloseOn": "2026-11-12",
  "docketIds": ["EPA-HQ-OAR-2025-0302", "FRL-8202.1-01-OAR"],
  "regulationIdNumbers": ["2060-AW66"],
  "cfrReferences": ["40 CFR 60", "40 CFR 63"],
  "significant": false,
  "executiveOrderNumber": null,
  "citation": "91 FR 61175",
  "htmlUrl": "https://www.federalregister.gov/documents/2026/09/28/2026-19774/national-emission-standards-for-hazardous-air-pollutants-for-gasoline-distribution-facilities-and",
  "pdfUrl": "https://www.govinfo.gov/content/pkg/FR-2026-09-28/pdf/2026-19774.pdf",
  "commentUrl": "http://www.regulations.gov/commenton/EPA-HQ-OAR-2025-0302-0001",
  "source": "Source: FederalRegister.gov API (Office of the Federal Register / GPO). ..."
}
```

Also included: `subtype`, `signingDate`, `dates`, `topics`, `startPage`/`endPage`/`pageLength`, `volume`, `presidentialDocumentNumber`, `proclamationNumber`, `correctionOf`, `publicInspectionPdfUrl`, `fullTextXmlUrl`, `rawTextUrl`, `regulationsGovUrl`, `apiUrl`, and `fullText` when requested. Public inspection rows add `filedAt`, `filingType` and `editorialNote`, and have no abstract or page numbers yet. Fields a document does not have are `null`.

### Pricing

Pay per document returned: **$0.80 per 1,000 documents** (`document-scraped`), no start fee. Filters and *Max documents* apply before you are charged, and document numbers that are not found are not charged. A run that finds nothing fails instead of returning an empty dataset.

### Limits and notes

- The API returns at most **10,000 results per search**. For bigger pulls, split by date range (e.g. one run per month).
- Full-text search covers documents from 1994 on, the range FederalRegister.gov covers.
- Public inspection mode returns what is on the public inspection desk at run time; it changes during each business day.
- **Legal status:** FederalRegister.gov is not an official legal edition of the Federal Register and does not replace the official print or electronic edition on GPO's govinfo.gov. Every row includes `pdfUrl`, the official govinfo.gov PDF; verify against it for legal research.
- Federal Register content is a US government work in the public domain. Each row carries a `source` note crediting the Office of the Federal Register.
- This actor uses only the public FederalRegister.gov developer API, which the site designates for programmatic access. It is not affiliated with or endorsed by the Office of the Federal Register, the National Archives, or the Government Publishing Office.

# Actor input Schema

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

`search` = published documents matching the filters below. `publicInspection` = documents on public inspection right now, i.e. the ones being published in the next business day(s); only the agency, document type and query filters apply.

## `query` (type: `string`):

Full-text search, same syntax as the FederalRegister.gov search box (e.g. `artificial intelligence`, `"per- and polyfluoroalkyl"`, `tariff | duty`). Empty = all documents matching the other filters.

## `queries` (type: `array`):

Run several full-text searches in one go, each with the filters below (e.g. `artificial intelligence`, `PFAS`, `tariff`). Every row says which term found it; a document found by two terms is returned once.

## `maxItemsPerQuery` (type: `integer`):

Cap for each search term when you give several. Empty = no per-term cap (only Max documents applies).

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

Agency names, abbreviations or slugs as listed on federalregister.gov/agencies (e.g. `Environmental Protection Agency`, `EPA`, `food-and-drug-administration`, `SEC`). Matches any.

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

Which kinds of documents to return. Empty = all types.

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

Narrow presidential documents, e.g. executive orders only. Selecting any adds Presidential documents to the document types.

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

Publication date on or after (YYYY-MM-DD). Empty = the last 30 days, unless you set a To date, search terms, a docket, a RIN, a CFR part or open-comments-only (then all dates).

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

Publication date on or before (YYYY-MM-DD). Empty = no upper limit.

## `effectiveFrom` (type: `string`):

Only rules whose effective date is on or after this date (YYYY-MM-DD). Handy for upcoming compliance deadlines.

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

Only documents deemed significant under Executive Order 12866 (major economic or policy impact).

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

Only documents whose public comment period closes today or later. Pair with Proposed rules for a list of rulemakings you can still comment on.

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

Agency docket number, e.g. `EPA-HQ-OAR-2021-0317` or `USCG-2026-1270`.

## `regulationIdNumber` (type: `string`):

Unified Agenda RIN, e.g. `2060-AV16`.

## `cfr` (type: `string`):

Documents affecting a Code of Federal Regulations title or part, e.g. `40 CFR 60` or `21 CFR 101` or just `12`.

## `documentNumbers` (type: `array`):

Fetch these exact documents by FR document number (e.g. `2026-20902`). When set, all search filters are ignored. Numbers not found are skipped (and not charged).

## `sort` (type: `string`):

Order of results. Empty = relevance when you set search terms, otherwise newest first.

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

Adds `fullText` (plain text of the whole document, up to 200,000 characters). One extra request per document, so runs are slower; capped at 1,000 documents per run.

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

Hard cap on results for the run (also caps your cost). The API serves at most 10,000 results per search; split by date range for more.

## Actor input object example

```json
{
  "mode": "search",
  "documentTypes": [
    "RULE"
  ],
  "significantOnly": false,
  "commentsOpenOnly": false,
  "includeFullText": false,
  "maxItems": 50
}
```

# Actor output Schema

## `documents` (type: `string`):

Federal Register documents, one item per document.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("tidyharvest/federal-register-scraper").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 = {}

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

```

## MCP server setup

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

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/Qirudsn7kPjNyPzSQ/builds/0Gp3eHt2uJP1cmDj4/openapi.json
