openFDA Drug, Device & Recall Data avatar

openFDA Drug, Device & Recall Data

Pricing

$1.00 / 1,000 openfda records

Go to Apify Store
openFDA Drug, Device & Recall Data

openFDA Drug, Device & Recall Data

openFDA data scraper for drug labels, adverse-event count buckets, device recalls and food enforcement records. Export JSON with source links and diagnostics for failed or empty queries.

Pricing

$1.00 / 1,000 openfda records

Rating

0.0

(0)

Developer

Grit

Grit

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Categories

Share

openFDA scraper returns drug labels, adverse event count buckets, device recalls, and food enforcement records from the public openFDA API. openFDA API queries return source links, dates, original records, and diagnostics for failed or empty queries.

Input example

{
"endpoint": "drug_labels",
"search": "openfda.brand_name:\"ADVIL\"",
"maxItems": 20
}

The input keys and allowed values follow .actor/input_schema.json.

Output fields

FieldTypeExample or excerpt from sample
endpointstring"drug_labels"
statusstring"ok"
sourceUrlstring"https://api.fda.gov/device/recall.json?limit=2&skip=0"
sourceLastUpdatedstring"2026-10-02"
fetchedAtstring"2026-10-05T12:20:00.231984+00:00"
recordIdstring"44e71018-211d-caf8-e063-6394a90a06c9"
titlestring"Advil Dual Action with Acetaminophen, Travel BASIX"
recordDatestring or null"2025-12-01"
termstring or null"OFF LABEL USE"
countinteger or null84264
recallingFirmstring or null"Sedecal USA, Inc"
recallStatusstring or null"Terminated"
classificationstring or null"Class II"
reasonForRecallstring or null"Wound dressing failed to meet sterility specifications."
brandNamesarray["JUNIOR STRENGTH ADVIL"]
genericNamesarray["IBUPROFEN, ACETAMINOPHEN TABLET, FILM COATED"]
manufacturerNamesarray["Lil' Drug Store Products, Inc."]
dataobject{"term": "OFF LABEL USE", "count": 84264}
errorstring or nullnull
queryIndexinteger0
searchstring"openfda.brand_name:\"ADVIL\""
countFieldstring or null"patient.reaction.reactionmeddrapt.exact"

Output example

Trimmed from sample_output.json; omitted fields remain available in the dataset.

{
"endpoint": "drug_labels",
"status": "ok",
"sourceUrl": "https://api.fda.gov/drug/label.json?search=openfda.brand_name%3A%22ADVIL%22&limit=2&skip=0",
"sourceLastUpdated": "2026-10-02",
"fetchedAt": "2026-10-05T12:20:00.231984+00:00",
"recordId": "44e71018-211d-caf8-e063-6394a90a06c9",
"title": "Advil Dual Action with Acetaminophen, Travel BASIX",
"error": null
}

Available endpoints

Input endpointOfficial sourceWhat one result represents
drug_labelsDrug labelingOne Structured Product Label record
adverse_event_countsDrug adverse eventsOne aggregate field value or date bucket with its report count
device_recallsMedical device recallsOne medical device recall record
food_enforcementFood enforcementOne food enforcement recall record

device_recalls uses /device/recall.json; food enforcement uses /food/enforcement.json. Individual drug adverse event reports are not exported.

Limits and data interpretation

  • Count requests return at most 1,000 buckets in one request. Count buckets are not paginated, and the API's most frequent buckets are not a complete frequency distribution when more terms exist.
  • Record queries are capped at 25,000 rows by this actor. openFDA pagination has a maximum skip of 25,000; bulk downloads and search-after are outside this actor's scope. Split a broad query by date or narrow its filters.
  • Requests are paced 0.3 seconds apart within one run. Multiple actor runs may share an IP or API key, so this does not guarantee avoidance of rate limits. Published openFDA limits are 240 requests/minute and 1,000/day without a key; with a key the daily limit is 120,000 requests.
  • HTTP 408, 429, 500, 502, 503, 504 and transport failures are retried. An exhausted request becomes a query error row; records already emitted are preserved. A malformed result becomes an item error row. Invalid global settings fail the run with a clear message.
  • Upstream records may change while pages are fetched; this is not a historical snapshot service. recordDate is the label effective date or recall initiation date, not a fetch date. Device recall classifications may be absent.
  • Drug adverse event counts are reported occurrences, not incidence estimates or evidence that a drug caused an outcome. FDA's source disclaimer says not to rely on openFDA for medical care decisions. The actor does not validate clinical conclusions.
  • Hosted billing and the Docker image have not been exercised in this local delivery. SDK charge calls and stop behavior are covered by integration tests; actual event prices require the owner's Store configuration.

FAQ

What are the output limits? maxItems caps records and diagnostics; the API can return no matches or reject a search expression.

Do I need a proxy or login? Public HTTPS endpoints need no login or proxy. An openFDA API key is optional.

How is this priced? Proposed pay per event: $0.001 for each successful record row. Empty and error diagnostics are uncharged. These are proposals in PRICING.md; the owner must configure Store billing.

How are rate limits handled? The code spaces requests 0.3 seconds apart across the run and retries transient errors with backoff and Retry-After. concurrency controls simultaneous queries.

How fresh is the data? Official openFDA data may change after a run. fetchedAt records collection time; sourceLastUpdated reflects the source dataset when available. Adverse events are aggregate counts, not individual reports.

Use with AI agents / MCP

After the actor is published, connect your agent to the Apify MCP server with an Apify API token. Use call-actor with the published actor identifier and the JSON input shown above. Read the returned dataset with get-dataset-items; the run response itself contains status and storage IDs, not the result rows. Alternatively, use the Apify API to start a run and read its default dataset. Keep the actor input bounded with maxItems, and inspect source links and any error fields before using results in an answer.