FDA 510(k) Clearances Scraper — Device Approvals
Pricing
Pay per event
FDA 510(k) Clearances Scraper — Device Approvals
Export openFDA 510(k) premarket device clearance records — 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, as clean JSON, CSV or Excel.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
Share
🎯 What this 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.
⚙️ How to use it
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
applicant | string | no | 'Medtronic' | Filter: applicant/company name that filed the 510(k). Matches openFDA's applicant field. |
deviceName | string | no | 'Cardiac Monitor' | Filter: device name. Matches openFDA's device_name field. |
productCode | string | no | 'DXH' | Filter: FDA product code. Matches openFDA's product_code field. |
advisoryCommittee | string | no | 'Cardiovascular' | Filter: advisory committee description. Matches openFDA's advisory_committee_description field. |
deviceClass | string | no | '2' | Filter: FDA device class. Matches openFDA's openfda.device_class field. |
decisionDateFrom | string | no | '20240101' | Only include clearances decided on or after this date, as YYYYMMDD. Leave empty for no floor. |
decisionDateTo | string | no | '20241231' | 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… |
maxResults | integer | no | 100 | Stop after this many records. Each record is one billed result row. |
proxyConfiguration | object | no | {'useApifyProxy': False} | openFDA is a public government API and does not need a proxy. Leave this off unless your account requires egress… |
Example input
{"deviceClass": "2","maxResults": 3,"proxyConfiguration": {"useApifyProxy": false}}
📤 Output
Every row is one dataset item.
| Field | Type | Notes |
|---|---|---|
k_number | string | openFDA 510(k) submission identifier, e.g. K243021. |
applicant | string | Applicant/company that filed the 510(k). |
contact | string | Named contact on the submission. |
address | string | Applicant address, built from address, city, state, zip and country. |
device_name | string | Device name as submitted. |
decision_code | string | FDA decision code, e.g. SESE. |
decision_date | string | Date FDA decided the submission (YYYY-MM-DD). |
decision_description | string | Human-readable decision, e.g. Substantially Equivalent. |
product_code | string | FDA product code. |
advisory_committee | string | Advisory committee short code. |
advisory_committee_description | string | Advisory committee full description, e.g. Cardiovascular. |
clearance_type | string | Clearance pathway, e.g. Traditional. |
date_received | string | Date FDA received the submission. |
expedited_review_flag | string | Whether the submission got expedited review (Y/N). |
statement_or_summary | string | Whether a summary or safety/effectiveness statement was filed. |
device_class | string | FDA device class — 1, 2 or 3. |
medical_specialty_description | string | Medical specialty area, e.g. Cardiovascular. |
regulation_number | string | CFR regulation number governing the device, e.g. 870.2300. |
Example output
{"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
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.05 | One-off warm-up charge per run |
result | $0.002 | Per dataset item |
Example: 1 000 results at the rates above ≈ $2.05. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 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?
No. openFDA serves 510(k) data keylessly; the Actor stays inside the anonymous rate limit.
What's the difference between this and an FDA recalls Actor?
This Actor covers premarket 510(k) clearances — devices getting approved to market. A recalls Actor covers enforcement actions after the fact. They're separate openFDA endpoints with separate row shapes.
Why is there a 25 000 record ceiling?
openFDA's skip parameter refuses to page past 25 000 on this endpoint. The Actor stops cleanly at that boundary and logs it rather than looping or crashing.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.