# FDA 510(k) Device Clearance Search (`ryanclinton/fda-510k-clearances`) Actor

Search the FDA's database of **174,000+ 510(k) premarket notification clearances** for medical devices. Filter by device name, company, product code, advisory committee, decision type, clearance type, date range, or country.

- **URL**: https://apify.com/ryanclinton/fda-510k-clearances.md
- **Developed by:** [ryan clinton](https://apify.com/ryanclinton) (community)
- **Categories:** Other, AI
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$30.00 / 1,000 result returneds

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 510(k) Device Clearance Search

Search the FDA's database of **174,000+ 510(k) premarket notification clearances** for medical devices. Filter by device name, company, product code, advisory committee, decision type, clearance type, date range, or country. Each result includes computed days-to-decision timelines that are not available in the raw FDA data.

No API key required. Just enter a device name like `pulse oximeter` and get back structured clearance data in seconds.

### Why Use FDA 510(k) Device Clearance Search?

Finding 510(k) clearance data means navigating the FDA's AccessData interface or constructing complex openFDA API queries by hand. This actor handles query construction, pagination (up to 1,000 results), date formatting, field normalization, and computes the days-to-decision metric automatically — giving you clean, structured JSON you can feed directly into spreadsheets, databases, or analysis pipelines.

### Features

- **Device name search** — find clearances by product name (e.g., "pulse oximeter", "glucose monitor", "surgical robot", "AI diagnostic")
- **Company lookup** — search by applicant company (e.g., "Medtronic", "Abbott", "Siemens Healthineers", "Philips")
- **Product code filtering** — use FDA's three-letter classification codes (e.g., "DQA" for pulse oximeters, "QAS" for AI/ML software)
- **K number lookup** — retrieve a single submission by its 510(k) number (e.g., "K240912")
- **Date range filtering** — search by decision date range in YYYY-MM-DD format
- **Advisory committee filter** — narrow by FDA specialty area (20 committees from Anesthesiology to Toxicology)
- **Decision type filter** — filter by outcome: Substantially Equivalent, Not Substantially Equivalent, Third Party, etc.
- **Clearance type filter** — Traditional, Special 510(k), Abbreviated 510(k), or Dual Track
- **Country code filter** — filter by applicant country of origin (US, DE, JP, CN, IL, etc.)
- **Days-to-decision computation** — calculates elapsed time from FDA receipt to decision, a metric not available in the raw API
- **Summary statistics** — automatic computation of average/min/max review times, decision breakdowns, and clearance type distributions logged at the end of each run
- **Retry with backoff** — built-in exponential backoff for API rate limits and transient errors

### How to Use

1. **Enter search criteria** — provide at least one filter: device name, applicant, product code, K number, date range, advisory committee, decision type, clearance type, or country code.

2. **Set the result limit** — choose how many clearances to return (1–1,000). The default is 100. The openFDA API caps results at 1,000 per query.

3. **Run and download** — click "Start" and wait for the run to complete (typically 5–30 seconds depending on result count). Download the structured JSON dataset.

4. **Review summary stats** — check the run log for automatic summary statistics including average days-to-decision, decision breakdown, and clearance type distribution.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `deviceName` | String | No* | — | Device name search (e.g., "pulse oximeter", "glucose monitor") |
| `applicant` | String | No* | — | Company/applicant name (e.g., "Medtronic", "Abbott") |
| `productCode` | String | No* | — | FDA three-letter product code (e.g., "DQA", "QAS") |
| `kNumber` | String | No* | — | Specific 510(k) number (e.g., "K240912") |
| `decisionDateFrom` | String | No | — | Start of decision date range (YYYY-MM-DD) |
| `decisionDateTo` | String | No | — | End of decision date range (YYYY-MM-DD) |
| `advisoryCommittee` | Select | No | All | FDA advisory committee code (20 options) |
| `decisionType` | Select | No | All | Clearance decision type (6 options) |
| `clearanceType` | Select | No | All | Traditional, Special, Abbreviated, or Dual Track |
| `countryCode` | String | No | — | Two-letter country code (e.g., "US", "DE", "JP") |
| `maxResults` | Integer | No | `100` | Maximum clearances to return (1–1,000) |

*At least one search parameter is required.

#### Input Examples

**Find all pulse oximeter clearances:**

```json
{
    "deviceName": "pulse oximeter",
    "maxResults": 100
}
````

**Look up a specific 510(k) submission:**

```json
{
    "kNumber": "K240912"
}
```

**Medtronic clearances in 2024:**

```json
{
    "applicant": "Medtronic",
    "decisionDateFrom": "2024-01-01",
    "decisionDateTo": "2024-12-31",
    "maxResults": 500
}
```

**AI/ML software devices (product code QAS):**

```json
{
    "productCode": "QAS",
    "maxResults": 200
}
```

**Cardiovascular devices cleared in 2024:**

```json
{
    "advisoryCommittee": "CV",
    "decisionDateFrom": "2024-01-01",
    "decisionDateTo": "2024-12-31",
    "maxResults": 500
}
```

**Devices denied clearance (Not Substantially Equivalent):**

```json
{
    "decisionType": "SEKD",
    "decisionDateFrom": "2020-01-01",
    "maxResults": 100
}
```

**German medical device companies since 2023:**

```json
{
    "countryCode": "DE",
    "decisionDateFrom": "2023-01-01",
    "maxResults": 200
}
```

#### Input Tips

- Use `productCode` for the most precise device-type filtering. The FDA maintains thousands of three-letter codes — search the [FDA Product Classification Database](https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpcd/classification.cfm) to find the right code for your device category.
- Combine `advisoryCommittee` with a date range to analyze clearance trends in a specific specialty area over time.
- Set `decisionType` to "SEKD" (Not Substantially Equivalent) to find devices that were denied clearance — useful for competitive intelligence and regulatory risk assessment.
- For large result sets, partition your search using date ranges to stay within the 1,000 result limit.
- Device name and applicant searches support partial matching — "pulse" will match "pulse oximeter", "pulse wave analyzer", etc.

### Output

Each clearance record includes:

```json
{
    "kNumber": "K240912",
    "deviceName": "Tempus Pro Vital Signs Monitor",
    "applicant": "Philips Medical Systems",
    "decisionCode": "SESE",
    "decisionDescription": "Substantially Equivalent",
    "decisionDate": "2024-08-15",
    "dateReceived": "2024-06-18",
    "daysToDecision": 58,
    "productCode": "DQA",
    "advisoryCommittee": "AN",
    "advisoryCommitteeDescription": "Anesthesiology",
    "clearanceType": "Traditional",
    "city": "Andover",
    "state": "MA",
    "country": "US",
    "zipCode": "01810",
    "contact": "John Smith",
    "address": "3000 Minuteman Road",
    "thirdPartyReview": false,
    "expeditedReview": false,
    "statementOrSummary": "Summary",
    "deviceClass": "2",
    "regulationNumber": "868.2500",
    "openfdaDeviceName": "Oximeter, Pulse",
    "openfdaSpecialty": "Anesthesiology"
}
```

#### Output Fields

| Field | Type | Description |
|-------|------|-------------|
| `kNumber` | String | Unique 510(k) submission number (e.g., "K240912") |
| `deviceName` | String | Name of the medical device |
| `applicant` | String | Company that submitted the 510(k) |
| `decisionCode` | String | FDA decision code (SESE, SEKD, etc.) |
| `decisionDescription` | String | Human-readable decision description |
| `decisionDate` | String | Date of FDA decision (YYYY-MM-DD) |
| `dateReceived` | String | Date the submission was received by FDA (YYYY-MM-DD) |
| `daysToDecision` | Integer / null | Computed days from receipt to decision (not in raw API) |
| `productCode` | String | FDA three-letter product classification code |
| `advisoryCommittee` | String | Two-letter advisory committee code |
| `advisoryCommitteeDescription` | String | Full name of the advisory committee |
| `clearanceType` | String | Traditional, Special, Abbreviated, or Dual Track |
| `city` | String | Applicant city |
| `state` | String | Applicant state (US two-letter code) |
| `country` | String | Applicant country code (US, DE, JP, etc.) |
| `zipCode` | String | Applicant ZIP/postal code |
| `contact` | String | Contact person name |
| `address` | String | Applicant street address |
| `thirdPartyReview` | Boolean | Whether reviewed by an FDA-accredited third party |
| `expeditedReview` | Boolean | Whether the submission received expedited review |
| `statementOrSummary` | String | Whether a 510(k) summary or statement is available |
| `deviceClass` | String / null | FDA device classification (1, 2, or 3). Null for older records |
| `regulationNumber` | String / null | CFR regulation number (e.g., "868.2500"). Null for older records |
| `openfdaDeviceName` | String / null | Standardized device name from openFDA enrichment layer |
| `openfdaSpecialty` | String / null | Medical specialty description from openFDA |

### Use Cases

- **Regulatory affairs teams** benchmarking FDA review timelines by product code and clearance type — use `daysToDecision` to set realistic submission-to-clearance expectations
- **Medical device companies** tracking competitor clearances to identify new market entrants, product launches, and shifts in regulatory strategy
- **Regulatory consultants** searching for predicate devices — every 510(k) submission requires a legally marketed predicate with similar intended use
- **Healthcare investors and analysts** researching a company's cleared device portfolio as part of due diligence before funding or acquisition decisions
- **Patent attorneys** cross-referencing device clearances with patent filings to establish prior art and identify infringement risks
- **Market research firms** analyzing clearance trends by advisory committee, product type, country, and date to map the medical device competitive landscape
- **Quality and compliance auditors** verifying that marketed devices have valid 510(k) clearances and matching product codes

### How to Use the API

#### Python

```python
import requests
import time

run = requests.post(
    "https://api.apify.com/v2/acts/ryanclinton~fda-510k-clearances/runs",
    params={"token": "YOUR_APIFY_TOKEN"},
    json={
        "deviceName": "pulse oximeter",
        "decisionDateFrom": "2024-01-01",
        "maxResults": 100
    },
    timeout=30,
).json()

run_id = run["data"]["id"]
while True:
    status = requests.get(
        f"https://api.apify.com/v2/actor-runs/{run_id}",
        params={"token": "YOUR_APIFY_TOKEN"},
        timeout=10,
    ).json()
    if status["data"]["status"] in ("SUCCEEDED", "FAILED", "ABORTED"):
        break
    time.sleep(3)

dataset_id = status["data"]["defaultDatasetId"]
items = requests.get(
    f"https://api.apify.com/v2/datasets/{dataset_id}/items",
    params={"token": "YOUR_APIFY_TOKEN"},
    timeout=30,
).json()

for item in items:
    print(f"{item['kNumber']} | {item['deviceName']} | {item['applicant']} | {item['daysToDecision']} days")
```

#### JavaScript

```javascript
const response = await fetch(
    "https://api.apify.com/v2/acts/ryanclinton~fda-510k-clearances/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN",
    {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
            deviceName: "pulse oximeter",
            decisionDateFrom: "2024-01-01",
            maxResults: 100,
        }),
    }
);

const clearances = await response.json();
clearances.forEach(c =>
    console.log(`${c.kNumber} | ${c.deviceName} | ${c.daysToDecision} days`)
);
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~fda-510k-clearances/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "deviceName": "pulse oximeter",
    "decisionDateFrom": "2024-01-01",
    "maxResults": 100
  }'
```

### How It Works

```
Input (deviceName, applicant, productCode, kNumber, dates, filters)
  │
  ▼
┌──────────────────────────────────────────────────┐
│  Step 1: Build Search Query                      │
│  Construct openFDA Lucene-style query string     │
│  from input parameters. Date ranges converted    │
│  to YYYYMMDD format for API compatibility.       │
│  Terms joined with +AND+ conjunction.            │
└──────────────────────────────────────────────────┘
  │
  ▼
┌──────────────────────────────────────────────────┐
│  Step 2: Paginated Fetch                         │
│  Fetch up to 100 results per request using       │
│  skip/limit pagination. Continue until           │
│  maxResults reached or no more results.          │
│  Retry with exponential backoff on 429/errors.   │
└──────────────────────────────────────────────────┘
  │
  ▼
┌──────────────────────────────────────────────────┐
│  Step 3: Transform & Enrich                      │
│  Normalize field names to camelCase.             │
│  Format dates from YYYYMMDD → YYYY-MM-DD.        │
│  Merge address fields. Convert Y/N → boolean.    │
│  Extract openFDA enrichment (class, regulation). │
└──────────────────────────────────────────────────┘
  │
  ▼
┌──────────────────────────────────────────────────┐
│  Step 4: Compute Days to Decision                │
│  Calculate elapsed days between dateReceived     │
│  and decisionDate for each clearance.            │
│  This metric is NOT in the raw openFDA data.     │
└──────────────────────────────────────────────────┘
  │
  ▼
┌──────────────────────────────────────────────────┐
│  Step 5: Summary Statistics                      │
│  Compute avg/min/max daysToDecision.             │
│  Tally decision type and clearance type          │
│  breakdowns. Log to run output.                  │
└──────────────────────────────────────────────────┘
  │
  ▼
Structured clearance records pushed to dataset
```

#### Data Sources

| Source | API Endpoint | Auth Required |
|--------|-------------|---------------|
| FDA openFDA | `https://api.fda.gov/device/510k.json` | No |

#### Advisory Committee Reference

| Code | Specialty | Code | Specialty |
|------|-----------|------|-----------|
| AN | Anesthesiology | MI | Microbiology |
| CH | Clinical Chemistry | NE | Neurology |
| CV | Cardiovascular | OB | Obstetrics/Gynecology |
| DE | Dental | OP | Ophthalmic |
| EN | Ear, Nose & Throat | OR | Orthopedic |
| GU | Gastroenterology/Urology | PA | Pathology |
| HO | General Hospital | PM | Physical Medicine |
| HE | Hematology | RA | Radiology |
| IM | Immunology | SU | General/Plastic Surgery |
| — | — | TX | Clinical Toxicology |

#### Decision Code Reference

| Code | Meaning |
|------|---------|
| SESE | Substantially Equivalent |
| SESD | Substantially Equivalent with Limitations |
| SEST | Substantially Equivalent (Third Party Review) |
| SEKD | Not Substantially Equivalent (Denied) |
| SESP | Substantially Equivalent (Special) |
| SESU | Substantially Equivalent (Unclassified) |

#### Common Product Codes

| Code | Device Category | Code | Device Category |
|------|----------------|------|----------------|
| DQA | Pulse Oximeters | MUJ | CT Scanners |
| QAS | AI/ML Software (CAD) | OEI | Ultrasound Systems |
| DXN | ECG/EKG Systems | QKQ | Digital Pathology |
| JAX | Intravascular Catheters | QMT | Clinical Decision Support |
| LLZ | Glucose Monitors | NQI | Surgical Robotics |

### How Much Does It Cost?

| Scenario | Results | Est. Time | Est. Cost |
|----------|---------|-----------|-----------|
| Single K number lookup | 1 | 3 sec | < $0.001 |
| Device name search (100 results) | 100 | 10 sec | < $0.01 |
| Full committee + year (1,000 results) | 1,000 | 30 sec | ~$0.02 |

The actor uses 256 MB memory and makes lightweight API calls with no browser rendering, keeping compute costs minimal. The Apify free tier covers thousands of runs per month.

### Tips

- **Use product codes for precision** — device name searches return broad matches, but product codes target exact device categories. Look up codes in the [FDA Product Classification Database](https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpcd/classification.cfm).
- **Partition large searches by date** — the openFDA API caps at 1,000 results per query. Split multi-year searches into yearly date ranges to get complete data.
- **Combine committee + date for trend analysis** — searching `advisoryCommittee: "CV"` with annual date ranges lets you track cardiovascular clearance volumes over time.
- **Check daysToDecision for planning** — if your company is preparing a 510(k) submission, filter by your product code and check the average days-to-decision to set realistic timeline expectations.
- **SEKD denials reveal regulatory risk** — searching for Not Substantially Equivalent decisions in your product category shows what the FDA rejects and why (when paired with FDA AccessData records).
- **Batch via API** — call this actor programmatically to research multiple product codes or companies in parallel.

### Limitations

- **1,000 result cap** — the openFDA API limits results to 1,000 per query. Use date range partitioning for larger datasets.
- **No predicate device chain** — the openFDA 510(k) endpoint does not include predicate device references. For predicate chain analysis, use FDA AccessData directly.
- **Older records may have gaps** — clearances from the 1970s–1990s may have incomplete dates, addresses, or missing openFDA enrichment fields (deviceClass, regulationNumber).
- **Device name search is broad** — searching "monitor" returns patient monitors, blood pressure monitors, display monitors, etc. Use product codes for precision.
- **No full-text summaries** — the `statementOrSummary` field indicates whether a summary exists, but does not contain the full text. Full 510(k) summaries are available on FDA AccessData.
- **openFDA enrichment coverage** — the `deviceClass`, `regulationNumber`, `openfdaDeviceName`, and `openfdaSpecialty` fields come from openFDA's enrichment layer and may be null for some records.
- **Rate limiting** — the openFDA API enforces rate limits. The actor handles this automatically with exponential backoff, but very rapid sequential runs may experience delays.

### Responsible Use

- **All data is public domain** — FDA 510(k) clearance data is published by the US government and is freely available without restrictions.
- **Respect openFDA rate limits** — the actor includes built-in retry with backoff. Avoid launching dozens of concurrent runs against the same API endpoint.
- **Use for legitimate purposes** — this tool is designed for regulatory intelligence, market research, due diligence, competitive analysis, and academic research.
- **Verify critical decisions** — for regulatory submissions, always verify clearance data against the official FDA AccessData database.

### FAQ

**Is an API key required?**
No. The openFDA API is free and does not require authentication. Optional API keys are available from openFDA for higher rate limits but are not needed for normal usage.

**How current is the data?**
The openFDA database is updated regularly by the FDA. New clearances typically appear within days to weeks of the official decision.

**Can I search for devices from a specific country?**
Yes. Use the `countryCode` parameter with a two-letter code (e.g., "DE" for Germany, "JP" for Japan, "CN" for China, "IL" for Israel).

**What is the difference between Traditional, Special, and Abbreviated 510(k)?**
Traditional is the standard pathway. Special 510(k) is for modifications to your own previously cleared device. Abbreviated 510(k) relies on guidance documents and special controls rather than direct predicate comparison.

**How is daysToDecision calculated?**
It is the number of calendar days between `dateReceived` (when FDA received the submission) and `decisionDate` (when FDA issued its decision). This is computed by the actor — it is not available in the raw openFDA API.

**Can I find which devices were denied clearance?**
Yes. Set `decisionType` to "SEKD" (Not Substantially Equivalent) to find all denied submissions. This is valuable for understanding regulatory risk in your product category.

**Why does my search return 0 results?**
The most common cause is overly specific filters. Try broadening your search — remove one filter at a time until results appear. Also check that product codes and country codes are correctly formatted (uppercase, correct length).

**How far back does the data go?**
The database contains 510(k) clearances from 1976 to present — the entire history of the 510(k) program.

### Integrations

- **Apify API** — trigger runs programmatically and retrieve results as JSON for regulatory intelligence pipelines
- **Zapier** — automatically run a 510(k) search when a new competitor is added to your tracking list
- **Make (Integromat)** — build workflows that monitor new clearances in your product category and alert your team
- **Google Sheets** — export clearance data directly for regulatory strategy analysis and timeline benchmarking
- **Webhooks** — receive clearance results as soon as the run completes for real-time monitoring
- **Scheduled Runs** — run weekly or monthly to track new clearances in your advisory committee or product code

### Related Actors

| Actor | What it does | Use with FDA 510(k) |
|-------|-------------|---------------------|
| [FDA Medical Device Recall Search](https://apify.com/ryanclinton/fda-device-recalls) | Search FDA device recalls | Cross-reference cleared devices with recall history |
| [openFDA Drug Event Monitor](https://apify.com/ryanclinton/openfda-drug-events) | FDA adverse event reports | Companion actor for drug/device safety analysis |
| [FDA Food Recall Monitor](https://apify.com/ryanclinton/fda-food-recall-monitor) | FDA food recall data | Complete FDA regulatory data coverage |
| [Clinical Trial Tracker](https://apify.com/ryanclinton/clinical-trial-tracker) | ClinicalTrials.gov search | Find clinical trials for devices before/after clearance |
| [USPTO Patent Search](https://apify.com/ryanclinton/patent-search) | US patent database | Cross-reference device patents with clearance data |
| [SEC EDGAR Filing Analyzer](https://apify.com/ryanclinton/sec-edgar-filing-analyzer) | SEC filing analysis | Research public device companies' financial filings |

# Actor input Schema

## `deviceName` (type: `string`):

Search by medical device name (e.g., 'pulse oximeter', 'surgical robot', 'glucose monitor')

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

Search by company that submitted the 510(k) (e.g., 'Medtronic', 'Abbott', 'Siemens')

## `productCode` (type: `string`):

Three-letter FDA product classification code (e.g., 'DQA' for pulse oximeters, 'QAS' for AI/ML software)

## `kNumber` (type: `string`):

Look up a specific 510(k) submission (e.g., 'K240912')

## `decisionDateFrom` (type: `string`):

Start date for decision date range (YYYY-MM-DD format, e.g., 2024-01-01)

## `decisionDateTo` (type: `string`):

End date for decision date range (YYYY-MM-DD format, e.g., 2024-12-31)

## `advisoryCommittee` (type: `string`):

Filter by FDA advisory committee / specialty area

## `decisionType` (type: `string`):

Filter by FDA clearance decision

## `clearanceType` (type: `string`):

Traditional 510(k), Special 510(k), or Abbreviated 510(k)

## `countryCode` (type: `string`):

Two-letter country code of applicant (e.g., 'US', 'DE', 'JP', 'CN')

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

Maximum number of clearances to return (openFDA limit: 1000 per query)

## Actor input object example

```json
{
  "deviceName": "pulse oximeter",
  "advisoryCommittee": "",
  "decisionType": "",
  "clearanceType": "",
  "maxResults": 100
}
```

# Actor output Schema

## `results` (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 = {
    "deviceName": "pulse oximeter"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ryanclinton/fda-510k-clearances").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 = { "deviceName": "pulse oximeter" }

# Run the Actor and wait for it to finish
run = client.actor("ryanclinton/fda-510k-clearances").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 '{
  "deviceName": "pulse oximeter"
}' |
apify call ryanclinton/fda-510k-clearances --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "FDA 510(k) Device Clearance Search",
        "description": "Search the FDA's database of **174,000+ 510(k) premarket notification clearances** for medical devices. Filter by device name, company, product code, advisory committee, decision type, clearance type, date range, or country.",
        "version": "1.0",
        "x-build-id": "AlQ7zwoKKlSgB3Nso"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ryanclinton~fda-510k-clearances/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ryanclinton-fda-510k-clearances",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ryanclinton~fda-510k-clearances/runs": {
            "post": {
                "operationId": "runs-sync-ryanclinton-fda-510k-clearances",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ryanclinton~fda-510k-clearances/run-sync": {
            "post": {
                "operationId": "run-sync-ryanclinton-fda-510k-clearances",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "deviceName": {
                        "title": "Device Name",
                        "type": "string",
                        "description": "Search by medical device name (e.g., 'pulse oximeter', 'surgical robot', 'glucose monitor')"
                    },
                    "applicant": {
                        "title": "Applicant / Company",
                        "type": "string",
                        "description": "Search by company that submitted the 510(k) (e.g., 'Medtronic', 'Abbott', 'Siemens')"
                    },
                    "productCode": {
                        "title": "FDA Product Code",
                        "type": "string",
                        "description": "Three-letter FDA product classification code (e.g., 'DQA' for pulse oximeters, 'QAS' for AI/ML software)"
                    },
                    "kNumber": {
                        "title": "510(k) Number",
                        "type": "string",
                        "description": "Look up a specific 510(k) submission (e.g., 'K240912')"
                    },
                    "decisionDateFrom": {
                        "title": "Decision Date From",
                        "type": "string",
                        "description": "Start date for decision date range (YYYY-MM-DD format, e.g., 2024-01-01)"
                    },
                    "decisionDateTo": {
                        "title": "Decision Date To",
                        "type": "string",
                        "description": "End date for decision date range (YYYY-MM-DD format, e.g., 2024-12-31)"
                    },
                    "advisoryCommittee": {
                        "title": "Advisory Committee",
                        "enum": [
                            "",
                            "AN",
                            "CH",
                            "CV",
                            "DE",
                            "EN",
                            "GU",
                            "HO",
                            "HE",
                            "IM",
                            "MI",
                            "NE",
                            "OB",
                            "OP",
                            "OR",
                            "PA",
                            "PM",
                            "RA",
                            "SU",
                            "TX"
                        ],
                        "type": "string",
                        "description": "Filter by FDA advisory committee / specialty area",
                        "default": ""
                    },
                    "decisionType": {
                        "title": "Decision Type",
                        "enum": [
                            "",
                            "SESE",
                            "SESD",
                            "SEST",
                            "SEKD",
                            "SESP",
                            "SESU"
                        ],
                        "type": "string",
                        "description": "Filter by FDA clearance decision",
                        "default": ""
                    },
                    "clearanceType": {
                        "title": "Clearance Type",
                        "enum": [
                            "",
                            "Traditional",
                            "Special",
                            "Abbreviated",
                            "Dual"
                        ],
                        "type": "string",
                        "description": "Traditional 510(k), Special 510(k), or Abbreviated 510(k)",
                        "default": ""
                    },
                    "countryCode": {
                        "title": "Country Code",
                        "type": "string",
                        "description": "Two-letter country code of applicant (e.g., 'US', 'DE', 'JP', 'CN')"
                    },
                    "maxResults": {
                        "title": "Maximum Results",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of clearances to return (openFDA limit: 1000 per query)",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
