FDA PMA Medical Device Approval Search
Search the FDA's database of **55,000+ Premarket Approval (PMA) records** for Class III medical devices — the most stringent pathway for high-risk devices like implantable defibrillators, heart valves, hip implants, and cochlear implants. Filter by device name, company, product code, advisory committee, PMA number, decision code, supplement type, or date range. Each result includes computed days-to-decision timelines not available in the raw FDA data.
Maintenance Pulse
90/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| result-returned | Charged per result returned. Includes data transformation and structured output. | $0.03 |
Example: 100 events = $3.00 · 1,000 events = $30.00
Documentation
Search the FDA's database of 55,000+ Premarket Approval (PMA) records for Class III medical devices — the most stringent pathway for high-risk devices like implantable defibrillators, heart valves, hip implants, and cochlear implants. Filter by device name, company, product code, advisory committee, PMA number, decision code, supplement type, or date range. Each result includes computed days-to-decision timelines not available in the raw FDA data.
No API key required. Just enter a device name like defibrillator or a company like Medtronic and get structured approval data in seconds.
Why Use FDA PMA Medical Device Approval Search?
The PMA pathway is reserved for Class III medical devices that "support or sustain human life, are of substantial importance in preventing impairment of human health, or present a potential unreasonable risk of illness or injury." Finding PMA data means navigating the FDA's AccessData interface or constructing complex openFDA queries. This actor handles query construction, pagination (up to 1,000 results), date normalization, decision code mapping, address merging, and computation of days-to-decision — giving you clean, structured JSON ready for analysis pipelines.
Features
- Device name search — find approvals by trade name or generic name (e.g., "defibrillator", "hip implant", "heart valve", "cochlear implant")
- Company lookup — search by applicant company (e.g., "Medtronic", "Boston Scientific", "Edwards Lifesciences", "Stryker")
- Product code filtering — use FDA's three-letter classification codes (e.g., "NKE" for pacemakers, "DTB" for hip prostheses)
- PMA number lookup — retrieve all supplements/amendments for a specific PMA (e.g., "P070008")
- Advisory committee filter — narrow by FDA specialty area (20 committees from Anesthesiology to Toxicology)
- Decision code filter — filter by outcome: Approved, 30-Day Notice Accepted, Approvable (Letter), Approved (Withdrawn)
- Supplement type filter — Original PMA, Panel Track, Real-Time, 180-Day, 30-Day Notice, or Special
- Date range filtering — search by decision date range in YYYY-MM-DD format
- Days-to-decision computation — calculates elapsed time from FDA receipt to decision, a metric not in the raw API
- Approval order statement — includes the FDA's official approval order statement describing what was approved
- Summary statistics — automatic decision breakdown, committee distribution, supplement type tallies, and avg/min/max review timelines
- Retry with backoff — built-in exponential backoff for API rate limits and transient errors
How to Use
-
Enter search criteria — provide at least one filter: device name, applicant, product code, PMA number, advisory committee, decision code, supplement type, or date range.
-
Set the result limit — choose how many records to return (1–1,000). The default is 100. The openFDA API caps results at 1,000 per query.
-
Run and download — click "Start" and wait for the run to complete (typically 5–30 seconds). Download the structured JSON dataset.
-
Review summary stats — check the run log for automatic summary statistics including avg days-to-decision, decision breakdown, and supplement type distribution.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
deviceName | String | No* | — | Device name search — searches both trade name and generic name |
applicant | String | No* | — | Company/applicant name (e.g., "Medtronic", "Edwards Lifesciences") |
productCode | String | No* | — | FDA three-letter product code (e.g., "NKE", "DTB") |
pmaNumber | String | No* | — | Specific PMA number (e.g., "P070008") — returns all supplements |
advisoryCommittee | Select | No | All | FDA advisory committee code (20 options) |
decisionCode | Select | No | All | Approval decision: Approved, 30-Day Notice, etc. |
supplementType | Select | No | All | Original PMA, Panel Track, Real-Time, 180-Day, 30-Day Notice, Special |
decisionDateFrom | String | No | — | Start of decision date range (YYYY-MM-DD) |
decisionDateTo | String | No | — | End of decision date range (YYYY-MM-DD) |
maxResults | Integer | No | 100 | Maximum records to return (1–1,000) |
*At least one search parameter is required.
Input Examples
Find all pacemaker PMA approvals:
{
"deviceName": "pacemaker",
"maxResults": 100
}
Look up all supplements for a specific PMA:
{
"pmaNumber": "P070008",
"maxResults": 200
}
Medtronic cardiovascular approvals in 2024:
{
"applicant": "Medtronic",
"advisoryCommittee": "CV",
"decisionDateFrom": "2024-01-01",
"decisionDateTo": "2024-12-31",
"maxResults": 500
}
All orthopedic device approvals since 2023:
{
"advisoryCommittee": "OR",
"decisionDateFrom": "2023-01-01",
"maxResults": 1000
}
Original PMA approvals only (not supplements):
{
"supplementType": "Original",
"decisionDateFrom": "2020-01-01",
"maxResults": 500
}
Approved (Withdrawn) PMA records:
{
"decisionCode": "APWD",
"maxResults": 100
}
Hip implant approvals by product code:
{
"productCode": "DTB",
"decisionDateFrom": "2023-01-01",
"maxResults": 200
}
Input Tips
- Use
pmaNumberto retrieve the full regulatory history of a specific PMA, including all supplements and amendments. - Combine
advisoryCommittee+ date range to analyze approval trends in a specialty area over time. - Set
supplementTypeto "Original" to find only initial PMA approvals (excludes the many supplements that make up the bulk of records). decisionCode: "APWD"finds approvals that were later withdrawn — useful for identifying devices pulled from the market.- For large result sets, partition your search using date ranges to stay within the 1,000 result limit.
- Device name searches match both
trade_nameandgeneric_namefields.
Output
Each PMA record includes:
{
"pmaNumber": "P070008",
"supplementNumber": "S070",
"applicant": "Biotronik, Inc.",
"address": "6024 Jean Rd.",
"city": "Lake Oswego",
"state": "OR",
"zipCode": "97035",
"genericName": "Pulse generator, pacemaker, implantable, with cardiac resynchronization (CRT-P)",
"tradeName": "COROX OTW 75 BP & 85 BP; COROX OTW-L 75 BP & 85 BP",
"productCode": "NKE",
"advisoryCommittee": "CV",
"advisoryCommitteeDescription": "Cardiovascular",
"supplementType": "Normal 180 Day Track",
"supplementReason": "Change Design/Components/Specifications/Material",
"expeditedReview": false,
"dateReceived": "2015-12-23",
"decisionDate": "2016-05-02",
"daysToDecision": 131,
"docketNumber": "",
"decisionCode": "APPR",
"decisionDescription": "Approved",
"aoStatement": "Approval for full body scanning of the ProMRI CRT-D System.",
"deviceClass": "3",
"regulationNumber": null,
"openfdaDeviceName": "Pulse Generator, Pacemaker, Implantable, With Cardiac Resynchronization (Crt-P)",
"openfdaSpecialty": "Unknown"
}
Output Fields
| Field | Type | Description |
|---|---|---|
pmaNumber | String | PMA application number (e.g., "P070008") |
supplementNumber | String | Supplement/amendment number (e.g., "S070", "" for originals) |
applicant | String | Company that submitted the PMA |
address | String | Applicant street address |
city | String | Applicant city |
state | String | Applicant state (US two-letter code) |
zipCode | String | Applicant ZIP code |
genericName | String | Generic device name |
tradeName | String | Commercial trade/brand name |
productCode | String | FDA three-letter product classification code |
advisoryCommittee | String | Two-letter advisory committee code |
advisoryCommitteeDescription | String | Full name of the advisory committee |
supplementType | String | Type of submission (Original, 180-Day, 30-Day Notice, etc.) |
supplementReason | String | Reason for the supplement (e.g., design change, labeling, manufacturing) |
expeditedReview | Boolean | Whether the submission received expedited review |
dateReceived | String | Date FDA received the submission (YYYY-MM-DD) |
decisionDate | String | Date of FDA decision (YYYY-MM-DD) |
daysToDecision | Integer / null | Computed days from receipt to decision (not in raw API) |
docketNumber | String | Federal Register docket number |
decisionCode | String | FDA decision code (APPR, OK30, APWD, APRL) |
decisionDescription | String | Human-readable decision (e.g., "Approved", "30-Day Notice Accepted") |
aoStatement | String | FDA Approval Order statement describing what was approved |
deviceClass | String / null | FDA device classification (always "3" for PMA devices) |
regulationNumber | String / null | CFR regulation number |
openfdaDeviceName | String / null | Standardized device name from openFDA enrichment |
openfdaSpecialty | String / null | Medical specialty description from openFDA |
Decision Codes
| Code | Meaning | Count |
|---|---|---|
| APPR | Approved | 28,022 |
| OK30 | 30-Day Notice Accepted | 26,989 |
| APWD | Approved (Withdrawn) | 393 |
| APRL | Approvable (Letter) | 339 |
Supplement Types
| Type | Description |
|---|---|
| Original | Initial PMA application for a new device |
| Panel Track | Supplement requiring advisory panel review |
| Real-Time Process | Expedited review for minor changes |
| Normal 180 Day Track | Standard supplement review (180-day timeline) |
| 135 Review Track For 30-Day Notice | 30-day notice with 135-day review track |
| 30-Day Notice | Minor manufacturing/labeling changes |
| Special (Immediate Track) | Expedited for urgent safety-related changes |
Use Cases
- Medical device companies tracking competitor PMA approvals to identify new market entrants and regulatory strategy shifts
- Regulatory affairs teams benchmarking FDA review timelines by product code and supplement type to set realistic submission expectations
- Healthcare investors researching a company's approved device portfolio for due diligence before funding or acquisition decisions
- Regulatory consultants analyzing PMA approval histories to advise clients on supplement strategies and review track selection
- Patent attorneys cross-referencing PMA approvals with patent filings to establish prior art and identify licensing opportunities
- Market research firms mapping the Class III medical device landscape by advisory committee, applicant, and approval date
- Quality and compliance auditors verifying that marketed Class III devices have valid PMA approvals
- Academic researchers studying FDA regulatory science — approval timelines, supplement patterns, and market access trends
How to Use the API
Python
import requests
import time
run = requests.post(
"https://api.apify.com/v2/acts/ryanclinton~fda-pma-approvals/runs",
params={"token": "YOUR_APIFY_TOKEN"},
json={
"applicant": "Medtronic",
"advisoryCommittee": "CV",
"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['pmaNumber']}/{item['supplementNumber']} | {item['tradeName']} | {item['applicant']} | {item['daysToDecision']} days")
JavaScript
const response = await fetch(
"https://api.apify.com/v2/acts/ryanclinton~fda-pma-approvals/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
applicant: "Medtronic",
advisoryCommittee: "CV",
decisionDateFrom: "2024-01-01",
maxResults: 100,
}),
}
);
const approvals = await response.json();
approvals.forEach(a =>
console.log(`${a.pmaNumber}/${a.supplementNumber} | ${a.tradeName} | ${a.daysToDecision} days`)
);
cURL
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~fda-pma-approvals/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"applicant": "Medtronic",
"advisoryCommittee": "CV",
"decisionDateFrom": "2024-01-01",
"maxResults": 100
}'
How It Works
Input (deviceName, applicant, productCode, pmaNumber, committee, dates, filters)
|
v
+--------------------------------------------------+
| Step 1: Build Search Query |
| Construct openFDA Lucene-style query string |
| from input parameters. Device name searches |
| both trade_name and generic_name with OR. |
| Date ranges converted to YYYYMMDD for API. |
| Terms joined with +AND+ conjunction. |
+--------------------------------------------------+
|
v
+--------------------------------------------------+
| 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. |
+--------------------------------------------------+
|
v
+--------------------------------------------------+
| Step 3: Transform & Enrich |
| Normalize field names to camelCase. |
| Format dates from YYYYMMDD to YYYY-MM-DD. |
| Merge address fields. Convert Y/N to boolean. |
| Map decision codes to human-readable names. |
| Extract openFDA enrichment (class, regulation). |
+--------------------------------------------------+
|
v
+--------------------------------------------------+
| Step 4: Compute Days to Decision |
| Calculate elapsed days between dateReceived |
| and decisionDate for each PMA record. |
| This metric is NOT in the raw openFDA data. |
+--------------------------------------------------+
|
v
+--------------------------------------------------+
| Step 5: Summary Statistics |
| Compute avg/min/max daysToDecision. |
| Tally decision codes, advisory committees, |
| and supplement types. Log to run output. |
+--------------------------------------------------+
|
v
Structured PMA approval records pushed to dataset
Data Sources
| Source | API Endpoint | Auth Required | Records |
|---|---|---|---|
| FDA openFDA PMA | https://api.fda.gov/device/pma.json | No | 55K+ |
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 |
Common Product Codes (Class III)
| Code | Device Category | Code | Device Category |
|---|---|---|---|
| NKE | Pacemakers (CRT-P) | DTB | Hip Prostheses |
| LWS | Defibrillators (ICD) | NIQ | Knee Prostheses |
| DXY | Heart Valves | MGB | Intraocular Lenses |
| QBJ | TAVR Systems | LZG | Cochlear Implants |
| MAF | Coronary Stents | LYZ | Neurostimulators |
How Much Does It Cost?
| Scenario | Results | Est. Time | Est. Cost |
|---|---|---|---|
| Single PMA number lookup | 1–200 | 3–10 sec | < $0.01 |
| Company 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. The Apify free tier covers thousands of runs per month.
Tips
- Use product codes for precision — device name searches return broad matches. Product codes target exact categories. Look up codes in the FDA Product Classification Database.
- Filter to "Original" for new device approvals — most PMA records are supplements to existing approvals. Set
supplementTypeto "Original" to find only initial device approvals. - PMA number returns full history — searching by
pmaNumberreturns the original approval plus all subsequent supplements, giving you the complete regulatory lifecycle of a device. - Check daysToDecision for timeline planning — if your company is preparing a PMA submission, filter by your product code and check average review times across supplement types.
- APWD = withdrawn approvals — search
decisionCode: "APWD"to find devices that were approved but later had their approval withdrawn — critical intelligence for safety and competitive analysis. - Partition large searches by date — the openFDA API caps at 1,000 results per query. Use yearly date ranges for comprehensive data.
- Cross-reference with MAUDE data — use the
pmaNumberfrom MAUDE adverse event reports to look up the original approval record.
Limitations
- 1,000 result cap — the openFDA API limits results to 1,000 per query. Use date range partitioning for larger datasets.
- Supplements dominate results — most records are supplements (30-Day Notices, 180-Day supplements), not original PMAs. Use the
supplementTypefilter to narrow results. - No clinical trial data — PMA records include the approval decision and supplement details, but not the underlying clinical trial data submitted to the FDA.
- No predicate/comparison device — unlike 510(k), PMA records do not reference predicate devices.
- openFDA enrichment gaps —
deviceClass,regulationNumber, andopenfdaDeviceNamecome from the openFDA enrichment layer and may be null for some records. - Supplement type search is exact match — the supplement type must match the exact string in the database. Use the provided select options for best results.
- Rate limiting — the openFDA API enforces rate limits. The actor handles this with exponential backoff, but rapid sequential runs may experience delays.
Responsible Use
- All data is public domain — FDA PMA 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.
- Use for legitimate purposes — designed for regulatory intelligence, market research, due diligence, competitive analysis, and academic research.
- Verify critical decisions — for regulatory submissions, always verify PMA data against the official FDA PMA Database.
FAQ
Is an API key required? No. The openFDA API is free and requires no authentication.
How current is the data? The openFDA database is updated regularly. New PMA decisions typically appear within days to weeks.
What is the difference between PMA and 510(k)? PMA is the most stringent FDA pathway, required for Class III (highest-risk) medical devices. It requires clinical trial evidence. 510(k) is for lower-risk devices that can demonstrate substantial equivalence to a predicate device. PMAs take longer and cost more but are required for devices like pacemakers, heart valves, and hip implants.
Why do most results show a supplement number?
After a PMA is originally approved, any change to the device (design, labeling, manufacturing, materials) requires a PMA supplement. A single PMA can accumulate hundreds of supplements over its lifetime. Use supplementType: "Original" to find only initial approvals.
What does the aoStatement field contain? The Approval Order Statement is the FDA's official description of what was approved in that specific submission. For supplements, it describes the specific change (e.g., "Approval for full body scanning of the ProMRI CRT-D System").
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 — not available in the raw API.
Can I find which devices had their approvals withdrawn?
Yes. Set decisionCode to "APWD" (Approved, Withdrawn) to find PMA approvals that were later withdrawn from the market.
How far back does the data go? The PMA database contains records from the 1970s to present — the entire history of the PMA program since it was established by the Medical Device Amendments of 1976.
Integrations
- Apify API — trigger runs programmatically for regulatory intelligence pipelines
- Zapier — automatically search for new PMA approvals when a competitor is added to your list
- Make (Integromat) — build workflows that monitor new approvals in your advisory committee weekly
- Google Sheets — export PMA data directly for regulatory strategy analysis and timeline benchmarking
- Webhooks — receive approval data as soon as the run completes
- Scheduled Runs — run weekly or monthly to track new PMA approvals in your product category
Related Actors
| Actor | What it does | Use with FDA PMA |
|---|---|---|
| FDA 510(k) Device Clearance Search | Search 174K+ 510(k) clearances | Compare 510(k) vs PMA pathways for similar devices |
| FDA Device Adverse Event Search (MAUDE) | Search 24M+ adverse events | Cross-reference PMA devices with their safety history |
| FDA Medical Device Recall Search | Search FDA device recalls | Find recalls for PMA-approved devices |
| openFDA Drug Event Monitor | FDA drug adverse events | Companion for combination drug/device products |
| Clinical Trial Tracker | ClinicalTrials.gov search | Find clinical trials supporting PMA submissions |
| SEC EDGAR Filing Analyzer | SEC filing analysis | Research financial impact of PMA approvals on public companies |
How it works
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
Get results
Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.
Use cases
Sales Teams
Build targeted lead lists with verified contact data.
Marketing
Research competitors and identify outreach opportunities.
Data Teams
Automate data collection pipelines with scheduled runs.
Developers
Integrate via REST API or use as an MCP tool in AI workflows.
Related actors
GitHub Repository Search
Search GitHub repositories by keyword, language, topic, stars, forks. Sort by stars, forks, or recently updated. Returns metadata, topics, license, owner info, URLs. Free API, optional token for higher limits.
Website Content to Markdown
Convert any website to clean Markdown for RAG pipelines, LLM training, and AI apps. Crawls pages, strips boilerplate, preserves headings, tables, and code blocks. GFM support.
Weather Forecast Search
Get weather forecasts for any location worldwide using the free Open-Meteo API. Returns current conditions, daily and hourly forecasts with temperature, precipitation, wind, UV index, and more. No API key needed.
EUIPO EU Trademark Search
Search EU trademarks via official EUIPO database. Find registered and pending trademarks by name, Nice class, applicant, or status. Returns full trademark details and filing history.
Ready to try FDA PMA Medical Device Approval Search?
Start for free on Apify. No credit card required.
Open on Apify Store