# FDA PMA Medical Device Approvals Scraper (openFDA) (`scrapers_lat/fda-pma-device-approvals-scraper`) Actor

Scrape FDA Premarket Approval (PMA) medical device decisions from openFDA. Get PMA number, applicant, trade and generic name, product code, specialty, supplement type, decision and dates. Export JSON, CSV, Excel.

- **URL**: https://apify.com/scrapers\_lat/fda-pma-device-approvals-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.56 / 1,000 pma approval records

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?

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 PMA Medical Device Approvals Scraper (openFDA)](https://scrapers.lat/banners/fda-pma-device-approvals-scraper.png)](https://console.apify.com/actors/uihRjE9CLcB5m9EF2/input)

## FDA PMA Medical Device Approvals Scraper (openFDA)

Here is one real result, with every field the actor returns:

```json
{
  "pmaNumber": "P170030",
  "supplementNumber": "S065",
  "isOriginal": false,
  "applicant": "Biotronik AG",
  "tradeName": "ORSIRO Sirolimus Eluting Coronary Stent System",
  "genericName": "Coronary drug-eluting stent",
  "productCode": "NIQ",
  "advisoryCommittee": "CV",
  "specialty": "Cardiovascular",
  "supplementType": "Normal 180 Day Track No User Fee",
  "supplementReason": "Postapproval Study Protocol",
  "expeditedReview": false,
  "dateReceived": "2026-07-10",
  "decisionDate": "2026-08-07",
  "decision": "Approved",
  "decisionCode": "APPR",
  "daysToDecision": 28,
  "docketNumber": null,
  "statement": "Post Approval Study Protocol for the EVO Extended Diameter PAS",
  "applicant_street1": "Ackerstrasse 6",
  "applicant_street2": null,
  "city": "Bülach",
  "state": null,
  "zip": "8180",
  "applicantAddress": "Ackerstrasse 6, Bülach, 8180",
  "pmaUrl": "https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpma/pma.cfm?id=P170030S065",
  "openfda": {
    "device_name": "Coronary Drug-Eluting Stent",
    "device_class": "3",
    "registration_number": ["3008132398", "1000121056"],
    "fei_number": ["1000121056", "3002806434"]
  },
  "aiSummary": null,
  "aiDeviceCategory": null,
  "aiBodySystem": null,
  "aiRiskLevel": null,
  "aiTags": null,
  "observedAt": "2026-08-20T00:36:17.734Z",
  "error": null
}
```

The most complete FDA Premarket Approval (PMA) scraper available. It returns every field the openFDA device PMA database exposes for each approval and supplement, plus derived fields (`decision` in plain English, `daysToDecision`, `isOriginal`, `applicantAddress`, `pmaUrl`), optional AI enrichment, and fourteen filters to target exactly the device approvals you need.

**📥 [Input](https://apify.com/scrapers_lat/fda-pma-device-approvals-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/fda-pma-device-approvals-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/fda-pma-device-approvals-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/fda-pma-device-approvals-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-United%20States-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Table of contents

- [What it does](#what-it-does)
- [Use cases](#use-cases)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing](#billing)
- [FAQ and troubleshooting](#faq-and-troubleshooting)

### What it does

The actor queries the openFDA device PMA dataset, applies the filters you pass as input, paginates through the matching approvals, and writes one normalized record per PMA record (original approval or supplement) to the run's dataset. PMA is the FDA's most stringent device review pathway, used for Class III high-risk devices such as coronary stents, heart valves, pacemakers, implantable defibrillators, spinal implants, and intraocular lenses.

Dates are normalized to `YYYY-MM-DD`, missing source values are returned as `null`, and derived fields are computed on top of the raw FDA fields: a plain-English `decision`, `daysToDecision` (received to decision), `isOriginal` (original approval versus supplement), a single-line `applicantAddress` for CRM or mapping, and a direct `pmaUrl` into the FDA database.

Two optional AI add-ons (opt-in, off by default) enrich each record: a plain-English summary of what the device is and what the approval covers, and a structured classification (device category, body system, risk level, keyword tags).

This actor covers PMA decisions only. For 510(k) clearances of moderate-risk devices, see the [FDA 510(k) Clearances Scraper](https://apify.com/scrapers_lat/fda-510k-clearances-scraper). For device recalls, see the [FDA Drug & Device Recalls Scraper](https://apify.com/scrapers_lat/fda-drug-device-recalls-scraper).

### Use cases

- **Medtech competitive intelligence.** Track every PMA approval and supplement for a competitor by `applicant` and watch new device launches, label expansions, and manufacturing changes.
- **Regulatory affairs monitoring.** Follow approvals in your `specialty` (Cardiovascular, Orthopedic, Ophthalmic, Neurology) and benchmark FDA review timelines with `daysToDecision`.
- **Investment and market research.** Surface newly approved high-risk devices, expedited-review approvals, and Panel Track supplements to spot commercial and clinical inflection points.
- **Supply chain and sourcing.** Map applicant companies, addresses, and the registration and FEI numbers of manufacturing establishments in the `openfda` block.
- **Clinical and academic research.** Build a dataset of approved Class III devices by product code, generic name, and approval date.
- **Sales lead generation.** Export applicant companies and single-line addresses to target medtech manufacturers and their suppliers.

### Quickstart

Open the actor, paste this into the input, and press Run. It returns the 10 most recent approved cardiovascular device PMAs, newest first.

```json
{
  "specialty": "Cardiovascular",
  "decisionCode": "APPR",
  "sortOrder": "Newest first",
  "maxResults": 10
}
```

Leave every filter empty to pull the most recent PMA records with no filter. All input fields are optional. Free Apify accounts return up to 10 records per run.

### Input reference

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `searchQuery` | string | no | (empty) | Free-text search against the device trade name (for example `stent`), OR a raw openFDA field expression such as `generic_name:pacemaker`. A value containing `field:` is treated as a raw expression. |
| `applicant` | string | no | (empty) | Applicant company that holds the PMA, exact phrase, for example `Medtronic`, `Abbott`, `Boston Scientific`. |
| `tradeName` | string | no | (empty) | Device trade (brand) name phrase. |
| `genericName` | string | no | (empty) | Device generic name or type, for example `Coronary drug-eluting stent`. |
| `productCode` | string | no | (empty) | Three-letter FDA product code, for example `NIQ`, `ONU`, `LPL`. |
| `specialty` | enum | no | (any) | FDA advisory committee (medical specialty) that reviewed the device, for example `Cardiovascular`, `Orthopedic`, `Ophthalmic`. |
| `decisionCode` | enum | no | (any) | FDA decision code. `APPR` approved, `OK30` 30-day notice acknowledged, `APWD` approved then withdrawn, `APRL` approvable, `DENY` denied. |
| `supplementType` | enum | no | (any) | PMA supplement track, for example `Normal 180 Day Track`, `Panel Track`, `Real-Time Process`, `30-Day Notice`. |
| `state` | string | no | (empty) | Applicant two-letter US state code, for example `CA`, `MN`, `MA`. |
| `pmaNumber` | string | no | (empty) | Look up a specific PMA number, for example `P160049`. |
| `expeditedOnly` | boolean | no | `false` | Only return devices that received expedited (priority) FDA review. |
| `originalOnly` | boolean | no | `false` | Only return original PMA approvals (exclude supplements and notices). |
| `dateFrom` | string | no | (empty) | Include records on or after this date (`YYYY-MM-DD`). Applies to `dateField`. |
| `dateTo` | string | no | (empty) | Include records on or before this date (`YYYY-MM-DD`). Applies to `dateField`. |
| `dateField` | enum | no | `decision_date` | Which date the range applies to: `decision_date` or `date_received`. |
| `sortOrder` | enum | no | (relevance) | `Newest first` or `Oldest first`, ordered on `dateField`. Empty keeps openFDA relevance order. |
| `withSummary` | boolean | no | `false` | Opt-in AI add-on. Add a plain-English summary per record. Billed only when a summary is produced. Disabled for free accounts. |
| `withClassify` | boolean | no | `false` | Opt-in AI add-on. Add device category, body system, risk level, and tags per record. Billed only when a classification is produced. Disabled for free accounts. |
| `maxResults` | integer | no | `50` (prefill `10`) | Maximum records to collect. Free accounts are capped at 10 per run. |
| `proxyConfiguration` | object | no | (none) | Standard Apify proxy configuration. Not required; the source is a public no-key API. |

Filters combine with logical AND. If you pass no filters, the actor returns PMA records ordered by openFDA relevance.

### Output reference

One dataset item per PMA record. Types: `string`, `integer`, `boolean`, `string[]`, `object`, or `null` when the source value is absent.

| Field | Type | Description |
|---|---|---|
| `pmaNumber` | string | FDA PMA number, for example `P160049`. |
| `supplementNumber` | string | Supplement number, for example `S008`. Empty or zero for original approvals. |
| `isOriginal` | boolean | `true` for the original PMA approval, `false` for a supplement or notice. |
| `applicant` | string | Applicant company that holds the PMA. |
| `tradeName` | string | Device trade (brand) name. |
| `genericName` | string | Device generic name or type. |
| `productCode` | string | Three-letter FDA product code. |
| `advisoryCommittee` | string | Advisory committee code, for example `CV`. |
| `specialty` | string | Advisory committee (medical specialty) description. |
| `supplementType` | string | PMA supplement track. |
| `supplementReason` | string | Reason for the supplement, for example `Process Change`, `Labeling`. |
| `expeditedReview` | boolean | `true` when the device received expedited (priority) review. |
| `dateReceived` | string | Date the FDA received the submission (`YYYY-MM-DD`). |
| `decisionDate` | string | Date of the FDA decision (`YYYY-MM-DD`). |
| `decision` | string | Plain-English decision derived from `decisionCode`. |
| `decisionCode` | string | Raw FDA decision code, for example `APPR`, `OK30`. |
| `daysToDecision` | integer | Whole days between `dateReceived` and `decisionDate`, or `null`. |
| `docketNumber` | string | Federal docket number when present, else `null`. |
| `statement` | string | FDA action or order statement describing the decision. |
| `applicant_street1` | string | Applicant street address line 1. |
| `applicant_street2` | string | Applicant street address line 2, or `null`. |
| `city` | string | Applicant city. |
| `state` | string | Applicant state code. |
| `zip` | string | Applicant ZIP code (with extension when present). |
| `applicantAddress` | string | Single-line applicant address, ready for CRM or mapping. |
| `pmaUrl` | string | Direct link to the record in the FDA PMA database. |
| `openfda` | object | The openFDA harmonization block (device name, class, registration and FEI numbers), or `null`. |
| `aiSummary` | string | AI plain-English summary of the device and approval, or `null` when the add-on is off. |
| `aiDeviceCategory` | string | AI device category, or `null` when the add-on is off. |
| `aiBodySystem` | string | AI affected body system, or `null` when the add-on is off. |
| `aiRiskLevel` | string | AI risk level (`high`, `medium`, `low`), or `null` when the add-on is off. |
| `aiTags` | string\[] | AI keyword tags, or `null` when the add-on is off. |
| `observedAt` | string | ISO 8601 timestamp of when the record was collected. |
| `error` | string | `null` on success. On a failed run, a single item with a populated `error` field is written instead. |

### Example output record

Real record from a live run (input `{"applicant": "Medtronic", "decisionCode": "APPR", "maxResults": 5}`):

```json
{
  "pmaNumber": "P130021",
  "supplementNumber": "S016",
  "isOriginal": false,
  "applicant": "Medtronic, Inc.",
  "tradeName": "MEDTRONIC COREVALVE AND COREVALVE EVOLUT R SYSTEMS",
  "genericName": "Aortic valve, prosthesis, percutaneously delivered",
  "productCode": "NPT",
  "advisoryCommittee": "CV",
  "specialty": "Cardiovascular",
  "supplementType": "Normal 180 Day Track",
  "supplementReason": "Labeling Change - Indications/instructions/shelf life/tradename",
  "expeditedReview": false,
  "dateReceived": "2015-07-08",
  "decisionDate": "2015-11-10",
  "decision": "Approved",
  "decisionCode": "APPR",
  "daysToDecision": 125,
  "docketNumber": null,
  "statement": "APPROVAL FOR MODIFYING THE LABELING TO REMOVE THE PRECAUTIONS REGARDING PATIENTS WITH LOW FLOW/LOW GRADIENT AND END-STAGE RENAL DISEASE.",
  "applicant_street1": "710 Medtronic Pkwy.",
  "applicant_street2": null,
  "city": "Miinneapolis",
  "state": "MN",
  "zip": "55432",
  "applicantAddress": "710 Medtronic Pkwy., Miinneapolis, MN 55432",
  "pmaUrl": "https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpma/pma.cfm?id=P130021S016",
  "openfda": null,
  "aiSummary": null,
  "aiDeviceCategory": null,
  "aiBodySystem": null,
  "aiRiskLevel": null,
  "aiTags": null,
  "observedAt": "2026-08-20T00:36:17.000Z",
  "error": null
}
```

### Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace `<TOKEN>` with your Apify API token.

Run synchronously and get dataset items in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~fda-pma-device-approvals-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"specialty":"Cardiovascular","decisionCode":"APPR","maxResults":25,"sortOrder":"Newest first"}'
```

Start a run asynchronously:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~fda-pma-device-approvals-scraper/runs?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"applicant":"Medtronic","maxResults":100}'
```

Apify CLI:

```bash
apify call scrapers_lat/fda-pma-device-approvals-scraper \
  --input '{"pmaNumber":"P160049"}'
```

### Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing `format`:

```bash
## JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"

## CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"

## Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
```

`<DATASET_ID>` is returned as `defaultDatasetId` in the run object. Use `offset` and `limit` to page through large result sets. `clean=true` drops empty and internal fields.

### Billing

This actor uses pay-per-event pricing. Prices follow a tiered discount ladder across Apify plan tiers (highest on the free tier, lowest on the Diamond tier).

| Event | When it fires | Notes |
|---|---|---|
| `apify-actor-start` | Once per run at start | Covers run setup and query preparation. |
| `result` | Per PMA record returned | The primary event. One charge per normalized record written to the dataset. |
| `ai_summary` | Per record, only when `withSummary` is on and a summary is produced | Opt-in AI add-on. Off by default. Disabled for free accounts. |
| `ai_classify` | Per record, only when `withClassify` is on and a classification is produced | Opt-in AI add-on. Off by default. Disabled for free accounts. |

- **No charge on failure.** If a run errors, the actor writes a single item with a populated `error` field and does not charge a `result` for it. Empty runs cost nothing.
- **AI add-ons charge only on success.** If the AI model returns nothing usable, no `ai_summary` or `ai_classify` charge is made and the fields stay `null`.
- **Spend cap respected.** Set `maxTotalChargeUsd` on the run; once reached, the actor stops emitting and charging further billable records.
- **Free Apify plans** are capped at 10 records per run, and paid AI add-ons are disabled for free accounts. Upgrade for higher `maxResults` and AI enrichment.
- **Source pagination ceiling.** openFDA allows a `skip` offset up to 25000 per query. For larger pulls, split the work with narrower filters or date ranges.

### FAQ and troubleshooting

**What is a PMA and how is it different from a 510(k)?**
Premarket Approval (PMA) is the FDA's most stringent review pathway, required for Class III high-risk devices. A 510(k) clearance is for moderate-risk devices shown to be substantially equivalent to an existing device. This actor covers PMA decisions; use the 510(k) actor for clearances.

**What is the difference between an original approval and a supplement?**
The original PMA is the first approval of a device. Supplements cover later changes such as expanded indications, labeling updates, or manufacturing changes. Use `originalOnly` to exclude supplements, or read the `isOriginal` and `supplementNumber` fields.

**A run returned 0 records. Why?**
The filter combination matched nothing in the source. Loosen filters (for example remove `state` or widen the date range). Zero-result runs are not charged.

**What does `decisionCode` OK30 mean?**
`OK30` means the FDA acknowledged a 30-day notice for a manufacturing or process change. `APPR` means approved. The `decision` field carries the plain-English version.

**How do the AI add-ons work?**
Set `withSummary` or `withClassify` to `true` on a paid Apify account. Each enabled add-on runs one model call per record and writes its fields, charging only when it produces usable output. They are disabled for free accounts.

**Is this an official FDA tool?**
No. This actor is independent and has no affiliation with the FDA or openFDA. It reads only data that is publicly available through the openFDA API. Use it in accordance with the openFDA terms of service.

### Related scrapers

- [FDA 510(k) Clearances Scraper](https://apify.com/scrapers_lat/fda-510k-clearances-scraper): FDA 510(k) clearances for moderate-risk devices.
- [FDA Drug & Device Recalls Scraper](https://apify.com/scrapers_lat/fda-drug-device-recalls-scraper): FDA drug and device recall actions.
- [openFDA Device Events Scraper](https://apify.com/scrapers_lat/openfda-device-events-scraper): FDA device adverse event reports (MAUDE).
- [openFDA Device Establishments Scraper](https://apify.com/scrapers_lat/openfda-device-establishments-scraper): FDA device manufacturer registrations and listings.
- [openFDA Food Recall & Enforcement Scraper](https://apify.com/scrapers_lat/openfda-food-recalls-scraper): US FDA food recalls and enforcement actions.

### More scrapers at scrapers.lat

Built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> Independent tool, not affiliated with the FDA or openFDA. Accesses only publicly available openFDA data. Use in accordance with the openFDA terms of service.

# Actor input Schema

## `searchQuery` (type: `string`):

Free-text search against the device trade name, or a raw openFDA expression (e.g. trade\_name:"stent"). Leave empty to browse all PMA records with the filters below.

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

Filter by the applicant company that holds the PMA (exact phrase match), e.g. Medtronic, Abbott, Boston Scientific.

## `tradeName` (type: `string`):

Filter by the device trade (brand) name.

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

Filter by the device generic name / type, e.g. Coronary Drug-Eluting Stent.

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

Filter by the 3-letter FDA product code, e.g. NIQ, ONU, LPL.

## `specialty` (type: `string`):

Filter by the FDA advisory committee (medical specialty) that reviewed the device.

## `decisionCode` (type: `string`):

Filter by FDA decision code. APPR = approved, OK30 = 30-day notice acknowledged, APWD = approved then withdrawn, APRL = approvable, DENY = denied.

## `supplementType` (type: `string`):

Filter by PMA supplement track.

## `state` (type: `string`):

Filter by the applicant's US state (2-letter code), e.g. CA, MN, MA.

## `pmaNumber` (type: `string`):

Look up a specific PMA number, e.g. P160049.

## `expeditedOnly` (type: `boolean`):

Only return devices that received expedited (priority) FDA review.

## `originalOnly` (type: `boolean`):

Only return original PMA approvals (exclude later supplements / notices).

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

Start date (YYYY-MM-DD) for the selected date field.

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

End date (YYYY-MM-DD) for the selected date field.

## `dateField` (type: `string`):

Which date the date range applies to.

## `sortOrder` (type: `string`):

Sort results by the selected date field.

## `withSummary` (type: `boolean`):

Opt-in. Add a 1-2 sentence plain-English AI summary of what each device is and what the approval covers. Billed per record only when a summary is produced. Disabled for free accounts.

## `withClassify` (type: `boolean`):

Opt-in. Add AI device category, affected body system, risk level and keyword tags per record. Billed per record only when a classification is produced. Disabled for free accounts.

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

Maximum number of PMA records to return. Free Apify accounts are capped at 10 per run.

## `proxyConfiguration` (type: `object`):

Optional. openFDA is a public no-key API; a proxy is not required. Provided for users who prefer to route traffic through Apify Proxy.

## Actor input object example

```json
{
  "searchQuery": "stent",
  "expeditedOnly": false,
  "originalOnly": false,
  "dateField": "decision_date",
  "sortOrder": "",
  "withSummary": false,
  "withClassify": false,
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/fda-pma-device-approvals-scraper").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 = {
    "maxResults": 10,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/fda-pma-device-approvals-scraper").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 '{
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scrapers_lat/fda-pma-device-approvals-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/uihRjE9CLcB5m9EF2/builds/QdahuWRlUVgLoSxHq/openapi.json
