# ClinicalTrials.gov Scraper & Trial Monitor (`heaped_qualm/clinicaltrials-monitor`) Actor

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.

- **URL**: https://apify.com/heaped_qualm/clinicaltrials-monitor.md
- **Developed by:** [Artem Kulyk](https://apify.com/heaped_qualm) (community)
- **Categories:** Business, AI, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 trial results

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 & Trial Monitor

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](#deutsch)

### Contents

[Key features](#key-features) · [Use cases](#use-cases) · [Quick start](#quick-start) · [Input](#input) · [Output](#output) · [Pricing](#pricing) · [Integrations](#integrations) · [Limits](#limits) · [FAQ](#faq) · [Legal and data source](#legal-and-data-source) · [Changelog](#changelog) · [Related actors](#related-actors) · [Support](#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.

```json
{
  "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 ID | Change | Title | Status | Phase | Lead sponsor | Recruiting cities (DE) |
|---|---|---|---|---|---|---|
| NCT03970447 | BASELINE | A Trial to Evaluate Multiple Regimens in Newly Diagnosed and Recurren… | RECRUITING | PHASE2; PHASE3 | Global Coalition for Adaptive Research | Frankfurt; Heidelberg; Mannheim; Regensburg; Tübingen |
| NCT05902169 | BASELINE | Sonocloud-9 in Association With Carboplatin Versus Standard-of-Care C… | RECRUITING | PHASE3 | CarThera | Berlin; Chemnitz; Cologne; Dresden; Essen; Münster |
| NCT05839379 | BASELINE | Targeted Pediatric High-Grade Glioma Therapy | RECRUITING |  | Nationwide Children's Hospital | Heidelberg |

One full record (long values shortened):

```json
{
  "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"
}
```

<details><summary>All output fields</summary>

| Field | Description |
|---|---|
| `nctId` | ClinicalTrials.gov identifier, e.g. NCT04368728. |
| `changeType` | BASELINE on the first run of a monitor; then NEW, STATUS_CHANGED, RESULTS_POSTED or UPDATED. UNCHANGED appears only when monitor mode is off. |
| `previousStatus` | Overall status seen in the previous run (null on first sight). |
| `previousLastUpdate` | Last-update date seen in the previous run. |
| `changedFields` | Comma-separated names of tracked fields that changed. |
| `changes` | Human-readable diff, e.g. "overallStatus: RECRUITING → COMPLETED". |
| `watchlistSponsor` | Watchlist entry that found this trial (null without a watchlist). |
| `title` | Brief title. |
| `officialTitle` | Official title. |
| `acronym` | Study acronym. |
| `overallStatus` | Overall recruitment status, e.g. RECRUITING, COMPLETED. |
| `whyStopped` | Reason given when a trial was stopped. |
| `phase` | Phases joined with "; ", e.g. PHASE2; PHASE3. Empty when not applicable. |
| `phases` | Phases as a list. |
| `studyType` | INTERVENTIONAL, OBSERVATIONAL or EXPANDED_ACCESS. |
| `leadSponsor` | Lead sponsor name. |
| `leadSponsorClass` | Lead sponsor class: INDUSTRY, NIH, FED, OTHER, ... |
| `collaborators` | Collaborator names. |
| `conditions` | Conditions studied. |
| `conditionsText` | Conditions joined with "; ". |
| `keywords` | Keywords given by the sponsor. |
| `interventions` | Interventions as {type, name}. |
| `interventionsText` | Interventions as "TYPE: name" joined with "; ". |
| `enrollment` | Planned or actual enrollment count. |
| `enrollmentType` | ESTIMATED or ACTUAL. |
| `startDate` | Study start date (YYYY-MM or YYYY-MM-DD). |
| `primaryCompletionDate` | Primary completion date. |
| `completionDate` | Study completion date. |
| `firstPostDate` | Date first posted on ClinicalTrials.gov. |
| `lastUpdatePostDate` | Date of the last posted update. |
| `lastVerifyDate` | Month the record was last verified. |
| `hasResults` | True when results are posted. |
| `minAge` | Minimum eligible age. |
| `maxAge` | Maximum eligible age. |
| `sex` | Eligible sex: ALL, FEMALE or MALE. |
| `healthyVolunteers` | Accepts healthy volunteers. |
| `briefSummary` | Brief summary text. |
| `countries` | Countries with at least one site. |
| `countriesText` | Countries joined with "; ". |
| `siteCount` | Number of sites worldwide. |
| `countrySiteCount` | Sites in the input country (null without a country filter). |
| `countryRecruitingSiteCount` | Recruiting or not-yet-recruiting sites in the input country. |
| `countryRecruitingCities` | Cities with recruiting sites in the input country. |
| `url` | Trial page on ClinicalTrials.gov. |
| `source` | Data source attribution. |
| `locations` | Sites: facility, city, state, zip, country, status, lat, lon. Present when "Include site list" is on. |
| `centralContacts` | Central contacts as published (only with "Include public contacts"). |
| `overallOfficials` | Overall officials as published (only with "Include public contacts"). |
| `raw` | Full protocolSection from the API (only with "Include raw API record"). |
| `scrapedAt` | When this run fetched the record (UTC). |

</details>

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.

| Scenario | Volume | Cost |
|---|---|---|
| Try it: prefilled glioblastoma search | 200 trials, 1 run | **$0.20** |
| Daily watchlist of 3 sponsors, about 10 changes a day | 300 trials, 30 runs | **$0.36** |
| One-off export of a large indication | 5,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`):

```python
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`):

```js
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):

```bash
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.

### Legal and data source

Data source: [ClinicalTrials.gov](https://clinicaltrials.gov) (U.S. National Library of Medicine), through its [official API v2](https://clinicaltrials.gov/data-api/api). Data is used under the [ClinicalTrials.gov terms](https://clinicaltrials.gov/about-site/terms-conditions): 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.

### Related actors

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

- [SEC EDGAR Scraper: 8-K, 10-K, Form 4 Filings](https://apify.com/heaped_qualm/sec-edgar-monitor): SEC EDGAR scraper for 8-K, 10-K, 10-Q and Form 4 filings
- [PubMed Scraper & New Article Monitor](https://apify.com/heaped_qualm/pubmed-monitor): PubMed scraper and new article monitor
- [Greenhouse, Lever & Ashby Jobs Scraper](https://apify.com/heaped_qualm/job-board-monitor): Greenhouse, Lever & Ashby jobs scraper and monitor
- [Hacker News Scraper & Keyword Monitor](https://apify.com/heaped_qualm/hackernews-monitor): Hacker News scraper and keyword monitor

### 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](https://apify.com/heaped_qualm/sec-edgar-monitor) · [PubMed Scraper & New Article Monitor](https://apify.com/heaped_qualm/pubmed-monitor) · [Greenhouse, Lever, Ashby & Recruitee Jobs Monitor](https://apify.com/heaped_qualm/job-board-monitor)

***

<a name="deutsch"></a>

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

# Actor input Schema

## `condition` (type: `string`):

Disease or condition to search, e.g. glioblastoma or type 2 diabetes (API parameter query.cond). With every search field empty, the demo search runs: glioblastoma trials that are recruiting.

## `intervention` (type: `string`):

e.g. pembrolizumab, semaglutide. Maps to query.intr.

## `sponsor` (type: `string`):

Single sponsor search (query.spons). For several companies use the watchlist below.

## `sponsorWatchlist` (type: `array`):

One search per sponsor, e.g. Pfizer, Novartis, BioNTech. Each row is tagged with the matching watchlist entry, and a trial found for two sponsors is returned once. Max results applies per sponsor.

## `keywords` (type: `string`):

Free text across all fields (API parameter query.term). ClinicalTrials.gov search syntax works, e.g. "mRNA vaccine" AND melanoma.

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

Track specific trials by NCT number, e.g. NCT04368728. Lower case is accepted. With monitor mode on, you get a row only when one of these trials changes.

## `country` (type: `string`):

e.g. Germany. Filters trials with a site in this country and adds per-country site counts.

## `location` (type: `string`):

Optional extra location text, e.g. Berlin or Charité (query.locn).

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

Keep trials in any of the selected phases. Empty = all phases.

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

Keep trials with any of the selected overall statuses. Empty = all statuses.

## `studyType` (type: `string`):

Interventional, observational or expanded access. Empty = any.

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

Eligible sex of participants. "All" applies no filter.

## `ageGroup` (type: `string`):

Eligible age group of participants. Empty = any age.

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

Only trials that accept healthy volunteers.

## `resultsAvailable` (type: `string`):

Keep only trials with posted results, or only trials without. Empty = any.

## `funderType` (type: `string`):

Class of the lead sponsor or funder. Empty = any.

## `startDateFrom` (type: `string`):

Earliest study start date (YYYY-MM-DD).

## `startDateTo` (type: `string`):

Latest study start date (YYYY-MM-DD).

## `lastUpdateFrom` (type: `string`):

Earliest "last update posted" date (YYYY-MM-DD). Useful for a one-off export of recent changes.

## `lastUpdateTo` (type: `string`):

Latest "last update posted" date (YYYY-MM-DD).

## `firstPostedFrom` (type: `string`):

Earliest first-posted date (YYYY-MM-DD): finds newly registered trials.

## `firstPostedTo` (type: `string`):

Latest first-posted date (YYYY-MM-DD).

## `primaryCompletionFrom` (type: `string`):

Start of the primary completion window (YYYY-MM-DD): finds trials that read out soon.

## `primaryCompletionTo` (type: `string`):

End of the primary completion window (YYYY-MM-DD).

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

Order used when more trials match than Max results.

## `maxResults` (type: `integer`):

Maximum number of trials fetched per run (per sponsor when you use the watchlist). Newest updates come first with the default sort.

## `onlyNewSinceLastRun` (type: `boolean`):

Monitor mode: emit only NEW, STATUS_CHANGED, RESULTS_POSTED and UPDATED trials (with a field-level diff) vs the last run with the same monitor name. First run emits everything as BASELINE. Switch off for a full one-off export. It starts switched off in the form, so a manual test run always shows results. Switch it on in the task you schedule. API calls that omit this field get monitor mode on.

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

Name of this monitor's memory (letters, digits and dashes; other characters become dashes). Use a different name for each saved task or schedule so their change detection stays separate.

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

Adds the list of sites (facility, city, state, ZIP, country, site status, coordinates).

## `onlyRecruitingSitesInCountry` (type: `boolean`):

When a country is set, keep only RECRUITING / NOT_YET_RECRUITING sites in that country in the site list.

## `includeContacts` (type: `boolean`):

Central contacts as published. ClinicalTrials.gov terms forbid using these e-mail addresses for marketing.

## `includeRawRecord` (type: `boolean`):

Adds the full protocolSection JSON (large).

## Actor input object example

```json
{
  "condition": "glioblastoma",
  "intervention": "pembrolizumab",
  "sponsor": "BioNTech",
  "sponsorWatchlist": [
    "Pfizer",
    "Novartis",
    "BioNTech"
  ],
  "keywords": "mRNA vaccine",
  "nctIds": [
    "NCT04368728"
  ],
  "country": "Germany",
  "location": "Berlin",
  "phases": [
    "PHASE2",
    "PHASE3"
  ],
  "statuses": [
    "RECRUITING"
  ],
  "studyType": "",
  "sex": "all",
  "ageGroup": "adult",
  "healthyVolunteers": false,
  "resultsAvailable": "with",
  "funderType": "industry",
  "startDateFrom": "2024-01-01",
  "startDateTo": "2026-12-31",
  "lastUpdateFrom": "2026-10-01",
  "lastUpdateTo": "2026-10-31",
  "firstPostedFrom": "2026-01-01",
  "firstPostedTo": "2026-06-30",
  "primaryCompletionFrom": "2026-11-01",
  "primaryCompletionTo": "2027-03-31",
  "sortBy": "LastUpdatePostDate:desc",
  "maxResults": 200,
  "onlyNewSinceLastRun": false,
  "stateKey": "default",
  "includeLocations": true,
  "onlyRecruitingSitesInCountry": false,
  "includeContacts": false,
  "includeRawRecord": false
}
```

# Actor output Schema

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

All new/changed trials found in this run (default dataset, all fields).

## `overview` (type: `string`):

Default dataset, 'overview' view.

## `changes` (type: `string`):

Default dataset, 'changes' view.

## `sites` (type: `string`):

Default dataset, 'sites' view.

## `runSummary` (type: `string`):

JSON summary of this run (counts, first-run flag, finishedAt) in the default key-value store record RUN_SUMMARY. Monitoring state persists separately in the named key-value store clinicaltrials-monitor-state under STATE-<stateKey>.

# 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 = {
    "condition": "glioblastoma",
    "statuses": [
        "RECRUITING"
    ],
    "onlyNewSinceLastRun": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("heaped_qualm/clinicaltrials-monitor").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 = {
    "condition": "glioblastoma",
    "statuses": ["RECRUITING"],
    "onlyNewSinceLastRun": False,
}

# Run the Actor and wait for it to finish
run = client.actor("heaped_qualm/clinicaltrials-monitor").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 '{
  "condition": "glioblastoma",
  "statuses": [
    "RECRUITING"
  ],
  "onlyNewSinceLastRun": false
}' |
apify call heaped_qualm/clinicaltrials-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,heaped_qualm/clinicaltrials-monitor"
        }
    }
}
```

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/XfoXvQjCbSjUBvkNr/builds/AO5e2zxMahcsCFEwB/openapi.json
