# FDA Approval Feed (`zinin/fda-approval-feed`) Actor

Watch drugs or companies for new FDA approvals and recalls. Official openFDA data, free, no API key or login. Get application status, sponsor, latest submission and recall details for every match.

- **URL**: https://apify.com/zinin/fda-approval-feed.md
- **Developed by:** [Tim Zinin](https://apify.com/zinin) (community)
- **Categories:** News, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.25 / 1,000 approval founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Approval Feed — New Drug Approvals & Recalls by Drug or Company

Point this Actor at a list of drug or company names and get back a live feed of confirmed new FDA drug approvals and product recalls — sponsor, approval date, recall classification and a direct Drugs@FDA link. Every field comes from official openFDA data: no scraping, no API key, no login. **"Confirmed" describes the approval itself** (original application, fully approved, recent — see below) — **the sponsor shown is always real, but a company-name search can return someone else's real approval**, e.g. `Pfizer` surfaces `HOSPIRA INC`, a company Pfizer acquired. Every row's `matchBasis` says which case you're looking at — see "Why the sponsor might not be who you searched for".

### What you get

- **A verdict, not a guess.** An "approval" here means the drug's *original* application got FDA approval within the last 180 days — not any dated entry that happens to say "approved" somewhere in its history. See "Why 'approval' is stricter than it looks" below.
- **Recalls too.** Matching enforcement actions — firm, product, reason, classification (Class I/II/III) and current status, up to `limit` per query (default 10, max 50), newest first. openFDA's own match total is honest (verified by pagination arithmetic), so every row also carries `matched` (the real total for that query) and `truncated` (whether more exist beyond what this run returned) — a popular firm name can have hundreds of real recalls on file; raise `limit` to see more of them.
- **Two datasets, one call.** Checks openFDA's Drugs@FDA (`drugsfda`) for approvals and its Enforcement database for recalls — pick one or both per run.
- Up to 25 names per run, concurrency up to 8.
- Runs on Apify: schedule it, monitor it, call it from the API or the MCP server, export to JSON, CSV or Excel, or push results straight into your own pipeline.

### Why it matters

Tracking new drug approvals and recalls for a watchlist of drugs or competitors today means manually polling drugs.fda.gov and accessdata.fda.gov by hand, or paying for a regulatory-intelligence SaaS seat. Most of that data is already free and public via openFDA — it just isn't shaped as a feed.

### Why "approval" is stricter than it looks

A drug or company name can rack up dozens of FDA submissions over the years — new dosage forms, label changes, manufacturing-site updates — and most of them are marked "approved" in openFDA's own records. None of that is news to someone watching for **new drugs reaching the market**. So this Actor only calls something an approval when the underlying submission is:

- the drug's **original** application (`submission_type: ORIG` — not `SUPPL`, a supplement to an already-marketed drug), *and*
- **fully approved** (`submission_status: AP` — not `TA`, tentative approval, which means the FDA signed off on the science but the drug still isn't on the market, usually pending patent litigation), *and*
- **recent** — approved within the last 180 days.

An application that matched your query but fails any of those three tests comes back as its own row with `found: false` and a plain-English reason, e.g. *"no original approval in the last 180 days; most recent submission on file is SUPPL/AP on 2026-04-06."* That row is not a bug — it means the drug you searched for has history on file, just nothing this feed calls a new approval, and it is **not charged for**. Search `Pfizer` and you will see mostly `found: false` rows for exactly this reason: a large company's catalog is almost entirely old, already-approved drugs getting routine supplements, not new approvals. Earlier versions of this Actor counted those as approvals — that was wrong, and it no longer does.

### Why the sponsor might not be who you searched for

`queries` is matched against openFDA's **full-text search** — it can hit anywhere in a record (sponsor name, product name, an address, anything), not just the field that actually names who the drug/recall belongs to. Real, live example: searching `Pfizer` in approvals also surfaces applications whose real `sponsor` is **"KING PHARMS LLC"** and **"HOSPIRA INC"** — companies Pfizer acquired, filed under their own historical name, not Pfizer itself. Searching `Pfizer` in recalls surfaces recalls filed by **McKesson** and **Viatris Inc** — unrelated distributors and manufacturers whose product description merely mentions a Pfizer-branded or Pfizer-licensed product.

The row never lies about the sponsor — `sponsor`/`firm` always print the real value from the record, never your query. What it used to leave out is whether that value is even related to what you searched for. Every row now carries `matchBasis`: `"company-field"` means your query was found in the record's own sponsor/recalling-firm field — this really is that company. `"fulltext-other-field"` means your query matched somewhere else in the record and the sponsor/firm shown is a different company that happens to share the text — read it before treating the row as "an approval/recall belonging to the company I searched for."

This is disclosure, not a narrower search: the wide net stays, on purpose — a King Pharmaceuticals or Hospira approval IS useful context for someone tracking Pfizer's full regulatory footprint including acquisitions, and this Actor still surfaces it. It just now tells you which kind of match you're looking at.

One honest caveat about `matchBasis` itself: search a **drug name** (`pembrolizumab`) instead of a company name and most rows will read `"fulltext-other-field"` even when nothing is wrong — a drug substance simply isn't expected to appear inside a company/firm name, so that field is the normal, correct outcome for that kind of query, not a red flag. The field earns its keep specifically when you search a **company name** and want to know whether the row you got back is really that company's own record.

A second honest caveat, this time about `"company-field"` itself: it means your query was literally found in the record's own sponsor/recalling-firm field, **not** that it is the one specific company you had in mind. A short, common surname can genuinely be the identity field of several unrelated real companies. Live example: searching `Johnson` in recalls gives `matchBasis: "company-field"` for **Johnson & Johnson Consumer, Inc.**, for **Johnson Matthey Inc.** (British chemicals/metals — unrelated) and for **Johnson, S C and Son, Inc** (S.C. Johnson — Windex/Raid/Glade, also unrelated) — three different real companies, each correctly "confirmed" by this Actor's own field-match rule, because each one's own name really does contain the word "Johnson". Searching `King` resolves overwhelmingly to **King Bio Inc.** (homeopathic remedies), not King Pharmaceuticals, the acquired-Pfizer-subsidiary example above. `"company-field"` is stronger evidence than `"fulltext-other-field"` and it's the only thing this Actor ever bills for (see "What you pay for" below) — but on a common word or surname, read `sponsor`/`firm` on the row too, not just the field name.

### What you pay for

This Actor bills only rows where `matchBasis: "company-field"` — the query was found in the record's own sponsor/recalling-firm field. A `"fulltext-other-field"` row still **ships**, with the exact same content (real sponsor/firm, product, dates, summary) — it just isn't charged for, because the match isn't confirmed to be the company you searched for.

Real numbers from a live run: searching `Merck` in recalls returns real recalls from **Merck Sharp & Dohme LLC** (`matchBasis: "company-field"`, billed) alongside real recalls from **McKesson**, **Cardinal Health**, **Novartis** and **Midway Importing** (`matchBasis: "fulltext-other-field"`, delivered free) — those four are real companies that filed their own recalls mentioning a Merck-branded product, not Merck itself, and you don't pay for them. Earlier versions of this Actor billed all of these identically; that was the wrong side of the mistake to make — overcharging for someone else's result is worse than this Actor simply not getting paid for an unconfirmed row, so this was fixed to always favor the buyer's wallet.

### How to run it

1. Click **Try for free** — no card needed on the free plan.
2. Paste drug or company names into **Queries**, one per line.
3. Choose **Dataset** — approvals only, recalls only, or both (default).
4. Press **Start**. Results appear in the dataset — read them in the UI, pull them from the API, or have a webhook push them onward.

### Pricing

Pay-per-event: **$0.005 per run start + $0.005 per result found**. No monthly seat, no minimum. 100 results cost about **$0.51**; 1,000 about **$5.01**.

Nothing is charged for a row you can't use: `found: false` rows — no match, a lookup error, an application that doesn't clear the approval bar above, or (see "What you pay for" above) a real record whose sponsor/firm match isn't confirmed (`matchBasis: "fulltext-other-field"`) — are returned for transparency but never billed.

### 简体中文说明

输入药品名或公司名，此 Actor 会返回官方 openFDA 数据中确认的新药批准和产品召回：申办方、批准日期、召回分级，以及直达 Drugs@FDA 的链接。一次调用同时覆盖批准（`drugsfda`）和召回（Enforcement 数据库）两个数据集，可任选其一或两者都要。

**"批准"的判定比看上去严格**：只有当申请同时满足——原始申请（`submission_type: ORIG`，不是对已上市药品的补充申请 `SUPPL`）、正式获批（`submission_status: AP`，不是暂时批准 `TA`）、且在最近 180 天内——才会被计为一次新批准。不满足条件的记录会单独返回一行 `found: false` 并用一句话说明原因（例如"最近一次备案是 2026-04-06 的 SUPPL/AP，不算新批准"），这类记录**不计费**。所以查一家大药企的名字，多数结果是 `found: false`——这恰恰说明过滤器在正常工作：大公司档案里绝大多数是老药的常规补充申请，不是新批准。

计费为按事件付费：每次运行 $0.005，每条查到的结果 $0.005。100 条结果约 $0.51，1000 条约 $5.01；查无结果的记录不计费。

本 Actor 呈现的是公开 openFDA 数据，用于监控和研究，**不构成医疗建议**。openFDA 官方条款明确要求其数据不得用于医疗决策——具体用药决定请咨询专业医生，并核对 FDA 官方记录。

### Input

| Field | Required | What it does |
|---|---|---|
| `queries` | yes | Drug or company names to watch, e.g. `pembrolizumab`, `Pfizer`, `semaglutide`. Up to 25 per run. |
| `dataset` | no | `approvals`, `recalls`, or `both` (default). |
| `limit` | no | Max results per query, per source (1–50, default 10). |
| `maxConcurrency` | no | Parallelism (1–8, default 3). openFDA's unauthenticated rate limit is 40 req/min. |

```json
{
    "queries": ["pembrolizumab", "semaglutide", "Pfizer"]
}
```

### Output

One row per matched application or recall event, per query. This is a real row from a real run — a confirmed, BILLED match:

```json
{
    "sourceQuery": "Merck",
    "found": true,
    "type": "recall",
    "product": "Merck Emend (aprepitant) for oral suspension, 125 mg, Single-Dose Kit, Rx Only, Manufactured for: Merck Sharpe & Dohme LLC, Rahway, NJ 07065, USA, Manufactured by: Novo Nordisk Production Ireland Limited Athlone, Ireland, NDC 0006-3066-03",
    "reason": "Presence of particulate matter: potential presence of metal particulates in the product.",
    "classification": "Class II",
    "firm": "Merck Sharp & Dohme LLC",
    "matchBasis": "company-field",
    "matched": 20,
    "truncated": false,
    "reportDate": "2025-12-31",
    "status": "Ongoing",
    "summary": "Merck Sharp & Dohme LLC recall (Class II) — Merck Emend (aprepitant) for oral suspension, 125 mg, Single-Dose Kit, Rx Only... — Presence of particulate matter: potential presence of metal particulates in the product..",
    "checkedAt": "2026-08-04T17:38:22.457Z"
}
```

Same query, same run, a real record that exists but is **delivered free** because the sponsor/firm match isn't confirmed:

```json
{
    "sourceQuery": "Merck",
    "found": false,
    "type": "recall",
    "product": "Proventil HFA, (Albuterol Sulfate Inhalation Aerosol), 200 metered inhalations, Rx only, MFG: Merck Company, NDC 0085-1132-04",
    "reason": "cGMP deviations: Temperature abuse",
    "classification": "Class II",
    "firm": "Mckesson Medical-Surgical Inc. Corporate Office",
    "matchBasis": "fulltext-other-field",
    "matched": 20,
    "truncated": false,
    "reportDate": "2022-06-15",
    "status": "Terminated",
    "summary": "Mckesson Medical-Surgical Inc. Corporate Office recall (Class II) — Proventil HFA... — cGMP deviations: Temperature abuse. Your query \"Merck\" was NOT found in the recalling-firm field — it matched elsewhere in this record (product description, reason, address, etc.); the actual recalling firm is \"Mckesson Medical-Surgical Inc. Corporate Office\". Delivered free — not billed, since the firm match is not confirmed.",
    "checkedAt": "2026-08-04T17:38:22.458Z"
}
```

`matchBasis: "fulltext-other-field"` on a **drug-name** query (`pembrolizumab`) is the EXPECTED, benign case (see the caveat above — a drug substance name was never going to appear inside a firm name) — it is still delivered free, exactly the same as the company-name case above:

```json
{
    "sourceQuery": "pembrolizumab",
    "found": false,
    "type": "recall",
    "product": "PEMBROLIZUMAB 200 MG / 100 ML NS IVPB, Rx Only, Infusion Options, Inc. 5924 13the Ave, Brooklyn, NY 11219-4934, 718-283-7233",
    "reason": "Lack of Assurance of Sterility",
    "classification": "Class II",
    "firm": "Infusion Options, Inc.",
    "matchBasis": "fulltext-other-field",
    "matched": 1,
    "truncated": false,
    "reportDate": "2019-08-21",
    "status": "Terminated",
    "summary": "Infusion Options, Inc. recall (Class II) — PEMBROLIZUMAB 200 MG / 100 ML NS IVPB, Rx Only, Infusion Options, Inc. 5924 13the Ave, Brooklyn, NY 11219-4934, 718-283-7233 — Lack of Assurance of Sterility. Your query \"pembrolizumab\" was NOT found in the recalling-firm field — it matched elsewhere in this record (product description, reason, address, etc.); the actual recalling firm is \"Infusion Options, Inc.\". Delivered free — not billed, since the firm match is not confirmed.",
    "checkedAt": "2026-08-04T17:37:38.219Z"
}
```

A real row from `Pfizer` approvals, where the sponsor is an acquired-subsidiary name (`found: false` here for a second, unrelated reason too — see below):

```json
{
    "sourceQuery": "Pfizer",
    "found": false,
    "type": "approval",
    "applicationNumber": "BLA761111",
    "sponsor": "HOSPIRA INC",
    "matchBasis": "fulltext-other-field",
    "matched": 98,
    "truncated": true,
    "summary": "NYVEPRIA (BLA761111) (this application's sponsor, \"HOSPIRA INC\", does not match your query — matched elsewhere in the record) — no original approval in the last 180 days; most recent submission on file is SUPPL/AP on 2026-05-21.",
    "checkedAt": "2026-08-04T16:49:00.000Z"
}
```

An approval row and a recall row share the same envelope but different fields:

| Field | What it means |
|---|---|
| `type` | `approval` or `recall` |
| `found` | `true` only for a BILLED row: a qualifying recent approval, or a recall, whose sponsor/firm match is confirmed (`matchBasis: "company-field"`). `false` covers every free case: no match, a lookup error, (approvals only) nothing clears the ORIG / AP / 180-day bar, OR a real record whose match isn't confirmed (`matchBasis: "fulltext-other-field"`) — see "What you pay for" above. |
| `sponsor` *(approval rows)* / `firm` *(recall rows)* | The real company on record — never your query, always the source's own value |
| `matchBasis` | `"company-field"` — your query was found in the sponsor/recalling-firm field itself; the ONLY case this Actor bills for. `"fulltext-other-field"` — your query matched elsewhere in the record (product name, drug substance, address); the sponsor/firm shown may be unrelated to what you searched for, and the row is delivered free. See "Why the sponsor might not be who you searched for" and "What you pay for" above — and note `"company-field"` itself is not an absolute guarantee on a common surname (`Johnson`, `King`), see the caveat above. |
| `matched` | The REAL total number of records openFDA has for this query+dataset (verified honest — no hidden platform cap), not just how many this run returned. |
| `truncated` | `true` when `matched` is larger than `limit` — more real records exist than this run fetched; raise `limit` (max 50) to see more. |
| `latestSubmission` *(approval rows)* | `{type: "ORIG", status: "AP", date}` — always the qualifying submission, never a supplement or a tentative approval |
| `classification` *(recall rows)* | FDA recall class: I (most serious) to III |
| `summary` | Human-readable one-liner, always states the match basis and, when unbilled, says so explicitly |

`found: false` approval rows still say what is on file, e.g. *"KEYTRUDA (BLA125514) — no original approval in the last 180 days; most recent submission on file is SUPPL/AP on 2026-04-06."* — so a `Pfizer` search returning mostly `found: false` rows means exactly what it says: old drugs, routine supplements, nothing new to report.

### API

Start a run with a bearer token and the same input shown above:

```bash
curl -sS -X POST 'https://api.apify.com/v2/acts/zinin~fda-approval-feed/runs?waitForFinish=60' \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  --data '{"queries":["pembrolizumab","semaglutide","Pfizer"]}'
```

Read Dataset rows using the returned `defaultDatasetId`:

```bash
curl -sS "https://api.apify.com/v2/datasets/$DEFAULT_DATASET_ID/items?clean=true&format=json" \
  -H "Authorization: Bearer $APIFY_TOKEN"
```

### MCP

For an Apify MCP client exposing the standard `call-actor` tool, send this exact payload:

```json
{
  "name": "call-actor",
  "arguments": {
    "actor": "zinin/fda-approval-feed",
    "input": {
      "queries": [
        "pembrolizumab",
        "semaglutide",
        "Pfizer"
      ]
    }
  }
}
```

#### Related tools

Related tools for adjacent workflows in financial signals and markets, healthcare and regulatory monitoring.

| Actor | What it does |
|---|---|
| [Clinical Trials Monitor](https://apify.com/zinin/clinical-trials-monitor) | Pair it in the healthcare and regulatory monitoring workflow: Watch conditions, drugs or sponsors for new and updated clinical trials |
| [Patent Filing Monitor](https://apify.com/zinin/patent-monitor) | Pair it in the healthcare and regulatory monitoring workflow: Watch keywords or technologies for newly granted US patents |
| [SEC Filing Watcher](https://apify.com/zinin/sec-edgar-watcher) | Pair it in the financial signals and markets workflow: Watch stock tickers for new SEC filings — 10-K, 10-Q, 8-K, S-1 and more |
| [Funding Round Tracker](https://apify.com/zinin/funding-round-tracker) | Pair it in the financial signals and markets workflow: Track recent SEC Form D filings by company name or sector keyword — the notice a company files when it... |
| [Insider Trading Tracker](https://apify.com/zinin/insider-trading-tracker) | Pair it in the financial signals and markets workflow: Track insider stock trades — SEC Form 3/4/5 filings — for any list of tickers |

### FAQ

**Does it need an API key or login?** No — openFDA's public endpoints are keyless; this Actor uses no credentials.

**How fresh is the data?** As fresh as openFDA itself — updated on the FDA's own publishing schedule, typically within days of an approval or recall being posted.

**Why did my company search come back mostly `found: false`?** Because most of what a large pharma company has on file is old drugs getting routine label or manufacturing updates, not new approvals — see "Why 'approval' is stricter than it looks" above. That's the filter working, not a broken query.

**Why do I get more than one row per query?** A name can match several applications (different dosage forms) or several recall events. Each match is its own row so nothing gets silently merged.

**I searched a company name and got a row — is the sponsor definitely that company?** Check `matchBasis` first, but don't read `"company-field"` as an absolute guarantee. `"company-field"` means your query was found in the record's own sponsor/recalling-firm field — stronger evidence than `"fulltext-other-field"` (query matched somewhere else in the record; see "Why the sponsor might not be who you searched for" above for the live `Pfizer` → `HOSPIRA INC` / `KING PHARMS LLC` example), and it's the only case this Actor ever bills for (see "What you pay for" above). But a short, common surname can genuinely appear in the identity field of several unrelated real companies: `Johnson` gives `"company-field"` for Johnson & Johnson Consumer, for Johnson Matthey (British chemicals, unrelated) and for S.C. Johnson (Windex/Raid/Glade, unrelated) alike; `King` resolves overwhelmingly to King Bio Inc. (homeopathy), not King Pharmaceuticals. Read `sponsor`/`firm` on the row itself whenever your query is also a common word or surname, not just the field name. This is disclosure, not a filter: both kinds of rows still ship, because a wide net is often exactly what a regulatory-history buyer wants — only the billing differs.

**Can I call it from an AI agent?** Yes — it's a standard Apify Actor, callable via the Apify API or the Apify MCP server.

**What this is NOT.** It does not report tentative approvals, supplements to already-marketed drugs, or old applications as "new" — see above. It does not evaluate drug safety or efficacy, and it does not replace a subscription regulatory-intelligence service for legal or clinical decisions.

This Actor surfaces public FDA data (openFDA) for monitoring and research. **It is not medical advice.** openFDA's own terms are explicit that its data must not be used to make medical decisions — consult a healthcare professional and the FDA's own record for any decision about a specific drug.

Found a wrong result, or need a check we don't run? Open an issue on this Actor's page.

### Machine use

The Actor is callable through the Apify API, SDK, and Apify MCP server. The input and Dataset row are the machine-facing contract; `found:false` rows are never billed, so an agent watching a company or drug watchlist should still read the `summary` on those rows — they carry the "here's what's actually on file" reason, not a silent skip.

***

Built by [zinin](https://apify.com/zinin). Questions? Telegram [@timzinin](https://t.me/timzinin).

# Actor input Schema

## `queries` (type: `array`):

Drug or company names to watch (e.g. `pembrolizumab`, `Pfizer`, `semaglutide`). One row per query.

## `dataset` (type: `string`):

Which openFDA feed to check.

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

Max results to pull per query, per source (approvals/recalls).

## `maxConcurrency` (type: `integer`):

How many queries to process in parallel.

## Actor input object example

```json
{
  "queries": [
    "pembrolizumab",
    "semaglutide",
    "Pfizer"
  ],
  "dataset": "both",
  "limit": 10,
  "maxConcurrency": 3
}
```

# Actor output Schema

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

API URL for the default dataset items produced by this run.

# 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 = {
    "queries": [
        "pembrolizumab",
        "semaglutide",
        "Pfizer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zinin/fda-approval-feed").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 = { "queries": [
        "pembrolizumab",
        "semaglutide",
        "Pfizer",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("zinin/fda-approval-feed").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 '{
  "queries": [
    "pembrolizumab",
    "semaglutide",
    "Pfizer"
  ]
}' |
apify call zinin/fda-approval-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=zinin/fda-approval-feed",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/6GknxUe2hoaRcdaTb/builds/1pz8H4xQFL12l0YPs/openapi.json
