ClinicalTrials.gov Scraper & Trial Monitor avatar

ClinicalTrials.gov Scraper & Trial Monitor

Pricing

$1.00 / 1,000 trial results

Go to Apify Store
ClinicalTrials.gov Scraper & Trial Monitor

ClinicalTrials.gov Scraper & Trial Monitor

Search and export ClinicalTrials.gov trials via the official API, then monitor them: each run returns only new trials, status changes and posted results with a field-level diff. Sponsor watchlist, phase/status/country filters, recruiting sites.

Pricing

$1.00 / 1,000 trial results

Rating

0.0

(0)

Developer

Artem Kulyk

Artem Kulyk

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Security

Limited permissions

Share

Search and export clinical trials from the official ClinicalTrials.gov API v2, then keep watching them. On every scheduled run this ClinicalTrials.gov scraper returns only the trials that are new or changed since the last run, with a field-level diff of what changed (status, enrollment, phase, dates, results posted). Filter by condition, drug, sponsor, phase, status, country and dates, watch competitor sponsors, and see recruiting sites per country.

Why this actor: most ClinicalTrials.gov scrapers export a snapshot. This one remembers what it saw, so you get alerts for new trials, status changes and posted results instead of re-reading thousands of rows.

🇩🇪 Deutsche Version

Contents

Key features · Use cases · Quick start · Input · Output · Pricing · Integrations · Limits · FAQ · Legal and data source · Changelog · Related actors · Support

Key features

  • Official ClinicalTrials.gov API v2 only: no HTML scraping, no proxies, no API key.
  • Change detection: NEW, STATUS_CHANGED, RESULTS_POSTED and UPDATED, with changedFields and before/after values in changes.
  • Sponsor watchlist: monitor several sponsors or competitors in one run. Each row says which sponsor matched.
  • Rich filters: condition, intervention, sponsor, free text, NCT IDs, phase, status, study type, sex, age group, healthy volunteers, results, funder type, and five date windows.
  • Site intelligence: countries, site counts, and recruiting sites and cities for the country you choose.
  • Flat rows with ISO dates and three ready-made views (Overview, Changes, Sites) for tables, CSV, Excel and AI agents.
  • Polite and robust: about 46 requests per minute at most, retries with backoff, partial results kept if one search fails.

Use cases

  • Pharma and biotech competitive intelligence: get an alert when a competitor registers a trial, changes status or posts results.
  • Business development and licensing: find sponsors running Phase 2 trials in your indication.
  • CROs and site networks: find newly recruiting trials in your country and the cities where sites recruit.
  • Patient advocacy and clinicians: a weekly list of recruiting trials for one condition.
  • Investors and analysts: track readouts (RESULTS_POSTED) and terminations (whyStopped) across a portfolio.
  • AI agents and RAG: a fresh, structured trial feed with links to the official record.

Quick start

  1. Click Try for free / Start. The form is prefilled (recruiting glioblastoma trials), so the first run works without changes.
  2. Replace the example with your own condition, drug, sponsor or NCT IDs and adjust the filters.
  3. Open the Output tab. Use the views (Overview, Changes, Sites) or export JSON, CSV, Excel or HTML.
  4. To monitor: switch on Only new or changed since last run, give the watch a Monitor name, save it as a task and add a schedule (for example daily at 07:00). From the second run you receive only changes.

Input

All fields are optional. Combine any of them; filters are joined with AND. Example: watch three oncology sponsors for recruiting Phase 2 or 3 trials with sites in Germany.

{
"condition": "non-small cell lung cancer",
"sponsorWatchlist": [
"AstraZeneca",
"Merck Sharp & Dohme LLC",
"Novartis Pharmaceuticals"
],
"phases": [
"PHASE2",
"PHASE3"
],
"statuses": [
"RECRUITING",
"NOT_YET_RECRUITING"
],
"country": "Germany",
"onlyRecruitingSitesInCountry": true,
"maxResults": 500,
"onlyNewSinceLastRun": true,
"stateKey": "nsclc-competitors"
}

Tips: use NCT IDs to follow specific trials. Use Last update posted from for a one-off "what changed this month" export. Include public contacts is off by default; ClinicalTrials.gov does not allow contact e-mails to be used for marketing.

Output

Each row is one trial. changeType tells you why it is in the dataset: BASELINE (first run), NEW (trial not seen before), STATUS_CHANGED (overall status changed, with previousStatus), RESULTS_POSTED (results appeared), UPDATED (another tracked field changed, see changedFields) and UNCHANGED (only when monitor mode is off).

Real rows from a run on 1 November 2026:

NCT IDChangeTitleStatusPhaseLead sponsorRecruiting cities (DE)
NCT03970447BASELINEA Trial to Evaluate Multiple Regimens in Newly Diagnosed and Recurren…RECRUITINGPHASE2; PHASE3Global Coalition for Adaptive ResearchFrankfurt; Heidelberg; Mannheim; Regensburg; Tübingen
NCT05902169BASELINESonocloud-9 in Association With Carboplatin Versus Standard-of-Care C…RECRUITINGPHASE3CarTheraBerlin; Chemnitz; Cologne; Dresden; Essen; Münster
NCT05839379BASELINETargeted Pediatric High-Grade Glioma TherapyRECRUITINGNationwide Children's HospitalHeidelberg

One full record (long values shortened):

{
"nctId": "NCT03970447",
"changeType": "BASELINE",
"previousStatus": null,
"previousLastUpdate": null,
"changedFields": null,
"changes": null,
"watchlistSponsor": null,
"title": "A Trial to Evaluate Multiple Regimens in Newly Diagnosed and Recurrent Glioblastoma",
"officialTitle": "GBM AGILE: Global Adaptive Trial Master Protocol: An International, Seamless Phase II/III Response Adaptive Randomizati…",
"acronym": "GBM AGILE",
"overallStatus": "RECRUITING",
"whyStopped": null,
"phase": "PHASE2; PHASE3",
"phases": [
"PHASE2",
"PHASE3"
],
"studyType": "INTERVENTIONAL",
"leadSponsor": "Global Coalition for Adaptive Research",
"leadSponsorClass": "OTHER",
"collaborators": [
"Bayer",
"Kazia Therapeutics Limited",
"Kintara Therapeutics, Inc.",
"…"
],
"conditions": [
"Glioblastoma"
],
"conditionsText": "Glioblastoma",
"keywords": [
"Glioblastoma",
"Newly diagnosed",
"recurrent",
"…"
],
"interventions": [
{
"type": "DRUG",
"name": "Temozolomide"
},
{
"type": "DRUG",
"name": "Lomustine"
},
{
"type": "DRUG",
"name": "Regorafenib"
},
"…"
],
"interventionsText": "DRUG: Temozolomide; DRUG: Lomustine; DRUG: Regorafenib; RADIATION: Radiation; DRUG: Paxalisib; DRUG: VAL-083; DRUG: VT1…",
"enrollment": 2250,
"enrollmentType": "ESTIMATED",
"startDate": "2019-07-30",
"primaryCompletionDate": "2028-06",
"completionDate": "2030-06",
"firstPostDate": "2019-05-31",
"lastUpdatePostDate": "2026-10-23",
"lastVerifyDate": "2026-06",
"hasResults": false,
"minAge": "18 Years",
"maxAge": null,
"sex": "ALL",
"healthyVolunteers": false,
"briefSummary": "Glioblastoma (GBM) adaptive, global, innovative learning environment (GBM AGILE) is an international, seamless Phase II…",
"countries": [
"United States",
"Australia",
"Canada",
"…"
],
"countriesText": "United States; Australia; Canada; France; Germany; Switzerland",
"siteCount": 63,
"countrySiteCount": 6,
"countryRecruitingSiteCount": 5,
"countryRecruitingCities": "Frankfurt; Heidelberg; Mannheim; Regensburg; Tübingen",
"url": "https://clinicaltrials.gov/study/NCT03970447",
"source": "ClinicalTrials.gov (U.S. National Library of Medicine), unmodified except flattening",
"scrapedAt": "2026-11-01T20:34:14.508Z"
}

A run summary is saved as RUN_SUMMARY in the run's key-value store (counts per change type, trials tracked, first-run flag).

Pricing

Pay per result: $1.00 per 1,000 trials plus $0.002 per run. Apify platform usage is included, so there is nothing else to pay. Check the Pricing tab for the current price.

ScenarioVolumeCost
Try it: prefilled glioblastoma search200 trials, 1 run$0.20
Daily watchlist of 3 sponsors, about 10 changes a day300 trials, 30 runs$0.36
One-off export of a large indication5,000 trials, 1 run$5.00

Monitor mode keeps a schedule cheap: after the first run you pay only for new and changed trials. Apify's free plan includes $5 of monthly credit, which covers small monitors.

Integrations

  • Schedules: Console → Schedules → add this actor's saved task (daily or hourly). Keep the same Monitor name so each run compares with the previous one.
  • Webhooks: on the Integrations tab add a webhook for Run succeeded to POST the run to your own endpoint, then fetch rows from https://api.apify.com/v2/datasets/{datasetId}/items?format=json.
  • Slack and email: add the Slack or Email integration on the Integrations tab to get a message after each run.
  • Zapier, Make and n8n: use the official Apify app ("Watch actor runs" trigger, then "Get dataset items"). Filter on changeType to forward only NEW, STATUS_CHANGED or RESULTS_POSTED trials.
  • Google Sheets: connect through Make or Zapier, or export the dataset as CSV and import it.
  • MCP and AI agents: add https://mcp.apify.com?tools=heaped_qualm/clinicaltrials-monitor to Claude, Cursor or any MCP client. The flat rows are easy for agents to read.

Python (pip install apify-client):

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("heaped_qualm/clinicaltrials-monitor").call(run_input={"condition": "non-small cell lung cancer", "sponsorWatchlist": ["AstraZeneca", "Merck Sharp & Dohme LLC", "Novartis Pharmaceuticals"], "phases": ["PHASE2", "PHASE3"], "statuses": ["RECRUITING", "NOT_YET_RECRUITING"], "country": "Germany", "onlyRecruitingSitesInCountry": true, "maxResults": 500, "onlyNewSinceLastRun": true, "stateKey": "nsclc-competitors"})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["changeType"], item["nctId"], item["title"])

JavaScript (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('heaped_qualm/clinicaltrials-monitor').call({"condition": "non-small cell lung cancer", "sponsorWatchlist": ["AstraZeneca", "Merck Sharp & Dohme LLC", "Novartis Pharmaceuticals"], "phases": ["PHASE2", "PHASE3"], "statuses": ["RECRUITING", "NOT_YET_RECRUITING"], "country": "Germany", "onlyRecruitingSitesInCountry": true, "maxResults": 500, "onlyNewSinceLastRun": true, "stateKey": "nsclc-competitors"});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.table(items);

HTTP (waits for the run and returns the rows):

curl -X POST "https://api.apify.com/v2/acts/heaped_qualm~clinicaltrials-monitor/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"condition": "non-small cell lung cancer", "sponsorWatchlist": ["AstraZeneca", "Merck Sharp & Dohme LLC", "Novartis Pharmaceuticals"], "phases": ["PHASE2", "PHASE3"], "statuses": ["RECRUITING", "NOT_YET_RECRUITING"], "country": "Germany", "onlyRecruitingSitesInCountry": true, "maxResults": 500, "onlyNewSinceLastRun": true, "stateKey": "nsclc-competitors"}'

Limits

  • Up to 100,000 trials per run (maxResults). The API returns 1,000 per page.
  • Field-level diffs cover status, phase, enrollment, primary completion and completion dates, results and site count. Any other edit shows up as UPDATED (new lastUpdatePostDate) without a field diff.
  • The monitor remembers up to 50,000 trials per Monitor name; older, unchanged trials are forgotten first.
  • Data is as current as ClinicalTrials.gov, which usually updates records on weekdays.

FAQ

Is it legal to scrape ClinicalTrials.gov? This actor does not scrape web pages. It uses the official public API, which the U.S. National Library of Medicine provides for exactly this. Every row keeps the source attribution and a link to the official record, as the terms require.

Can I monitor specific trials? Yes. Put their NCT IDs into NCT IDs and keep monitor mode on. You get a row whenever one of them changes.

How do I watch competitors? Add sponsor names to Sponsor / competitor watchlist. Each sponsor is searched separately and the row shows watchlistSponsor.

Does it include results data? hasResults and the RESULTS_POSTED change type tell you when results appear. Switch on Include raw API record for the full record.

How do I get a full export instead of only changes? Switch off Only new or changed since last run, or use a new Monitor name.

Why are all rows BASELINE on the first run? The first run has nothing to compare with, so everything it finds is the baseline. Later runs with the same Monitor name report only changes.

The run failed or returned nothing. What now? Read the status message and the RUN_SUMMARY record. A search that is too narrow returns zero trials; try it on clinicaltrials.gov first. If it still looks wrong, open an issue on the Issues tab with the run link.

Data source: ClinicalTrials.gov (U.S. National Library of Medicine), through its official API v2. Data is used under the ClinicalTrials.gov terms: each row is attributed (source), links to the official record (url) and carries the date it was last updated there (lastUpdatePostDate). Records are only flattened, not altered. Do not use contact e-mail addresses for marketing. This is not medical advice.

This actor is independent and not affiliated with or endorsed by ClinicalTrials.gov, the NIH or the National Library of Medicine. Data is provided as is, without warranty.

Changelog

  • 0.3 (Nov 2026): automated test suite (unit, integration, input and schema tests, 100% line coverage); input form grouped into sections with examples; the demo condition no longer leaks into NCT ID, sponsor or watchlist searches (bug fix); monitor memory capped at 50,000 trials; new Sites view; monitor mode starts switched off in the form so test runs always show results.
  • 0.2: field-level diffs (changes, changedFields), RESULTS_POSTED, BASELINE first run, many new filters, status messages, input validation, Changes view.
  • 0.1: first release with change detection, sponsor watchlist and country recruiting sites.

More free monitors by the same author, built on official APIs:

Support

Open an issue on the Issues tab of this page. Please include the run link and what you expected to see. Feature requests are welcome.

More monitors from the same author: SEC EDGAR Filings Monitor · PubMed Scraper & New Article Monitor · Greenhouse, Lever, Ashby & Recruitee Jobs Monitor


🇩🇪 Deutsch: ClinicalTrials.gov Scraper & Studien-Monitor

Sucht und exportiert klinische Studien über die offizielle ClinicalTrials.gov API v2 und meldet bei jedem geplanten Lauf nur neue oder geänderte Studien – mit Feld-Diff (Status, Rekrutierung, Phase, Termine, veröffentlichte Ergebnisse).

Funktionen

  • Nur offizielle API, kein HTML-Scraping, kein API-Schlüssel
  • Änderungserkennung: NEW, STATUS_CHANGED, RESULTS_POSTED, UPDATED mit Vorher/Nachher-Werten
  • Sponsor-Watchlist für mehrere Wettbewerber
  • Filter nach Indikation, Wirkstoff, Sponsor, Phase, Status, Land und Datum
  • Rekrutierende Zentren und Städte pro Land

Anwendungsfälle

  • Wettbewerbsbeobachtung in Pharma und Biotech
  • Business Development und Lizenzierung
  • CROs und Studienzentren: neue rekrutierende Studien in Deutschland
  • Investoren: Ergebnisse und Studienabbrüche verfolgen

Schnellstart

  1. Start klicken. Das Formular ist vorausgefüllt, der erste Lauf funktioniert ohne Änderungen.
  2. Eigene Indikation, Wirkstoff, Sponsor oder NCT-Nummern eintragen und Filter anpassen.
  3. Ergebnisse im Tab Output ansehen oder als JSON, CSV oder Excel exportieren.
  4. Für die Überwachung Only new or changed since last run einschalten, einen Monitor-Namen vergeben, als Task speichern und einen Zeitplan anlegen. Ab dem zweiten Lauf kommen nur noch Änderungen.

Eingabebeispiel: siehe JSON oben (Lungenkrebs-Studien von drei Sponsoren mit Zentren in Deutschland).

Ausgabe: eine Zeile pro Studie. changeType zeigt den Grund: BASELINE (erster Lauf), NEW, STATUS_CHANGED, RESULTS_POSTED, UPDATED, UNCHANGED (nur ohne Monitor-Modus).

Preis: $1.00 pro 1.000 Studien plus $0.002 pro Lauf, Plattformkosten inklusive. Beispiel: tägliche Watchlist mit etwa 10 Änderungen pro Tag ≈ $0.36 im Monat. Den aktuellen Preis zeigt der Tab Pricing.

Integrationen: Zeitpläne, Webhooks, Slack, E-Mail, Zapier, Make, n8n, Google Sheets, API (Python, JavaScript, HTTP) und MCP für KI-Agenten (https://mcp.apify.com?tools=heaped_qualm/clinicaltrials-monitor).

Grenzen: bis 100.000 Studien pro Lauf; der Monitor merkt sich bis zu 50.000 Studien pro Monitor-Name.

Rechtliches und Datenquelle: Quelle: ClinicalTrials.gov (U.S. National Library of Medicine), offizielle API v2, Nutzung gemäß deren Bedingungen mit Quellenangabe und Link je Datensatz. Kontakt-E-Mails nicht für Werbung verwenden. Keine medizinische Beratung. Kein Bezug zu und keine Unterstützung durch ClinicalTrials.gov, the NIH or the National Library of Medicine. Daten ohne Gewähr.

Support: Tab Issues auf dieser Seite, bitte mit Link zum Lauf.