FDA Orange Book Scraper avatar

FDA Orange Book Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
FDA Orange Book Scraper

FDA Orange Book Scraper

Scrape FDA's Orange Book - Approved Drug Products with Therapeutic Equivalence Evaluations. Search by drug name, active ingredient, applicant, or application number; browse by approval date; look up patents and marketing exclusivities. Sourced from FDA's official monthly bulk data files.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Scrape the FDA's Orange Book — "Approved Drug Products with Therapeutic Equivalence Evaluations" — the official register of every FDA-approved prescription and over-the-counter drug, along with the patents and marketing exclusivities that protect them. Search by drug name, active ingredient, applicant, or application number; browse approvals by date; or pull patent/exclusivity data directly. Sourced from FDA's official monthly bulk data files — no login, no API key, no cookies.

What this actor does

  • Five modes: search, byApplicationNumbers, byApprovalDateRange, patentExclusivityLookup, findEquivalents
  • Search axes: drug/brand name, active ingredient, applicant (manufacturer), application number, dosage form, route of administration, strength — each independently filterable and combinable
  • Filters: application type (NDA/ANDA), drug type (Rx/OTC/Discontinued), therapeutic equivalence (TE) code, Reference Listed Drug / Reference Standard flags, has-patents / has-exclusivity, approval date range
  • Sorting: approval date (newest/oldest), ingredient/applicant/trade name (A-Z), patent/exclusivity expiration date (soonest/latest)
  • Generic/brand equivalence lookup: findEquivalents finds every product sharing the same ingredient + dosage form + route + strength as a reference application number — the same logic pharmacists use to identify substitutable generics
  • Patents & exclusivities: nested on every product record, or pulled standalone via patentExclusivityLookup (filterable by patent number, exclusivity code, expiration date)
  • Empty fields are omitted — every field in the output is real FDA data

Data source

FDA publishes the entire Orange Book every month as a single bulk download (tilde-delimited products.txt, patent.txt, exclusivity.txt) from the Orange Book Data Files page. The actor downloads and parses this file directly — this is the same underlying data that powers the legacy accessdata.fda.gov search UI, but far more reliable to consume programmatically (no session-bound form posts, no CAPTCHA, no rate limiting).

Output per record

Products (recordType: "orangeBookProduct"):

  • applicationNumber (e.g. NDA020610, ANDA018613), applicationType, applicationTypeFull, productNumber
  • ingredient, dosageForm, route, tradeName, applicant, applicantFullName, strength
  • teCodes[], teCodeDescription — therapeutic equivalence rating
  • approvalDate (ISO), approvalDateRaw (original FDA text, including legacy "Approved Prior to Jan 1, 1982")
  • referenceListedDrug, referenceStandard (booleans)
  • drugType (RX/OTC/DISCN), drugTypeFull
  • patents[] — nested: patentNumber, expirationDate, drugSubstancePatent, drugProductPatent, patentUseCode, delisted, submissionDate, hasPediatricExtension, isReissuePatent
  • exclusivities[] — nested: exclusivityCode, description, expirationDate
  • patentCount, exclusivityCount
  • sourceUrl — direct link to the product's FDA Orange Book page
  • recordType, scrapedAt

Patents / exclusivities (patentExclusivityLookup mode; recordType: "orangeBookPatent" / "orangeBookExclusivity"):

  • Same patent/exclusivity fields as above, flattened, plus applicationNumber, productNumber, ingredient, tradeName, applicant (joined from the product), sourceUrl

Generic/brand equivalents (findEquivalents mode; recordType: "orangeBookProduct"):

  • Same product fields as above, plus isReferenceProduct (true for the application number you searched, false for its equivalents)

Input

FieldTypeDefaultDescription
modeselectsearchsearch / byApplicationNumbers / byApprovalDateRange / patentExclusivityLookup / findEquivalents
searchQuerystringibuprofenFree-text match across ingredient, trade name, applicant, application number (mode=search)
activeIngredientstringSubstring match on active ingredient
tradeNamestringSubstring match on brand/trade name
applicantNamestringSubstring match on applicant
applicationNumberQuerystringSubstring/suffix match on application number
applicationNumbersarray["NDA020699"]Exact application numbers (mode=byApplicationNumbers); exactly one reference number (mode=findEquivalents)
applicationTypeselectAnyNDA / ANDA
drugTypeselectAnyRX / OTC / DISCN
teCodeselectAnyTherapeutic equivalence code (AB, AB1-4, AA, AN, AO, AP, AP1-3, AT, AT1-3, BC, BD, BP, BS, BX)
dosageFormQuerystringSubstring match on dosage form (e.g. TABLET)
routeQuerystringSubstring match on route of administration (e.g. ORAL)
strengthQuerystringSubstring match on labeled strength (e.g. 200MG)
referenceListedDrugOnlybooleanfalseOnly RLD products
referenceStandardOnlybooleanfalseOnly Reference Standard products
hasPatentsOnlybooleanfalseOnly products with at least one listed patent
hasExclusivityOnlybooleanfalseOnly products with at least one active exclusivity
excludeReferenceProductbooleanfalsemode=findEquivalents: omit the reference product itself from results
sortByselectdefaultapprovalDateDesc / approvalDateAsc / ingredientAsc / applicantAsc / tradeNameAsc / expirationDateAsc / expirationDateDesc
approvalDateFrom / approvalDateTostringISO YYYY-MM-DD; required (either) for mode=byApprovalDateRange
recordKindselectbothpatents / exclusivities / both (mode=patentExclusivityLookup)
patentNumberQuerystringSubstring match on US patent number
exclusivityCodeQuerystringSubstring match on exclusivity code
includeDelistedbooleantrueInclude patents FDA flagged as delisted
expirationDateFrom / expirationDateTostringISO YYYY-MM-DD patent/exclusivity expiration range
maxItemsinteger100Hard cap (1–5000)
proxyConfigurationproxy{useApifyProxy: true}Optional fallback if FDA ever blocks the direct connection

Example: search by ingredient + drug type

{
"mode": "search",
"activeIngredient": "metformin",
"drugType": "RX",
"applicationType": "ANDA",
"maxItems": 50
}

Example: lookup by application number

{
"mode": "byApplicationNumbers",
"applicationNumbers": ["NDA020610", "ANDA018613"]
}

Example: browse recent approvals

{
"mode": "byApprovalDateRange",
"approvalDateFrom": "2024-01-01",
"approvalDateTo": "2024-12-31",
"maxItems": 100
}

Example: patents expiring soon for a given application

{
"mode": "patentExclusivityLookup",
"applicationNumbers": ["NDA214070"],
"recordKind": "patents",
"sortBy": "expirationDateAsc"
}

Example: find generic equivalents of a brand-name drug

{
"mode": "findEquivalents",
"applicationNumbers": ["NDA020402"],
"excludeReferenceProduct": true
}

Use cases

  • Generics/pharma competitive intelligence — track patent and exclusivity expiration dates ahead of generic entry
  • Regulatory research — verify therapeutic equivalence ratings before substitution
  • Legal/IP due diligence — enumerate every patent covering a given NDA
  • Market access — identify Rx-to-OTC switches and new approvals by date
  • Academic/health-policy research — bulk export of approved-drug metadata

FAQ

What's the Orange Book? FDA's official list of approved drug products with their therapeutic equivalence evaluations, patents, and exclusivities — the reference generics manufacturers use to identify bioequivalent substitutes and patent challenges.

How fresh is the data? FDA republishes the bulk data files monthly (typically the second week of each month, covering the prior month's changes). The actor always fetches the latest file at run time.

Why not scrape accessdata.fda.gov directly? That legacy ColdFusion search UI is session-bound and only supports one query at a time; the monthly bulk file contains the complete dataset and is far more reliable to consume at scale.

What does teCodeDescription mean? A-prefixed codes (AB, AA, AT, ...) indicate FDA considers the product therapeutically equivalent to the reference; B-prefixed codes (BX, BC, ...) indicate it is not (yet) rated equivalent.

What if my application number isn't found? byApplicationNumbers reports which numbers matched and which didn't via the run's status message — double check the type prefix (NDA vs ANDA) or try the bare digits.

Are discontinued drugs included? Yes — drugType: "DISCN" marks products FDA has moved to the discontinued section; filter with drugType to include/exclude them.

How does findEquivalents decide what's a match? It matches on identical ingredient + dosage form + route of administration + strength (FDA's own basis for bioequivalence grouping). It does not require the same TE code, so review teCodes/teCodeDescription on each result before treating a match as an approved substitute.

Why are dosageFormQuery / routeQuery free-text instead of dropdowns? FDA's Orange Book stores dosage form and route as combined, often multi-value strings (e.g. TABLET, EXTENDED RELEASE or INTRAMUSCULAR, INTRAVENOUS, SUBCUTANEOUS) — there are 117+ distinct dosage-form strings and 79+ route strings, most of which are combinations. A substring match lets you match the atomic term (ORAL) regardless of which combination it appears in.