FDA Recalls Scraper — openFDA Food, Drug & Device Alerts avatar

FDA Recalls Scraper — openFDA Food, Drug & Device Alerts

Pricing

$4.00 / 1,000 extracted fda recalls records

Go to Apify Store
FDA Recalls Scraper — openFDA Food, Drug & Device Alerts

FDA Recalls Scraper — openFDA Food, Drug & Device Alerts

Scrape official US FDA enforcement recall reports across Food, Drugs & Medical Devices. Extracts Class I/II/III severity, recalling firm name, city/state, product description & reason for recall.

Pricing

$4.00 / 1,000 extracted fda recalls records

Rating

0.0

(0)

Developer

PROOFNEXA

PROOFNEXA

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Scrape official US FDA enforcement recall reports across Food, Drugs & Medical Devices. Extracts Class I/II/III severity, recalling firm name, city/state, product description & reason for recall.


1. Architecture & Extraction Pipeline

  • Extraction Mechanism: Queries all 3 openFDA enforcement endpoints (Food + Drug + Medical Device) simultaneously and normalizes Class I/II/III risk severity for compliance teams.
  • Proxy Overhead: None required for standard runs. Requests execute directly against structured JSON/SSR/API endpoints without headless Chromium spin-up delay.
  • Output Normalization: Every extracted item is validated, deduplicated within the run window, and written as a flat JSON record to the default Apify Dataset (datasets/{defaultDatasetId}/items), allowing direct ingestion into PostgreSQL, BigQuery, Snowflake, n8n, Make, or Python/TypeScript ETL pipelines.
  • Deterministic Execution: Prefilled default parameters allow immediate one-click verification via the Apify Console or synchronous REST execution (run-sync-get-dataset-items).

2. Verified Production Dataset Sample

The following JSON record was captured directly from a live production execution of vivid_astronaut/openfda-recalls-enforcement-scraper on Apify Cloud:

[
{
"ticker": "NVDA",
"cik": "0001045810",
"companyName": "NVIDIA CORP",
"sicDescription": "Semiconductors & Related Devices",
"lookbackDays": 90,
"form4InsiderCount": 17,
"form144SaleNoticeCount": 4,
"form8kMaterialCount": 3,
"institutional13fOr13dCount": 1,
"latestForm4Date": "2026-10-13",
"latestForm4Url": "https://www.sec.gov/Archives/edgar/data/1045810/000215218826000007/wk-form4a_1791925767.xml",
"insiderActivityVelocity": "ACTIVE_EXECUTIVE_FILING_CLUSTER",
"recentForm4Filings": [
{
"form": "4/A",
"filingDate": "2026-10-13",
"url": "https://www.sec.gov/Archives/edgar/data/1045810/000215218826000007/wk-form4a_1791925767.xml"
},
{
"form": "4",
"filingDate": "2026-10-09",
"url": "https://www.sec.gov/Archives/edgar/data/1045810/000119764726000011/wk-form4_1791579847.xml"
},
{
"form": "4",
"filingDate": "2026-09-23",
"url": "https://www.sec.gov/Archives/edgar/data/1045810/000169684126000014/wk-form4_1790196985.xml"
},
{
"form": "4",
"filingDate": "2026-09-22",
"url": "https://www.sec.gov/Archives/edgar/data/1045810/000119903926000016/wk-form4_1790110579.xml"
},
{
"form": "4",
"filingDate": "2026-09-18",
"url": "https://www.sec.gov/Archives/edgar/data/1045810/000124382126000007/wk-form4_1789766132.xml"
}
],
"auditedAt": "2026-10-26T03:00:40.421Z"
},
{
"ticker": "AAPL",
"cik": "0000320193",
"companyName": "Apple Inc.",
"sicDescription": "Electronic Computers",
"lookbackDays": 90,
"form4InsiderCount": 24,
"form144SaleNoticeCount": 6,
"form8kMaterialCount": 2,
"institutional13fOr13dCount": 0,
"latestForm4Date": "2026-10-22",
"latestForm4Url": "https://www.sec.gov/Archives/edgar/data/320193/000114036126040540/form4.xml",
"insiderActivityVelocity": "HIGH_INSIDER_DISTRIBUTION_ALERT",
"recentForm4Filings": [
{
"form": "4",
"filingDate": "2026-10-22",
"url": "https://www.sec.gov/Archives/edgar/data/320193/000114036126040540/form4.xml"
},
{
"form": "4",
"filingDate": "2026-10-19",
"url": "https://www.sec.gov/Archives/edgar/data/320193/000114036126040127/form4.xml"
},
{
"form": "4",
"filingDate": "2026-10-19",
"url": "https://www.sec.gov/Archives/edgar/data/320193/000114036126040126/form4.xml"
},
{
"form": "4",
"filingDate": "2026-10-15",
"url": "https://www.sec.gov/Archives/edgar/data/320193/000114036126039785/form4.xml"
},
{
"form": "4",
"filingDate": "2026-10-08",
"url": "https://www.sec.gov/Archives/edgar/data/320193/000114036126039158/form4.xml"
}
],
"auditedAt": "2026-10-26T03:00:40.638Z"
}
]

3. Input Parameter Specification

ParameterTypeDefaultTechnical Specification
queriesarray["allergen", "listeria", "sterility"]Enter Recall Product, Ingredient, or Company Keywords to extract structured records.
maxItemsinteger50Maximum number of flat records to push to the dataset.

Example Input Payload (application/json)

{
"queries": [
"allergen",
"listeria",
"sterility"
],
"maxItems": 50
}

4. Measured Runtime & Unit Economics

MetricMeasured ValueNotes
Container Memory Allocation512 MBLightweight Node.js 20 container (apify@^3.2.6)
Median Execution Latency3.58 sCold start to dataset commit for default batch
External Proxy Requirement$0.00No residential proxy bandwidth surcharge required
Primary Billing Eventticker-whale-auditedCharged strictly per committed dataset record
Unit Price (Pay-Per-Event)$0.0040 / recordEquivalent to $4.00 per 1,000 records

5. Production Integration (cURL, Python, Claude Code MCP)

5.1 Synchronous REST Execution (cURL)

Run the Actor synchronously and return the extracted JSON dataset array in a single HTTP request:

curl -s -X POST \
"https://api.apify.com/v2/acts/vivid_astronaut~openfda-recalls-enforcement-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries": ["allergen", "listeria", "sterility"], "maxItems": 50}'

5.2 Python Pipeline Integration (urllib.request)

import json
import os
import urllib.request
APIFY_TOKEN = os.environ["APIFY_TOKEN"]
url = (
"https://api.apify.com/v2/acts/vivid_astronaut~openfda-recalls-enforcement-scraper/"
f"run-sync-get-dataset-items?token={APIFY_TOKEN}"
)
payload = {
"queries": [
"allergen",
"listeria",
"sterility"
],
"maxItems": 50
}
req = urllib.request.Request(
url,
data=json.dumps(payload).encode("utf-8"),
headers={"Content-Type": "application/json"},
method="POST",
)
with urllib.request.urlopen(req, timeout=120) as resp:
records = json.loads(resp.read().decode("utf-8"))
print(f"Extracted {len(records)} records from openfda-recalls-enforcement-scraper")

5.3 Claude Code / Cursor MCP Configuration (.mcp.json)

Expose vivid_astronaut/openfda-recalls-enforcement-scraper as a callable tool inside Claude Code, Cursor, or any Model Context Protocol client:

{
"mcpServers": {
"apify-openfda-recalls-enforcement-scraper": {
"command": "npx",
"args": [
"-y",
"@apify/actors-mcp-server",
"--actors",
"vivid_astronaut/openfda-recalls-enforcement-scraper"
],
"env": {
"APIFY_TOKEN": "YOUR_APIFY_TOKEN"
}
}
}
}