FDA Warning Letters Scraper: Company, Office & Full Text avatar

FDA Warning Letters Scraper: Company, Office & Full Text

Pricing

from $12.48 / 1,000 results

Go to Apify Store
FDA Warning Letters Scraper: Company, Office & Full Text

FDA Warning Letters Scraper: Company, Office & Full Text

Scrape FDA Warning Letters (pharma, food, devices, tobacco). Get company, issuing office/center, subject, posted & issue dates, closeout status, letter URL, plus full letter text, recipient, product area and cited violations. Filter by keyword, office, date. Export JSON, CSV, Excel.

Pricing

from $12.48 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

FDA Warning Letters Scraper: Company, Office & Full Text

FDA Warning Letters Scraper: Company, Office & Full Text

Here is one real result, with every field the actor returns (the letterText is trimmed here for length; AI add-on fields included):

{
"postedDate": "2026-07-21",
"issueDate": "2026-07-10",
"companyName": "ejuicedemand.com",
"issuingOffice": "Center for Tobacco Products",
"subject": "Family Smoking Prevention and Tobacco Control Act/Adulterated/Misbranded",
"responseLetter": false,
"closeoutLetter": false,
"letterUrl": "https://www.fda.gov/inspections-compliance-enforcement-and-criminal-investigations/warning-letters/ejuicedemandcom-733740-07102026",
"recipientName": null,
"recipientTitle": null,
"recipientAddress": "7753 NW 53rd Street, Doral, FL, 33166, United States",
"recipientEmail": "sales@ejuicedemand.com",
"emails": ["sales@ejuicedemand.com"],
"deliveryMethod": "VIA UPS and Electronic Mail",
"referenceNumber": "RW2602432",
"productArea": "Tobacco",
"issuingOfficeDetail": "Center for Tobacco Products",
"letterText": "To Whom It May Concern: The Center for Tobacco Products of the U.S. Food and Drug Administration (FDA) recently reviewed the website https://ejuicedemand.com and determined that e-liquid products listed there are offered for sale ...",
"letterLength": 4949,
"citations": ["section 201(rr)", "21 U.S.C. § 321", "section 901", "21 U.S.C. § 387a", "section 906(d)(5)", "section 903(a)(7)(B)", "Section 910(a)"],
"citationsCount": 10,
"source": "FDA Warning Letters",
"observedAt": "2026-08-14T07:35:44.192Z",
"aiSummary": "The FDA issued a warning to eJuice Demand for selling Nitro's Cold Brew Smoothies e-liquid to a person under 21 years of age, violating the Federal Food, Drug, and Cosmetic Act. The FDA requires a written response detailing corrective actions within 15 working days.",
"aiExtract": null,
"aiSeverity": "high",
"aiSeverityScore": 85,
"error": null
}

The most complete FDA warning letters scraper available. It returns every field the FDA warning letter record exposes (company, issuing office, subject, issue and posted dates, recipient address and email, delivery method, reference number and product area) plus the full letter text and parsed legal citations, and offers optional AI add-ons for a plain-English summary, a structured extract and a severity score.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor searches the FDA warning letters index, applies your keyword, office, company, subject and date filters, paginates through the matches, and writes one normalized record per letter to the run's dataset. Each record carries the company name, issuing office, subject, issue and posted dates, and a direct link to the letter.

With fetchDetails on (the default), the actor opens each letter's detail page to add the full letter text, recipient name, title and address, contact emails, delivery method, reference number, product area and parsed legal citations. Three optional AI add-ons produce a plain-English summary, a structured extract, and a severity rating. Dates are normalized to YYYY-MM-DD, and missing source values are returned as null, never invented.

Note: fda.gov is bot protected. The actor defaults to Apify Residential (US) proxy, which is required to reach the site reliably.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 50 CGMP-related warning letters, newest first, with full text.

{
"searchQuery": "CGMP",
"fetchDetails": true,
"maxLetters": 50
}

Leave searchQuery empty to list all warning letters newest first. Add issuingOffice, year, or a dateFrom/dateTo range to narrow the results.

Input reference

FieldTypeRequiredDefaultDescription
searchQuerystringno(empty)Full-text search across company names and letter content, for example a company, drug, brand, or violation term (CGMP, data integrity, unapproved new drug). Empty lists all letters newest first.
issuingOfficestringno(any)Restrict to a specific FDA issuing office or center, for example CDER, Center for Tobacco Products, CFSAN, CDRH, or a district office name.
companyKeywordstringno(any)Only return letters whose company name contains this text (case-insensitive). Applied in addition to the keyword search.
subjectKeywordstringno(any)Only return letters whose subject contains this text, for example tobacco, adulterated, misbranded, CGMP.
postedWithinenumnoAnyRestrict by how recently the letter was posted: Any, Last 7 days, Last 30 days, Last 60 days, Last 90 days.
issuedWithinenumnoAnyRestrict by how recently the letter was issued to the company (same options as postedWithin).
dateFromstringno(empty)Only letters posted on or after this date (YYYY-MM-DD). The scraper stops paging once it passes below this date.
dateTostringno(empty)Only letters posted on or before this date (YYYY-MM-DD).
yearstringno(empty)Only letters posted in this calendar year, for example 2025.
fetchDetailsbooleannotrueWhen on, each letter is enriched from its detail page with full text, recipient name/title/address, delivery method, reference number, product area and cited violations.
withAiSummarybooleannofalseAI add-on: plain-English summary of each letter (paid).
withAiExtractbooleannofalseAI add-on: structured extract of violations, products, required actions and response deadline (paid).
withAiSeveritybooleannofalseAI add-on: severity rating (low/medium/high/critical) with a 0-100 score (paid).
maxLettersintegerno50Maximum warning letters to collect.
proxyConfigurationobjectnoResidential USProxy settings. Defaults to Apify Residential (US), required to reach fda.gov reliably.

Filters combine with logical AND.

Output reference

One dataset item per warning letter. Types: string, integer, boolean, string[], object, or null when the source value is absent. Fields from recipientName through citationsCount come from the detail page and populate when fetchDetails is on. Fields prefixed ai populate only when the matching AI add-on is enabled.

FieldTypeDescription
postedDatestringDate the letter was posted by the FDA (YYYY-MM-DD).
issueDatestringDate the letter was issued to the company (YYYY-MM-DD).
companyNamestringRecipient company name.
issuingOfficestringFDA issuing office or center.
subjectstringLetter subject or topic.
responseLetterbooleanWhether this record is a response letter.
closeoutLetterbooleanWhether this record is a closeout letter.
letterUrlstringDirect link to the letter on fda.gov.
recipientNamestringNamed recipient, or null (detail).
recipientTitlestringRecipient title, or null (detail).
recipientAddressstringRecipient postal address (detail).
recipientEmailstringPrimary recipient email, or null (detail).
emailsstring[]All contact emails found in the letter (detail).
deliveryMethodstringHow the letter was delivered, for example VIA UPS and Electronic Mail (detail).
referenceNumberstringFDA reference number (detail).
productAreastringProduct area, for example Tobacco, Drugs, Devices (detail).
issuingOfficeDetailstringIssuing office as stated on the detail page (detail).
letterTextstringFull text of the warning letter (detail).
letterLengthintegerCharacter length of the letter text (detail).
citationsstring[]Legal citations parsed from the letter (detail).
citationsCountintegerNumber of citations found (detail).
sourcestringData source (FDA Warning Letters).
observedAtstringISO 8601 timestamp of when the record was collected.
aiSummarystringAI plain-English summary (AI).
aiExtractobjectAI structured extract of violations, products, actions and deadline (AI).
aiSeveritystringAI severity rating: low, medium, high, critical (AI).
aiSeverityScoreintegerAI severity score, 0 to 100 (AI).
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

The hero record at the top of this page is a real record from a live run (input {"issuingOffice":"Center for Tobacco Products","fetchDetails":true,"withAiSummary":true,"withAiSeverity":true,"maxLetters":50}), with the letterText and citations trimmed for length. A full run returns the complete text and every citation.

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~fda-warning-letters-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQuery":"data integrity","issuingOffice":"CDER","fetchDetails":true,"maxLetters":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~fda-warning-letters-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"year":"2025","subjectKeyword":"CGMP","maxLetters":100}'

Apify CLI:

apify call scrapers_lat/fda-warning-letters-scraper \
--input '{"companyKeyword":"pharma","dateFrom":"2025-01-01","dateTo":"2025-12-31"}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per warning letter returned (result event). See the pricing tab for the current per-result price.
  • AI add-ons are billed separately. withAiSummary, withAiExtract and withAiSeverity are paid add-ons, charged only when they return usable output.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 letters per run. Upgrade for higher maxLetters.
  • Proxy required. fda.gov is bot protected; the actor defaults to Apify Residential (US) proxy to reach it reliably.

FAQ and troubleshooting

A run returned 0 letters. Why? The filter combination matched nothing, or the date range excluded every letter. Loosen searchQuery, remove issuingOffice/year, or widen the date range. Zero-result runs are not charged.

How do I get the full letter text and citations? Leave fetchDetails on (the default). The actor then opens each letter and adds letterText, citations, recipientAddress, emails, deliveryMethod and referenceNumber.

What do the AI add-ons do? withAiSummary adds a plain-English summary. withAiExtract adds a structured extract of violations, products, required actions and response deadline. withAiSeverity adds a severity rating and 0-100 score. All are optional, paid, and charged only when they return usable output.

Why is recipientName null? The letter was addressed generically (for example "To Whom It May Concern") so no individual recipient was named. Missing values are returned as null, never invented.

How do I pull a whole year of letters efficiently? Set year, or a dateFrom/dateTo range. The scraper stops paging once it passes below dateFrom, so bounded date pulls are efficient.

Is this an official FDA tool? No. This actor is independent and has no affiliation with the FDA. It reads only warning letters that are publicly available on fda.gov. Use it in accordance with the FDA's terms.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with the FDA. Accesses only publicly available FDA warning letters. Use in accordance with the FDA's terms of service.