openFDA search - drug events, recalls, labels, devices (API) avatar

openFDA search - drug events, recalls, labels, devices (API)

Pricing

from $5.00 / 1,000 records

Go to Apify Store
openFDA search - drug events, recalls, labels, devices (API)

openFDA search - drug events, recalls, labels, devices (API)

Query openFDA (api.fda.gov): drug adverse events, drug and food recalls, drug labels, device events and device recalls. Pass openFDA search syntax plus a date range; get one normalised row per record (id, dates, product, classification, status, reason or reaction terms, firm) plus the raw JSON.

Pricing

from $5.00 / 1,000 records

Rating

0.0

(0)

Developer

RetrainMap Team

RetrainMap Team

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

openFDA search — drug events, recalls, labels, devices (API)

One normalised row per openFDA record from six collections on https://api.fda.gov: drug adverse event reports (FAERS), drug recall enforcement reports, drug labels (SPL), device adverse event reports (MAUDE), device recalls and food recall enforcement reports. Pass any openFDA search expression plus a date range; get record id, dates, product/drug names, classification, status, reason or reaction terms, firm, state and country in the same columns whichever endpoint you chose, with the record's own JSON attached — ready for CSV or JSON.

The default input (drug recalls, last 90 days by report date, 300 rows) succeeds within 5 minutes and returns rows — Apify auto-tests it daily.

Data source and status

PublisherU.S. Food and Drug Administration — openFDA (https://open.fda.gov)
APIhttps://api.fda.gov/{drug,device,food}/… — public; an API key is optional (https://open.fda.gov/apis/authentication/). Without a key: 1,000 requests per day per IP, 240 per minute; with a key: 120,000 per day
What this Actor readsPlain GET requests with search=(your query) AND <date_field>:[from TO to], sort=<date_field>:desc, limit=100, skip=N, at most two requests per second; the key, when given, is sent only as the api_key query parameter and never logged or written to the dataset
Refresh cadenceopenFDA refreshes each collection on its own schedule (enforcement reports and labels roughly weekly, FAERS and MAUDE files roughly quarterly/monthly — see https://open.fda.gov/apis/). The Actor reads live on every run; the API's own last_updated for the endpoint is stored in RUN_SUMMARY, and fetched_at on each row is the fetch time
CopyrightWorks of the United States Government are not subject to copyright in the U.S. (17 U.S.C. §105); openFDA data are released under the terms at https://open.fda.gov/license/. Please cite openFDA as the source
Known caveatsOne query returns at most 25,100 records (openFDA rejects skip above 25,000) — narrow the search or dates for more; "no matches" is the API's HTTP 404 and yields zero rows with a warning; a malformed search expression makes the API answer HTTP 500 and the run fails with the API's message; the state column is empty for FAERS and labels (the API carries none); raw_json is trimmed to 6,000 characters (raw_json_truncated says when)

Honesty note: openFDA data are unvalidated per the API's own disclaimer and are informational, not medical advice — the rows are the API's own fields mapped to a common set, nothing is inferred, summarised or classified by this Actor, and a run stops with an error rather than guess when the API's shape changes.

Identification: the requests carry a product-token User-Agent (SteelyardActor/0.1 (openfda-search; …) — api.fda.gov's WAF rejects any agent string containing "nmap", which the brand name RetrainMap does) and the operator's contact address in the standard From: header (RFC 9110 §10.1.2).

Input

FieldTypeMeaning
endpointselectdrug_enforcement (default), drug_event, drug_label, device_event, device_recall, food_enforcement
searchstringOptional openFDA search expression in the endpoint's own field names, e.g. patient.drug.medicinalproduct:"ibuprofen", classification:"Class I" AND state:CA
date_fieldstringOptional; default per endpoint: receivedate, report_date, effective_time, date_received, event_date_posted, report_date
date_from / date_toYYYY-MM-DDOptional, inclusive. Both empty = the last 90 days; only date_from = through today; only date_to = from 1900-01-01
max_recordsintegerDefault 300, at most 25,100
api_keysecret stringOptional openFDA key
request_interval_msintegerDefault 500 (floor 250)
contact_emailstringSent in the From: header

Example — FAERS reports naming ibuprofen received since January 2026:

{ "endpoint": "drug_event", "search": "patient.drug.medicinalproduct:\"ibuprofen\"", "date_from": "2026-01-01", "max_records": 500 }

Output (dataset row)

Common columns for every endpoint: endpoint, endpoint_path, record_id, record_id_field (which field the id came from — for recalls not yet classified recall_number is empty and event_id is used instead), date_field, date (the date field's value, YYYY-MM-DD), secondary_date, product, generic_names (list), classification, status, reason_or_terms, firm, state, country, source_url (the openFDA page query the record came from, without any key), raw_json (the record's JSON, ≤ 6,000 characters), raw_json_truncated, fetched_at.

How the common columns are filled per endpoint:

Endpointrecord_iddate / secondary_dateproduct / generic_namesclassification / statusreason_or_termsfirm
drug_enforcement, food_enforcementrecall_numberreport_date / recall_initiation_dateproduct_description / openfda.generic_nameclassification (Class I–III) / statusreason_for_recallrecalling_firm
drug_eventsafetyreportidreceivedate / receiptdatedrug medicinalproduct names / active substancesserious (1 = Serious, 2 = Not serious) / seriousness flags set (death, hospitalization, …)MedDRA reaction termssender.senderorganization
drug_labelset_ideffective_time / —openfda.brand_name / openfda.generic_nameopenfda.product_type / label versionpurpose or indications_and_usageopenfda.manufacturer_name
device_eventmdr_report_keydate_received / date_of_eventdevice brand_name / generic_nameevent_type / type_of_reportproduct_problemsmanufacturer name
device_recallproduct_res_numberevent_date_posted / event_date_initiatedproduct_description / openfda.device_nameopenfda.device_class / recall_statusreason_for_recallrecalling_firm

Text columns are trimmed to 1,000 characters; the full record is in raw_json. A run summary (query, the API's own match count and last_updated, pages, requests, whether the skip ceiling or the pay-per-event budget stopped the run) is stored as RUN_SUMMARY in the run's key-value store.

Pricing (pay per event)

EventPrice
run-start — once per run$0.10
record — per row written$0.005

The default pull (≤ 300 rows) costs at most $1.60; 1,000 records cost $5.10. Rows stop when your run's maximum charge is reached; the run summary says so.

Operator

Steelyard Ventures LLC (RetrainMap) — info@steelyardclinical.com. Not affiliated with the U.S. Food and Drug Administration. The Actor writes only to its own dataset and key-value store; it stores no credentials and sends nothing else.