# FDA NDC Drug Directory Scraper & API (`pink_comic/fda-ndc-drug-directory`) Actor

Search FDA's openFDA National Drug Code Directory by product/package NDC, drug names, labeler, ingredient, route, dosage form, marketing category, application number, status, and dates. Returns normalized source-linked labeler-submitted listing evidence.

- **URL**: https://apify.com/pink\_comic/fda-ndc-drug-directory.md
- **Developed by:** [Ava Torres](https://apify.com/pink_comic) (community)
- **Categories:** Business, Automation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 fda ndc drug directory scraper & api evidence items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## FDA National Drug Code Directory Scraper & API

Search the official **FDA National Drug Code (NDC) Directory through openFDA**. Get normalized product/package NDCs, brand and generic names, labeler, active ingredients and strengths, packaging, route, dosage form, application number, marketing category, and reported dates.

### Searches

- Exact product NDC or package NDC
- Brand or generic name
- Labeler and active ingredient
- Route and dosage form
- Marketing category and application number
- Reported marketing status and marketing/listing date ranges

All modes share one total `maxResults` cap. `maxCandidates` bounds source pagination before local date/status filtering. Empty input uses exact brand `OZEMPIC`, deterministically sorts by product NDC, and returns one item. The bounded first run costs at most **$0.0001 start + $0.002 per item = $0.0021**.

### Inputs

```json
{"brandName":"OZEMPIC","maxResults":1}
```

```json
{"productNdc":"0169-1704","maxResults":10}
```

```json
{"packageNdc":"0169-1704-30","maxResults":1}
```

```json
{"activeIngredient":"SEMAGLUTIDE","route":"SUBCUTANEOUS","marketingStatus":"CURRENT","maxCandidates":100,"maxResults":25}
```

`marketingStatus=CURRENT` means no elapsed **reported marketing end date** was observed. It does not establish market availability. Date filters use `YYYY-MM-DD`.

### Output and explicit outcomes

Found items include normalized non-null ingredient, package, and route arrays; source query/retrieval evidence; bounded-query disclosure; and mandatory interpretation limits. A search with no result emits `NO_MATCH`. Retry exhaustion emits `SOURCE_UNAVAILABLE` instead of a silent empty dataset.

### Evidence boundaries

NDC data is labeler-submitted product-listing evidence. An NDC listing is **not**:

- FDA approval or endorsement;
- proof of current manufacture, distribution, inventory, or market availability;
- therapeutic-equivalence, safety, efficacy, quality, authenticity, or recall evidence;
- prescribing, diagnosis, or treatment advice;
- a complete historical or current-state determination.

Marketing start/end and listing expiration dates are administrative fields and require careful interpretation. A missing result does not prove a product is absent, discontinued, unapproved, unavailable, or inauthentic. `unapprovedCategory` only identifies marketing-category text reported by the source; it does not independently adjudicate legal or approval status. Confirm consequential decisions with FDA's relevant product/application databases, labeling, recalls, and qualified professionals.

### Source

- [openFDA NDC endpoint](https://api.fda.gov/drug/ndc.json)
- [FDA NDC Directory](https://www.fda.gov/drugs/drug-approvals-and-databases/national-drug-code-directory)

openFDA can update, limit, or revise data and includes its own unvalidated-data/medical-decision disclaimer in API metadata.

# Actor input Schema

## `productNdc` (type: `string`):

Hyphenated product NDC, such as 0169-1704.

## `packageNdc` (type: `string`):

Hyphenated package NDC, such as 0169-1704-30.

## `brandName` (type: `string`):

Exact openFDA brand-name phrase.

## `genericName` (type: `string`):

Optional generic name filter or result-control setting. See the README for source semantics and examples.

## `labelerName` (type: `string`):

Optional labeler filter or result-control setting. See the README for source semantics and examples.

## `activeIngredient` (type: `string`):

Optional active ingredient filter or result-control setting. See the README for source semantics and examples.

## `route` (type: `string`):

Optional route filter or result-control setting. See the README for source semantics and examples.

## `dosageForm` (type: `string`):

Optional dosage form filter or result-control setting. See the README for source semantics and examples.

## `marketingCategory` (type: `string`):

Exact reported category, such as NDA or UNAPPROVED DRUG OTHER.

## `marketingStatus` (type: `string`):

Derived only from reported marketing end date; not proof of current availability.

## `applicationNumber` (type: `string`):

Optional application number filter or result-control setting. See the README for source semantics and examples.

## `marketingStartFrom` (type: `string`):

YYYY-MM-DD local filter.

## `marketingStartTo` (type: `string`):

YYYY-MM-DD local filter.

## `listingExpirationFrom` (type: `string`):

YYYY-MM-DD local filter; expiration requires careful interpretation.

## `listingExpirationTo` (type: `string`):

YYYY-MM-DD local filter.

## `maxCandidates` (type: `integer`):

Bounded source window checked before local date/status filters.

## `maxResults` (type: `integer`):

One total output cap, reduced further by the buyer's maximum charge budget.

## Actor input object example

```json
{
  "brandName": "OZEMPIC",
  "marketingStatus": "ANY",
  "maxCandidates": 100,
  "maxResults": 1
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "brandName": "OZEMPIC",
    "maxResults": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("pink_comic/fda-ndc-drug-directory").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "brandName": "OZEMPIC",
    "maxResults": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("pink_comic/fda-ndc-drug-directory").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "brandName": "OZEMPIC",
  "maxResults": 1
}' |
apify call pink_comic/fda-ndc-drug-directory --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pink_comic/fda-ndc-drug-directory"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cMxteC30QE0mzr1DO/builds/aSTvjhdsQzeUkb1ly/openapi.json
