# Clinical Trial Multi-Source Scraper (`parseforge/clinical-trial-multi-source-scraper`) Actor

Scrapes clinical trial records from ClinicalTrials.gov, WHO ICTRP, OpenFDA, and ClinVar. Returns each trial as a flat row with registry ID, phase, status, enrollment, and eligibility criteria.

- **URL**: https://apify.com/parseforge/clinical-trial-multi-source-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Other, AI
- **Stats:** 2 total users, 1 monthly users, 90.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$21.00 / 1,000 result items

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?

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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Clinical Trial Multi-Source Scraper

**Scrape clinical trials from ClinicalTrials.gov, WHO ICTRP, OpenFDA, and ClinVar in one run.** Every trial comes with its registry ID, phase, status, enrollment, and full eligibility criteria. No API keys or logins. Export to CSV, JSON, Excel, or XML.

Clinical trial data is scattered across registries, each with its own search interface and export limits. This Actor queries ClinicalTrials.gov, WHO ICTRP, OpenFDA, and ClinVar in parallel for any condition, drug, or keyword, and returns every matching trial in one flat schema. It is built for researchers, pharma analysts, and anyone who needs a clean, deduplicated view of global trial activity.

| Who uses it | What they scrape ClinicalTrials.gov, WHO ICTRP, OpenFDA, and ClinVar for |
|---|---|
| Pharma competitive intelligence teams | Track competitor pipelines and trial milestones across registries |
| Academic researchers | Build systematic review datasets from multiple trial sources |
| Patient advocacy groups | Find recruiting trials for a specific condition |
| Regulatory consultants | Monitor trial status changes and safety signals |

### What it does

This Actor collects clinical trial records from four public registries and returns each trial as a flat row with registry ID, phase, status, enrollment, and eligibility criteria.

- 🔎 **Multi-source search:** query ClinicalTrials.gov, WHO ICTRP, OpenFDA, and ClinVar with one keyword
- 📊 **Flat schema:** every trial is returned as a single row with consistent fields
- ⚡ **Parallel fetching:** all sources are queried at once, not one after another
- 📦 **Bulk export:** download up to 1,000,000 trials per run as CSV, JSON, Excel, or XML

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with ClinicalTrials.gov, WHO ICTRP, OpenFDA, and ClinVar data

**📈 Track competitor pipelines.**

A pharma analyst runs the Actor weekly with a competitor's drug name to see new trial registrations, phase changes, and status updates across all four sources.

**🔬 Build systematic review datasets.**

A university researcher queries a condition like 'BRCA1' and exports all matching trials from ClinicalTrials.gov and WHO ICTRP into a single CSV for screening.

**🧪 Monitor safety signals.**

A regulatory consultant runs the Actor with a drug name and reviews OpenFDA adverse event data alongside trial records to spot emerging safety concerns.

**🌍 Find global trials for patients.**

A patient advocacy group searches for 'ebola' and gets recruiting trials from WHO ICTRP and ClinicalTrials.gov, including sites in low-income countries.

### Why choose this scraper

|  | What you get |
|---|---|
| **One query, four registries** | Search ClinicalTrials.gov, WHO ICTRP, OpenFDA, and ClinVar at the same time |
| **No API keys or logins** | The Actor reads public registry data directly, no registration needed |
| **Consistent output** | Every trial is returned in the same flat schema, regardless of source |
| **Scalable** | Collect up to 1,000,000 trials per run |

### How it compares

This Actor covers four registries in one run, while the Clinical Trials FDA Scraper focuses on ClinicalTrials.gov and OpenFDA with additional FDA data types.

| Feature | ParseForge | Clinical Trials FDA Scraper |
|---|---|---|
| Searches ClinicalTrials.gov | Yes | Yes |
| Searches WHO ICTRP | Yes | Not listed |
| Searches ClinVar | Yes | Not listed |
| Adverse event data from OpenFDA | Yes | Yes |
| Search by NCT ID | Not listed | Yes |
| Drug labels and recalls | Not listed | Yes |

### Configure the run

Drive the Actor with a condition, drug, or keyword, choose which of the four sources to query, and set a maximum number of trials per run. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "maxItems": 10
}
```

A larger pull:

```json
{
  "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.021 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $2.10 |
| 1,000 results | $21.00 |
| 10,000 results | $210.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Clinical Trial Multi-Source Scraper](https://apify.com/parseforge/clinical-trial-multi-source-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to ClinicalTrials.gov, WHO ICTRP, OpenFDA, and ClinVar through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/clinical-trial-multi-source-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that your query is spelled correctly and that at least one source is selected. Some sources may not support certain keywords. Try a broader term like 'cancer' to test.

**Why is the run slow?**

The Actor queries multiple sources in parallel, but some registries have rate limits. Reduce the number of sources or lower maxItems to speed up the run.

**Why are some fields empty?**

Not all registries provide the same level of detail. For example, WHO ICTRP may not include adverse events. Empty fields mean the source did not have that data.

**Can I get more than 1,000,000 trials?**

The maximum is 1,000,000 per run. If you need more, split your query into smaller chunks or run the Actor multiple times with different keywords.

### FAQ

| Question | Answer |
|---|---|
| Which registries does this Actor search? | It queries ClinicalTrials.gov, WHO ICTRP, OpenFDA, and ClinVar. You can select any subset of these sources in the input. |
| Do I need an API key or login? | No. The Actor reads public registry data directly, so no API keys or authentication are required. |
| What is the maximum number of trials I can collect? | You can set maxItems up to 1,000,000 trials per run. The default is 10. |
| Can I search by NCT ID? | The Actor searches by keyword, condition, or drug. If you enter an NCT ID as the query, it will match trials that contain that ID in their metadata. |
| What output formats are supported? | You can export results as CSV, JSON, Excel, or XML from the Apify dataset. |
| How are duplicate trials handled? | The Actor does not deduplicate across sources. If the same trial appears in multiple registries, it will be returned once per source. |
| Can I schedule this Actor to run automatically? | Yes, you can set up a schedule in Apify to run the Actor daily, weekly, or at any interval. |
| Does this Actor include adverse event data? | Yes, when you select OpenFDA as a source, the Actor returns adverse event reports associated with the query. |
| Is the data updated in real time? | The Actor fetches data live from each registry at the time of the run, so you get the most current records available. |
| Can I filter by trial phase or status? | The input schema does not include phase or status filters. You can filter the results after export using the phase and status fields in the dataset. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by U.S. National Library of Medicine, World Health Organization, U.S. Food and Drug Administration, and National Center for Biotechnology Information. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `query` (type: `string`):

Keyword applied to all sources that support search (e.g. cancer, BRCA1, ebola).

## `sources` (type: `array`):

Which medical data sources to query in parallel.

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

How many clinical trials to collect per run.

## Actor input object example

```json
{
  "query": "cancer",
  "sources": [
    "ctis",
    "who",
    "openfda",
    "clinvar"
  ],
  "maxItems": 10
}
```

# Actor output Schema

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

Aggregated clinical and medical data from 4 sources.

# 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/clinical-trial-multi-source-scraper").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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("parseforge/clinical-trial-multi-source-scraper").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 '{
  "maxItems": 10
}' |
apify call parseforge/clinical-trial-multi-source-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/clinical-trial-multi-source-scraper"
        }
    }
}

```

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/YQfRodu5Q8WgvrUF8/builds/uukhvjqTw1V9qudbb/openapi.json
