Developer tools
FDA 510(k) Clearances Scraper — Device Approvals
Export every openFDA 510(k) premarket device clearance as a clean typed row — applicant, device name, decision date and code, product code, advisory committee, device class and regulation number — filterable by applicant, device, product code, committee, class or decision-date range.
Free Apify credit covers a first run. No credit card to try.
What this Actor scrapes
openFDA publishes every 510(k) premarket clearance the agency has granted — the fastest public record of which device just got cleared to market and who cleared it. The raw API hides a 25 000-record pagination ceiling, an intermittent cold-query 500, and a sparse openfda enrichment block that breaks naive parsers the first time a record ships without it. This Actor normalises all of that into one dependable row shape, so a market-entry or competitive-intelligence watchlist becomes a spreadsheet instead of a scripting project.
What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffiimpersonates real Chrome / Firefox / Safari TLS handshakes on every request. - 🔁 Retries with exponential backoff on
408 / 429 / 5xx, including openFDA's documented cold-query timeouts — up to 5 attempts per page. - 🧱 Stops cleanly at openFDA's pagination ceiling instead of looping on a 400, and fails loud (not silently empty) if the endpoint goes down for 3 consecutive pages.
- 🧊 Per-record fault isolation — one malformed record never takes down the run; we skip it, log it, and keep paging.
- 🧊 Clean, typed dataset rows — Pydantic-validated, stable
k_numberidentifiers, JSON / CSV / Excel export straight from the Apify Console. - 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.
Use cases
- Track which devices a competitor just cleared to market, and how fast their submissions move through FDA review.
- Build a market-entry brief on every 510(k) clearance for a product code before entering that device category.
- Feed a due-diligence or investment model with clearance velocity by applicant, advisory committee or device class.
- Monitor a specific device class or committee for new clearances on a recurring schedule.
Input
Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.
| Field | Type | Required | What it does |
|---|---|---|---|
applicant | string | no | Filter: applicant/company name that filed the 510(k). Matches openFDA's applicant field. |
deviceName | string | no | Filter: device name. Matches openFDA's device_name field. |
productCode | string | no | Filter: FDA product code. Matches openFDA's product_code field. |
advisoryCommittee | string | no | Filter: advisory committee description. Matches openFDA's advisory_committee_description field. |
deviceClass | string | no | Filter: FDA device class. Matches openFDA's openfda.device_class field. |
decisionDateFrom | string | no | Only include clearances decided on or after this date, as YYYYMMDD. Leave empty for no floor. |
decisionDateTo | string | no | Only include clearances decided on or before this date, as YYYYMMDD. Leave empty for no ceiling. |
searchQuery | string | no | Raw openFDA search expression, ANDed with the structured filters above, e.g. decision_code:"SESE". Leave empty to skip. |
maxResults | integer | no | Stop after this many records. Each record is one billed result row. |
{
"deviceClass": "2",
"maxResults": 3,
"proxyConfiguration": {
"useApifyProxy": false
}
} Output
One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.
k_numberapplicantcontactaddressdevice_namedecision_codedecision_datedecision_descriptionproduct_codeadvisory_committeeadvisory_committee_descriptionclearance_typedate_receivedexpedited_review_flagstatement_or_summarydevice_class
{
"k_number": "K243021",
"applicant": "ACME MEDICAL DEVICES INC.",
"contact": "JANE DOE",
"address": "123 MAIN ST, SPRINGFIELD, IL, US",
"device_name": "ACME CARDIAC MONITOR",
"decision_code": "SESE",
"decision_date": "2024-11-15",
"decision_description": "Substantially Equivalent",
"product_code": "DXH",
"advisory_committee": "CV",
"advisory_committee_description": "Cardiovascular",
"clearance_type": "Traditional",
"date_received": "2024-08-01",
"expedited_review_flag": "N",
"statement_or_summary": "Summary",
"device_class": "2",
"medical_specialty_description": "Cardiovascular",
"regulation_number": "870.2300"
} Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| Result emitted | $0.0020 | Per result written to the dataset. |
You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.
Limitations
- openFDA caps pagination at 25 000 records per query on this endpoint — narrow the search or the decision-date range to go deeper.
- Filter values aren't escaped for embedded double-quote characters — avoid quotes inside applicant, device name, or committee filters.
- Date fields are passed through in FDA's native string form rather than being reformatted.
FAQ
Do I need an API key?
What's the difference between this and an FDA recalls Actor?
Why is there a 25 000 record ceiling?
Ready to run it?
Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.
Related Actors