FDA Approval Feed
Pricing
from $4.25 / 1,000 approval founds
FDA Approval Feed
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.
Pricing
from $4.25 / 1,000 approval founds
Rating
0.0
(0)
Developer
Tim Zinin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
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.
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. Every matching enforcement action — firm, product, reason, classification (Class I/II/III) and current status.
- 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— notSUPPL, a supplement to an already-marketed drug), and - fully approved (
submission_status: AP— notTA, 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.
How to run it
- Click Try for free — no card needed on the free plan.
- Paste drug or company names into Queries, one per line.
- Choose Dataset — approvals only, recalls only, or both (default).
- 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, or an application that doesn't clear the approval bar above — 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. |
{"queries": ["pembrolizumab", "semaglutide", "Pfizer"]}
Output
One row per matched application or recall event, per query. This is a real row from a real run:
{"sourceQuery": "pembrolizumab","found": true,"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.","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.","checkedAt": "2026-07-26T13:58:04.917Z"}
An approval row and a recall row share the same envelope but different fields:
| Field | What it means |
|---|---|
type | approval or recall |
found | false = no qualifying event: no match, a lookup error, or (approvals only) nothing clears the ORIG / AP / 180-day bar |
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 |
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:
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:
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:
{"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 | Pair it in the healthcare and regulatory monitoring workflow: Watch conditions, drugs or sponsors for new and updated clinical trials |
| Patent Filing Monitor | Pair it in the healthcare and regulatory monitoring workflow: Watch keywords or technologies for newly granted US patents |
| SEC Filing 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 | 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 | 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.
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.