eCFR Regulations Scraper — Codified Federal Rules
Pricing
from $2.00 / 1,000 result emitteds
eCFR Regulations Scraper — Codified Federal Rules
Extract currently-in-force US federal regulations from the Electronic Code of Federal Regulations (eCFR). Give it Title/Part pairs and get one row per section with citation, heading and full body text as clean JSON.
Pricing
from $2.00 / 1,000 result emitteds
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
22 days ago
Last modified
Share
🎯 What this scrapes
The eCFR (ecfr.gov, National Archives) is the codified, currently-in-force text of US federal regulations — Title > Chapter > Part > Subpart > Section. Give this Actor a bounded list of {title, part} pairs and it fetches each part's official XML, walks every section, and returns one clean row per section: a well-formed citation like "29 CFR 570.1", its heading, and the full verbatim body text. This is not a change feed — for "what changed today" in the Federal Register's daily journal of rulemaking, see our Federal Register Scraper. This Actor answers a different question: "what is the rule right now, verbatim."
🔥 What we handle for you
- 📄 Section-level parsing — the GPO XML nests sections inside subject groups and part wrappers; we walk every
SECTIONnode regardless of nesting and give you one flat row per provision. - 📅 Date resolution — omit a date and we look up the latest in-force date for that title automatically, instead of you guessing a valid one.
- 🔁 We retry with exponential backoff on
408 / 429 / 503and honourRetry-After. Up to 5 attempts per request. - 🧊 We keep the dataset clean — Pydantic-validated rows, a regex-checked citation on every section, ISO-8601 timestamps.
- 💰 You pay only for results that land. No data → no charge (only the small
actor-startwarm-up fee).
💡 Use cases
- Pull the verbatim text of a regulation for a compliance checklist or GRC platform.
- Feed a legal-ops search index with clean, citation-tagged section text.
- Snapshot a Part's in-force text on a given date for an audit trail.
- Monitor a handful of Parts your industry cares about without downloading an entire Title.
⚙️ How to use it
- Click Try for free at the top of the page.
- List the
{title, part}pairs you need under Title/Part targets — up to 20 per run. - Optionally set As-of date; leave it empty to use the latest in-force date automatically.
- Click Start. Output streams into the run's dataset, one row per section.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
targets | array | yes | [{"title": 1, "part": "1"}] | {title, part} pairs to fetch. 1-20 pairs per run — whole-title fetches are not supported. |
asOfDate | string | no | null | Fetch date as YYYY-MM-DD. Leave empty to resolve the latest in-force date automatically per title. |
proxyConfiguration | object | no | {"useApifyProxy": true} | eCFR is a public, keyless government API and does not fingerprint clients; proxy is wired per org standard. |
Example input
{"targets": [{ "title": 1, "part": "1" }],"asOfDate": null}
📤 Output
Every row is one codified CFR section.
| Field | Type | Notes |
|---|---|---|
citation | string | e.g. "1 CFR 1.1". |
title_number | integer | CFR title number. |
title_name | string | Title name, e.g. "General Provisions". |
part | string | CFR part identifier. |
section_identifier | string | Section number, e.g. "1.1". |
heading | string | Section heading text, whitespace-collapsed. |
body_text | string | Full paragraph text, joined with blank lines. |
as_of_date | string | Resolved fetch date (YYYY-MM-DD). |
scraped_at | string | ISO-8601 UTC fetch timestamp. |
Example output
{"citation": "1 CFR 1.1","title_number": 1,"title_name": "General Provisions","part": "1","section_identifier": "1.1","heading": "§ 1.1 Definitions.","body_text": "As used in this chapter, unless the context requires otherwise—\n\nAdministrative Committee means...","as_of_date": "2026-08-28","scraped_at": "2026-09-01T00:00:00Z"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.20 | One-off warm-up charge per run |
result | $0.002 | Per codified section emitted |
Example: 1 000 sections at the rates above ≈ $2.20 ($0.20 start + $2.00 for 1 000 sections at $0.002 each). No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
- Whole-title fetches are not supported by design — a single Part can already be tens of megabytes (Title 40 Part 60 alone is over 14 MB / 1,830 sections), so the Actor bounds every run to the Parts you name.
- One
asOfDateper run — point-in-time diffing across two dates isn't a supported mode. - Amendment/version history and agency metadata aren't included — this Actor returns the in-force text as it stands on the resolved date, not a change history.
❓ FAQ
Do I need an API key?
No. The eCFR versioner API is public and keyless, so a run needs no credentials from you.
How is this different from your Federal Register Actor?
Federal Register is the daily journal of rulemaking activity — "what changed." This Actor returns the eCFR's codified, currently-in-force text — "what the rule says right now." Different site, different API, different corpus.
Why can't I just fetch a whole Title?
Some Titles run to tens of megabytes for a single Part. Naming exact {title, part} pairs keeps every run's cost and runtime predictable — list the Parts you actually need.
What happens if a Part has no in-force text?
The run finishes successfully with zero rows for that Part and a status message explaining why — an empty result is not a failure.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.