eCFR scraper - search federal regulations, get section text
Pricing
from $5.00 / 1,000 records
eCFR scraper - search federal regulations, get section text
eCFR scraper on the official API: search the Electronic Code of Federal Regulations by keyword, CFR title, part or section; one row per hit - hierarchy, heading, citation, version dates, score, snippet, link - optionally the section's full text as plain text. Public domain. $5 per 1,000 rows.
Pricing
from $5.00 / 1,000 records
Rating
0.0
(0)
Developer
RetrainMap Team
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Share
Returns: one row per eCFR search hit: hierarchy (title, chapter, part, subpart, section), heading, citation, version dates, relevance score, snippet and ecfr.gov link — optionally the section's full text as plain text.
Input: { "query": "training providers", "title": 20, "part": "680", "fetch_full_text": false, "max_records": 100 } — a query or a title is required; the rest optional.
Price: $5.00 per 1,000 rows ($0.005 per hit row) plus $0.10 per run. Pay per event; no subscription.
One row per hit from the Electronic Code of Federal Regulations' public search API,
optionally with the section's current full text. Search by keyword, CFR title, part or
section; get the hierarchy (title, chapter, subchapter, part, subpart, section), heading,
citation, the date the current version took effect, relevance score, snippet and the
ecfr.gov link — normalised, one flat row per hit. With fetch_full_text on, each section's
text is fetched from the versioner API and written as plain text (trimmed to 20,000
characters).
The default input (query "training providers", title 20, 50 rows, no full text) succeeds within 5 minutes and returns rows — Apify auto-tests it daily.
Data source and status
| Publisher | Office of the Federal Register (National Archives) and the U.S. Government Publishing Office — https://www.ecfr.gov/ |
| API | https://www.ecfr.gov/developers/documentation/api/v1 — public, no key. Search: /api/search/v1/results; title dates: /api/versioner/v1/titles.json; section text: /api/versioner/v1/full/{date}/title-{N}.xml?part=§ion= |
| What this Actor reads | One titles request, then search pages of 100 (query, hierarchy[title], hierarchy[part], hierarchy[section], and by default date = the title's up_to_date_as_of, so only regulations in force are returned), then — only when fetch_full_text is on — one XML request per section, dated the same way; at most one request per second |
| Refresh cadence | The eCFR is updated daily (each title's up_to_date_as_of and latest_amended_on are written to every row and to the run summary); it is an editorial compilation, not the official legal edition (the annual CFR and the Federal Register are). The Actor reads live on every run; fetched_at is the fetch time |
| Copyright | Works of the United States Government are not subject to copyright in the U.S. (17 U.S.C. §105). The data are public; please cite the eCFR as the source |
| Known caveats | The search API refuses to page past 10,000 results (narrow the query); score and snippet are search-relevance artefacts and are null for hierarchy-only searches without a query; without current_only the index also returns superseded and removed section versions (ends_on set, current false — 21 of the 50 default hits on 2026-09-04) which have no current full text; a cross-title search is dated the oldest up_to_date_as_of among titles (usually yesterday); full text is fetched for hits of type Section only (appendices and parts get full_text_note); subchapter, subject_group and appendix are empty wherever the CFR has none |
Honesty note: the rows are the API's own fields with the search markup stripped and the XML reduced to plain text — nothing is inferred, summarised or classified by this Actor, and a run stops with an error rather than guess when the API's shape changes.
Identification: the requests carry a product-token User-Agent and the operator's
contact address in the standard From: header (RFC 9110 §10.1.2).
Input
| Field | Type | Meaning |
|---|---|---|
query | string | Optional full-text query (phrases in double quotes). Empty = every section of the given title/part in CFR order |
title | integer 1–50 | Optional CFR title (20 = Employees' Benefits, 29 = Labor, 34 = Education). Required with part/section |
part | string | Optional part, e.g. 680 |
section | string | Optional section, e.g. 680.410 (its part is used when part is empty) |
current_only | boolean | Default true: only regulations in force (the search is dated the title's up_to_date_as_of). False = the whole index including superseded versions |
fetch_full_text | boolean | Default false. One extra request per section hit |
max_records | integer | Default 100, at most 10,000 |
request_interval_ms | integer | Default 1000 (floor 250) |
contact_email | string | Sent in the From: header |
At least a query or a title is required.
Example — the full text of every section of 20 CFR part 680 subpart D (eligible training providers):
{ "title": 20, "part": "680", "query": "eligible training provider", "fetch_full_text": true, "max_records": 40 }
Output (dataset row)
citation (e.g. 20 CFR 680.410), title, title_name, chapter, subchapter, part,
subpart, subject_group, section, appendix, type (Section / Appendix …), heading,
hierarchy (identifiers), headings (names), starts_on (current version effective date),
ends_on, current, change_types, removed, reserved, title_latest_amended_on,
title_up_to_date_as_of, score, snippet, section_url, full_text, full_text_chars
(untrimmed length), full_text_truncated, full_text_as_of, full_text_note,
fetched_at, source.
A run summary (filters, the date the search was run as of, the search's own hit count,
pages, requests, per-title dates, whether the paging cap or the pay-per-event budget
stopped the run) is stored as RUN_SUMMARY in the run's key-value store.
Pricing (pay per event)
| Event | Price |
|---|---|
run-start — once per run | $0.10 |
record — per row written (with or without full text) | $0.005 |
The default 50-row search costs $0.35; 1,000 hits cost $5.10. Rows stop when your run's maximum charge is reached; the run summary says so.
Operator
Steelyard Ventures LLC (RetrainMap) — info@steelyardclinical.com. Not affiliated with the Office of the Federal Register or GPO. The Actor writes only to its own dataset and key-value store; it stores no credentials and sends nothing else.