# Regulations.gov Scraper - Rules, Public Comments (`maximedupre/regulations-gov`) Actor

Search public Regulations.gov records by keyword or phrase, then choose documents, dockets, or public comments. Filter by agency, docket, type, and posted date to save structured metadata, status details, and source links when supplied.

- **URL**: https://apify.com/maximedupre/regulations-gov.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Business, Developer tools, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.35 / 1,000 regulatory matches

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

### 🏛️ Find federal rulemaking records on Regulations.gov

For compliance teams, policy researchers, legal teams, and developers, this Actor searches the public Regulations.gov catalog and saves structured documents, dockets, or public comments. The dataset keeps source IDs, titles, agency and docket context, dates, status fields, and public links when supplied, so you can review current federal regulation data in your own workflow.

- Search current source records about the **[Code of Federal Regulations](https://apify.com/maximedupre/regulations-gov/examples/code-of-federal-regulations)**.
- Find public records related to **[ICH Guidelines](https://apify.com/maximedupre/regulations-gov/examples/ich-guidelines)** for regulatory research.
- Review matching records for a **[Federal Register Notice](https://apify.com/maximedupre/regulations-gov/examples/federal-register-notice)** by topic or agency.
- Look up regulatory records about an **[Investigator Brochure](https://apify.com/maximedupre/regulations-gov/examples/investigator-brochure)**.
- Search the catalog for **[Government Regulations](https://apify.com/maximedupre/regulations-gov/examples/government-regulations)** on a focused topic.
- Explore source records for **[Notice and Comment Rulemaking](https://apify.com/maximedupre/regulations-gov/examples/notice-and-comment-rulemaking)**.
- Find agency records about **[DOT Rules and Regulations for Truck Drivers](https://apify.com/maximedupre/regulations-gov/examples/dot-rules-and-regulations-for-truck-drivers)**.

#### 📦 Structured rulemaking records

**What you get**

Each dataset row is a document, docket, or public comment. Document rows can include source IDs, titles, agency and docket context, document types, dates, comment-window details, withdrawal status, Federal Register references, and source links. Docket rows include agency context, docket type, category, dates, and links. Public comment rows include agency and docket context, parent-document references, dates, category, withdrawal status, and links.

The Actor returns source metadata and links when supplied. It does not promise full document or comment text, attachment downloads, legal advice, or compliance decisions.

#### ▶️ Search the public catalog

1. Choose Documents, Dockets, or Public comments.
2. Enter one or more keywords or phrases. All entries are used in one shared search job.
3. Add agency, docket, document type, docket type, and posted-date filters when needed.
4. Set a maximum result count, or leave it empty to return all available results until the source is exhausted.
5. Run the Actor and open the default dataset.

#### ⚙️ Input

Use this input to choose the source record type and filters. Fields that do not apply to the selected result type are ignored.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Selects `documents`, `dockets`, or `comments` for the row shape. |
| `documentTypes` | array of strings | Optional source categories for Documents, such as rules, proposed rules, notices, or supporting material. |
| `docketTypes` | array of strings | Optional source types for Dockets, such as rulemaking or nonrulemaking. |
| `keywords` | array of strings | Required. Accepts one or more keywords or phrases, one per line, for one shared search job. |
| `agencyIds` | array of strings | Filters Documents, Dockets, and Public comments by federal agency ID. |
| `docketIds` | array of strings | Filters Documents and Public comments by docket ID. It is ignored for Dockets. |
| `postedFrom` | string | Includes records from this posted date onward. Use `YYYY-MM-DD`. |
| `postedTo` | string | Includes records through this posted date. Use `YYYY-MM-DD`. |
| `sortBy` | string | Orders matching rows by source date or title. |
| `maxItems` | integer | Optional work limit. Leave it empty to return all available results until the source is exhausted. |

**Default input example**

This is the public input from a successful hosted default-input run:

```json
{
  "resultType": "documents",
  "keywords": [
    "food additives"
  ],
  "sortBy": "postedDate",
  "maxItems": 3
}
```

#### 🧾 Output

The output link opens the default dataset. Each table below lists a complete public row shape. Optional fields appear when Regulations.gov supplies them.

**Document rows**

| Field | Type | What it does |
| --- | --- | --- |
| `rowType` | string | Identifies a document row. |
| `id` | string | Gives the source document ID for joining or verification. |
| `title` | string | Gives the document title supplied by Regulations.gov. |
| `agency` | object | Holds federal agency context. |
| `agency.id` | string | Gives the source agency ID. |
| `docket` | object | Holds related docket context. |
| `docket.id` | string | Gives the related docket ID. |
| `docket.title` | string | Gives the related docket title. |
| `documentType` | string | Gives the source document category, such as a rule, proposed rule, notice, or supporting material. |
| `postedDate` | string | Gives the source posted date in its source format. |
| `lastModifiedDate` | string | Gives the last source modification date in its source format. |
| `effectiveDate` | string | Gives the source effective date. |
| `commentWindow` | object | Holds comment-window details. |
| `commentWindow.openForComment` | boolean | Says whether the source marks the document open for comments. |
| `commentWindow.startDate` | string | Gives the comment period start date. |
| `commentWindow.endDate` | string | Gives the comment period end date. |
| `commentWindow.allowLateComments` | boolean | Says whether the source allows late comments. |
| `withdrawn` | boolean | Says whether the source marks the document as withdrawn. |
| `federalRegister` | object | Holds Federal Register reference details. |
| `federalRegister.documentNumber` | string | Gives the Federal Register document number. |
| `federalRegister.citation` | string | Gives the Federal Register citation. |
| `federalRegister.volume` | integer | Gives the Federal Register volume. |
| `links` | object | Holds useful source links. |
| `links.publicRecordUrl` | string | Opens the public Regulations.gov document page. |
| `links.apiDetailUrl` | string | Opens the source API or detail record for the document. |

**Genuine document row**

This row is copied from a successful current-beta run:

```json
{
  "rowType": "document",
  "id": "FDA-2021-F-1157-0003",
  "title": "Food Additives Permitted for Direct Addition to Food for Human Consumption; Vitamin D2 Inactive Bakers Yeast",
  "links": {
    "publicRecordUrl": "https://www.regulations.gov/document/FDA-2021-F-1157-0003",
    "apiDetailUrl": "https://api.regulations.gov/v4/documents/FDA-2021-F-1157-0003"
  },
  "agency": {
    "id": "FDA"
  },
  "docket": {
    "id": "FDA-2021-F-1157",
    "title": "Lallemand Inc.; Filing of Food Additive Petition"
  },
  "documentType": "Rule",
  "postedDate": "2026-09-25T04:00:00Z",
  "lastModifiedDate": "2026-09-25T22:43:38Z",
  "effectiveDate": "2026-09-25T04:00:00Z",
  "commentWindow": {
    "openForComment": true,
    "startDate": "2026-09-25T04:00:00Z",
    "endDate": "2026-10-27T03:59:59Z",
    "allowLateComments": false
  },
  "withdrawn": false,
  "federalRegister": {
    "documentNumber": "2026-19656",
    "citation": "91 FR 60796",
    "volume": 91
  }
}
```

**Docket rows**

| Field | Type | What it does |
| --- | --- | --- |
| `rowType` | string | Identifies a docket row. |
| `id` | string | Gives the source docket ID for joining or verification. |
| `title` | string | Gives the docket title supplied by Regulations.gov. |
| `agency` | object | Holds federal agency context. |
| `agency.id` | string | Gives the source agency ID. |
| `agency.name` | string | Gives the source agency name. |
| `docketType` | string | Gives the source docket type, such as rulemaking or nonrulemaking. |
| `category` | string | Gives a source classification for the docket when provided. |
| `lastModifiedDate` | string | Gives the last source modification date in its source format. |
| `links` | object | Holds useful source links. |
| `links.publicRecordUrl` | string | Opens the public Regulations.gov docket page. |
| `links.apiDetailUrl` | string | Opens the source API or detail record for the docket. |

**Genuine docket row**

This row is copied from a successful current-beta run:

```json
{
  "rowType": "docket",
  "id": "FAA-2013-0456",
  "title": "2013-CE-011-AD",
  "links": {
    "publicRecordUrl": "https://www.regulations.gov/docket/FAA-2013-0456",
    "apiDetailUrl": "https://api.regulations.gov/v4/dockets/FAA-2013-0456"
  },
  "agency": {
    "id": "FAA",
    "name": "Federal Aviation Administration"
  },
  "docketType": "Rulemaking",
  "category": "Pending",
  "lastModifiedDate": "2015-05-26T13:06:14Z"
}
```

**Public comment rows**

| Field | Type | What it does |
| --- | --- | --- |
| `rowType` | string | Identifies a public comment row. |
| `id` | string | Gives the source public comment ID for joining or verification. |
| `title` | string | Gives the public comment title supplied by Regulations.gov. |
| `agency` | object | Holds federal agency context. |
| `agency.id` | string | Gives the source agency ID. |
| `agency.name` | string | Gives the source agency name. |
| `docket` | object | Holds related docket context. |
| `docket.id` | string | Gives the related docket ID. |
| `docket.title` | string | Gives the related docket title. |
| `parentDocument` | object | Holds the document that received the comment. |
| `parentDocument.id` | string | Gives the parent document ID. |
| `parentDocument.title` | string | Gives the parent document title. |
| `parentDocument.publicRecordUrl` | string | Opens the public page for the parent document when supplied. |
| `category` | string | Gives a source classification for the comment when provided. |
| `postedDate` | string | Gives the source posted date in its source format. |
| `lastModifiedDate` | string | Gives the last source modification date in its source format. |
| `withdrawn` | boolean | Says whether the source marks the comment as withdrawn. |
| `links` | object | Holds useful source links. |
| `links.publicRecordUrl` | string | Opens the public Regulations.gov comment page. |
| `links.apiDetailUrl` | string | Opens the source API or detail record for the comment. |

**Genuine public comment row**

This row is copied from a successful current-beta run:

```json
{
  "rowType": "comment",
  "id": "FDA-2021-F-1157-0002",
  "title": "Comment from International Food Additives Council",
  "links": {
    "publicRecordUrl": "https://www.regulations.gov/comment/FDA-2021-F-1157-0002",
    "apiDetailUrl": "https://api.regulations.gov/v4/comments/FDA-2021-F-1157-0002"
  },
  "agency": {
    "id": "FDA",
    "name": "Food and Drug Administration"
  },
  "docket": {
    "id": "FDA-2021-F-1157",
    "title": "Lallemand Inc.; Filing of Food Additive Petition"
  },
  "parentDocument": {
    "id": "FDA-2021-F-1157-0001",
    "publicRecordUrl": "https://www.regulations.gov/document/FDA-2021-F-1157-0001",
    "title": "Lallemand Inc.; Filing of Food Additive Petition"
  },
  "category": "Private Industry - C0003",
  "postedDate": "2022-03-14T04:00:00Z",
  "lastModifiedDate": "2022-03-14T20:01:21Z",
  "withdrawn": false
}
```

#### 💳 Pricing

Pricing is pay per event. Each successfully returned document, docket, or public comment is charged at $0.00035. The buyer-facing event is called `Regulatory match`.

#### 🔌 Integrations

Run the Actor from the Apify Console or API, then read the default dataset in Apify.

For a visual walkthrough:

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Does the Actor return full document or comment text?

No. It returns structured metadata and source links when supplied. It does not promise full document text, full comment text, or attachment downloads.

##### Do I need an API key?

No buyer-provided authentication is required. The Actor searches public Regulations.gov data, subject to the records and query window available from the source.

##### Can I search more than one keyword in one run?

Yes. Enter multiple keywords or phrases, one per line. They are used in one shared search job, not as separately configured searches.

##### What happens when I leave Maximum results empty?

The Actor returns all available results until the source is exhausted. Set a positive number when you want a smaller work limit.

##### Can I filter by agency, docket, or record type?

Yes. Use agency IDs for any result type, docket IDs for Documents and Public comments, document types for Documents, and docket types for Dockets. Choose the result type first so the filters match the rows you need.

##### Why might an output field be missing?

Regulations.gov does not supply every field for every document, docket, or comment. The Actor keeps available source values and does not invent missing values.

##### Can this Actor submit or edit a public comment?

No. It searches and reads public regulatory data. It does not submit comments, edit source records, or perform other write actions on Regulations.gov.

##### Does this Actor give legal or compliance advice?

No. It provides source metadata and links for research. It does not make legal conclusions, compliance decisions, or policy interpretations.

##### How are repeated matches handled?

The first eligible occurrence of a source record is saved. Later appearances of that same source record from another submitted keyword are ignored, so one saved row does not collect every later matching value.

### 📝 Changelog

**v0.0** (26-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~regulations-gov/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Federal Register Scraper — Rules & Regulations](https://apify.com/maximedupre/federal-register) searches Federal Register documents and notices with dates, agencies, and official links.
- [FCC ECFS Filings](https://apify.com/maximedupre/fcc-ecfs) searches public FCC dockets and filings with source context.
- [CourtListener Scraper](https://apify.com/maximedupre/courtlistener) searches public opinions, RECAP dockets, and oral arguments.
- [SAM.gov Exclusions](https://apify.com/maximedupre/sam-gov-exclusions) screens vendors against federal exclusion records.
- [FDA 510(k) Device Clearance Search](https://apify.com/maximedupre/fda-510k) searches official FDA device-clearance records with structured regulatory details.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `resultType` (type: `string`):

Choose the kind of row to save: a document, docket, or public-comment record.

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

Optional source categories for Documents, such as rules, proposed rules, notices, or supporting material. Enter one category per line. Ignored for Dockets and Public comments.

## `docketTypes` (type: `array`):

Optional source types for Dockets, such as rulemaking or nonrulemaking. Enter one type per line. Ignored for Documents and Public comments.

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

Enter one or more keywords or phrases, one per line. All entries run in one shared search job.

## `agencyIds` (type: `array`):

Optional federal agency IDs, one per line. This filter applies to Documents, Dockets, and Public comments.

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

Optional docket IDs, one per line. This filter applies to Documents and Public comments and is ignored for Dockets.

## `postedFrom` (type: `string`):

Optional first posted date to include. Use YYYY-MM-DD.

## `postedTo` (type: `string`):

Optional last posted date to include. Use YYYY-MM-DD.

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

Choose whether matching rows are ordered by source date or title.

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

Optional positive limit on rows returned. Leave this empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "resultType": "documents",
  "keywords": [
    "food additives"
  ],
  "sortBy": "postedDate",
  "maxItems": 3
}
```

# Actor output Schema

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

Open structured document, docket, and public-comment rows in the default dataset.

# 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 = {
    "resultType": "documents",
    "keywords": [
        "food additives"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/regulations-gov").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 = {
    "resultType": "documents",
    "keywords": ["food additives"],
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/regulations-gov").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 '{
  "resultType": "documents",
  "keywords": [
    "food additives"
  ]
}' |
apify call maximedupre/regulations-gov --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/regulations-gov"
        }
    }
}
```

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/AUrj5J1ouQV1TQcI6/builds/Vj0Ecw3iAH6haExio/openapi.json
