# FDA Medical Device Adverse Event Search (MAUDE) (`ryanclinton/fda-device-events`) Actor

Search the FDA's **MAUDE database of 24 million+ medical device adverse event reports** — including malfunctions, injuries, and deaths. Filter by device name, manufacturer, product code, event type, report number, or date range.

- **URL**: https://apify.com/ryanclinton/fda-device-events.md
- **Developed by:** [ryan clinton](https://apify.com/ryanclinton) (community)
- **Categories:** Other, AI
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$30.00 / 1,000 result returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## FDA Medical Device Adverse Event Search (MAUDE)

Search the FDA's **MAUDE database of 24 million+ medical device adverse event reports** — including malfunctions, injuries, and deaths. Filter by device name, manufacturer, product code, event type, report number, or date range. Each result includes full event narratives, patient demographics, device details, and manufacturer responses.

No API key required. Just enter a device name like `pacemaker` or a product code like `NKE` and get back structured adverse event data in seconds.

### Why Use FDA Medical Device Adverse Event Search?

The MAUDE (Manufacturer and User Facility Device Experience) database is the FDA's primary source of postmarket surveillance data for medical devices — but navigating it means constructing complex openFDA API queries, handling nested JSON with device/patient/narrative arrays, and paginating through thousands of results. This actor handles all of that: query construction, pagination (up to 1,000 results), flattening of deeply nested response structures, extraction of event narratives from MDR text arrays, and conversion of raw flag codes to human-readable values — giving you clean, structured JSON ready for analysis.

### Features

- **Device name search** — find reports by brand name or generic name (e.g., "pacemaker", "hip implant", "insulin pump", "ventilator")
- **Manufacturer lookup** — search by device manufacturer (e.g., "Medtronic", "Boston Scientific", "Stryker", "Abbott")
- **Product code filtering** — use FDA's three-letter codes for precise device-type targeting (e.g., "NKE" for pacemakers, "DQA" for pulse oximeters)
- **Event type filtering** — narrow by severity: Death, Injury, Malfunction, or Other
- **Report number lookup** — retrieve a specific MDR report by its unique number
- **Date range filtering** — search by event date, FDA received date, or report date in YYYY-MM-DD format
- **Adverse event flag** — optionally filter to only reports flagged as adverse events (excludes product-problem-only reports)
- **Full narrative extraction** — extracts event descriptions, manufacturer evaluation summaries, and additional narratives from MDR text arrays
- **Patient demographics** — includes patient age, sex, outcomes, and reported problems when available
- **Device detail flattening** — flattens nested device arrays into a single record with brand name, generic name, model number, catalog number, lot number, UDI, and manufacturer address
- **Summary statistics** — automatic event type breakdown, patient outcome tallies, and top 10 patient problems logged at the end of each run
- **Retry with backoff** — built-in exponential backoff for API rate limits and transient errors

### How to Use

1. **Enter search criteria** — provide at least one filter: device name, manufacturer, product code, event type, report number, date range, or adverse event flag.

2. **Set the result limit** — choose how many reports to return (1–1,000). The default is 100. The openFDA API caps results at 1,000 per query.

3. **Run and download** — click "Start" and wait for the run to complete (typically 5–30 seconds depending on result count). Download the structured JSON dataset.

4. **Review summary stats** — check the run log for automatic summary statistics including event type breakdown, patient outcomes, and top patient problems.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `deviceName` | String | No* | — | Device name search — searches both brand and generic name fields |
| `manufacturer` | String | No* | — | Manufacturer name (e.g., "Medtronic", "Boston Scientific") |
| `productCode` | String | No* | — | FDA three-letter product code (e.g., "NKE", "DQA") |
| `eventType` | Select | No | All | Event severity: Death, Injury, Malfunction, Other, No Answer Provided |
| `reportNumber` | String | No* | — | Specific MDR report number (e.g., "2124215-2024-33357") |
| `dateFrom` | String | No | — | Start of date range (YYYY-MM-DD) |
| `dateTo` | String | No | — | End of date range (YYYY-MM-DD) |
| `dateField` | Select | No | `date_of_event` | Which date field to filter: Date of Event, Date Received, or Report Date |
| `adverseEventOnly` | Boolean | No | `false` | Only return reports flagged as adverse events |
| `maxResults` | Integer | No | `100` | Maximum reports to return (1–1,000) |

*At least one search parameter is required.

#### Input Examples

**Find all pacemaker adverse events:**

```json
{
    "deviceName": "pacemaker",
    "maxResults": 100
}
````

**Device deaths reported in 2024:**

```json
{
    "eventType": "Death",
    "dateFrom": "2024-01-01",
    "dateTo": "2024-12-31",
    "dateField": "date_received",
    "maxResults": 500
}
```

**Look up a specific MDR report:**

```json
{
    "reportNumber": "2124215-2024-33357"
}
```

**Boston Scientific malfunctions for CRT-P devices:**

```json
{
    "manufacturer": "Boston Scientific",
    "productCode": "NKE",
    "eventType": "Malfunction",
    "maxResults": 200
}
```

**All insulin pump injuries since 2023:**

```json
{
    "deviceName": "insulin pump",
    "eventType": "Injury",
    "dateFrom": "2023-01-01",
    "dateField": "date_of_event",
    "maxResults": 500
}
```

**Medtronic adverse events only (excludes product-problem-only reports):**

```json
{
    "manufacturer": "Medtronic",
    "adverseEventOnly": true,
    "dateFrom": "2024-01-01",
    "maxResults": 1000
}
```

**Hip implant events received by FDA in Q1 2024:**

```json
{
    "deviceName": "hip implant",
    "dateFrom": "2024-01-01",
    "dateTo": "2024-03-31",
    "dateField": "date_received",
    "maxResults": 500
}
```

#### Input Tips

- Use `productCode` for the most precise device-type filtering. The FDA maintains thousands of three-letter codes — search the [FDA Product Classification Database](https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpcd/classification.cfm) to find the right code.
- Set `dateField` to `date_received` for the most consistent date filtering — `date_of_event` can be blank or approximate on many reports.
- Combine `manufacturer` + `productCode` + date range to track a specific company's device problems over time.
- Set `adverseEventOnly` to `true` to exclude product-problem-only reports and focus on events that affected patients.
- For large result sets, partition your search using date ranges to stay within the 1,000 result limit.
- Device name searches match both `brand_name` and `generic_name` fields, so "pacemaker" will find any report where either field contains that term.

### Output

Each adverse event report includes:

```json
{
    "reportNumber": "2124215-2024-33357",
    "eventType": "Malfunction",
    "dateOfEvent": "2024-05-07",
    "dateReceived": "2024-06-02",
    "reportDate": "2024-06-02",
    "adverseEvent": false,
    "productProblem": true,
    "reportSource": "Manufacturer report",
    "manufacturerReportType": "Thirty-Day",
    "typeOfReport": ["Initial submission"],
    "remedialAction": [],
    "productProblems": ["Defective Device"],
    "brandName": "VISIONIST X4 CRT-P",
    "genericName": "CARDIAC RESYNCHRONIZATION THERAPY PACEMAKER (CRT-P)",
    "manufacturer": "BOSTON SCIENTIFIC CORPORATION",
    "manufacturerCity": "SAINT PAUL",
    "manufacturerState": "MN",
    "manufacturerCountry": "US",
    "modelNumber": "U228",
    "catalogNumber": "U228",
    "lotNumber": "775309",
    "productCode": "NKE",
    "deviceOperator": "LAY USER/PATIENT",
    "isImplant": false,
    "isCombinationProduct": false,
    "udiNumber": "00802526559471",
    "deviceClass": "3",
    "regulationNumber": null,
    "pmaPmnNumber": "P030005/S138",
    "patientAge": "76 YR",
    "patientSex": "Male",
    "patientOutcome": [],
    "patientProblems": ["No Clinical Signs, Symptoms or Conditions"],
    "eventDescription": "IT WAS REPORTED THAT THE PATIENT WITH THIS CARDIAC RESYNCHRONIZATION THERAPY PACEMAKER (CRT-P) WAS EXPERIENCING PULSE DRIFTING HIGH AND INCONSISTENT...",
    "manufacturerNarrative": "",
    "additionalNarrative": "IF INFORMATION IS PROVIDED IN THE FUTURE, A SUPPLEMENTAL REPORT WILL BE ISSUED."
}
```

#### Output Fields

| Field | Type | Description |
|-------|------|-------------|
| `reportNumber` | String | Unique MDR report number |
| `eventType` | String | Severity: Death, Injury, Malfunction, or Other |
| `dateOfEvent` | String | Date the event occurred (YYYY-MM-DD) |
| `dateReceived` | String | Date FDA received the report (YYYY-MM-DD) |
| `reportDate` | String | Date the report was filed (YYYY-MM-DD) |
| `adverseEvent` | Boolean | Whether flagged as an adverse event |
| `productProblem` | Boolean | Whether flagged as a product problem |
| `reportSource` | String | Source of the report (e.g., "Manufacturer report") |
| `manufacturerReportType` | String | Report timing: Initial, Thirty-Day, Five-Day, etc. |
| `typeOfReport` | String\[] | Submission type(s): Initial, Supplemental, etc. |
| `remedialAction` | String\[] | Actions taken: Recall, Repair, Replace, Relabeling, etc. |
| `productProblems` | String\[] | FDA problem codes (e.g., "Defective Device", "Battery Failure") |
| `brandName` | String | Commercial brand name of the device |
| `genericName` | String | Generic/common device name |
| `manufacturer` | String | Device manufacturer name |
| `manufacturerCity` | String | Manufacturer city |
| `manufacturerState` | String | Manufacturer state (US two-letter code) |
| `manufacturerCountry` | String | Manufacturer country code |
| `modelNumber` | String | Device model number |
| `catalogNumber` | String | Device catalog/reference number |
| `lotNumber` | String | Manufacturing lot number |
| `productCode` | String | FDA three-letter product classification code |
| `deviceOperator` | String | Who was operating the device (e.g., "Health Professional", "Lay User/Patient") |
| `isImplant` | Boolean | Whether the device is an implant |
| `isCombinationProduct` | Boolean | Whether the device is a drug/device combination product |
| `udiNumber` | String | Unique Device Identifier (UDI) |
| `deviceClass` | String / null | FDA device classification (1, 2, or 3) |
| `regulationNumber` | String / null | CFR regulation number |
| `pmaPmnNumber` | String | Associated PMA or 510(k) clearance number |
| `patientAge` | String | Patient age at time of event (e.g., "76 YR") |
| `patientSex` | String | Patient sex: Male, Female, or Unknown |
| `patientOutcome` | String\[] | Patient outcomes: Death, Hospitalization, Life Threatening, etc. |
| `patientProblems` | String\[] | Patient-reported problems/symptoms |
| `eventDescription` | String | Full narrative description of the event |
| `manufacturerNarrative` | String | Manufacturer's evaluation summary |
| `additionalNarrative` | String | Additional manufacturer narrative/follow-up |

#### Event Types

| Event Type | Description |
|------------|-------------|
| Death | Patient death associated with the device |
| Injury | Patient injury associated with the device |
| Malfunction | Device malfunction with or without patient impact |
| Other | Events that don't fit the above categories |

#### Patient Outcome Codes

| Outcome | Description |
|---------|-------------|
| Death | Patient died |
| Hospitalization | Patient was hospitalized or hospitalization was prolonged |
| Life Threatening | Event was life threatening |
| Disability | Event resulted in permanent impairment or disability |
| Required Intervention | Required medical or surgical intervention to prevent permanent impairment |
| Other | Other serious outcome |

### Use Cases

- **Postmarket surveillance teams** monitoring adverse events for their own devices to detect emerging safety signals and meet FDA reporting obligations
- **Regulatory affairs professionals** researching adverse event history for a device type before filing a 510(k) or PMA submission
- **Medical device companies** tracking competitor device problems to identify market opportunities and assess competitive risks
- **Healthcare attorneys** building product liability cases by searching for specific device malfunctions, injuries, and deaths with full event narratives
- **Clinical researchers** analyzing device safety profiles across patient demographics, outcomes, and problem types for peer-reviewed publications
- **Hospital risk management** evaluating device safety records before making procurement decisions — cross-reference brand names, manufacturers, and event types
- **Healthcare investors** assessing device safety risk as part of due diligence for medical device company investments
- **Journalists and patient advocates** investigating patterns of device failures, injuries, and deaths across manufacturers

### How to Use the API

#### Python

```python
import requests
import time

run = requests.post(
    "https://api.apify.com/v2/acts/ryanclinton~fda-device-events/runs",
    params={"token": "YOUR_APIFY_TOKEN"},
    json={
        "deviceName": "pacemaker",
        "eventType": "Death",
        "dateFrom": "2024-01-01",
        "maxResults": 100
    },
    timeout=30,
).json()

run_id = run["data"]["id"]
while True:
    status = requests.get(
        f"https://api.apify.com/v2/actor-runs/{run_id}",
        params={"token": "YOUR_APIFY_TOKEN"},
        timeout=10,
    ).json()
    if status["data"]["status"] in ("SUCCEEDED", "FAILED", "ABORTED"):
        break
    time.sleep(3)

dataset_id = status["data"]["defaultDatasetId"]
items = requests.get(
    f"https://api.apify.com/v2/datasets/{dataset_id}/items",
    params={"token": "YOUR_APIFY_TOKEN"},
    timeout=30,
).json()

for item in items:
    print(f"{item['reportNumber']} | {item['eventType']} | {item['brandName']} | {item['manufacturer']}")
```

#### JavaScript

```javascript
const response = await fetch(
    "https://api.apify.com/v2/acts/ryanclinton~fda-device-events/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN",
    {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
            deviceName: "pacemaker",
            eventType: "Death",
            dateFrom: "2024-01-01",
            maxResults: 100,
        }),
    }
);

const events = await response.json();
events.forEach(e =>
    console.log(`${e.reportNumber} | ${e.eventType} | ${e.brandName} | ${e.manufacturer}`)
);
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~fda-device-events/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "deviceName": "pacemaker",
    "eventType": "Death",
    "dateFrom": "2024-01-01",
    "maxResults": 100
  }'
```

### How It Works

```
Input (deviceName, manufacturer, productCode, eventType, dates, filters)
  │
  ▼
┌──────────────────────────────────────────────────┐
│  Step 1: Build Search Query                      │
│  Construct openFDA Lucene-style query string     │
│  from input parameters. Device name searches     │
│  both brand_name and generic_name with OR.       │
│  Date ranges converted to YYYYMMDD for API.      │
│  Terms joined with +AND+ conjunction.            │
└──────────────────────────────────────────────────┘
  │
  ▼
┌──────────────────────────────────────────────────┐
│  Step 2: Paginated Fetch                         │
│  Fetch up to 100 results per request using       │
│  skip/limit pagination. Continue until           │
│  maxResults reached or no more results.          │
│  Retry with exponential backoff on 429/errors.   │
└──────────────────────────────────────────────────┘
  │
  ▼
┌──────────────────────────────────────────────────┐
│  Step 3: Flatten & Transform                     │
│  Flatten nested device[0], patient[0] arrays     │
│  into a single record. Extract brand name,       │
│  manufacturer, model, UDI from device array.     │
│  Extract age, sex, outcomes from patient array.  │
│  Convert Y/N flags to boolean values.            │
└──────────────────────────────────────────────────┘
  │
  ▼
┌──────────────────────────────────────────────────┐
│  Step 4: Extract Narratives                      │
│  Parse mdr_text array to extract event           │
│  descriptions, manufacturer evaluation           │
│  summaries, and additional narratives by         │
│  matching text_type_code values.                 │
└──────────────────────────────────────────────────┘
  │
  ▼
┌──────────────────────────────────────────────────┐
│  Step 5: Summary Statistics                      │
│  Tally event types (Death/Injury/Malfunction).   │
│  Count patient outcomes. Rank top 10 patient     │
│  problems. Log summary to run output.            │
└──────────────────────────────────────────────────┘
  │
  ▼
Structured adverse event records pushed to dataset
```

#### Data Sources

| Source | API Endpoint | Auth Required | Records |
|--------|-------------|---------------|---------|
| FDA openFDA MAUDE | `https://api.fda.gov/device/event.json` | No | 24M+ |

#### Common Product Codes

| Code | Device Category | Code | Device Category |
|------|----------------|------|----------------|
| NKE | Pacemakers (CRT-P) | DQA | Pulse Oximeters |
| LWS | Defibrillators (ICD) | DXN | ECG/EKG Systems |
| DTB | Prosthetic Hips | OEI | Ultrasound Systems |
| KGO | Breast Implants | FRN | Insulin Pumps |
| JAX | Intravascular Catheters | QAS | AI/ML Software (CAD) |

### How Much Does It Cost?

| Scenario | Results | Est. Time | Est. Cost |
|----------|---------|-----------|-----------|
| Single report lookup | 1 | 3 sec | < $0.001 |
| Device name search (100 results) | 100 | 10 sec | < $0.01 |
| Full manufacturer + year (1,000 results) | 1,000 | 30 sec | ~$0.02 |

The actor uses 256 MB memory and makes lightweight API calls with no browser rendering, keeping compute costs minimal. The Apify free tier covers thousands of runs per month.

### Tips

- **Use product codes for precision** — device name searches are broad. Product codes target exact device categories. Look up codes in the [FDA Product Classification Database](https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpcd/classification.cfm).
- **Filter by `date_received` for reliability** — the `date_of_event` field is often blank or approximate on many MAUDE reports. `date_received` is always populated and is the most reliable date field.
- **Combine event type + manufacturer + date** — track a specific manufacturer's injury or death reports over time to identify emerging safety signals.
- **Set adverseEventOnly for patient-impact focus** — this excludes product-problem-only reports (malfunctions with no patient effect), letting you focus on events that actually harmed patients.
- **Read the event narratives** — the `eventDescription` field contains the full free-text description of what happened. These narratives often reveal details not captured in the structured fields.
- **Partition large searches by date** — the openFDA API caps at 1,000 results per query. Split multi-year searches into monthly or quarterly date ranges.
- **Cross-reference with 510(k) data** — use the `pmaPmnNumber` field to look up the device's original clearance record in the FDA 510(k) actor.

### Limitations

- **1,000 result cap** — the openFDA API limits results to 1,000 per query. Use date range partitioning for larger datasets.
- **Reporting bias** — MAUDE is a passive surveillance system. Not all adverse events are reported, and reporting rates vary by manufacturer, event severity, and device type.
- **First device only** — when a report lists multiple devices, the actor extracts data from the first device in the array. Multi-device events may have incomplete device information.
- **First patient only** — similarly, when a report lists multiple patients, only the first patient's demographics and outcomes are extracted.
- **Narrative quality varies** — event descriptions range from detailed clinical accounts to brief one-line summaries depending on the reporter.
- **Date gaps** — `dateOfEvent` is frequently blank or approximate, especially for older reports. Use `dateReceived` for the most reliable date filtering.
- **openFDA enrichment coverage** — `deviceClass` and `regulationNumber` come from openFDA's enrichment layer and may be null for some records, particularly older ones.
- **Rate limiting** — the openFDA API enforces rate limits. The actor handles this automatically with exponential backoff, but rapid sequential runs may experience delays.

### Responsible Use

- **All data is public domain** — FDA MAUDE data is published by the US government and is freely available without restrictions.
- **Respect openFDA rate limits** — the actor includes built-in retry with backoff. Avoid launching dozens of concurrent runs against the same API endpoint.
- **Context matters** — a MAUDE report does not prove that a device caused an adverse event. Reports describe associations, not confirmed causal relationships. Always consider the clinical context.
- **Verify critical decisions** — for regulatory submissions, legal proceedings, or clinical decisions, always verify data against the official [FDA MAUDE database](https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfmaude/search.cfm).
- **Patient privacy** — while MAUDE reports are public, they may describe sensitive medical situations. Handle data respectfully.

### FAQ

**Is an API key required?**
No. The openFDA API is free and does not require authentication.

**How current is the data?**
The MAUDE database is updated regularly by the FDA. New reports typically appear within weeks of submission. The database contains reports from 1991 to present.

**What is the difference between "adverse event" and "product problem"?**
An adverse event means the device was associated with a patient injury, death, or serious health consequence. A product problem means the device malfunctioned or had a defect, but may not have harmed anyone. A single report can be flagged as both.

**Why are some event descriptions empty?**
Not all report sources include narrative descriptions. Voluntary reports from healthcare professionals and patients are less likely to include detailed narratives than mandatory manufacturer reports.

**Can I find reports for a specific device model?**
The openFDA API does not support direct model number search. Search by manufacturer and product code, then filter results by `modelNumber` in the output.

**What does "Thirty-Day" mean in manufacturerReportType?**
FDA requires manufacturers to report most device-related adverse events within 30 calendar days (Thirty-Day reports). More serious events require 5-day reports. "Initial" means the first report filed.

**How far back does the data go?**
The MAUDE database contains reports from 1991 to present — over 30 years of medical device adverse event data.

**Why do some reports show adverseEvent: false but eventType: "Injury"?**
The `adverseEvent` flag and `eventType` are independently reported fields. The event type describes the nature of the report, while the adverse event flag specifically indicates whether the FDA considers it an adverse event. Discrepancies occur due to reporting conventions.

**Can I search for events related to a specific PMA or 510(k) number?**
Not directly through this actor's input. However, the output includes the `pmaPmnNumber` field, so you can search by manufacturer and product code, then filter results by the PMA/510(k) number in the output.

### Integrations

- **Apify API** — trigger runs programmatically and retrieve results as JSON for postmarket surveillance pipelines
- **Zapier** — automatically search for new adverse events when a device is added to your monitoring list
- **Make (Integromat)** — build workflows that check for new death or injury reports weekly and alert your safety team
- **Google Sheets** — export adverse event data directly for trend analysis and safety reviews
- **Webhooks** — receive event data as soon as the run completes for real-time safety monitoring
- **Scheduled Runs** — run daily or weekly to monitor new adverse events for your device portfolio

### Related Actors

| Actor | What it does | Use with MAUDE |
|-------|-------------|----------------|
| [FDA 510(k) Device Clearance Search](https://apify.com/ryanclinton/fda-510k-clearances) | Search 174K+ device clearances | Cross-reference cleared devices with their adverse event history |
| [FDA Medical Device Recall Search](https://apify.com/ryanclinton/fda-device-recalls) | Search FDA device recalls | Find recalls triggered by adverse events for a device |
| [openFDA Drug Event Monitor](https://apify.com/ryanclinton/openfda-drug-events) | FDA drug adverse events | Companion for combination products (drug + device) |
| [FDA Food Recall Monitor](https://apify.com/ryanclinton/fda-food-recall-monitor) | FDA food recall data | Complete FDA safety data coverage |
| [Clinical Trial Tracker](https://apify.com/ryanclinton/clinical-trial-tracker) | ClinicalTrials.gov search | Find trials launched in response to adverse event signals |
| [SEC EDGAR Filing Analyzer](https://apify.com/ryanclinton/sec-edgar-filing-analyzer) | SEC filing analysis | Research financial impact of adverse events on public device companies |

# Actor input Schema

## `deviceName` (type: `string`):

Search by device brand or generic name (e.g., 'pulse oximeter', 'hip implant', 'insulin pump')

## `manufacturer` (type: `string`):

Search by device manufacturer name (e.g., 'Medtronic', 'Abbott', 'Stryker')

## `productCode` (type: `string`):

Three-letter FDA product classification code (e.g., 'DQA' for pulse oximeters, 'NKE' for pacemakers)

## `eventType` (type: `string`):

Filter by severity of the adverse event

## `reportNumber` (type: `string`):

Look up a specific MDR report by number

## `dateFrom` (type: `string`):

Start date for event date range (YYYY-MM-DD format)

## `dateTo` (type: `string`):

End date for event date range (YYYY-MM-DD format)

## `dateField` (type: `string`):

Which date to filter on

## `adverseEventOnly` (type: `boolean`):

Only return reports flagged as adverse events (excludes product-problem-only reports)

## `maxResults` (type: `integer`):

Maximum number of event reports to return (openFDA limit: 1000 per query)

## Actor input object example

```json
{
  "deviceName": "pulse oximeter",
  "eventType": "",
  "dateField": "date_of_event",
  "adverseEventOnly": false,
  "maxResults": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "deviceName": "pulse oximeter"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ryanclinton/fda-device-events").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "deviceName": "pulse oximeter" }

# Run the Actor and wait for it to finish
run = client.actor("ryanclinton/fda-device-events").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "deviceName": "pulse oximeter"
}' |
apify call ryanclinton/fda-device-events --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ryanclinton/fda-device-events",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "FDA Medical Device Adverse Event Search (MAUDE)",
        "description": "Search the FDA's **MAUDE database of 24 million+ medical device adverse event reports** — including malfunctions, injuries, and deaths. Filter by device name, manufacturer, product code, event type, report number, or date range.",
        "version": "1.0",
        "x-build-id": "aMi0E1G8Svejbxbnd"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ryanclinton~fda-device-events/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ryanclinton-fda-device-events",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ryanclinton~fda-device-events/runs": {
            "post": {
                "operationId": "runs-sync-ryanclinton-fda-device-events",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ryanclinton~fda-device-events/run-sync": {
            "post": {
                "operationId": "run-sync-ryanclinton-fda-device-events",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "deviceName": {
                        "title": "Device Name",
                        "type": "string",
                        "description": "Search by device brand or generic name (e.g., 'pulse oximeter', 'hip implant', 'insulin pump')"
                    },
                    "manufacturer": {
                        "title": "Manufacturer",
                        "type": "string",
                        "description": "Search by device manufacturer name (e.g., 'Medtronic', 'Abbott', 'Stryker')"
                    },
                    "productCode": {
                        "title": "FDA Product Code",
                        "type": "string",
                        "description": "Three-letter FDA product classification code (e.g., 'DQA' for pulse oximeters, 'NKE' for pacemakers)"
                    },
                    "eventType": {
                        "title": "Event Type",
                        "enum": [
                            "",
                            "Death",
                            "Injury",
                            "Malfunction",
                            "Other",
                            "No answer provided"
                        ],
                        "type": "string",
                        "description": "Filter by severity of the adverse event",
                        "default": ""
                    },
                    "reportNumber": {
                        "title": "Report Number",
                        "type": "string",
                        "description": "Look up a specific MDR report by number"
                    },
                    "dateFrom": {
                        "title": "Date From",
                        "type": "string",
                        "description": "Start date for event date range (YYYY-MM-DD format)"
                    },
                    "dateTo": {
                        "title": "Date To",
                        "type": "string",
                        "description": "End date for event date range (YYYY-MM-DD format)"
                    },
                    "dateField": {
                        "title": "Date Field",
                        "enum": [
                            "date_of_event",
                            "date_received",
                            "date_report"
                        ],
                        "type": "string",
                        "description": "Which date to filter on",
                        "default": "date_of_event"
                    },
                    "adverseEventOnly": {
                        "title": "Adverse Events Only",
                        "type": "boolean",
                        "description": "Only return reports flagged as adverse events (excludes product-problem-only reports)",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Maximum Results",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of event reports to return (openFDA limit: 1000 per query)",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
