# FDA Drug Approval Lookup (NDA / ANDA / BLA) (`sovereign_workspace/fda-drugsfda-lookup`) Actor

Search FDA drug applications by company, application number, or drug name. Covers NDAs, ANDAs, and CDER BLAs — search-first, not a bulk dump.

- **URL**: https://apify.com/sovereign\_workspace/fda-drugsfda-lookup.md
- **Developed by:** [Chase Mariano](https://apify.com/sovereign_workspace) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 application-records

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## FDA Drugs@FDA Application Lookup

One **record per FDA drug application** (NDA, ANDA or BLA) that matches
your search: sponsor company, application number, brand or active
ingredient, narrowed by application type, marketing status and the kind
and date of FDA action. Each record carries the application's products
and its full submissions timeline: original approval date, tentative
approval, and the latest action with its approval letter and label
links. Built for pharma BD, competitive-intelligence and regulatory
teams who need "every approval Teva got for this ingredient" or "which
original NDAs were approved this month", not a bulk data dump.

**Pricing: pay per event.** `application-record` — one event per
application returned. A search with no matches costs you nothing.

A search is required: at least one of **sponsors**, **application
numbers** or **drug keywords**. The one exception is a recent-actions
feed: a window of 1–90 days plus at least one kind filter (application
type, submission type, status, class, review priority or orphan).
Different fields combine with AND; entries within one field combine
with OR.

**Submission filters apply to one action.** "Original approvals in the
last 30 days" means a single ORIG submission approved inside the window,
not an old original plus a recent labeling supplement. openFDA's own
search matches those conditions across *different* submissions: in a
live check, 61 of 74 hits for that query were near-misses. This Actor
re-checks every hit and never charges for one.

### Input

```json
{"sponsors": ["teva pharms"], "drug_keywords": ["atorvastatin"],
 "marketing_statuses": ["prescription"]}
```

Recent original approvals of new drugs and biologics:

```json
{"application_types": ["NDA", "BLA"], "submission_types": ["ORIG"],
 "submission_statuses": ["AP"], "since_days": 30}
```

Sponsor names are matched anywhere in the sponsor as FDA records it.
FDA often abbreviates them (`TEVA PHARMS USA`, `DR REDDYS LABS LTD`), so
the shortest distinctive word works best. **Scheduled watches:** set an
action window and turn on **Only actions not reported before**. An
application is then returned and charged again only when it gets a new
matching action.

### Example output (one dataset item per application; lists abridged)

```json
{"application_number": "NDA213871", "application_type": "NDA",
 "sponsor_name": "PFIZER", "brand_names": ["CIBINQO"],
 "active_ingredients": ["ABROCITINIB"], "dosage_forms": ["TABLET"],
 "routes": ["ORAL"], "marketing_statuses": ["Prescription"],
 "products": [{"product_number": "003", "brand_name": "CIBINQO",
   "active_ingredients": [{"name": "ABROCITINIB", "strength": "200MG"}],
   "dosage_form": "TABLET", "route": "ORAL", "marketing_status": "Prescription",
   "te_code": null, "reference_drug": true, "reference_standard": true}],
 "original_approval_date": "2022-01-14", "tentative_approval_date": null,
 "latest_action": {"type": "SUPPL", "number": "3", "status": "AP",
   "status_date": "2026-09-02", "review_priority": "STANDARD",
   "class_code": "LABELING", "class_description": "Labeling", "orphan": false,
   "docs": [{"type": "Letter", "date": "2026-09-04",
     "url": "https://www.accessdata.fda.gov/drugsatfda_docs/appletter/2026/213871Orig1s003ltr.pdf"},
     {"type": "Label", "date": "2026-09-08",
     "url": "https://www.accessdata.fda.gov/drugsatfda_docs/label/2026/213871s003lbl.pdf"}]},
 "latest_action_date": "2026-09-02", "submission_count": 5,
 "matched_submissions": [{"type": "SUPPL", "number": "3", "status": "AP",
   "status_date": "2026-09-02", "class_code": "LABELING", "docs": ["…"]}],
 "submissions": [{"type": "SUPPL", "number": "3", "status": "AP",
   "status_date": "2026-09-02", "class_code": "LABELING"}, "…"],
 "generic_names": ["ABROCITINIB"],
 "manufacturer_names": ["U.S. Pharmaceuticals", "Pfizer Laboratories Div Pfizer Inc"],
 "pharm_class_epc": ["Janus Kinase Inhibitor [EPC]"],
 "drugsfda_url": "https://www.accessdata.fda.gov/scripts/cder/daf/index.cfm?event=overview.process&ApplNo=213871",
 "data_last_updated": "2026-09-22"}
```

### Output fields

One dataset item per result. Every field is always present (empty or
null when the source has no value). Defined in
`.actor/dataset_schema.json`.

| Field | Type | Description |
|---|---|---|
| `application_number` | string | NDA, ANDA or BLA plus 6 digits |
| `application_type` | string or null | NDA, ANDA or BLA |
| `sponsor_name` | string or null | Sponsor (applicant) as FDA records it |
| `brand_names` | array | Distinct product brand names |
| `active_ingredients` | array | Distinct active-ingredient names |
| `dosage_forms` | array | Distinct dosage forms |
| `routes` | array | Distinct routes of administration |
| `marketing_statuses` | array | Distinct product marketing statuses |
| `products` | array | Per product: number, brand, ingredients with strength, dosage form, route, marketing status, therapeutic-equivalence code, reference drug / reference standard flags |
| `original_approval_date` | string or null | Approval date of the original application, YYYY-MM-DD |
| `tentative_approval_date` | string or null | Tentative approval date of the original application, if any |
| `latest_action` | object or null | Most recent submission action, with its documents (letters, labels) |
| `latest_action_date` | string or null | Date of the most recent action |
| `submission_count` | integer | Submissions on file (original + supplements) |
| `matched_submissions` | array | Actions that met every submission filter on the same submission, newest first, with documents. With "only new actions" on, only the ones not reported before. Empty when no submission filter is set. |
| `submissions` | array | Submission timeline, newest first (max 200), without documents |
| `generic_names` | array | openFDA generic names (empty when openFDA has no label link) |
| `manufacturer_names` | array | openFDA labeler / manufacturer names |
| `pharm_class_epc` | array | Established pharmacologic class |
| `drugsfda_url` | string | The application's Drugs@FDA page |
| `data_last_updated` | string or null | When openFDA last refreshed Drugs@FDA, YYYY-MM-DD |

Runs stop cleanly at your max-charge limit: nothing is pushed past what
you agreed to pay for.

### Coverage and freshness

- **What's in:** Drugs@FDA holds FDA-approved and tentatively approved
  NDAs (brand drugs), ANDAs (generics), and the **therapeutic biologics
  regulated by CDER**: 29,347 applications on 2026-09-23 (5,890 NDA,
  22,974 ANDA, 483 BLA).
- **What's out:** biologics regulated by CBER, such as vaccines, blood
  products, and cell and gene therapies (COMIRNATY, SHINGRIX and KYMRIAH
  aren't in it). Neither are pending or refused applications, or OTC
  monograph drugs without an application.
- **Freshness:** openFDA refreshes Drugs@FDA a few times a week and runs
  a couple of business days behind FDA's own site. On 2026-09-23 the
  data carried actions through 2026-09-18, while FDA's site showed
  2026-09-22. Every record shows `data_last_updated`.

Source: the openFDA drug/drugsfda API (public, CC0). Without a key,
openFDA allows 1,000 requests per day per IP address, and Apify IPs are
shared, so heavy schedules should add a free openFDA API key. openFDA's
disclaimer: "Do not rely on openFDA to make decisions regarding medical
care. While we make every effort to ensure that data is accurate, you
should assume all results are unvalidated." This Actor isn't affiliated
with or endorsed by the FDA. Also see the
[FDA Recall Monitor](https://apify.com/sovereign_workspace/openfda-recall-monitor)
for drug, food and device recalls, and the FDA 510(k) / PMA Clearance
Monitor for medical-device decisions.

# Actor input Schema

## `profile` (type: `string`):

Named config preset applied at start. Any field you set explicitly below overrides the preset.

## `sponsors` (type: `array`):

Company names or fragments, matched anywhere in the sponsor name as FDA records it (often abbreviated, e.g. TEVA PHARMS, DR REDDYS LABS LTD). Case doesn't matter. Up to 5. Give at least one of sponsors, application numbers or drug keywords.

## `application_numbers` (type: `array`):

Specific applications, e.g. NDA020702, ANDA076347, BLA125514 (spaces and leading zeros optional). Up to 200.

## `drug_keywords` (type: `array`):

Words or phrases matched against product brand names and active-ingredient names (e.g. atorvastatin, keytruda). Up to 5.

## `application_types` (type: `array`):

Limit to NDAs (new drugs), ANDAs (generics) and/or BLAs (CDER-regulated biologics).

## `marketing_statuses` (type: `array`):

Keep applications with at least one product in these statuses.

## `submission_types` (type: `array`):

Only report actions of these types: original applications and/or supplements.

## `submission_statuses` (type: `array`):

Only report approvals (AP) and/or tentative approvals (TA).

## `submission_classes` (type: `array`):

FDA submission class codes, e.g. EFFICACY, LABELING, MANUF (CMC), TYPE 1 (new molecular entity), BIOSIMILAR. Up to 10.

## `review_priorities` (type: `array`):

Only report actions with this review priority.

## `orphan_only` (type: `boolean`):

Only report actions marked Orphan.

## `since_days` (type: `integer`):

Only report applications with a matching action (approval or tentative approval) in the last N days; 0 = any date. openFDA refreshes Drugs@FDA a few times a week, a couple of business days behind FDA's own site.

## `only_new_actions` (type: `boolean`):

For scheduled watches: skip applications whose matching actions this same search already returned in an earlier run, so an application is charged again only when it has a new action. Kept in a named key-value store in your account.

## `api_key` (type: `string`):

Optional free openFDA key. Without one, openFDA allows 1,000 requests per day per IP, and Apify IPs are shared.

## `limit` (type: `integer`):

Maximum number of application records to return per run (up to 1000).

## Actor input object example

```json
{
  "sponsors": [
    "pfizer"
  ],
  "orphan_only": false,
  "since_days": 0,
  "only_new_actions": false,
  "limit": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `errorCounters` (type: `string`):

No description

# 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 = {
    "sponsors": [
        "pfizer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sovereign_workspace/fda-drugsfda-lookup").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 = { "sponsors": ["pfizer"] }

# Run the Actor and wait for it to finish
run = client.actor("sovereign_workspace/fda-drugsfda-lookup").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 '{
  "sponsors": [
    "pfizer"
  ]
}' |
apify call sovereign_workspace/fda-drugsfda-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sovereign_workspace/fda-drugsfda-lookup"
        }
    }
}
```

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/IrLyaAQywQ0H8UpBe/builds/TFI00sks843irPee3/openapi.json
