loc.gov API: Search historic newspapers
Searches historic U.S. newspaper pages (Chronicling America) by text, with optional state and issue-year filters. Returns relevance-ranked page records with snippets and image links; newspaper OCR may contain transcription errors.
Unofficial. Not affiliated with or endorsed by loc.gov.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Page optional
page Result page to retrieve, for example 2.
1
Whole number 1 or more. Default
1.- Query, required
query Words to find in newspaper text, for example Titanic.
Titanic
- State optional
state US state name to limit results, for example Montana. Leave blank for all states.
Montana
Default
.- End Year optional
end_year Latest issue year, for example 1913.
1912
Whole number from 1600 to 2100.
- Start Year optional
start_year Earliest issue year, for example 1912.
1912
Whole number from 1600 to 2100.
- Max Results optional
max_results Number of page results to return, for example 20.
3
Whole number from 1 to 100. Default
20.
Input as JSON
{ "page": 1, "query": "Titanic", "state": "Montana", "end_year": 1912, "start_year": 1912, "max_results": 3}Output
{ "newspaper_pages": [ { "city": "Roundup", "state": "Montana", "snippet": "Titanic Meets Terrible Disaster1350 Lives Lost World Largest Ship Goes Down Strikes IcebergDis tinguished Men Die in Tragedy of Deep 7 Survivors Go Insane I I i Sinking…", "page_link": "https://www.loc.gov/resource/sn86075094/1912-04-19/ed-1/?sp=2&q=titanic" , "issue_date": "1912-04-19", "page_number": 2, "newspaper_title": "The roundup record", "page_image_link": "https://tile.loc.gov/image-services/iiif/service:ndnp:mthi:batch_mthi_graywolf_ver01:data:sn86075094:00295860935:1912041901:0135/full/pct:12.5/0/default.jpg" }, { "city": "Wibaux", "state": "Montana", "snippet": "TITANIC THE TITON OF THE OCEAN 3 FINDS WATERY GRAVE ON FIRST TRIP OVER 1400 PEOPLE ARE DROWNED WHITE STAR LINER STRIKES AN ICEBERG WHILE GOING AT FULL SPEED AT 125…", "page_link": "https://www.loc.gov/resource/sn85053308/1912-04-19/ed-1/?sp=3&q=titanic" , "issue_date": "1912-04-19", "page_number": 3, "newspaper_title": "The wibaux pioneer", "page_image_link": "https://tile.loc.gov/image-services/iiif/service:ndnp:mthi:batch_mthi_egret_ver02:data:sn85053308:00295860960:1912041901:0092/full/pct:12.5/0/default.jpg" }, { "city": "Fort Benton", "state": "Montana", "snippet": "... searching the vicinity of the Titanic disaster, according to The River Press. a report that reached this city tonight. It is said a number of bodies which were recovered were sunk again as they were…", "page_link": "https://www.loc.gov/resource/sn85053157/1912-04-24/ed-1/?sp=1&q=titanic" , "issue_date": "1912-04-24", "page_number": 1, "newspaper_title": "The river press", "page_image_link": "https://tile.loc.gov/image-services/iiif/service:ndnp:mthi:batch_mthi_crane_ver01:data:sn85053157:00295860893:1912042401:0558/full/pct:12.5/0/default.jpg" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"loc.gov/search_historic_newspapers","input":{"page":1,"query":"Titanic","state":"Montana","end_year":1912,"start_year":1912,"max_results":3}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "loc.gov/search_historic_newspapers" , "input": { "page": 1, "query": "Titanic", "state": "Montana", "end_year": 1912, "start_year": 1912, "max_results": 3 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "loc.gov/search_historic_newspapers" , "input": { "page": 1, "query": "Titanic", "state": "Montana", "end_year": 1912, "start_year": 1912, "max_results": 3 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run loc.gov/search_historic_newspapers# with {"page":1,"query":"Titanic","state":"Montana","end_year":1912,"start_year":1912,"max_results":3}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "query" ], "properties": { "page": { "type": "integer", "default": 1, "minimum": 1, "description": "Result page to retrieve, for example 2." }, "query": { "type": "string", "minLength": 1, "description": "Words to find in newspaper text, for example Titanic." }, "state": { "type": "string", "default": "", "description": "US state name to limit results, for example Montana. Leave blank for all states." }, "end_year": { "type": "integer", "maximum": 2100, "minimum": 1600, "description": "Latest issue year, for example 1913." }, "start_year": { "type": "integer", "maximum": 2100, "minimum": 1600, "description": "Earliest issue year, for example 1912." }, "max_results": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Number of page results to return, for example 20." } }}Output schema
{ "type": "object", "required": [ "newspaper_pages" ], "properties": { "newspaper_pages": { "type": "array", "items": { "type": "object", "required": [ "newspaper_title", "city", "state", "issue_date", "page_number", "snippet", "page_image_link", "page_link" ], "properties": { "city": { "type": [ "string", "null" ], "description": "City of publication." }, "state": { "type": [ "string", "null" ], "description": "State of publication." }, "snippet": { "type": [ "string", "null" ], "description": "Short excerpt of newspaper text around the search words." }, "page_link": { "type": "string", "description": "Newspaper page link." }, "issue_date": { "type": [ "string", "null" ], "format": "date", "description": "Issue date (YYYY-MM-DD)." }, "page_number": { "type": [ "integer", "null" ], "description": "Printed issue page number when known." }, "newspaper_title": { "type": [ "string", "null" ], "description": "Newspaper name." }, "page_image_link": { "type": [ "string", "null" ], "description": "Page image link." } }, "additionalProperties": false }, "description": "Historic newspaper pages in search relevance order." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
loc.gov/search_historic_newspapers- Returns
- newspaper title, city, state, issue date, page number, snippet, page image link, page link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method loc.gov/search_historic_newspapers with the inputs above.
Ask your agent
- Find old newspaper pages from Ohio that mention the Wright brothers between 1903 and 1909
- I'm researching the 1918 flu pandemic — pull up historic newspaper coverage of "Spanish influenza" in Pennsylvania papers from 1918 to 1919, about 50 results
- Search the Library of Congress Chronicling America collection for articles about the San Francisco earthquake published in 1906
- Show me the second page of results for 'women's suffrage' in Tennessee newspapers from 1919-1920
- On loc.gov, look for digitized newspaper pages mentioning "Klondike gold" in Washington state between 1896 and 1899, and give me snippets and links to the page images
See more
All loc.gov methodsSearches Library of Congress digital collections by keywords, material format and date range, in Library search relevance order. Rights notes may be unavailable for some records.
loc.gov/search_collectionsSearches New York Times article headlines and summaries by keyword, optionally within a date range, and returns matching articles with dates, authors, sections and links, newest or most relevant first.
nytimes.com/search_newsSearches public National Archives Catalog records by keywords, year range, material type and online availability, in catalog relevance order.
catalog.archives.gov/search_recordsSearches NPR-published articles by keyword, newest first or by best match, with optional publication dates, and returns each article's date, authors, section and summary.
npr.org/search_newsSearches Yahoo News articles by keyword, newest first or by relevance, with optional publication dates and pages; returns only articles hosted on Yahoo News, with authors, original publisher and section.
yahoo.com/search_newsSearches CNN articles by keyword, with optional publication date range, sort order and pagination.
cnn.com/search_newsFinds BBC News articles matching search words, newest first or by relevance, with publication time, authors, section and summary, optionally limited to a date range. Date filters and newest order apply to the first 180 search matches; older or less relevant matches may be missed.
bbc.com/search_newsSearches Reuters articles by keyword through Google News, with optional publication date range, order and page. Summaries and bylines are filled in when Reuters serves the article page.
reuters.com/search_news