FDA NDC Directory: Drug Products & National Drug Code
Pricing
from $8.32 / 1,000 results
FDA NDC Directory: Drug Products & National Drug Code
Search the FDA National Drug Code (NDC) directory for marketed US drug products: product NDC, labeler/manufacturer, active ingredients, dosage form, route, marketing category and status, DEA schedule, pharm class and packaging-level NDCs. Export to JSON, CSV or Excel.
Pricing
from $8.32 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
FDA NDC Directory: Drug Products & National Drug Code Scraper
Here is one real result, with every field the actor returns:
{"productNdc": "82706-032","productId": "82706-032_16f27e7e-6bd6-4543-9b1e-b817b4874f8a","brandName": "Ibuprofen Minis","genericName": "Ibuprofen","labelerName": "Vivunt Pharma LLC","activeIngredients": [{ "name": "IBUPROFEN", "strength": "200 mg/1" }],"dosageForm": "CAPSULE, LIQUID FILLED","route": ["ORAL"],"productType": "HUMAN OTC DRUG","marketingCategory": "ANDA","marketingStatus": "Active","marketingStartDate": "2026-08-01","marketingEndDate": null,"listingExpirationDate": "2027-12-31","applicationNumber": "ANDA206568","deaSchedule": null,"packageCount": 2,"packages": [{"packageNdc": "82706-032-01","description": "1 BOTTLE, PLASTIC in 1 BOX (82706-032-01) / 80 CAPSULE, LIQUID FILLED in 1 BOTTLE, PLASTIC","marketingStartDate": "2026-08-01","sample": false},{"packageNdc": "82706-032-02","description": "1 BOTTLE, PLASTIC in 1 BOX (82706-032-02) / 160 CAPSULE, LIQUID FILLED in 1 BOTTLE, PLASTIC","marketingStartDate": "2026-08-01","sample": false}],"pharmClass": ["Nonsteroidal Anti-inflammatory Drug [EPC]"],"rxcui": ["310964"],"unii": ["WK2XYI10QM"],"upc": null,"splId": "16f27e7e-6bd6-4543-9b1e-b817b4874f8a","isFinished": true,"alternatives": null,"aiSummary": null,"observedAt": "2026-08-17T04:25:00.000Z","error": null}
The most complete FDA National Drug Code (NDC) directory scraper available. It returns one clean row per marketed US drug product with its product NDC, labeler (manufacturer), active ingredients and strengths, dosage form, route, product type, marketing category and derived marketing status, DEA schedule, pharmacologic class, RxCUI, UNII, UPC, SPL ID, and every packaging-level NDC. Ten structured filters let you target exactly the products you need, and two optional add-ons return therapeutic/generic alternatives and a plain-English AI summary.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Use cases
- Quickstart
- Input reference
- Output reference
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches the FDA National Drug Code (NDC) directory by generic name, brand name, labeler, exact NDC, product type, route, dosage form, marketing category, DEA schedule, or a raw query expression, paginates through the matching products, and writes one normalized record per drug product to the run's dataset. Each record carries the canonical product NDC, the labeler/manufacturer, active ingredients with strengths, dosage form and route, marketing category, a derived marketing status (Active or Discontinued), marketing start and listing expiration dates, DEA schedule, pharmacologic class, RxCUI, UNII, UPC, SPL ID, and the full list of packaging-level NDCs. Missing source values are returned as null.
Two optional add-ons (paid plans only) go beyond the base record:
- Therapeutic alternatives looks up other marketed products that share the same generic name from a different labeler, returning
{productNdc, brandName, labelerName, marketingCategory}for each, ideal for formulary and competitive analysis. - AI summary produces a short plain-English description of the product (what it is, drug class, common uses, prescription or OTC) from its ingredients and pharmacologic class. Informational only, not medical advice.
Use cases
- NDC lookup and validation. Resolve any product NDC or package NDC to its labeler, ingredients, dosage form, and marketing status, the canonical US drug product identifier for claims and orders.
- Formulary and drug database management. Build and refresh a formulary or drug master file with ingredients, strengths, routes, pharm class, and RxCUI cross-references.
- Pharmacy and dispensing systems. Populate pharmacy software with packaging-level NDCs, dosage forms, and DEA schedules for controlled substances.
- Drug supply chain and inventory. Track every package configuration and its NDC across labelers for procurement, wholesaler, and 340B workflows.
- Reimbursement and 340B/pricing. Map NDCs to marketing category and status for payer, rebate, and reimbursement pipelines.
- Competitive and market intelligence. Find every generic or therapeutic alternative to a product by generic name and labeler.
- Healthcare data pipelines. Feed a clean, deduplicated drug product feed into analytics, master data management, or EHR integrations.
Quickstart
Open the actor, paste this into the input, and press Run. It returns the 50 most recently marketed ibuprofen products.
{"genericName": "ibuprofen","maxResults": 50}
Combine filters to narrow further, for example prescription-only oral products from a single labeler:
{"labeler": "Pfizer","productType": "prescription","route": "ORAL","maxResults": 200}
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
genericName | string | no | ibuprofen | Filter by generic (non-proprietary) name, for example atorvastatin. |
brandName | string | no | (none) | Filter by brand (proprietary) name, for example Advil. |
labeler | string | no | (none) | Filter by labeler / manufacturer, for example Pfizer or Teva. |
ndc | string | no | (none) | Exact product NDC lookup, for example 0069-2587. |
productType | enum | no | (any) | Restrict to prescription or otc. |
route | string | no | (none) | Route of administration, for example ORAL, TOPICAL, OPHTHALMIC. |
dosageForm | string | no | (none) | Dosage form, for example TABLET, CAPSULE, INJECTION. |
marketingCategory | string | no | (none) | Marketing/approval category, for example NDA, ANDA, BLA, OTC MONOGRAPH FINAL. |
deaSchedule | string | no | (none) | Controlled-substance DEA schedule, for example CII, CIII, CIV, CV. |
searchQuery | string | no | (none) | Raw openFDA search expression added on top of the filters, for example marketing_start_date:[20240101 TO 20241231]. |
maxResults | integer | no | 50 | Maximum products to collect. Free Apify plans are capped at 10 per run. |
includeAlternatives | boolean | no | false | Paid add-on. Therapeutic/generic alternatives per product. Billed only when alternatives are found. |
withAiSummary | boolean | no | false | Paid add-on. AI plain-English summary per product. Billed only when produced. |
Output reference
One dataset item per drug product. Types: string, boolean, integer, string[], object[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
productNdc | string | Product NDC, the canonical US drug product identifier, for example 82706-032. |
productId | string | Full FDA product identifier (NDC plus SPL set id). |
brandName | string | Brand (proprietary) name, or null. |
genericName | string | Generic (non-proprietary) name. |
labelerName | string | Labeler / manufacturer name. |
activeIngredients | object[] | Active ingredients as {name, strength}. |
dosageForm | string | Dosage form, for example TABLET or CAPSULE, LIQUID FILLED. |
route | string[] | Route(s) of administration. |
productType | string | HUMAN PRESCRIPTION DRUG, HUMAN OTC DRUG, or other FDA product type. |
marketingCategory | string | Marketing/approval category, for example NDA, ANDA, OTC MONOGRAPH FINAL, BLA. |
marketingStatus | string | Derived status: Active, or Discontinued when a marketing end date is set or the listing has expired. |
marketingStartDate | string | Marketing start date, YYYY-MM-DD. |
marketingEndDate | string | Marketing end date when present, else null. |
listingExpirationDate | string | NDC listing expiration date, YYYY-MM-DD. |
applicationNumber | string | FDA application number when present, for example ANDA206568. |
deaSchedule | string | Controlled-substance schedule (CII..CV), or null. |
packageCount | integer | Number of packaging configurations. |
packages | object[] | Packaging-level NDCs as {packageNdc, description, marketingStartDate, sample}. |
pharmClass | string[] | Established pharmacologic class (EPC), or null. |
rxcui | string[] | RxNorm concept unique identifiers, or null. |
unii | string[] | Unique ingredient identifiers, or null. |
upc | string[] | Universal Product Codes when present, or null. |
splId | string | Structured Product Labeling document id. |
isFinished | boolean | Whether this is a finished (marketable) product. |
alternatives | object[] | Add-on: therapeutic/generic alternatives, or null. |
aiSummary | object | Add-on: {whatItIs, drugClass, commonUses, prescriptionOrOtc}, or null. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Run via API and CLI
Start a run and 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-ndc-drug-directory-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"genericName":"atorvastatin","maxResults":100}'
Start a run asynchronously (labeler plus filters):
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~fda-ndc-drug-directory-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"labeler":"Pfizer","productType":"prescription","maxResults":500}'
Apify CLI:
apify call scrapers_lat/fda-ndc-drug-directory-scraper \--input '{"deaSchedule":"CII","maxResults":50}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "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 drug product returned (
resultevent). See the pricing tab for the current per-result price. - Alternatives add-on. When
includeAlternativesis on, thealternativesevent is billed once per product only when therapeutic/generic alternatives are found. Paid plans only. - AI summary add-on. When
withAiSummaryis on, theai_summaryevent is billed per product only when the model returns usable output. Paid plans only. The summary is informational and not medical advice. - No charge on failure. If a run errors or matches nothing, the actor writes a single item with a populated
errorfield (or no items) and does not charge for it. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 products per run, and the paid add-ons are disabled. Upgrade for higher
maxResultsand add-ons.
FAQ and troubleshooting
A search returned 0 products. Why? The query matched nothing in the FDA NDC directory. Zero-result runs are not charged. Loosen the filters or check the spelling of the generic or brand name.
What is the difference between a product NDC and a package NDC? The product NDC identifies the drug product (labeler plus product). Each product can have several package NDCs, one per packaging configuration (bottle, carton, blister). Both are returned.
How is marketing status derived?
A product is Active unless it has a marketing end date or its NDC listing expiration date is in the past, in which case it is Discontinued.
How do I look up one specific NDC?
Put the product NDC in the ndc field, for example 0069-2587.
Can I combine filters?
Yes. All filters are combined with AND, and searchQuery lets you add any raw openFDA expression on top.
Is this the same as drug labeling or adverse events? No. This actor covers the NDC product directory (identity, packaging, marketing). Drug labeling text and adverse event reports are separate datasets.
