FDA Warning Letters Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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.
Regulatory consultants and legal teams
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?
| Field | Description |
|---|---|
postedDate | Date FDA posted the letter |
issueDate | Date shown on the warning letter |
company | Recipient company or organization |
marcsCms | FDA MARCS-CMS identifier |
referenceNumber | FDA letter reference number |
deliveryMethod | Delivery method stated by FDA |
product | Product category, such as Drugs |
issuingOffice | FDA office or center |
subject | Subject from the FDA index |
recipientName | Named letter recipient |
recipientTitle | Recipient's title |
recipientAddress | Postal address shown in the letter |
inspectionContext | Inspection dates, facility, and related context |
violationNarrative | Complete normalized warning-letter narrative |
citedRegulations | CFR and U.S.C. citations detected in the text |
responseLetterUrls | Public response-letter links |
closeoutLetterUrls | Public closeout-letter links |
excerpt | Excerpt available in the FDA index |
letterText | Complete normalized text for analysis |
sourceUrl | Canonical FDA detail URL |
scrapedAt | UTC 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
- Open the actor in Apify Console.
- Leave FDA warning letter URLs empty to collect from the main index, or paste one or more FDA detail URLs.
- Add a keyword, office, or issue-date range if needed.
- Choose the maximum number of warning letters.
- Keep Extract full letter details enabled for narratives, recipients, and citations.
- Click Start.
- 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:
| Input | Type | Default | Purpose |
|---|---|---|---|
startUrls | array | empty | FDA index or detail URLs |
searchTerm | string | empty | Match company, office, subject, or excerpt |
issuingOffice | string | empty | Partial FDA office name, such as CDER |
fromDate | string | empty | Earliest issue date in YYYY-MM-DD format |
toDate | string | empty | Latest issue date in YYYY-MM-DD format |
maxItems | integer | 10 | Maximum dataset rows |
includeDetails | boolean | true | Open details and collect full content |
proxyConfiguration | object | residential US | Connection 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:
CDERfor the Center for Drug Evaluation and ResearchCDRHfor the Center for Devices and Radiological HealthCVMfor the Center for Veterinary MedicineHuman Foodsfor 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:
- run with an issue-date window
- export or integrate the dataset
- deduplicate downstream using
sourceUrlormarcsCms - notify the relevant compliance owner
- 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: falsefor fast bulk index exports before selecting letters for full-text extraction - use index-only mode for fast triage
- retain
sourceUrlin 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 osfrom apify_client import ApifyClientclient = 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().itemsprint(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.
Does it provide legal conclusions?
No. It extracts published records and does not determine liability, compliance status, or remediation sufficiency.
Related FDA scrapers
Combine warning-letter intelligence with other public FDA datasets:
- FDA Drug Shortages Scraper
- FDA Drug Labels Scraper
- FDA Food Recalls Scraper
- FDA Medical Device Recalls Scraper
- FDA Orange Book Scraper
- FDA MAUDE Adverse Event Reports Scraper
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.