FDA Intel: Adverse Event Summaries avatar

FDA Intel: Adverse Event Summaries

Under maintenance

Pricing

from $250.00 / 1,000 adverse event summaries

Go to Apify Store
FDA Intel: Adverse Event Summaries

FDA Intel: Adverse Event Summaries

Under maintenance

Aggregates FDA MAUDE device adverse event reports (openFDA /device/event) into summary rows by product code, manufacturer, or brand -- event-type counts, top device/patient problems, monthly trend, and report-source breakdown. No individual report rows or narratives.

Pricing

from $250.00 / 1,000 adverse event summaries

Rating

0.0

(0)

Developer

Martyn Gross

Martyn Gross

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

Part of Iceni Data · FDA Intel

FDA Intel: Adverse Event Summaries

Aggregate FDA MAUDE device adverse event reports into summary rows by product code, manufacturer, or brand — event-type breakdown, top device/patient problems, monthly trend, and report-source mix, all in one row per group. Built on openFDA's /device/event endpoint (the public API over FDA's MAUDE database). Runs on the Apify platform, so you get scheduling, an API, webhooks, and monitoring for free.

What does FDA Intel: Adverse Event Summaries do?

Point it at a product code, manufacturer, or brand and a received-date window, and it pulls every matching MAUDE report from openFDA, groups them by group_by, and returns one summary row per group — not one row per report. Each row gives you the report count, a death/injury/malfunction/other breakdown, the top 5 device problems and top 5 patient problems reported, a month-by-month trend across the window, and a breakdown of who filed the reports (manufacturer, user facility, or voluntary). It's built for "how bad is this, and is it getting worse" at a glance, not for reading individual case narratives.

Why use FDA Intel: Adverse Event Summaries?

  • Competitive/market intelligence: track adverse event volume and severity trend for a competitor's product code or brand without building a MAUDE aggregation pipeline yourself.
  • Regulatory/quality monitoring: watch your own product codes for a rising malfunction or death count, or a new top device problem, month over month.
  • Due diligence: before partnering with, acquiring, or competing against a device maker, get their adverse-event profile — report volume, severity mix, and top failure modes — in one pull.
  • No scraping — openFDA's /device/event is a stable, documented JSON API. Schedule this Actor weekly (MAUDE itself refreshes on that cadence) or hit it on demand via the Apify API.

How to use FDA Intel: Adverse Event Summaries

  1. Click Try for free (or Start) on this Actor's page.
  2. In the Input tab, set product_codes, manufacturer_contains, and/or brand_contains to whatever you want to summarize. Leave all three blank to match every device event in the window (not recommended — see Pricing).
  3. Set received_after/received_before (YYYY-MM-DD) to your window. received_after defaults to 365 days before the run date if left blank; received_before defaults to no upper bound.
  4. Set group_by to product_code (default), manufacturer, or brand — this is the only thing that changes what group_key means on each output row.
  5. Click Start. When the run finishes, open the Dataset tab's Summaries view to see one row per group, or export as JSON, CSV, Excel, HTML, and more.

Input

All fields are optional and every field has a description and example in the Input tab. Full schema: .actor/input_schema.json.

FieldTypeDescription
product_codesarray of stringsFDA product codes to filter on, e.g. ["QAS", "OBO"]. Empty = match any.
manufacturer_containsstringCase-insensitive substring match on the device manufacturer name, e.g. "Medtronic".
brand_containsstringCase-insensitive substring match on the device brand/trade name.
received_afterstring (date)YYYY-MM-DD. Only reports FDA received on/after this date. Defaults to 365 days before the run date if left blank.
received_beforestring (date)YYYY-MM-DD. Only reports FDA received on/before this date. No upper bound if left blank.
group_bystring"product_code" (default), "manufacturer", or "brand" — which dimension group_key groups on.

Three worked inputs

1. A product code's adverse event trend over the last year (the default):

{
"product_codes": ["QAS"],
"group_by": "product_code"
}

2. Compare manufacturers across two related product codes:

{
"product_codes": ["QAS", "OBO"],
"group_by": "manufacturer",
"received_after": "2025-01-01"
}

3. One brand within a product code, narrowed to a specific window:

{
"product_codes": ["QAS"],
"brand_contains": "Rapid",
"group_by": "brand",
"received_after": "2025-09-07",
"received_before": "2026-03-01"
}

Output

One flat JSON object per group (product code, manufacturer, or brand — whichever group_by selected), pushed to the default dataset. Never one row per individual MAUDE report. You can download it as JSON, CSV, Excel, HTML, XML, or RSS from the Export results button. Missing values are null, never empty strings.

What it does not return

  • No individual report rows. report_number, dates, and every other per-report field stay internal to the aggregation — only group-level counts are returned. If you need individual MAUDE reports, openFDA's /device/event is free and public; query it directly.
  • No report narratives. mdr_text (the free-text "Description of Event or Problem") is never read into a row, at any point in the pipeline.
  • No incidence rates. total_reports is a raw count of reports filed, not a rate against devices sold, patients treated, or any denominator — MAUDE contains no exposure data to compute one. See the caveat field, present on every row.
  • No enrichment from third-party sources (company financials, news, litigation records, etc.) — every field comes directly from openFDA.
  • No personal data — MAUDE reports are already de-identified by FDA before openFDA exposes them.

Example output row

{
"group_key": "QAS",
"group_by": "product_code",
"product_codes": ["QAS"],
"manufacturer": null,
"total_reports": 187,
"event_type_counts": { "death": 2, "injury": 41, "malfunction": 138, "other": 6 },
"top_5_device_problems": [
{ "code_or_text": "Software Issue", "count": 52 },
{ "code_or_text": "Device Difficult to Program", "count": 24 },
{ "code_or_text": "Break", "count": 19 },
{ "code_or_text": "Material Deficiency", "count": 11 },
{ "code_or_text": "Failure to Alarm", "count": 7 }
],
"top_5_patient_problems": [
{ "code_or_text": "No Clinical Signs, Symptoms or Conditions", "count": 96 },
{ "code_or_text": "Other", "count": 33 },
{ "code_or_text": "Death", "count": 2 }
],
"monthly_trend": [
{ "month": "2025-09", "count": 14 },
{ "month": "2025-10", "count": 18 },
{ "month": "2025-11", "count": 12 },
{ "month": "2025-12", "count": 21 },
{ "month": "2026-01", "count": 19 },
{ "month": "2026-02", "count": 16 }
],
"report_source_breakdown": { "manufacturer": 152, "user_facility": 29, "voluntary": 6, "other": 0 },
"caveat": "MAUDE reports are unverified and are not incidence rates",
"data_as_of": "2026-09-07",
"source_urls": ["https://api.fda.gov/device/event.json?search=date_received:[20250907 TO 99991231] AND device.device_report_product_code:\"QAS\""],
"partial_data": false
}

Data table

FieldDescription
group_keyThis row's group: a product code, manufacturer name, or brand name, per group_by.
group_byWhich dimension group_key is: "product_code", "manufacturer", or "brand".
product_codesDistinct FDA product code(s) seen among this group's reports.
manufacturerPopulated only when group_by is "manufacturer" (equal to group_key). null for product_code/brand grouping — those groups can span multiple manufacturers, so no single value would be accurate.
total_reportsNumber of MAUDE reports in this group within the received-date window.
event_type_counts{death, injury, malfunction, other} report counts. other folds in "No Answer Provided", "Invalid Data", and anything else openFDA returns.
top_5_device_problemsUp to 5 most frequent product_problems values, most frequent first, as {code_or_text, count}.
top_5_patient_problemsUp to 5 most frequent patient_problems values, same shape.
monthly_trend{month, count} per calendar month across the full window, zero-filled — never skips a quiet month.
report_source_breakdown{manufacturer, user_facility, voluntary, other} report counts, from openFDA's report_source_code (who filed the MDR with FDA). other folds in "Distributor report" and anything unrecognized.
caveatAlways "MAUDE reports are unverified and are not incidence rates".
data_as_ofDate this row's data was current as of.
source_urlsThe openFDA search URL this group's reports were pulled from — narrowed to this one group, so you can spot-check the count directly against openFDA.
partial_datatrue if at least one raw report in this run couldn't be parsed (missing report_number).

Refresh cadence

openFDA republishes its MAUDE data weekly. This Actor queries /device/event live on every run, subject to a 7-day maude-cache on the raw pull (see Tips) — re-running with the same filters inside that window re-uses the cached pull instead of re-querying openFDA, since the underlying source itself only moves weekly.

Pricing / Cost estimation

This Actor uses the pay-per-event pricing model — you pay per summary row returned, not per report or per compute second:

  • summary_returned — charged once per summary row (one per group).

(Event price is configured in Apify Console under this Actor's monetization settings, not in code.)

Free-plan users are capped at 3 summary rows per run. Once that's hit, the Actor stops, sets the status message to Free tier limit reached, and exits normally (not an error). Narrow product_codes/manufacturer_contains/brand_contains or switch group_by to stay under that on the free plan, or upgrade for unlimited rows.

An unfiltered run (no product_codes, manufacturer_contains, or brand_contains) queries the full MAUDE history for the received-date window across every group group_by produces — always set at least one filter.

Tips / Advanced options

  • Set the OPENFDA_API_KEY environment variable (a free key from openFDA) to page through results faster and get a higher openFDA rate limit. Without one, this Actor still works, just at openFDA's lower unauthenticated per-page limit for /device/event.
  • Combine product_codes with a tight received_after/received_before window for the cheapest, fastest runs.
  • Raw /device/event pulls are cached per exact filter combination (product_codes + manufacturer_contains + brand_contains + date window) for 7 days under a maude-cache:* key in this Actor's key-value store. Re-running the same filters inside that window costs nothing extra in openFDA calls; changing any filter creates its own independent cache entry.
  • Switch group_by to manufacturer to see whether an adverse-event pattern is specific to one manufacturer's implementation of a product code, or spread across the whole category.
  • source_urls on every row is a deterministic openFDA query URL for that exact group — reusable outside the Actor to independently verify any row's report count.

FAQ, disclaimers, and support

  • Is this legal? Yes — MAUDE adverse event reports are public FDA records, already de-identified before openFDA exposes them. Data is read directly from openFDA's public API, per its terms of use.
  • This isn't medical or regulatory advice. Per openFDA's own disclaimer, don't rely on this data (or on openFDA) to make decisions regarding medical care. Report counts reflect what was filed, not confirmed causation, and — per the caveat field on every row — are not incidence rates: MAUDE has no denominator of devices in use or patients treated, and the same real-world event can generate multiple reports from different reporters.
  • Known limitations: a MAUDE report can list more than one device; this Actor attributes each report to whichever device entry matches a requested product_codes filter (or the first device entry if none match/no filter is set), so a rare multi-device combination report could be attributed to the "wrong" device for your purposes. manufacturer/brand fields come from the device's own record and can be blank or inconsistently spelled across reports for the same real manufacturer/brand — openFDA does not normalize company or brand names.
  • Found a bug or have a feature request? Use this Actor's Issues tab. Need a custom variant (different groupings, alerting, other openFDA endpoints)? Reach out via the same tab.

Part of the FDA Intel family on Apify:

  • FDA Intel: Device Watchlist — FDA device clearances (510(k)/PMA/De Novo), recalls & enforcement reports, and establishment registrations & listings.
  • FDA Intel: Adverse Event Summaries (this Actor) — MAUDE adverse event report summaries by product code, manufacturer, or brand.