FDA Warning Letters Scraper avatar

FDA Warning Letters Scraper

Pricing

Pay per event

Go to Apify Store
FDA Warning Letters Scraper

FDA Warning Letters Scraper

βš–οΈ Export FDA warning letters with companies, recipients, inspections, violations, citations, full narratives, and response or closeout links.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Share

Export the FDA Warning Letters database into structured JSON, CSV, Excel, XML, or RSS-ready data.

Collect the latest letters or target a specific public FDA letter URL. Get company names, issue and posted dates, FDA offices, recipients, violations, cited regulations, response links, closeout links, and full letter text.

Use the actor for recurring regulatory intelligence without manually opening every letter.

What does FDA Warning Letters Scraper do?

FDA Warning Letters Scraper visits the official U.S. Food and Drug Administration Warning Letters index and its public detail pages.

It can:

  • 🏒 extract recipient companies and organizations
  • πŸ“… normalize posted and issue dates
  • πŸ›οΈ capture the FDA issuing office or center
  • 🧾 collect MARCS-CMS and reference identifiers
  • πŸ‘€ extract recipient name, title, and postal address
  • πŸ”¬ summarize the inspection context from the letter
  • βš–οΈ identify cited CFR and U.S.C. references
  • πŸ“„ save the complete normalized warning-letter narrative
  • πŸ”— preserve response, closeout, and canonical FDA links
  • πŸ” filter index records by keyword, office, and date range

Each dataset row represents one FDA warning letter.

Why use this FDA warning letters scraper?

The FDA site is designed for reading individual records, not for repeatable bulk exports and downstream monitoring.

This actor turns public enforcement content into stable records that can be searched, joined, compared, and routed automatically.

Typical benefits include:

  • less manual copying from FDA pages
  • repeatable supplier and manufacturer screening
  • consistent fields across many letters
  • complete source attribution for audit trails
  • machine-readable narratives for text analysis
  • scheduled collection of newly posted letters

Who is it for?

Pharmaceutical and biotech compliance teams

Track CDER letters, manufacturing observations, CGMP themes, remediation requests, and repeat findings.

Food and dietary-supplement quality teams

Monitor firms, products, labeling issues, sanitation findings, and supplier-related enforcement signals.

Medical-device regulatory teams

Collect device warning letters for quality-system reviews, competitive intelligence, and post-market risk work.

Supplier-risk and KYB analysts

Check whether a supplier or manufacturer appears in FDA warning-letter records and retain evidence with canonical sources.

Build matter research, remediation timelines, citation libraries, and client alerts from complete letter text.

Data and market-intelligence teams

Feed structured FDA enforcement data into warehouses, dashboards, search indexes, or language-model workflows.

What data can you extract?

FieldDescription
postedDateDate FDA posted the letter
issueDateDate shown on the warning letter
companyRecipient company or organization
marcsCmsFDA MARCS-CMS identifier
referenceNumberFDA letter reference number
deliveryMethodDelivery method stated by FDA
productProduct category, such as Drugs
issuingOfficeFDA office or center
subjectSubject from the FDA index
recipientNameNamed letter recipient
recipientTitleRecipient's title
recipientAddressPostal address shown in the letter
inspectionContextInspection dates, facility, and related context
violationNarrativeComplete normalized warning-letter narrative
citedRegulationsCFR and U.S.C. citations detected in the text
responseLetterUrlsPublic response-letter links
closeoutLetterUrlsPublic closeout-letter links
excerptExcerpt available in the FDA index
letterTextComplete normalized text for analysis
sourceUrlCanonical FDA detail URL
scrapedAtUTC extraction timestamp

Optional fields are omitted when FDA does not publish them or when index-only mode is selected.

How to scrape FDA warning letters

  1. Open the actor in Apify Console.
  2. Leave FDA warning letter URLs empty to collect from the main index, or paste one or more FDA detail URLs.
  3. Add a keyword, office, or issue-date range if needed.
  4. Choose the maximum number of warning letters.
  5. Keep Extract full letter details enabled for narratives, recipients, and citations.
  6. Click Start.
  7. Export the dataset as JSON, CSV, Excel, XML, or another supported format.

Start with 10 records to review the shape before scheduling a larger run.

Input

The actor accepts these fields:

InputTypeDefaultPurpose
startUrlsarrayemptyFDA index or detail URLs
searchTermstringemptyMatch company, office, subject, or excerpt
issuingOfficestringemptyPartial FDA office name, such as CDER
fromDatestringemptyEarliest issue date in YYYY-MM-DD format
toDatestringemptyLatest issue date in YYYY-MM-DD format
maxItemsinteger10Maximum dataset rows
includeDetailsbooleantrueOpen details and collect full content
proxyConfigurationobjectresidential USConnection settings

Date filters apply to the FDA letter issue date. Keyword and office filters are case-insensitive.

Example input: latest warning letters

{
"maxItems": 25,
"includeDetails": true
}

This discovers the newest FDA index records and opens each detail page.

Example input: one company or subject

{
"searchTerm": "medical device",
"fromDate": "2025-01-01",
"maxItems": 50,
"includeDetails": true
}

The search term is matched against index fields before detail extraction.

Example input: a specific warning letter

{
"startUrls": [
{
"url": "https://www.fda.gov/inspections-compliance-enforcement-and-criminal-investigations/warning-letters/medline-inc-724347-05282026"
}
],
"maxItems": 1,
"includeDetails": true
}

Direct detail URLs are useful for enrichment or evidence collection.

Example output

{
"issueDate": "2026-05-28",
"company": "Medline Inc",
"marcsCms": "724347",
"referenceNumber": "320-26-82",
"deliveryMethod": "Via Electronic Mail - Return Receipt Requested",
"product": "Drugs",
"issuingOffice": "Center for Drug Evaluation and Research (CDER)",
"recipientName": "Mr. James Boyle",
"recipientTitle": "Chief Executive Officer",
"recipientAddress": "Medline Inc\n3 Lakes Drive\nNorthfield, IL 60093\nUnited States",
"citedRegulations": ["21 CFR 211.192"],
"responseLetterUrls": [],
"closeoutLetterUrls": [],
"sourceUrl": "https://www.fda.gov/inspections-compliance-enforcement-and-criminal-investigations/warning-letters/medline-inc-724347-05282026",
"scrapedAt": "2026-07-13T00:00:00.000Z"
}

The complete letterText and violationNarrative fields are intentionally omitted from this short example.

Index-only mode

Set includeDetails to false when company, date, office, subject, and links are enough.

Index-only mode:

  • is faster
  • transfers less data
  • avoids opening every letter
  • does not include recipient, narrative, inspection context, or citation details

It still emits one normal warning-letter row per FDA index record.

Filtering by FDA issuing office

Use recognizable office or center fragments:

  • CDER for the Center for Drug Evaluation and Research
  • CDRH for the Center for Devices and Radiological Health
  • CVM for the Center for Veterinary Medicine
  • Human Foods for food-program records

Office names can change over time, so partial matching is usually safer than a full exact name.

Monitoring new warning letters

Create an Apify Schedule for daily or weekly collection.

A practical monitoring flow is:

  1. run with an issue-date window
  2. export or integrate the dataset
  3. deduplicate downstream using sourceUrl or marcsCms
  4. notify the relevant compliance owner
  5. retain the source URL and extraction time with the alert

The actor does not maintain a hidden cross-run database, so your destination remains the system of record.

How much does it cost to scrape FDA warning letters?

The actor uses pay-per-event pricing:

  • a small Actor-start event covers run initialization
  • one item event is charged only for each warning letter saved
  • subscription tiers receive decreasing per-letter rates

The current BRONZE reference rate is approximately $0.02 per saved warning letter, plus the small start event. Always review the live pricing panel in Apify Console because the platform price is authoritative.

Index-only runs may finish faster, but both modes produce the same billable entity: one saved warning-letter record.

Data freshness and coverage

The actor reads the public FDA website at run time. Output freshness therefore follows FDA publication and page availability.

The main index covers recently posted letters and historical pagination made available by FDA. A date filter does not create records FDA has not published.

Some older or revised pages may have different markup or fewer metadata fields. The full source URL is always included when a record is saved.

Tips for reliable runs

  • start with a low maxItems
  • use a date range for recurring monitoring
  • use direct URLs when enriching known records
  • keep the default residential US proxy unless you have validated another route
  • use includeDetails: false for fast bulk index exports before selecting letters for full-text extraction
  • use index-only mode for fast triage
  • retain sourceUrl in every downstream export

FDA may temporarily block requests even through a proxy. The actor retries individual detail pages and skips a page only after the retry also fails.

Integrations

Google Sheets and Excel

Export rows for compliance review, supplier screening, or remediation tracking. Use sourceUrl as the stable link back to FDA.

Slack and Microsoft Teams

Run on a schedule and send newly detected companies, subjects, and issuing offices to an enforcement-alert channel.

Webhooks and automation platforms

Use Apify webhooks with Make, Zapier, n8n, or your own endpoint after a run succeeds.

Data warehouses

Load the dataset into BigQuery, Snowflake, PostgreSQL, or another analytical store. Index marcsCms, company, issueDate, and sourceUrl.

Search and AI analysis

Index letterText for semantic search, citation clustering, remediation-theme analysis, or retrieval-augmented generation. Always preserve the source and avoid treating automated summaries as legal advice.

API usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/fda-warning-letters-scraper').call({
issuingOffice: 'CDER',
fromDate: '2026-01-01',
maxItems: 50,
includeDetails: true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/fda-warning-letters-scraper').call(run_input={
'searchTerm': 'CGMP',
'maxItems': 25,
'includeDetails': True,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

API usage with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~fda-warning-letters-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"maxItems":10,"includeDetails":true}'

Fetch dataset items after the run finishes with the run's defaultDatasetId.

Use with Apify MCP

Connect the actor to AI clients through Apify MCP:

https://mcp.apify.com/?tools=automation-lab/fda-warning-letters-scraper

Example prompts:

  • β€œRun the FDA Warning Letters Scraper for the latest 20 letters and group them by issuing office.”
  • β€œExtract this FDA warning-letter URL and list every cited regulation with source evidence.”
  • β€œFind CDER warning letters issued since January 2026 that mention contamination.”

Claude Code

Register the actor-scoped Streamable HTTP endpoint from your terminal:

claude mcp add --transport http apify-fda-warning-letters \
"https://mcp.apify.com/?tools=automation-lab/fda-warning-letters-scraper" \
--header "Authorization: Bearer $APIFY_TOKEN"

Keep APIFY_TOKEN in your environment rather than committing it to a project file. Restart Claude Code, then use one of the prompts above.

Claude Desktop, Cursor, or VS Code

Add this server entry to your client's MCP JSON configuration (claude_desktop_config.json, .cursor/mcp.json, or VS Code's user mcp.json):

{
"mcpServers": {
"apify-fda-warning-letters": {
"url": "https://mcp.apify.com/?tools=automation-lab/fda-warning-letters-scraper",
"headers": {
"Authorization": "Bearer <APIFY_TOKEN>"
}
}
}
}

Replace <APIFY_TOKEN> with your Apify API token, save the file, and restart the client. Claude Desktop users can alternatively add the same URL as a custom connector and authenticate with OAuth.

Legality and responsible use

FDA warning letters are public U.S. government regulatory records. You are responsible for how you store, analyze, share, and act on the data.

Keep in mind:

  • a warning letter is not necessarily the recipient's current regulatory status
  • later correspondence may change or clarify the matter
  • FDA advises users to contact the agency for additional available information
  • personal details should be handled according to applicable privacy and data-retention rules
  • automated output is not legal, medical, or regulatory advice

Always review the current letter and any response or closeout material before making consequential decisions.

Limitations

  • FDA uses anti-bot protections and direct requests commonly return HTTP 403.
  • Residential proxy access can still be temporarily blocked.
  • Some historical letters use different page structures.
  • Citation extraction uses pattern matching and may not capture every informal reference.
  • A keyword filter checks FDA index fields, not the complete narrative before selection.
  • Response and closeout links exist only when FDA publishes them.
  • Full-letter mode is slower than index-only mode.
  • The actor does not infer whether violations remain unresolved.

Troubleshooting

Why did the run return no records?

Broaden the date range or keyword, and confirm the requested URL is an FDA warning-letter page. If logs show access denial, keep the default residential US proxy and retry later.

Why is a detail field missing?

FDA may not publish that field, especially on older pages. Check letterText and sourceUrl for the authoritative content.

Why does a narrow keyword search take longer?

Filters are applied to FDA's downloadable warning-letter index before detail pages are opened. A rare term can return fewer records than maxItems when the export contains only a few matches. Use fromDate, toDate, and maxItems to keep recurring exports bounded.

Can I use a datacenter proxy?

You can customize proxyConfiguration, but FDA frequently blocks direct and datacenter traffic. The residential US default is the tested path.

FAQ

Does the actor download PDFs?

It saves public response and closeout links when present. The main warning letters are usually HTML pages, and their normalized text is saved directly.

Can I scrape one known letter?

Yes. Put the canonical FDA detail URL in startUrls and set maxItems to 1.

Can I collect only index metadata?

Yes. Set includeDetails to false.

How do I avoid duplicates?

Deduplicate downstream by sourceUrl or marcsCms. For scheduled runs, store previously seen values in your own database or automation workflow.

Is this an official FDA product?

No. This is an independent scraper for public FDA pages. FDA remains the authoritative source.

No. It extracts published records and does not determine liability, compliance status, or remediation sufficiency.

Combine warning-letter intelligence with other public FDA datasets:

Use warning letters for enforcement context, recalls for market actions, and structured FDA product datasets for enrichment.

Support

If a run fails, share the run URL and a non-sensitive example input through the actor's Issues tab. Include whether you used index-only or full-detail mode and which FDA page was involved.

The output is designed to keep the original sourceUrl, making extraction problems easier to reproduce and verify.