/ writing / pharma
The FDA publishes great data. The interfaces don't.
Orange Book (patents + exclusivity). NDC Directory (product codes). openFDA (adverse events, recalls, labeling). Drugs@FDA (approval history). Four systems, four APIs, four pagination schemes, four auth models. You just want: "show me every patent on Keytruda with expiry dates" or "all Class I recalls for sterile injectables in 2024."
FDA Drug Database Extractor wraps all four into one actor with one record shape. Six modes, typed output, zero auth required (optional API key for higher limits).
Modes & Sources
| Mode | Source | What you get |
|---|---|---|
orangeBook | FDA Orange Book | Patents (number, expiry, use code, delist flag), exclusivities (code, expiry), linked to NDA/ANDA/BLA + product + applicant |
ndcDirectory | NDC Directory | Product codes, package sizes, marketing categories, labeler info, DEA schedule |
openFDA-events | openFDA FAERS | Adverse event reports: drug, reaction, outcome, patient demographics, report date |
openFDA-recalls | openFDA Enforcement Reports | Recalls: classification, reason, product, firm, dates, distribution |
openFDA-labeling | openFDA SPL | Structured product labeling: indications, dosage, contraindications, warnings |
drugsAtFDA | Drugs@FDA | Approval history: application numbers, sponsor, approval dates, review classifications |
Example: Orange Book output
{
"applNo": "021790",
"productNo": "001",
"productName": "KEYTRUDA",
"activeIngredient": "PEMBROLIZUMAB",
"dosageForm": "INJECTION",
"route": "INTRAVENOUS",
"strength": "100MG/4ML",
"applicant": "MERCK SHARP & DOHME LLC",
"patents": [
{"patentNumber": "US9067967", "expiry": "2028-05-06", "useCode": "U1118", "delistFlag": "N"},
{"patentNumber": "US9611278", "expiry": "2031-03-25", "useCode": "U1118", "delistFlag": "N"},
{"patentNumber": "US9868750", "expiry": "2033-11-20", "useCode": "U1118", "delistFlag": "N"}
],
"exclusivities": [
{"code": "M", "expiry": "2026-10-02", "description": "New chemical entity"}
],
"fetchedAt": "2026-07-28T10:00:00Z"
}
Why this over the FDA's own tools?
- One query, all sources — Orange Book for patents, openFDA for recalls, NDC for packaging, Drugs@FDA for approvals. No context switching.
- Typed output — dates as dates, numbers as numbers, arrays as arrays. Not CSVs with mixed types.
- Schedulable + webhook — run weekly, push new recalls/patents to your pipeline automatically.
- No API key required — all four sources are keyless (openFDA has optional key for 240 req/min vs 40).
- Assignee/applicant normalization — "Merck Sharp & Dohme", "MERCK SHARP & DOHME LLC", "Merck & Co." → one canonical ID.
Use cases
- Patent cliff tracking — schedule Orange Book runs, webhook on new expiries for your watchlist.
- Safety signal monitoring — openFDA events filtered by drug + reaction, daily digest.
- Recall alerting — Class I recalls for your product category, instant webhook.
- Competitive pipeline intel — Drugs@FDA approvals by therapeutic area + sponsor.
- NDC reconciliation — master product list from NDC Directory, enrich with Orange Book patents.
Try it: FDA Drug Database on Apify — six modes, one schema, keyless, schedulable.