FDA 510(k) Clearances Scraper icon

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 rotationcurl-cffi impersonates 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_number identifiers, 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.

FieldTypeRequiredWhat 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

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result emitted$0.0020Per 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?
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 <code>skip</code> 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.

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

Teams that run this also run