# FDA Drug Approvals Scraper API - Drugs@FDA Products (`pink_comic/fda-drugs-at-fda-approvals-product-search`) Actor

Search official openFDA Drugs@FDA application, product, and action records by brand, generic, sponsor, application, route, status, and date. Returns source-linked applications with nested products and submissions. FDA administrative evidence—not medical advice or proof of current availability.

- **URL**: https://apify.com/pink\_comic/fda-drugs-at-fda-approvals-product-search.md
- **Developed by:** [Ava Torres](https://apify.com/pink_comic) (community)
- **Categories:** Other, Education, 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 drugs@fda approvals & product search scraper a 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 Drugs@FDA Approvals & Product Search Scraper API

Search the official, no-key **openFDA Drugs@FDA** endpoint and receive one normalized dataset item per FDA application. Each found row includes nested products, active ingredients, strengths, dosage forms, routes, source-reported marketing statuses, therapeutic-equivalence codes when present, submissions/actions, dates, and FDA document links.

Useful for regulatory research, drug-product catalogs, sponsor/application monitoring, and source-backed data pipelines.

### Deterministic first run

Empty input searches exact brand `Ozempic` and returns exactly one application row with nested product and submission evidence. The bounded first run costs at most **$0.0021**: $0.0001 actor start + $0.002 for one dataset item.

```json
{
  "brandName": "Ozempic",
  "maxResults": 1,
  "maxScan": 1
}
```

### Search examples

Application and product:

```json
{
  "applicationNumber": "NDA213051",
  "productNumber": "001",
  "maxResults": 10,
  "maxScan": 100
}
```

Submission/action research:

```json
{
  "sponsorName": "NOVO",
  "submissionType": "SUPPL",
  "submissionStatus": "AP",
  "submissionDateFrom": "20240101",
  "submissionDateTo": "20261231",
  "sort": "submissions.submission_status_date:desc",
  "maxResults": 25,
  "maxScan": 100
}
```

Filters are combined with `AND`. Supported fields include brand/generic/sponsor, application and product number, dosage form, route, source marketing status, submission type/status/action date, and therapeutic-equivalence code when present. `skip` is bounded to 25,000, `maxScan` to 1,000 source candidates, and `maxResults` to 500 total paid application rows. The actor honors an Apify maximum-total-charge limit before source pagination and writes output in bounded batches.

### Output

A `FOUND` row includes:

- application number and sponsor
- stable summary arrays for brands, generic names, products, strengths, dosage forms, routes, and marketing statuses
- nested products and active ingredients
- nested submissions/actions and FDA document links
- harmonized openFDA NDC, RxCUI, SPL, UNII, substance, manufacturer, and pharmacologic-class identifiers when available
- exact official API query URL, source update date, retrieval timestamp, source total/scan bounds, scope, and evidence notice

Arrays remain `[]` when the source omits a field. Searches that return no qualifying application produce an explicit `NO_MATCH` item. Invalid input produces `INVALID_INPUT`; an official-source failure after bounded retries produces `SOURCE_UNAVAILABLE`. These outcome rows are evidence about the bounded attempt—not proof that a drug/application is absent.

### Reliability

The client uses bounded pagination, response-size limits, request timeouts, and four attempts for transport errors, HTTP 408/429/5xx responses, response-body failures, and malformed JSON. `Retry-After` is honored where practical. openFDA may limit or restrict API access, and FDA warns that openFDA results should be treated as unvalidated.

### Evidence boundaries

Drugs@FDA records describe FDA applications, products, and regulatory submissions/actions. They **do not establish**:

- current market availability or whether a product is actively sold
- current drug shortages
- recalls or recall resolution
- current prescribing guidance or the complete current label
- comparative effectiveness
- safety or suitability for a particular patient
- complete Orange Book patent or exclusivity information
- medical advice

A source-reported product marketing status is an administrative field, not proof of present availability. A submission status/action date is not patient guidance. Review the linked FDA materials and the appropriate current FDA recall, shortage, labeling, Orange Book, and safety resources. Do not rely on this output to make medical-care decisions.

### Pricing

Pay per event: **$0.0001 per start + $0.002 per dataset item**. `maxResults` is a total response cap, not a per-page or per-product cap; nested products and submissions remain within the single paid application row.

# Actor input Schema

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

Exact openFDA brand name.

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

Exact openFDA generic name.

## `sponsorName` (type: `string`):

Exact Drugs@FDA sponsor name.

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

FDA application identifier such as NDA213051.

## `productNumber` (type: `string`):

Product number within an application, such as 001.

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

Exact source dosage form, such as TABLET or INJECTION.

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

Exact source route, such as ORAL or SUBCUTANEOUS.

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

Exact source product marketing status. This does not establish current market availability.

## `submissionType` (type: `string`):

Exact submission type such as ORIG or SUPPL.

## `submissionStatus` (type: `string`):

Exact submission status code such as AP.

## `submissionDateFrom` (type: `string`):

Inclusive submission status/action date, YYYYMMDD.

## `submissionDateTo` (type: `string`):

Inclusive submission status/action date, YYYYMMDD.

## `therapeuticEquivalenceCode` (type: `string`):

Exact product TE code when present. Not a complete Orange Book patent/exclusivity record.

## `sort` (type: `string`):

Optional source sort.

## `skip` (type: `integer`):

Source offset for bounded pagination.

## `maxScan` (type: `integer`):

Maximum applications requested across pages.

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

Total paid application rows. Default one costs at most $0.0021 including the $0.0001 start fee.

## Actor input object example

```json
{
  "brandName": "Ozempic",
  "genericName": "",
  "sponsorName": "",
  "applicationNumber": "",
  "productNumber": "",
  "dosageForm": "",
  "route": "",
  "marketingStatus": "",
  "submissionType": "",
  "submissionStatus": "",
  "therapeuticEquivalenceCode": "",
  "sort": "",
  "skip": 0,
  "maxScan": 1,
  "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-drugs-at-fda-approvals-product-search").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-drugs-at-fda-approvals-product-search").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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-drugs-at-fda-approvals-product-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=pink_comic/fda-drugs-at-fda-approvals-product-search",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/GGcy6nlU98gmuIEkp/builds/91XohtUxEHJL91HGQ/openapi.json
