# FDA FAERS Adverse Events (`maximedupre/fda-faers`) Actor

For pharmacovigilance teams, researchers, and data workflows: search public FDA FAERS reports by drug, adverse reaction, manufacturer, or focused openFDA/FAERS query. Filter by dates, countries, seriousness, and patient age or sex, then export structured report details.

- **URL**: https://apify.com/maximedupre/fda-faers.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Business, Developer tools, Education
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.70 / 1,000 adverse-event reports

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### 💊 Search FDA FAERS adverse events

This Actor is for pharmacovigilance teams, researchers, and data teams. Search public FDA FAERS reports by drug, adverse reaction, manufacturer, or one focused openFDA/FAERS query, then get structured report rows with reactions, seriousness, dates, patient details, drug products, and reporter context for safety research.

- Search the **[FAERS Database](https://apify.com/maximedupre/fda-faers/examples/faers-database)** for structured FDA report rows about a drug.
- Find filtered records in the **[FDA FAERS Database](https://apify.com/maximedupre/fda-faers/examples/fda-faers-database)** with date, country, and seriousness choices.
- Look up report-level evidence in the **[Adverse Event Reporting System](https://apify.com/maximedupre/fda-faers/examples/adverse-event-reporting-system)** by using a reaction or side-effect term.
- Search matching report details with the **[MedWatch FDA](https://apify.com/maximedupre/fda-faers/examples/medwatch-fda)** task.
- Review reported reactions and seriousness fields with a **[MedWatch Report](https://apify.com/maximedupre/fda-faers/examples/medwatch-report)** search.

#### 🧾 Report-level FAERS evidence

Each saved dataset row is one matching FDA FAERS report. Rows keep the source report ID and dates, seriousness flags and criteria, available patient and country details, reported and normalized reactions, reported and normalized drug details, and reporter context. Normalized values appear when a mapping is available; missing source values are not invented.

The `result` output is a JSON link with the returned reports, counts, and ranked summaries. FAERS report data is useful for safety research and signal review, but this Actor does not diagnose, give treatment advice, or decide that a drug caused an event.

#### ▶️ Run a focused FAERS search

1. Choose one Target: Drug, Adverse reaction, Manufacturer, or Advanced query.
2. Fill the field for that Target. Use `queryExpression` for one focused openFDA or FAERS query.
3. Add guided filters for received dates, seriousness, countries, patient sex, or patient age when you choose Drug, Adverse reaction, or Manufacturer.
4. Set `Maximum reports`, or leave it empty to return all available results until the source is exhausted.
5. Start the Actor and open the dataset or JSON result after the run.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `target` | string (required) | Chooses one search path: `drug`, `reaction`, `manufacturer`, or `advancedQuery`. |
| `drugValues` | array of strings | Searches matching FAERS reports for one or more drug values. Used only when `target` is `drug`. |
| `reactionTerms` | array of strings | Searches matching reports for one or more adverse-reaction or side-effect terms. Used only when `target` is `reaction`. |
| `manufacturerValues` | array of strings | Searches matching FAERS reports for one or more manufacturer values. Used only when `target` is `manufacturer`. |
| `queryExpression` | string | Sends one focused openFDA or FAERS query expression. Used only when `target` is `advancedQuery`. |
| `receivedDateFrom` | string (date) | Includes reports received on or after this date. Used with guided targets. |
| `receivedDateTo` | string (date) | Includes reports received on or before this date. Used with guided targets. |
| `seriousOnly` | boolean | When `true`, keeps only reports marked serious; when `false`, keeps all matching reports for a guided target. |
| `countries` | array of strings | Matches one or more event or report country names or codes for a guided target. |
| `patientSex` | string | Matches the source patient sex for a guided target. Reports without this source value do not match. |
| `patientAgeMin` | integer | Matches a source patient age at or above this value for a guided target. |
| `patientAgeMax` | integer | Matches a source patient age at or below this value for a guided target. |
| `maxItems` | integer | Actor Work Limit. Stops after this many matching reports. Leave it empty to return all available results until the source is exhausted. |

The form starts with `target` set to `drug`, `drugValues` set to `ibuprofen`, `seriousOnly` set to `false`, and `maxItems` set to `100`. Only the selected Target is used. Guided targets use the shared filters; Advanced query uses its expression and returns reports with summaries.

**Default input example**

This is the public input from a successful hosted default-input run:

```json
{
  "target": "drug",
  "drugValues": [
    "ibuprofen"
  ],
  "seriousOnly": false,
  "maxItems": 100
}
```

#### 🧾 Output

**Actor output links**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | string (URL) | Links to the default dataset that holds the matching FAERS report rows. |
| `result` | string (URL) | Links to JSON with the returned reports, counts, and ranked summaries. |

**Dataset row fields**

Some fields are optional because FDA does not publish every value for every report. The table lists the complete public dataset shape.

| Field | Type | What it does |
| --- | --- | --- |
| `reportId` | string | Source report ID used to find the report again. |
| `reportVersion` | integer | Version number for the source report. |
| `dates` | object | Holds dates tied to the report. |
| `dates.receivedDate` | string (date) | Date FDA received the report. |
| `dates.transmissionDate` | string (date) | Date the source sent the report. |
| `reportType` | string | Type of report recorded by the source. |
| `seriousness` | object | Holds the serious status and available reasons for it. |
| `seriousness.isSerious` | boolean | Says whether the source marks the report as serious. |
| `seriousness.criteria` | object | Holds the seriousness criteria reported by the source. |
| `seriousness.criteria.death` | boolean | Says whether death is a seriousness criterion. |
| `seriousness.criteria.lifeThreatening` | boolean | Says whether a life-threatening event is a seriousness criterion. |
| `seriousness.criteria.hospitalization` | boolean | Says whether hospitalization is a seriousness criterion. |
| `seriousness.criteria.disability` | boolean | Says whether disability is a seriousness criterion. |
| `seriousness.criteria.congenitalAnomaly` | boolean | Says whether a congenital anomaly is a seriousness criterion. |
| `seriousness.criteria.other` | boolean | Says whether another serious event is a seriousness criterion. |
| `patient` | object | Holds available patient details from the report. |
| `patient.age` | number | Patient age as reported by the source. |
| `patient.ageUnit` | string | Unit used for the reported patient age. |
| `patient.ageGroup` | string | Patient age group reported by the source. |
| `patient.sex` | string | Patient sex reported by the source. |
| `patient.weight` | number | Patient weight as reported by the source. |
| `patient.weightUnit` | string | Unit used for the reported patient weight. |
| `patient.onsetDate` | string (date) | Date the patient event began, when reported. |
| `geography` | object | Holds event and report countries from the source. |
| `geography.eventCountry` | string | Country where the event occurred. |
| `geography.reportCountry` | string | Country tied to the primary report source. |
| `reactions` | array of objects | Lists reaction terms and outcomes reported in the report. |
| `reactions[].reportedTerm` | string | Reaction term as reported by the source. |
| `reactions[].normalizedTerm` | string | Human-readable reaction term when a mapping is available. |
| `reactions[].outcome` | string | Outcome reported for the reaction. |
| `drugs` | array of objects | Lists drug products recorded in the report, including the searched product when present. |
| `drugs[].reportedName` | string | Drug name as reported by the source. |
| `drugs[].normalizedName` | string | Human-readable drug name when a mapping is available. |
| `drugs[].brandNames` | array of strings | Lists brand names linked to the drug product. |
| `drugs[].genericNames` | array of strings | Lists generic names linked to the drug product. |
| `drugs[].activeSubstances` | array of strings | Lists active substances linked to the drug product. |
| `drugs[].manufacturer` | object | Holds manufacturer names for the drug product. |
| `drugs[].manufacturer.reportedName` | string | Manufacturer name as reported by the source. |
| `drugs[].manufacturer.normalizedName` | string | Human-readable manufacturer name when a mapping is available. |
| `drugs[].indication` | string | Reason for use reported for the drug product. |
| `drugs[].dose` | string | Dose text reported for the drug product. |
| `drugs[].route` | string | Administration route reported for the drug product. |
| `drugs[].startDate` | string (date) | Date use of the drug product started, when reported. |
| `drugs[].endDate` | string (date) | Date use of the drug product ended, when reported. |
| `reporter` | object | Holds available reporter context for the report. |
| `reporter.country` | string | Country reported for the primary reporter. |
| `reporter.qualification` | string | Qualification of the primary reporter. |
| `reporter.organization` | string | Organization linked to the report sender. |

**Genuine hosted dataset row**

This full row is copied from the successful hosted default-input run for `ibuprofen`:

```json
{
  "reportId": "10004377",
  "reportVersion": 1,
  "dates": {
    "receivedDate": "2014-03-12",
    "transmissionDate": "2014-10-02"
  },
  "reportType": "1",
  "seriousness": {
    "isSerious": true,
    "criteria": {
      "death": false,
      "lifeThreatening": false,
      "hospitalization": false,
      "disability": false,
      "congenitalAnomaly": false,
      "other": true
    }
  },
  "patient": {
    "age": 24,
    "ageUnit": "years",
    "sex": "female"
  },
  "geography": {
    "eventCountry": "GB",
    "reportCountry": "GB"
  },
  "reactions": [
    {
      "reportedTerm": "Hypoaesthesia oral",
      "normalizedTerm": "Hypoaesthesia oral",
      "outcome": "recovered/resolved with sequelae"
    },
    {
      "reportedTerm": "Hypoaesthesia",
      "normalizedTerm": "Hypoaesthesia",
      "outcome": "recovered/resolved with sequelae"
    }
  ],
  "drugs": [
    {
      "reportedName": "IBUPROFEN (UNKNOWN)",
      "normalizedName": "IBUPROFEN (UNKNOWN)",
      "indication": "TOOTHACHE",
      "dose": "UNK",
      "route": "048",
      "startDate": "2014-02-17"
    },
    {
      "reportedName": "AMOXICILLIN",
      "normalizedName": "AMOXICILLIN",
      "brandNames": [
        "AMOXICILLIN"
      ],
      "genericNames": [
        "AMOXICILLIN"
      ],
      "activeSubstances": [
        "AMOXICILLIN"
      ],
      "manufacturer": {
        "reportedName": "Hikma Pharmaceuticals USA Inc.",
        "normalizedName": "Hikma Pharmaceuticals USA Inc."
      },
      "indication": "TOOTH INFECTION",
      "dose": "UNK",
      "route": "065",
      "startDate": "2014-02-14"
    },
    {
      "reportedName": "ORAJEL",
      "normalizedName": "SODIUM FLUORIDE",
      "brandNames": [
        "ORAJEL TOY STORY 5 ANTICAVITY"
      ],
      "genericNames": [
        "SODIUM FLUORIDE"
      ],
      "activeSubstances": [
        "SODIUM FLUORIDE"
      ],
      "manufacturer": {
        "reportedName": "Church & Dwight Co., Inc.",
        "normalizedName": "Church & Dwight Co., Inc."
      },
      "indication": "PRODUCT USED FOR UNKNOWN INDICATION",
      "dose": "UNK",
      "route": "065"
    },
    {
      "reportedName": "PARACETAMOL",
      "normalizedName": "PARACETAMOL",
      "indication": "PRODUCT USED FOR UNKNOWN INDICATION",
      "dose": "UNK",
      "route": "065"
    }
  ],
  "reporter": {
    "country": "GB",
    "qualification": "consumer or other non-health professional",
    "organization": "FDA-Public Use"
  }
}
```

#### 💳 Pricing

**Pricing event**

This Actor uses pay-per-event pricing. The configured event is $0.0007 for each FDA FAERS adverse-event report saved to the dataset. The pricing tab on the Actor page is the current source for price details.

#### 🔌 Integrations

**Run access**

Run the Actor in Apify Console or use the Apify API to read the dataset and JSON result after the run. Use dataset exports or schedules in your workflow.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### What does a matching FAERS report prove?

It is report-level evidence from the FDA FAERS source. It does not prove that a drug caused an event, and this Actor does not provide medical advice, diagnosis, treatment guidance, or causal analysis.

##### Which Target should I choose?

Choose Drug for drug values, Adverse reaction for side-effect terms, Manufacturer for manufacturer values, or Advanced query for one focused openFDA or FAERS query expression. Fields for other Targets are ignored.

##### Can I combine filters with a guided Target?

Yes. A guided search can use received-date, seriousness, country, patient sex, and patient age filters together when the source values are available. Advanced query uses its expression instead of the shared guided filters.

##### What happens if I leave Maximum reports empty?

The Actor returns all available matching results until the source is exhausted. Set a value when you want the run to stop after that many matching reports.

##### Can I search by an adverse reaction or manufacturer?

Yes. Choose Adverse reaction or Manufacturer, then enter one or more values in the matching field. You can also choose Drug for one or more drug values.

##### What is the Advanced query option?

It accepts one focused openFDA or FAERS query expression. Use it when you need a source query that is not covered by the guided Target fields; the result includes reports with summaries.

##### Do I need a login or a source API key?

No. The Actor searches public FDA FAERS data without a buyer-supplied login or source API key.

##### Does this search clinical trials, drug labels, recalls, or devices?

No. This Actor searches drug adverse-event reports in FAERS. It does not replace clinical-trial, label, recall, device, diagnosis, treatment, or causal-analysis tools.

##### Why can a report field be missing?

FDA does not publish every field for every report. Optional values stay absent when the source does not provide them, and normalized values appear only when a mapping is available.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~fda-faers/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [FDA Drug Shortage API](https://apify.com/maximedupre/drug-shortage) — check drug supply status beside patterns found in FAERS reports.
- [ClinicalTrials.gov](https://apify.com/maximedupre/clinicaltrials-gov) — compare trial status and study details with post-market report evidence.
- [FDA Drug Adverse Events & Side Effects (openFDA)](https://apify.com/scrapemint/fda-drug-adverse-events) — review ranked reactions or individual FAERS reports for a drug.
- [OpenFDA Drug Adverse Events Search](https://apify.com/scrupulous_waterbird_m4w/openfda-drug-events) — search normalized FAERS reports by drug, query, or received-date range.
- [openFDA Drug Adverse Events Scraper](https://apify.com/parseforge/openfda-drug-events-scraper) — export FAERS reports by drug, reaction term, or received-date range.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose what to search. This picks one search path for the run.

## `drugValues` (type: `array`):

Enter one or more drug values to find matching FAERS reports. Use this only when Target is Drug; other Target values are ignored.

## `reactionTerms` (type: `array`):

Enter one or more adverse-reaction or side-effect terms. Use this only when Target is Adverse reaction; other Target values are ignored.

## `manufacturerValues` (type: `array`):

Enter one or more manufacturer values to find matching FAERS reports. Use this only when Target is Manufacturer; other Target values are ignored.

## `queryExpression` (type: `string`):

Enter one focused openFDA or FAERS query expression. Use this only when Target is Advanced query; other Target values are ignored. Example: patient.drug.medicinalproduct:"ibuprofen"

## `receivedDateFrom` (type: `string`):

Optional first received date. It includes reports received on or after this date. Use it with Drug, Adverse reaction, or Manufacturer targets.

## `receivedDateTo` (type: `string`):

Optional last received date. It includes reports received on or before this date. Use it with Drug, Adverse reaction, or Manufacturer targets.

## `seriousOnly` (type: `boolean`):

Set to true to return only reports marked serious. Set to false to include all matching reports. Use it with Drug, Adverse reaction, or Manufacturer targets.

## `countries` (type: `array`):

Optional country names or codes. Enter one or more values to match an event or report country. Use them with Drug, Adverse reaction, or Manufacturer targets.

## `patientSex` (type: `string`):

Optional patient sex, such as Male or Female. Reports without this source value do not match. Use it with Drug, Adverse reaction, or Manufacturer targets.

## `patientAgeMin` (type: `integer`):

Optional lower age bound in years. It matches reports with a source age at or above this value. Use it with Drug, Adverse reaction, or Manufacturer targets.

## `patientAgeMax` (type: `integer`):

Optional upper age bound in years. It matches reports with a source age at or below this value. Use it with Drug, Adverse reaction, or Manufacturer targets.

## `maxItems` (type: `integer`):

Optional Actor Work Limit. Stop after this many matching reports. Leave it empty to return all results until the source is exhausted.

## Actor input object example

```json
{
  "target": "drug",
  "drugValues": [
    "ibuprofen"
  ],
  "seriousOnly": false,
  "maxItems": 100
}
```

# Actor output Schema

## `dataset` (type: `string`):

Matching FDA FAERS reports saved in the dataset.

## `result` (type: `string`):

JSON with the returned reports, counts, and ranked summaries.

# 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 = {
    "target": "drug",
    "drugValues": [
        "ibuprofen"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/fda-faers").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 = {
    "target": "drug",
    "drugValues": ["ibuprofen"],
    "maxItems": 100,
}

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

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

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

```

## CLI example

```bash
echo '{
  "target": "drug",
  "drugValues": [
    "ibuprofen"
  ],
  "maxItems": 100
}' |
apify call maximedupre/fda-faers --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/fda-faers"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JOadpXfoBO3S7fXl2/builds/98gvmRpm2zwUEEgzC/openapi.json
