# openFDA API — $0.0004 per report

> openFDA API: Drug adverse-event reports from the FDA FAERS database — drugs, reactions. $0.0004 per delivered report, nothing delivered means nothing charged.

[Home](https://quanticdata.io/)/[Collectors](https://quanticdata.io/collectors/)/*openFDA API*

# openFDA API

An openFDA API reads the FDA's FAERS adverse-event reporting system and returns one row per safety report: the report id, whether it was flagged serious and why, the drugs named, the reactions as MedDRA terms, the patient's reported sex and age, the country and the received date. Pass a drug name, or openFDA's own field:value query syntax, and it stays keyless.

[Get my free API key](https://app.quanticdata.io/register) [See the request](/collectors/fda-api/#integration)

$0.0004 per delivered report · $2 free every month · Failed runs never billed

POST /v1/scraper/collectors/openfda/run

```
$ curl $QD/openfda/run \
    -H "Authorization: Bearer $QD_API_KEY" \
    -d '{"query": "ibuprofen", "max_results": 50}'
{ "status": "done", "count": 50,
  "results": [
    {
      "report_id": "…",
      "serious": false,
      "serious_reasons": […],
      "drugs": […] } ],
  "cost": 0.02 }
# 50 reports × $0.0004 · nothing delivered, nothing charged
```

**$0.0004 / report**5,000 reports on the free $2 every month

**Semantic input**query, max_results — no URL lists

**Up to 500**reports per run, pagination handled for you

**No browser**read over HTTP/TLS — cheaper and faster than rendering

On this page: [What it is](/collectors/fda-api/#what) [Output fields](/collectors/fda-api/#output) [Inputs](/collectors/fda-api/#input) [Pricing](/collectors/fda-api/#pricing) [Integration](/collectors/fda-api/#integration) [Use cases](/collectors/fda-api/#use-cases) [Versus the alternatives](/collectors/fda-api/#compare) [FAQ](/collectors/fda-api/#faq)

## What an openFDA API does

A FAERS report is deeply nested — it holds an array of drugs, each its own sub-record, and an array of reactions coded to MedDRA. This pulls the medicinal product names and the reaction terms up to the top level as plain arrays, so a report reads as one flat row rather than a tree you traverse per drug and per reaction.

The seriousness flag and its reasons — death, hospitalization, life-threatening — are what most safety analysis keys on, and openFDA spreads them across separate boolean columns. Here they collapse into a single serious flag plus a reasons array, so a corpus can be filtered down to serious events without decoding each individual marker.

Input is meaning, not a URL *query* *max_results*

## What one report looks like

Every delivered report carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.

| Field | Type | What it holds |
| --- | --- | --- |
| `rank` | integer | 1-based position. |
| `report_id` | string | FAERS safety report id. |
| `serious` | boolean | Whether the report is flagged serious. |
| `serious_reasons` | string[] | Death, hospitalization, life-threatening… |
| `drugs` | string[] | Reported medicinal products. |
| `reactions` | string[] | Reactions (MedDRA terms). |
| `patient_sex` | string · nullable | male/female when reported. |
| `patient_age` | string · nullable | Patient age as reported. |
| `country` | string · nullable | Country of occurrence. |
| `received_date` | string · nullable | Received date (ISO). |
| `report_type` | string · nullable | Report type code. |

## Inputs

The whole request. Anything you leave out falls back to the default shown in the catalog.

| Input | Type | Required | What it does |
| --- | --- | --- | --- |
| `query` | string | yes | A drug name, or an openFDA field:value query. |
| `max_results` | integer | no | How many reports to deliver at most (1–500). You pay only for delivered reports. |

Pricing

## openFDA API pricing

$0.0004 per delivered report. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 5,000 reports before you spend anything.

**$0.0004**per delivered report*$0.4 per 1,000 delivered reports*

**5,000 reports**on the free allowance*$2 every month, no card*

**Zero rows**zero charge*blocks, captchas and retries are on us*

**−30%**on volume tiers*the catalog returns your key's price*

### Pay as you go

$0/mo

- $2 free credit / month

- 60 requests / min

- List unit prices

### Starter

$19/mo

- $15 free credit / month

- 300 requests / min

- 10% off unit prices

Most popular

### Growth

$79/mo

- $50 free credit / month

- 600 requests / min

- 20% off unit prices

### Scale

$299/mo

- $250 free credit / month

- 1,200 requests / min

- 30% off unit prices

Same wallet, same key and same $2 monthly allowance as every other [Data API](https://quanticdata.io/web-data-api-for-ai/). Prices are launch pricing read live from the billing config — `GET /v1/scraper/collectors` returns the price your key actually pays.

Integration

## One POST, typed rows

Base URL `https://api.quanticdata.io/v1`, Bearer auth, the same key as every other Data API. Endpoint: `POST /v1/scraper/collectors/openfda/run`.

```
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/openfda/run \
  -H "Authorization: Bearer $QD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"ibuprofen","max_results":50}'
```

```
import requests

r = requests.post(
    "https://api.quanticdata.io/v1/scraper/collectors/openfda/run",
    headers={"Authorization": f"Bearer {QD_API_KEY}"},
    json={
        "query": "ibuprofen",
        "max_results": 50
    },
    timeout=120,
)
for row in r.json()["payload"]["results"]:
    print(row)
```

```
const res = await fetch(
  "https://api.quanticdata.io/v1/scraper/collectors/openfda/run",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.QD_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({"query":"ibuprofen","max_results":50}),
  },
);
const { payload } = await res.json();
console.table(payload.results);
```

```
claude mcp add quantumproxies \
  -e QUANTUMPROXIES_API_KEY=qd_live_your_key_here \
  -- npx -y quantumproxies-mcp

# then, in the chat:
> run the openfda collector with query="ibuprofen" and max_results=50
```

## What people build with the openFDA API

Three shapes of work this endpoint was designed around.

### Pharmacovigilance datasets

Pull every report naming a drug and each arrives with its reactions and seriousness already extracted, building a signal table instead of a stack of nested reports.

### Reaction frequency analysis

The MedDRA reactions array lets you count which adverse events recur for a product, sliced by patient sex, age or country from the same row.

### Drug safety monitoring

Query a medicinal product on a schedule and watch new serious reports enter the feed, each one carrying the reason it was flagged.

## openFDA API versus rolling your own

The differences that actually cost time when you build this in-house.

|  | DIY scraper | This collector |
| --- | --- | --- |
| Report shape | Drugs and reactions in per-item nested arrays | Products and MedDRA terms as top-level arrays |
| Seriousness | Separate boolean columns to decode | One serious flag plus a reasons array |
| Query | Build the field:value string by hand | A plain drug name, or the field syntax when you want it |

## FAQ

Questions we get about the openFDA API.

[Something else? Ask us →](mailto:hello@quanticdata.io)

### Do I need a key for openFDA?

No. This reads openFDA keyless, so you send a drug name or a field query and get FAERS rows back without registering an API key first.

### Can I use openFDA's field:value query syntax?

Yes. Pass a plain drug name for the common case, or a query like `patient.reaction.reactionmeddrapt:headache` when you want to search a specific FAERS field directly.

### What does the serious flag mean?

It is the report's own seriousness marker; when it is true, the `serious_reasons` array says why — death, hospitalization, life-threatening and so on — so a dataset can be filtered to serious events while keeping the reason.

### Is there a free openFDA API?

Every account gets $2 of credit every month with no card, which is about 5,000 delivered reports on this endpoint at $0.0004 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.

### How much does one run cost?

Multiply the rows you actually receive by $0.0004. A run capped at 500 reports — the maximum for this collector — costs $0.2 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and `GET /v1/scraper/collectors` returns the price your key actually pays.

## Run the openFDA API now

$2 of free credit every month, no card. Your key returns its own prices from `GET /v1/scraper/collectors`.

[Get my free API key](https://app.quanticdata.io/register)

Related: [All 65 collectors](https://quanticdata.io/collectors/) [Clinical trials API](https://quanticdata.io/collectors/clinical-trials-api/) [Wikidata API](https://quanticdata.io/collectors/wikidata-api/) [Company Data API](https://quanticdata.io/collectors/company-data-api/) [Documentation](https://quanticdata.io/docs/)

---

Source: https://quanticdata.io/collectors/fda-api/ · Site index for AI: https://quanticdata.io/llms.txt
