# Clinical Trials + FDA Drug Data & Recalls (`ninja.dev/clinical-trials-fda-drugs-recalls`) Actor

Search ClinicalTrials.gov by condition, drug, sponsor, phase, status and location, get FDA drug profiles (label, boxed warning, adverse event counts, top reactions, recalls) and FDA recalls for drugs, devices and food. Official U.S. government APIs, clean JSON, no login.

- **URL**: https://apify.com/ninja.dev/clinical-trials-fda-drugs-recalls.md
- **Developed by:** [Matheus Coelho](https://apify.com/ninja.dev) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 clinical trials

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Clinical Trials + FDA Drugs & Recalls

One Actor for the three U.S. health datasets people ask for most, as clean JSON:

1. **Clinical trials** from ClinicalTrials.gov: search by condition, drug, sponsor, phase, status and site location.
2. **FDA drug profiles** from openFDA: label highlights, boxed warning, adverse event report counts, the most reported reactions and recall history, for any brand or generic name.
3. **FDA recalls** for drugs, medical devices and food: search by product, company or reason (listeria, peanut, insulin pump...), filter by class and date.

Data comes straight from the official U.S. government APIs (National Library of Medicine and FDA). No API key, no login.

### What you get

**Trial** (one row per study): NCT ID, title, status, phases, study type, conditions, interventions, lead sponsor and collaborators, enrollment, start and completion dates, last update, eligibility (sex, age range, healthy volunteers), primary outcomes, summary, countries, number of sites, up to 50 site locations, central recruitment contacts and the study link.

**Drug profile** (one row per drug): brand and generic names, active substances, manufacturer, routes, application numbers, pharmacologic class, boxed warning, indications, dosage, contraindications, warnings, total and serious adverse event reports, top 15 reported reactions, recall count and the 5 latest recalls, plus the DailyMed label link.

**Recall** (one row per recall): category, recall number, class, status, firm, product, reason, quantity, distribution, dates, location and brand or generic names.

### Use cases

- **Pharma and biotech competitive intelligence**: every recruiting Phase 3 trial for a condition, who sponsors it and where.
- **Patient recruitment and CROs**: recruiting trials by condition and country with site lists and contacts.
- **Investors**: pipeline activity of a sponsor, completion dates to watch.
- **Food safety, retail and compliance teams**: daily Class I recall monitoring for your products or suppliers.
- **Healthcare content and AI agents**: grounded drug facts with warnings and adverse event signals.

### Input

| Field | What it does |
|---|---|
| `trialConditions` | Conditions, e.g. `obesity`, `breast cancer`. |
| `trialSearchTerms` | Free text, e.g. a drug name or NCT number. |
| `trialStatus`, `trialPhases` | Filters, e.g. Recruiting, Phase 3. |
| `trialSponsor`, `trialLocation` | e.g. `Pfizer`, `Brazil`. |
| `trialSort` | Last updated (default) or relevance. |
| `drugNames` | Brand or generic names, e.g. `Ozempic`, `atorvastatin`. |
| `recallQueries` | Product, firm or reason, e.g. `listeria`. |
| `recallCategories`, `recallClassification`, `recallDateFrom` | Narrow recalls by type, class and date. |
| `maxResultsPerQuery` | Default 25, up to 1,000. |
| `openFdaApiKey` | Optional free key for very large FDA runs. |

### Output example (drug profile)

```json
{
  "recordType": "drug",
  "input": "atorvastatin",
  "genericNames": ["ATORVASTATIN CALCIUM"],
  "adverseEventReports": 70184,
  "seriousAdverseEventReports": 43893,
  "topReportedReactions": [{ "reaction": "FATIGUE", "reports": 4684 }, { "reaction": "DRUG INEFFECTIVE", "reports": 4390 }],
  "recallCount": 45,
  "recentRecalls": [{ "recallNumber": "D-...", "classification": "Class II", "reason": "...", "date": "2026-..." }]
}
```

Inputs that return nothing come back as `recordType: "error"` rows with a hint, and they are free.

### Pricing

Pay per result: one charge per trial, per recall and per drug profile (a drug profile combines several FDA queries, so it costs a bit more). Errors are free.

### Data sources and notes

- ClinicalTrials.gov, U.S. National Library of Medicine. Records are reformatted (fields renamed and flattened, long text shortened); every row has `retrievedAt` with the processing date and a link to the original record.
- openFDA, U.S. Food and Drug Administration (CC0). Data provided by the U.S. Food and Drug Administration, open.fda.gov.
- Adverse event reports (FAERS) are unverified and do not prove that a drug caused a reaction. Do not use this data to make medical decisions.
- This Actor is not affiliated with or endorsed by the NLM, NIH or FDA.

### Related Actors

- [Research Papers Search](https://apify.com/ninja.dev/research-papers-openalex): 250M+ scholarly papers with abstracts and citations.
- [SEC EDGAR Filings & Financials](https://apify.com/ninja.dev/sec-edgar-filings-financials): SEC filings and normalized financials.
- [US Government Contracts & Grants](https://apify.com/ninja.dev/us-gov-contracts-grants): federal contract winners and open grants.

# Actor input Schema

## `trialConditions` (type: `array`):

Diseases or conditions, e.g. obesity, breast cancer, long covid.

## `trialSearchTerms` (type: `array`):

Free-text search across trials, e.g. a drug name (tirzepatide) or NCT number.

## `trialStatus` (type: `array`):

Only trials with these statuses. Empty = all.

## `trialPhases` (type: `array`):

Only trials in these phases. Empty = all.

## `trialSponsor` (type: `string`):

Lead sponsor or collaborator, e.g. Pfizer, Novo Nordisk, National Cancer Institute.

## `trialLocation` (type: `string`):

City, state or country of a trial site, e.g. Boston, Texas, Brazil.

## `trialSort` (type: `string`):

Most recently updated first, or best match.

## `drugNames` (type: `array`):

US brand or generic names, e.g. Ozempic, semaglutide, Lipitor. One profile row per drug.

## `recallQueries` (type: `array`):

Product, company or reason, e.g. listeria, peanut, insulin pump, Abbott.

## `recallCategories` (type: `array`):

Empty = all three.

## `recallClassification` (type: `string`):

Class I is the most serious (risk of serious harm or death).

## `recallDateFrom` (type: `string`):

YYYY-MM-DD

## `maxResultsPerQuery` (type: `integer`):

Limit of trials or recalls for each condition, keyword or recall search.

## `openFdaApiKey` (type: `string`):

A free key from open.fda.gov raises the daily limit from 1,000 to 120,000 requests. Only needed for very large runs.

## Actor input object example

```json
{
  "trialConditions": [
    "obesity"
  ],
  "trialStatus": [
    "RECRUITING"
  ],
  "trialSort": "updated",
  "maxResultsPerQuery": 25
}
```

# Actor output Schema

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

Clinical trials, FDA drug profiles and FDA recalls.

## `summary` (type: `string`):

Counts per record type, issues and retrieval date.

# 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 = {
    "trialConditions": [
        "obesity"
    ],
    "trialStatus": [
        "RECRUITING"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ninja.dev/clinical-trials-fda-drugs-recalls").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 = {
    "trialConditions": ["obesity"],
    "trialStatus": ["RECRUITING"],
}

# Run the Actor and wait for it to finish
run = client.actor("ninja.dev/clinical-trials-fda-drugs-recalls").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 '{
  "trialConditions": [
    "obesity"
  ],
  "trialStatus": [
    "RECRUITING"
  ]
}' |
apify call ninja.dev/clinical-trials-fda-drugs-recalls --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ninja.dev/clinical-trials-fda-drugs-recalls"
        }
    }
}
```

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/wEUxJew7uJ9xjjood/builds/eBVldPZXcyZyXb54P/openapi.json
