# ClinicalTrials.gov Scraper: Clinical Trials Search API & Alerts (`manageable_gully/clinical-trials-scraper`) Actor

Search clinical trials from the official ClinicalTrials.gov API by condition, drug, sponsor, phase, status, location and dates. Sponsors, sites, enrollment, outcomes, eligibility. New-trial alerts. No contact persons. $1 per 1,000 studies.

- **URL**: https://apify.com/manageable_gully/clinical-trials-scraper.md
- **Developed by:** [WebIntel Tools](https://apify.com/manageable_gully) (community)
- **Categories:** AI, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 clinical studies

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

## ClinicalTrials.gov Scraper: Clinical Trials Search API, Study Data & New-Trial Alerts

Get **clinical trial data as clean JSON, CSV or Excel** from **ClinicalTrials.gov** through its **official API v2**: search by **condition, drug/intervention, sponsor, phase, recruitment status, location, radius and dates**, and get one flat row per study with **sponsor, funder type, enrollment, design, start/completion dates, primary outcomes, eligibility, MeSH terms, study sites and results status**. Schedule it as a **daily new-trial alert**.

No browser, no login, no API key, no proxy. **$1 per 1,000 studies.**

### What you can use it for

- **Pharma & biotech competitive intelligence:** every phase 2/3 industry trial for a disease or drug class, with sponsor, enrollment and expected primary completion (readout) dates.
- **Clinical trial alerts:** schedule it daily with **Only new studies** (optionally **also updated studies**) and send new or changed trials to Slack, e-mail, Google Sheets or your CRM (Make, Zapier, n8n, webhooks).
- **Site feasibility & CRO business development:** recruiting studies by country, city or radius, with facility names, site status and coordinates.
- **Pipeline tracking:** filter by sponsor (`Pfizer`, `Novo Nordisk`…) and see status changes, completion dates and posted results.
- **Patient-recruitment and advocacy research:** studies open to women/men, healthy volunteers, age limits and eligibility text.
- **Research, analytics and AI agents:** normalised study data for dashboards, meta-research, LLMs and RAG.

### How to use it

1. Enter **conditions** (e.g. `lung cancer`), and/or **interventions** (`semaglutide`), **sponsors**, **location terms** or free-text **other terms**. Or paste **NCT IDs** to look up specific studies.
2. Optional filters: **recruitment status**, **phase**, **study type**, **funder type** (industry, NIH…), **only with results**, **first posted / last updated / start / primary completion date** (absolute or relative like `30 days`), **min enrollment**, **sex**, **healthy volunteers**, **radius around a point**, or a raw **expert query**.
3. Click **Start**. Export to CSV/Excel/JSON or connect it to your tools. For alerts, turn on **Only new studies** and schedule it daily.

### Why this ClinicalTrials.gov scraper

- **Official API only:** ClinicalTrials.gov's public API v2 from the U.S. National Library of Medicine. No HTML scraping that breaks when the website changes.
- **All the filters that matter:** condition, intervention, sponsor, location, title, NCT IDs, status, phase, study type, funder type, results, four date ranges, enrollment, sex, healthy volunteers, geo radius, plus Essie expert queries.
- **Clean, flat output:** NCT ID, link, brief and official title, acronym, status, why stopped, phases, conditions, keywords, condition and intervention MeSH terms, interventions (type + name), lead sponsor + funder class, collaborators, enrollment (actual/estimated), allocation, model, purpose, masking, start / primary completion / completion / first posted / last updated / results posted dates, days to primary completion, primary outcomes with time frames, age limits in years, eligibility criteria, countries, site count, recruiting site count and sites (facility, status, city, state, country, lat/lon).
- **Alerts built in:** **Only new studies** remembers what you already received (per State key); already-seen studies are free. **Also alert on updated studies** re-sends a study when its last-update date changes.
- **Fast:** up to 1,000 studies per API page; thousands of studies in seconds, 256 MB memory.
- **Privacy by design:** only study-level and organisation data. Central contacts, overall officials (investigators), site contacts, responsible-party investigators and results points of contact are never requested, and sponsors registered as individuals are withheld.
- **Cheap and fair:** $1 per 1,000 studies, $0.0003 per run start.

### Input examples

Recruiting phase 3 lung cancer trials by industry sponsors:

```json
{ "conditions": ["lung cancer"], "statuses": ["RECRUITING"], "phases": ["PHASE3"], "sponsorClasses": ["INDUSTRY"], "maxItems": 500 }
```

Daily alert: new obesity trials posted in the last 2 days:

```json
{ "conditions": ["obesity"], "postedFrom": "2 days", "sortBy": "newest", "onlyNew": true, "stateKey": "obesity", "maxItems": 0 }
```

Trials with a primary completion (readout) in the next 12 months for a drug:

```json
{ "interventions": ["semaglutide"], "completionFrom": "today", "completionTo": "2027-10-31", "includeEligibility": false }
```

Recruiting diabetes studies within 50 km of Tel Aviv:

```json
{ "conditions": ["diabetes"], "statuses": ["RECRUITING"], "nearLocation": { "lat": 32.08, "lon": 34.78, "distance": "50km" } }
```

Look up specific studies:

```json
{ "nctIds": ["NCT04368728", "NCT02008227"] }
```

### Output (one row per study, shortened)

```json
{
  "nctId": "NCT07824882", "url": "https://clinicaltrials.gov/study/NCT07824882",
  "briefTitle": "A Phase II Study of HS-20093 Injection Combined With Adebrelimab ...",
  "overallStatus": "RECRUITING", "studyType": "INTERVENTIONAL", "phases": ["PHASE2"],
  "conditions": ["Non-Small Cell Lung Cancer"], "conditionMeshTerms": ["Carcinoma, Non-Small-Cell Lung"],
  "interventions": [{"type": "DRUG", "name": "HS-20093 for Injection"}, {"type": "DRUG", "name": "Adebrelimab Injection"}],
  "leadSponsor": "Hansoh BioMedical R&D Company", "leadSponsorClass": "INDUSTRY", "collaborators": [],
  "enrollment": 76, "enrollmentType": "ESTIMATED", "allocation": "RANDOMIZED", "masking": "NONE",
  "startDate": "2026-10-08", "primaryCompletionDate": "2028-03-30", "daysToPrimaryCompletion": 520,
  "firstPosted": "2026-09-17", "lastUpdated": "2026-10-23", "hasResults": false,
  "primaryOutcomes": [{"measure": "Objective Response Rate (ORR)", "timeFrame": "Up to 3 years"}],
  "sex": "ALL", "minimumAgeYears": 18.0, "ageGroups": ["ADULT", "OLDER_ADULT"],
  "countries": ["China"], "locationCount": 1, "recruitingLocationCount": 1,
  "locations": [{"facility": "Tongji Hospital ...", "status": "RECRUITING", "city": "Wuhan", "country": "China", "lat": 30.58, "lon": 114.27}],
  "eligibilityCriteria": "Inclusion Criteria: ...", "scrapedAt": "2026-10-27T08:30:00Z"
}
```

A run summary (query, matching studies, saved, already seen) is stored in the key-value store as `OUTPUT`.

### Pricing

Pay per event, no subscription:

| Event | Price |
|---|---|
| Study saved | $0.001 ($1 per 1,000) |
| Actor start | $0.0003 |

| Example | Cost |
|---|---|
| 100 studies | about $0.10 |
| 1,000 studies | about $1.00 |
| Daily alert, ~20 new studies a day for 30 days | about $0.61 |

Set **Max cost per run** in the run options and the Actor stops cleanly at that budget.

### API, integrations and AI agents (MCP)

Run it from your own code with the [Apify API](https://docs.apify.com/api/v2):

```bash
curl -X POST "https://api.apify.com/v2/acts/manageable_gully~clinical-trials-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" -d '{"conditions": ["lung cancer"], "statuses": ["RECRUITING"], "maxItems": 50}'
```

```python
from apify_client import ApifyClient
run = ApifyClient("<YOUR_APIFY_TOKEN>").actor("manageable_gully/clinical-trials-scraper").call(run_input={"conditions": ["asthma"], "phases": ["PHASE3"]})
```

- **No-code:** use the Apify app in **n8n, Make or Zapier**, or send results to Google Sheets, Slack or a webhook.
- **AI agents (MCP):** add `https://mcp.apify.com?tools=manageable_gully/clinical-trials-scraper` to Claude, Cursor, VS Code or any MCP client.
- **Schedules:** run it daily or weekly from Apify Console for trial alerts.

### FAQ

**Where does the data come from?** From ClinicalTrials.gov, the registry run by the U.S. National Library of Medicine (NIH), through its public API v2 (`clinicaltrials.gov/api/v2`). The data is refreshed daily by ClinicalTrials.gov. This is an independent tool, not affiliated with or endorsed by NLM/NIH; every row links back to the official study page.

**Which studies are covered?** All 500,000+ registered studies worldwide: interventional trials, observational studies and expanded access, in every country.

**Do you return investigator names, e-mails or phone numbers?** No. To avoid personal data the Actor never requests contacts, investigators or officials, and withholds sponsors registered as individuals. Use the study link for the official contacts of a specific study.

**How do I get only new trials?** Turn on **Only new studies**, give the search its own **State key**, and schedule the Actor. Already-seen studies are skipped and not charged. Add **Also alert on updated studies** to catch status changes and newly posted results.

**What is the expert query?** ClinicalTrials.gov's Essie search syntax, e.g. `AREA[LocationCountry]Israel`, `AREA[DesignMasking]QUADRUPLE` or `AREA[InterventionType]DEVICE`. It is combined with the other filters using AND.

**Can I get study results tables?** Rows include `hasResults` and `resultsFirstPosted`; follow the study link for the full results section.

### More tools from WebIntel Tools

- [arXiv & PubMed Paper Search](https://apify.com/manageable_gully/arxiv-pubmed-paper-search): research papers and abstracts from the official APIs, with daily new-paper alerts
- [CVE Vulnerability Scraper](https://apify.com/manageable_gully/cve-vulnerability-scraper): NVD CVEs with CISA KEV and EPSS
- [EU Tenders Scraper (TED)](https://apify.com/manageable_gully/ted-eu-tenders-scraper): EU public procurement notices and tender alerts
- [PDF & Image OCR Extractor](https://apify.com/manageable_gully/pdf-ocr-extractor): PDFs and images to text, Markdown and tables

See [all WebIntel Tools Actors](https://apify.com/manageable_gully).

*Made by WebIntel Tools. This Actor was built and is maintained with AI assistance. Report issues on the Issues tab; they are monitored daily.*

# Actor input Schema

## `conditions` (type: `array`):

Disease or condition, e.g. `lung cancer`, `type 2 diabetes`, `Alzheimer`. Several values are combined with OR. Uses ClinicalTrials.gov synonyms (e.g. `NSCLC`).

## `searchTerms` (type: `string`):

Free-text search across the whole study record (title, summary, keywords, outcomes). Supports AND, OR, NOT and quotes, e.g. `immunotherapy AND "first line"`.

## `interventions` (type: `array`):

Drug, device, procedure or behavioural intervention, e.g. `semaglutide`, `pembrolizumab`, `CAR-T`.

## `sponsors` (type: `array`):

Sponsor or collaborator organisation, e.g. `Pfizer`, `National Cancer Institute`, `Novo Nordisk`.

## `locations` (type: `array`):

Country, state or city of study sites, e.g. `Israel`, `Germany`, `Boston`. For a radius search use Near location.

## `titleTerms` (type: `string`):

Search only in titles and acronyms.

## `nctIds` (type: `array`):

Fetch specific studies by ID, e.g. `NCT04368728`. Up to 1,000 IDs.

## `statuses` (type: `array`):

Leave empty for all statuses.

## `phases` (type: `array`):

Leave empty for all phases.

## `studyTypes` (type: `array`):

Leave empty for all study types.

## `sponsorClasses` (type: `array`):

Lead sponsor class, e.g. only industry-funded trials.

## `onlyWithResults` (type: `boolean`):

Only studies that have posted results on ClinicalTrials.gov.

## `postedFrom` (type: `string`):

YYYY-MM-DD, YYYY-MM or relative (`7 days`, `3 months`, `1 year`). New trials only: use this with sort Newest.

## `postedTo` (type: `string`):

Optional end of the first-posted window.

## `updatedFrom` (type: `string`):

Studies updated since this date (status changes, new sites, results).

## `updatedTo` (type: `string`):

Optional end of the last-updated window.

## `startFrom` (type: `string`):

Study start date from (actual or anticipated).

## `startTo` (type: `string`):

Study start date to.

## `completionFrom` (type: `string`):

E.g. readouts expected in the next year: from `today` to `2027-12-31`.

## `completionTo` (type: `string`):

Optional end of the primary completion window.

## `minEnrollment` (type: `integer`):

Only studies with at least this many participants (actual or estimated).

## `sex` (type: `string`):

Only studies that accept this sex (studies open to all are included).

## `healthyVolunteers` (type: `boolean`):

Only studies that accept healthy volunteers.

## `nearLocation` (type: `object`):

Sites within a radius, e.g. `{"lat": 40.71, "lon": -74.0, "distance": "50mi"}` (mi or km).

## `expertQuery` (type: `string`):

Raw ClinicalTrials.gov Essie expression, ANDed with the filters, e.g. `AREA[LocationCountry]Israel` or `AREA[DesignMasking]QUADRUPLE`.

## `sortBy` (type: `string`):

Order of results.

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

Stop after this many studies. Empty = 1,000. 0 = no limit.

## `includeEligibility` (type: `boolean`):

Add the full inclusion/exclusion criteria text (cut at Max characters).

## `includeLocations` (type: `boolean`):

Facility, status, city, state, country and coordinates of each site (no contacts).

## `maxLocations` (type: `integer`):

Cut the site list per study at this number (0 = no site list).

## `maxTextChars` (type: `integer`):

Summary and eligibility text are cut at this length.

## `onlyNew` (type: `boolean`):

Remember studies already delivered (per State key) and return only new ones on the next run. Already-seen studies are free. Schedule daily for trial alerts.

## `alertOnUpdates` (type: `boolean`):

With Only new: a study counts as new again when its last-update date changes (status change, new sites, results posted).

## `stateKey` (type: `string`):

Separate alert memory per saved search.

## Actor input object example

```json
{
  "conditions": [
    "lung cancer"
  ],
  "statuses": [
    "RECRUITING",
    "NOT_YET_RECRUITING"
  ],
  "onlyWithResults": false,
  "postedFrom": "90 days",
  "sex": "",
  "healthyVolunteers": false,
  "sortBy": "last-updated",
  "maxItems": 100,
  "includeEligibility": true,
  "includeLocations": true,
  "maxLocations": 50,
  "maxTextChars": 3000,
  "onlyNew": false,
  "alertOnUpdates": false,
  "stateKey": "default"
}
```

# Actor output Schema

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

One row per study: NCT ID, titles, status, phases, conditions, MeSH terms, interventions, sponsor, enrollment, design, dates, outcomes, eligibility, sites and link.

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

Query used, matching studies, studies saved and already-seen studies skipped.

# 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 = {
    "conditions": [
        "lung cancer"
    ],
    "statuses": [
        "RECRUITING",
        "NOT_YET_RECRUITING"
    ],
    "postedFrom": "90 days",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("manageable_gully/clinical-trials-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 = {
    "conditions": ["lung cancer"],
    "statuses": [
        "RECRUITING",
        "NOT_YET_RECRUITING",
    ],
    "postedFrom": "90 days",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("manageable_gully/clinical-trials-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 '{
  "conditions": [
    "lung cancer"
  ],
  "statuses": [
    "RECRUITING",
    "NOT_YET_RECRUITING"
  ],
  "postedFrom": "90 days",
  "maxItems": 100
}' |
apify call manageable_gully/clinical-trials-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,manageable_gully/clinical-trials-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/O4vqw6rIztqxnp5Bs/builds/QyLuNQuAAa1buMn5t/openapi.json
