# Regulations.gov Scraper (`aurenic/regulations-gov-scraper`) Actor

Extract federal rulemaking documents, dockets, and public comments from the official Regulations.gov API. Filter by agency, document type, and date range. No browser, no proxy.

- **URL**: https://apify.com/aurenic/regulations-gov-scraper.md
- **Developed by:** [Aurenic](https://apify.com/aurenic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 results

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

## Regulations.gov Scraper

Extract federal rulemaking documents, dockets, and public comments from the official Regulations.gov API. Filter by agency, document type, and date range. No browser, no proxy.

### What does Regulations.gov Scraper do?

Scrape the public record of every proposed and final federal rule, plus the comments citizens and organizations submit, in three modes:

- **Documents** — rules, proposed rules, notices, and supporting material. Filter by agency, subtype, and posted date range.
- **Comments** — public comments on any docket or across a keyword search. Includes submitter name, organization, location, and full comment text.
- **Dockets** — docket-level metadata with RIN, category, program, and agency.

Every record comes from the **official Regulations.gov v4 API** at `api.regulations.gov` — the same API the government portal uses. Free `DEMO_KEY` works for testing; a free personal key raises throughput \[citation:1]\[citation:4].

### Output fields

#### Document

| Field | Description |
|---|---|
| documentId | Unique document identifier |
| title | Document title |
| agencyId | Issuing federal agency (EPA, FDA, SEC, FCC, etc.) |
| documentType | Rule, Proposed Rule, Notice, etc. |
| subtype | Document subtype |
| postedDate | Date posted |
| commentStartDate | Comment period start |
| commentEndDate | Comment period deadline |
| openForComment | Whether the comment window is open |
| docketId | Parent docket |
| frDocNum | Federal Register document number |
| summary | Document abstract |
| fileFormats | Attached file download URLs |

#### Comment

| Field | Description |
|---|---|
| commentId | Comment identifier |
| title | Comment title |
| agencyId / docketId | Context |
| postedDate / receiveDate | Timestamps |
| comment | Full comment text |
| firstName / lastName / organization | Submitter |
| city / stateProvinceRegion / country / zip | Location |
| submitterType | Individual, organization, etc. |

#### Docket

| Field | Description |
|---|---|
| docketId | Docket identifier |
| title | Docket title |
| agencyId | Issuing agency |
| docketType / category / subCategory | Classification |
| rin | Regulatory Information Number |
| shortName / program | Additional metadata |

### Who is it for?

- **Regulatory affairs and compliance teams** monitoring proposed rules that affect their industry
- **Law firms and lobbyists** gathering public comments to prepare client responses
- **Policy researchers** building longitudinal rulemaking datasets
- **Government contractors** tracking compliance obligations
- **Data journalists** investigating agency activity and public participation

### Pricing

**$1.50 per 1,000 results.** No subscription.

| Results | Cost |
|---|---|
| 100 | $0.15 |
| 1,000 | $1.50 |
| 10,000 | $15.00 |

### How to use it

1. Pick a **Mode**.
2. Enter a **Search Term**, **Docket ID**, or **Agency ID**.
3. Optionally set **Document Subtype** and **Posted Date** range.
4. Paste your free **API Key** from [open.gsa.gov/api/regulationsgov](https://open.gsa.gov/api/regulationsgov/) — or leave DEMO\_KEY for testing.
5. Click **Start**.

### Output example

```json
{
  "recordType": "document",
  "documentId": "EPA-HQ-OAR-2024-0002-0001",
  "title": "Revised Standards for Clean Air Act Section 111(d)",
  "agencyId": "EPA",
  "documentType": "Proposed Rule",
  "subtype": "Proposed Rule",
  "postedDate": "2024-02-05",
  "commentStartDate": "2024-02-05",
  "commentEndDate": "2024-04-08",
  "openForComment": true,
  "docketId": "EPA-HQ-OAR-2024-0002",
  "frDocNum": "2024-02234",
  "summary": "The Environmental Protection Agency is proposing revised emission guidelines...",
  "fileFormats": "https://downloads.regulations.gov/...",
  "scrapedAt": "2026-09-24T12:00:00.000Z"
}
```

### Technical details

- **Official Regulations.gov v4 API** — `https://api.regulations.gov/v4`. Free, public, requires an `X-Api-Key` header \[citation:1].
- **DEMO\_KEY** works for testing at 1,000 requests/hour. A free personal key from [open.gsa.gov/api/regulationsgov](https://open.gsa.gov/api/regulationsgov/) raises limits \[citation:4].
- **Pagination** via `page[size]` (max 250) and `page[number]`.
- **Filters** via `filter[searchTerm]`, `filter[agencyId]`, `filter[docketId]`, `filter[postedDate][ge]`, `filter[postedDate][le]`.
- **No browser, no proxy** — pure REST JSON.
- **Three modes** — documents, comments, dockets.

### Known limits

- **DEMO\_KEY is shared and rate-limited** to 1,000 requests/hour. For production runs, register a free personal key \[citation:4].
- **API responses are paginated at 250 records max** per request. Large runs require multiple pages.
- **Comment text may be truncated** by Regulations.gov for very long submissions.
- **No historical archive beyond what the API exposes.** Regulations.gov covers the modern rulemaking record; older documents may not be available.
- **Rate limit is 1,000 req/hour** on the free tier — the actor defaults to 1,200ms between requests to stay under \[citation:4].

### FAQ

**Do I need an API key?** DEMO\_KEY works for testing. For production, register a free key at [open.gsa.gov/api/regulationsgov](https://open.gsa.gov/api/regulationsgov/) \[citation:4].

**Do I need a proxy?** No. Datacenter IPs are accepted.

**What's the difference between documents and dockets?** A docket is a folder that groups related documents (a proposed rule, its public comments, and supporting material). Documents are the individual files.

**How do I track open comment periods?** Use documents mode, set `openForComment` filtering downstream, or sort by `commentEndDate`.

**How do I export data?** After a run, go to Storage → Export as JSON, CSV, Excel.

### Support

Open an issue on the Actor's page for bugs or feature requests.

# Actor input Schema

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

What to fetch from Regulations.gov.

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

Full-text search (e.g. 'climate change', 'PFAS', 'net neutrality').

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

Filter by a specific docket (e.g. EPA-HQ-OAR-2024-0002).

## `agencyId` (type: `string`):

Filter by federal agency acronym (EPA, FDA, FCC, SEC, OSHA, DOT, HHS, USDA, etc.).

## `documentSubtype` (type: `string`):

Filter by document subtype (Rule, Proposed Rule, Notice, Supporting & Related Material). Applies to documents mode.

## `postedDateStart` (type: `string`):

Only include records posted on or after this date (YYYY-MM-DD).

## `postedDateEnd` (type: `string`):

Only include records posted on or before this date (YYYY-MM-DD).

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

Field to sort by.

## `sortOrder` (type: `string`):

Sort direction.

## `apiKey` (type: `string`):

Your free api.data.gov key. Register at https://open.gsa.gov/api/regulationsgov/ (~1 minute). DEMO\_KEY works for testing but is rate-limited to 1,000 req/hour.

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

Hard cap on records per run.

## `requestDelayMs` (type: `integer`):

Delay between API requests. Free tier allows 1,000 req/hour — default 1200ms is conservative.

## Actor input object example

```json
{
  "mode": "documents",
  "searchTerm": "climate change",
  "docketId": "",
  "agencyId": "",
  "documentSubtype": "",
  "postedDateStart": "",
  "postedDateEnd": "",
  "sortBy": "postedDate",
  "sortOrder": "DESC",
  "apiKey": "DEMO_KEY",
  "maxItems": 500,
  "requestDelayMs": 1200
}
```

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

// Run the Actor and wait for it to finish
const run = await client.actor("aurenic/regulations-gov-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("aurenic/regulations-gov-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 aurenic/regulations-gov-scraper --silent --output-dataset

```

## MCP server setup

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