# FDA Approvals: 510(k) Clearances, PMA and Drug Approvals (`veridra/fda-approvals-monitor`) Actor

Get new FDA decisions from openFDA: 510(k) clearances, De Novo grants, PMA approvals and NDA, ANDA and BLA drug approvals. Filter by date, applicant, product code and keyword. Daily monitor for regulatory and sales teams.

- **URL**: https://apify.com/veridra/fda-approvals-monitor.md
- **Developed by:** [Veridra Computer Technology](https://apify.com/veridra) (community)
- **Categories:** Business, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.20 / 1,000 results

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/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

### What does FDA Approvals do?

**FDA Approvals** returns new decisions from the US Food and Drug Administration straight from the official openFDA API: **510(k) clearances, De Novo grants and PMA approvals** for medical devices, and **NDA, ANDA and BLA approvals** for drugs. Use it to see who just got a product cleared for the US market. It returns what the FDA publishes; it does not add or interpret regulatory decisions.

It collects data from **[openFDA (U.S. Food and Drug Administration)](https://open.fda.gov/apis/)** and returns clean, structured results you can download or pull through the **Apify API**.

### Why use FDA Approvals?

- **Medtech and pharma sales:** reach companies the week their device is cleared or their drug is approved, when they buy manufacturing, distribution, marketing and compliance services.
- **Competitive intelligence:** track clearances by competitor, product code or medical specialty, and see how long each review took.
- **Regulatory consultants:** monitor De Novo grants and new product codes in your specialty, and find predicates for new submissions.
- **Investors and analysts:** follow approvals for the companies you cover, including new molecular entities and generics.
- **AI agents:** clean, consistent JSON with links to the official FDA database page on every result.
- Runs on the Apify platform: schedule runs, call it through the API, connect it to integrations, and get notified when a run fails.

### What data can FDA Approvals extract?

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | FDA number: K number for a 510(k), DEN number for a De Novo, PMA number (with supplement), or drug application and submission. |
| `type` | string | 510(k), De Novo, PMA, PMA supplement, NDA, ANDA or BLA, with supplement for drug supplements. |
| `applicant` | string | Company that received the decision (device applicant or drug sponsor). |
| `productName` | string | Device name, trade name or drug brand names. |
| `genericName` | string | Generic device type or drug active ingredients. |
| `decision` | string | The decision, for example Substantially equivalent, De Novo granted, Approved, 30-day notice accepted or Tentative approval; other PMA decision codes are given as published. |
| `decisionDate` | string | Date of the decision (YYYY-MM-DD). |
| `dateReceived` | string | Date the FDA received the device submission (YYYY-MM-DD). |
| `reviewDays` | integer | Days from receipt to decision, for device submissions. |
| `reviewType` | string | 510(k) clearance type, PMA supplement type, or drug review priority. |
| `submissionClass` | string | PMA supplement reason, or the drug submission class such as Type 1 - New Molecular Entity. |
| `productCode` | string | Three-letter FDA device product code. |
| `deviceClass` | string | Device class: 1, 2 or 3. |
| `medicalSpecialty` | string | Review panel (advisory committee) for the device. |
| `regulationNumber` | string | Device regulation number in 21 CFR. |
| `activeIngredients` | array | Drug active ingredients with strengths. |
| `dosageForms` | array | Drug dosage forms and routes. |
| `expeditedReview` | boolean | Whether the device had expedited review, or the drug had priority review. |
| `applicantAddress` | string | Street address of the device applicant. |
| `city` | string | City of the device applicant. |
| `state` | string | State of the device applicant. |
| `postalCode` | string | Postal code of the device applicant. |
| `country` | string | Country code of the 510(k) applicant. |
| `fdaUrl` | string | The decision's page in the FDA database, for verification. |
| `sourceUrl` | string | openFDA API link that returns this record. |
| `scrapedAt` | string | When this result was collected (UTC, ISO 8601). |

### How to use FDA Approvals

1. Open the actor and select **Try for free**.
2. Fill in **Decision types**, **Days back**. The prefilled example works as a first test.
3. Set **Maximum results** to control how much data, and cost, a run produces.
4. Select **Start** and wait for the run to finish.
5. Download the results as JSON, CSV, Excel or HTML, or fetch them through the API.

### How much does it cost to use FDA Approvals?

You pay per result: **$6.00 per 1,000 results** ($0.006 each), plus Apify's small start fee of $0.0001 per run. For example, 1,000 results cost about $6.00. You can set a maximum cost per run in the run options, and the actor stops cleanly when it is reached.

Subscribers to Apify's paid plans pay less per result: 10% off on Bronze, 20% off on Silver and 30% off on Gold and higher plans.

### Get only new results

Turn on **Only new results** and schedule the actor (for example daily) to use it as a monitor: each run skips what earlier runs already returned, so you get a feed of new records and pay only for those. The first run returns everything that matches. The memory lives in your own Apify account; give runs the same **Monitor name** to share it when you change other inputs.

### Use it from AI agents

AI agents can find and run FDA Approvals as a tool through Apify's MCP server (mcp.apify.com) or the Apify API, and get the same structured results, billed per result. Without code, Apify's Zapier, Make and n8n integrations can start it and send each new result to a sheet, CRM or chat.

### Input

See the **Input** tab for every option. The main fields:

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `types` | array | \["510k", "pma", "drug"] | Which FDA decisions to return: device 510(k) clearances and De Novo grants, device PMA approvals, drug approvals, or any combination. |
| `daysBack` | integer | 30 | Decisions made in this many days up to today. Ignored when a start date is set. openFDA adds device decisions about once a week. |
| `dateFrom` | string | "" | Only decisions on or after this date (YYYY-MM-DD). Leave empty to use Days back. |
| `dateTo` | string | "" | Only decisions on or before this date (YYYY-MM-DD). Leave empty for today. |
| `applicant` | string | "" | Company name, or part of it, as it appears in FDA records, for example Medtronic or Pfizer. |
| `keyword` | string | "" | Phrase to find in the device name, trade name, drug brand name or active ingredient, for example catheter or semaglutide. |
| `productCodes` | array | \[] | Three-letter FDA device product codes, for example LSE or DQY. Applies to devices only. |
| `onlyDeNovo` | boolean | false | Return only De Novo grants: new kinds of low to moderate risk devices with no predicate. |
| `includePmaSupplements` | boolean | false | Also return PMA supplements (changes to approved devices, many of them manufacturing notices). Off returns original PMA approvals only. |
| `includeDrugSupplements` | boolean | false | Also return approved drug supplements, such as labeling and manufacturing changes. Off returns original approvals only. |
| `apiKey` | string | - | Your free openFDA API key raises the daily request limit. Most runs do not need one. |
| `maxResults` | integer | 1000 | Stop after this many results. Each result costs $0.006, so this also caps the cost of a run. Use 0 for no limit. Keep it low for a first test. |
| `onlyNew` | boolean | false | Monitoring mode: skip results this monitor returned in earlier runs, so a scheduled run returns, and bills, only what is new. The first run returns everything that matches. |
| `monitorName` | string | "" | Runs with the same name share one memory of returned results, even if you change other inputs. Leave empty to keep a separate memory for each distinct input. |

Example input:

```json
{
  "types": [
    "510k",
    "pma",
    "drug"
  ],
  "daysBack": 60,
  "maxResults": 20
}
```

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Example items:

```json
[
  {
    "id": "K260232",
    "type": "510(k)",
    "applicant": "Roche Diagnostics",
    "productName": "Elecsys EBV VCA IgG",
    "genericName": "Epstein-Barr Virus, Other",
    "decision": "Substantially equivalent",
    "decisionDate": "2026-10-02",
    "dateReceived": "2026-01-26",
    "reviewDays": 249,
    "reviewType": "Traditional",
    "submissionClass": null,
    "productCode": "LSE",
    "deviceClass": "1",
    "medicalSpecialty": "Microbiology",
    "regulationNumber": "866.3235",
    "activeIngredients": [],
    "dosageForms": [],
    "expeditedReview": false,
    "applicantAddress": "9115 Hague Rd.",
    "city": "Indianapolis",
    "state": "IN",
    "postalCode": "46250",
    "country": "US",
    "fdaUrl": "https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpmn/pmn.cfm?ID=K260232",
    "sourceUrl": "https://api.fda.gov/device/510k.json?search=k_number:%22K260232%22",
    "scrapedAt": "2026-10-19T18:43:08+00:00"
  },
  {
    "id": "K261933",
    "type": "510(k)",
    "applicant": "GE Medical Systems Ultrasound and Primary care Diagnostics, LLC",
    "productName": "Voluson Expert 18; Voluson Expert 20; Voluson Expert 22",
    "genericName": "System, Imaging, Pulsed Doppler, Ultrasonic",
    "decision": "Substantially equivalent",
    "decisionDate": "2026-10-02",
    "dateReceived": "2026-06-09",
    "reviewDays": 115,
    "reviewType": "Traditional",
    "submissionClass": null,
    "productCode": "IYN",
    "deviceClass": "2",
    "medicalSpecialty": "Radiology",
    "regulationNumber": "892.1550",
    "activeIngredients": [],
    "dosageForms": [],
    "expeditedReview": false,
    "applicantAddress": "3200 N Grandview Blvd.",
    "city": "Waukesha",
    "state": "WI",
    "postalCode": "53188",
    "country": "US",
    "fdaUrl": "https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpmn/pmn.cfm?ID=K261933",
    "sourceUrl": "https://api.fda.gov/device/510k.json?search=k_number:%22K261933%22",
    "scrapedAt": "2026-10-19T18:43:08+00:00"
  }
]
```

### Tips

- Schedule a weekly run with Days back set to 14 and Only new results turned on: openFDA adds device decisions about once a week, sometimes with a delay.
- Turn on Only De Novo grants to follow genuinely new kinds of devices.
- Use Applicant with your competitors' names, or Device product codes for your product category.
- Schedule the actor to keep a dataset fresh, and use the API or integrations to send new results where you need them.

### FAQ, disclaimers, and support

#### Where does the data come from?

From openFDA (U.S. Food and Drug Administration) (api.fda.gov). Data is used under: U.S. federal government data (public domain under 17 U.S.C. 105), published by openFDA under its license at https://open.fda.gov/license/. See the source's terms: https://open.fda.gov/terms/

#### Is it legal to use this data?

This actor only collects publicly available data from openFDA (U.S. Food and Drug Administration) and does not collect personal data about private individuals. Check that your use complies with the source's terms and the laws that apply to you. This actor is not affiliated with or endorsed by openFDA (U.S. Food and Drug Administration).

#### How fresh is the data?

As fresh as openFDA: device clearances and approvals are added about once a week, and Drugs@FDA is updated more often. The actor queries the live API on every run, and the openFDA update can trail the FDA decision by a week or two.

#### Can I rely on this data for medical or regulatory decisions?

No. openFDA states that its data should not be relied on to make decisions regarding medical care and that results should be assumed unvalidated. Confirm with the FDA database page linked in each result.

#### Why are contact names missing?

510(k) records name a person as the submission contact. The actor never returns people's names, only the company, its business address and the decision.

#### What is the difference between a 510(k), a De Novo and a PMA?

A 510(k) clears a device as substantially equivalent to one already on the market. A De Novo grants a new kind of low to moderate risk device that has no such predicate. A PMA approves a high-risk (Class III) device on its own clinical evidence.

#### Something is not working

Open an issue in the **Issues** tab with your run link and we will look at it. For programmatic access, see the **API** tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/veridra/fda-approvals-monitor/changelog.md

# Actor input Schema

## `types` (type: `array`):

Which FDA decisions to return: device 510(k) clearances and De Novo grants, device PMA approvals, drug approvals, or any combination.

## `daysBack` (type: `integer`):

Decisions made in this many days up to today. Ignored when a start date is set. openFDA adds device decisions about once a week.

## `dateFrom` (type: `string`):

Only decisions on or after this date (YYYY-MM-DD). Leave empty to use Days back.

## `dateTo` (type: `string`):

Only decisions on or before this date (YYYY-MM-DD). Leave empty for today.

## `applicant` (type: `string`):

Company name, or part of it, as it appears in FDA records, for example Medtronic or Pfizer.

## `keyword` (type: `string`):

Phrase to find in the device name, trade name, drug brand name or active ingredient, for example catheter or semaglutide.

## `productCodes` (type: `array`):

Three-letter FDA device product codes, for example LSE or DQY. Applies to devices only.

## `onlyDeNovo` (type: `boolean`):

Return only De Novo grants: new kinds of low to moderate risk devices with no predicate.

## `includePmaSupplements` (type: `boolean`):

Also return PMA supplements (changes to approved devices, many of them manufacturing notices). Off returns original PMA approvals only.

## `includeDrugSupplements` (type: `boolean`):

Also return approved drug supplements, such as labeling and manufacturing changes. Off returns original approvals only.

## `apiKey` (type: `string`):

Your free openFDA API key raises the daily request limit. Most runs do not need one.

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

Stop after this many results. Each result costs $0.006, so this also caps the cost of a run. Use 0 for no limit. Keep it low for a first test.

## `onlyNew` (type: `boolean`):

Monitoring mode: skip results this monitor returned in earlier runs, so a scheduled run returns, and bills, only what is new. The first run returns everything that matches.

## `monitorName` (type: `string`):

Runs with the same name share one memory of returned results, even if you change other inputs. Leave empty to keep a separate memory for each distinct input.

## Actor input object example

```json
{
  "types": [
    "510k",
    "pma",
    "drug"
  ],
  "daysBack": 60,
  "dateFrom": "",
  "dateTo": "",
  "applicant": "",
  "keyword": "",
  "productCodes": [],
  "onlyDeNovo": false,
  "includePmaSupplements": false,
  "includeDrugSupplements": false,
  "maxResults": 20,
  "onlyNew": false,
  "monitorName": ""
}
```

# Actor output Schema

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

Dataset containing all results

# 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 = {
    "types": [
        "510k",
        "pma",
        "drug"
    ],
    "daysBack": 60,
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("veridra/fda-approvals-monitor").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 = {
    "types": [
        "510k",
        "pma",
        "drug",
    ],
    "daysBack": 60,
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("veridra/fda-approvals-monitor").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 '{
  "types": [
    "510k",
    "pma",
    "drug"
  ],
  "daysBack": 60,
  "maxResults": 20
}' |
apify call veridra/fda-approvals-monitor --silent --output-dataset

```

## MCP server setup

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

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/CrEq9Wm1dxf8V7JWv/builds/q9mzVZUEsSWkuTu7C/openapi.json
