Skip to content

Federal Register

Verified Jun 9, 2026 · tested with live no-key Federal Register API call (federalregister.gov /api/v1/documents.json)

View this page as raw Markdown (.md)

regulationgovernmenttext-as-datafreeno-api-keydata:federal-register

The Federal Register is the daily journal of the U.S. federal government, publishing agency Rules, Proposed Rules, and Notices, plus Presidential Documents. It is produced by the Office of the Federal Register (part of the National Archives, NARA) and printed through the GPO. Full text from 1994 to the present is available through the federalregister.gov REST API and the GovInfo bulk repository. Used in, for example, Kalmenovitz, Lowry & Volkova, where the full text of 783,950 documents (1994-2019) trains an LDA topic model measuring regulatory fragmentation.

The API base is https://www.federalregister.gov/api/v1. Endpoints include /documents.json (search with field selection), /documents/{document_number}.json (one document), and /agencies. No authentication is needed.

Terminal window
# Search the Federal Register, selecting fields, no key
curl -sL "https://www.federalregister.gov/api/v1/documents.json?per_page=1&fields[]=document_number&fields[]=type&fields[]=agencies&fields[]=publication_date&fields[]=title"

The response carries description, count, total_pages, next_page_url, and a results array. Each result includes document_number, type (one of Rule, Proposed Rule, Notice, Presidential Document), agencies (a list, each with id, name, slug), publication_date, title, abstract, CFR references, and links to the body via raw_text_url and full_text_xml_url.

Step 2: page through a date window in Python

Section titled “Step 2: page through a date window in Python”

The search endpoint returns metadata only. Partition the query by a date window so each slice stays under the page cap (see Gotchas).

import requests
BASE = "https://www.federalregister.gov/api/v1/documents.json"
def fetch_window(start, end, per_page=1000):
"""All documents published in [start, end] (YYYY-MM-DD)."""
params = {
"per_page": per_page,
"conditions[publication_date][gte]": start,
"conditions[publication_date][lte]": end,
"fields[]": [
"document_number", "type", "agencies",
"publication_date", "title", "raw_text_url",
],
}
url, docs = BASE, []
while url:
r = requests.get(url, params=params if url == BASE else None, timeout=60)
r.raise_for_status()
page = r.json()
docs.extend(page["results"])
url = page.get("next_page_url")
return docs
docs = fetch_window("2019-01-01", "2019-01-31")

The body comes from raw_text_url (plain text) or full_text_xml_url (XML), one extra request per document:

body = requests.get(docs[0]["raw_text_url"], timeout=60).text
  • The search API caps a single query at 50 pages. Confirmed live: total_pages was 50 even when count reported 10000. With the per-page maximum you cannot page through an unbounded match in one query. To retrieve a full corpus, partition by date window (or by agency) so each slice stays under the cap; do not trust that one query returns every matching document.
  • count overstates what you can retrieve. The count field can report the full match count while only 50 pages are actually retrievable. Reconcile your downloaded count against the slice boundaries, not against count.
  • Search returns metadata only. The document body must be fetched separately via raw_text_url or full_text_xml_url, one extra request per document. Budget request volume and caching accordingly.
  • agencies is a list (many-to-many). A single document can be issued jointly by several agencies (confirmed: one result listed both the Transportation Department and the Federal Aviation Administration). Do not assume one agency per document.
  • Use GovInfo bulk data for a full historical pull. For an entire-corpus download, the GovInfo bulk data repository is the route, not thousands of per-document API calls. Use the API for targeted or incremental queries.
  • Publication is uneven across the calendar. There is no issue on federal holidays, so daily document counts are not a smooth series; do not treat the per-day count as a regular time series without accounting for non-publication days.
FieldMeaning
document_numberUnique ID, e.g. 2026-11559
typeRule, Proposed Rule, Notice, or Presidential Document
agenciesList of issuing agencies (id, name, slug)
publication_dateDate printed in the Register
titleDocument title
abstractSummary text, when present
raw_text_urlPlain-text body of the document
full_text_xml_urlXML body of the document

Cite the Office of the Federal Register / National Archives, the Federal Register, the document number(s) or query used, the federalregister.gov URL, and the access date, for example: Office of the Federal Register, National Archives and Records Administration, Federal Register, document no. 2026-11559, retrieved from https://www.federalregister.gov/, accessed YYYY-MM-DD. Record the document number(s) or the exact query and date window so the pull is reproducible.

Found an error or want a topic covered? Open an issue, use the Edit page link above, or email contact@instituteforautomatedresearch.org. Edits are reviewed before publishing; provenance and accuracy are the point.