# Clinical Trials Change Monitor: Status & Updates (`offerastudio/clinicaltrials-change-monitor`) Actor

Track changes to ClinicalTrials.gov studies with the official API: overall status and why stopped, phase, enrollment, primary completion date, locations added or removed, results posted, sponsors and arms. Monitor mode returns only what changed; recent-updates mode lists the latest updates.

- **URL**: https://apify.com/offerastudio/clinicaltrials-change-monitor.md
- **Developed by:** [Offera Studio](https://apify.com/offerastudio) (community)
- **Categories:** Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 study returneds

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

### What does Clinical Trials Change Monitor do?

**Clinical Trials Change Monitor** watches **clinical trials on ClinicalTrials.gov** through the **official API v2** and tells you what **changed**. Other Actors dump studies; this one remembers them. It has two modes:

- 🔔 **Monitor**: tracks the studies you choose (by condition, sponsor, search term, phase, status, country or a list of up to 2,000 NCT IDs), keeps a **snapshot in a named key-value store**, and on the next run returns **only the studies that changed**, with a **field-level diff**.
- 🗞️ **Recent updates**: lists the studies that match your filters whose **last update was posted in the last N days**, newest first. No memory between runs.

The monitor reports changes in:

- **overall status** (for example RECRUITING → COMPLETED or TERMINATED, with the sponsor's **why stopped** text)
- **phase**, **enrollment** (actual or estimated) and the **primary completion date** and completion date (actual or estimated)
- **locations added or removed**
- **results posted** (when a study gets its results)
- **lead sponsor and collaborators**
- **arms and interventions**

Every row has the **NCT ID, title, sponsor, phase, status, key dates and a link** to the study.

### Who is it for?

- **Biotech and pharma competitive intelligence**: a competitor's trial moves from recruiting to terminated, changes its primary completion date or opens sites in a new country.
- **Investors and analysts**: catch trial delays, enrollment changes and results postings before they show up in news.
- **Patient recruitment vendors and sites**: see new studies and new sites in your conditions and countries.
- **CROs and consultants**: keep a portfolio of NCT IDs under watch for a client.

### How to use it

1. Click **Start** with the default input: **Recent updates**, condition **obesity**, **phase 3**, **last 7 days**, up to 50 studies.
2. For change tracking, choose **Mode: Monitor** and give it something to track: conditions, search terms, sponsors, phases, statuses, countries and/or NCT IDs. The **first run saves a baseline**.
3. **Schedule** the Actor (for example daily). From the second run you get rows only for **changed** studies and **new** studies that now match, each with a `changes` list. Connect the dataset to Slack, e-mail or a webhook.

In monitor mode the tracked studies are read again **by NCT ID**, so a study that no longer matches your filters (for example a status filter on RECRUITING after the study completed) is still reported as changed. The filters only decide which studies get picked up.

### Input example

```json
{
    "mode": "monitor",
    "conditions": ["obesity"],
    "sponsors": ["Novo Nordisk"],
    "phases": ["PHASE3"],
    "nctIds": ["NCT05567796"],
    "maxResults": 100,
    "includeUnchanged": false,
    "monitorName": "obesity-phase3"
}
```

| Field | Meaning |
| --- | --- |
| `mode` | `recent-updates` (default) or `monitor`. |
| `conditions`, `searchTerms`, `sponsors` | Lists of alternatives: a study matching any entry is included. Different lists narrow each other. |
| `nctIds` | Up to 2,000 NCT IDs. In monitor mode they are always tracked, besides what the filters find. |
| `phases` | `EARLY_PHASE1`, `PHASE1`, `PHASE2`, `PHASE3`, `PHASE4`, `NA`. |
| `statuses` | `NOT_YET_RECRUITING`, `RECRUITING`, `ENROLLING_BY_INVITATION`, `ACTIVE_NOT_RECRUITING`, `COMPLETED`, `SUSPENDED`, `TERMINATED`, `WITHDRAWN`, `UNKNOWN`. |
| `countries` | Studies with a site in these countries, spelled as ClinicalTrials.gov does (`United States`, `Germany`). |
| `updatedWithinDays` | Recent updates mode: 1 to 365 days, default 7. |
| `maxResults` | Recent updates: studies returned. Monitor: studies tracked (the most recently updated that match). Up to 2,000, default 50. |
| `includeUnchanged` | Monitor mode: also return tracked studies that did not change (off by default; on in the example input so a first try shows rows). |
| `monitorName` | Names the snapshot store, so you can edit the filters without losing the name. |

### Output example

Real output of a local run on 2 October 2026 with the default input (recent updates, obesity, phase 3, 7 days): 31 studies, here the first four.

| NCT ID | Sponsor | Phase | Status | Last update | Primary completion | Enrollment | Sites |
| --- | --- | --- | --- | --- | --- | --- | --- |
| NCT07775404 | AstraZeneca | PHASE3 | RECRUITING | 2026-10-01 | 2028-04-06 | 351 (estimated) | 44 |
| NCT06077864 | Boehringer Ingelheim | PHASE3 | COMPLETED | 2026-09-30 | 2026-06-01 | 5,531 (actual) | 540 |
| NCT05567796 | Novo Nordisk A/S | PHASE3 | ACTIVE_NOT_RECRUITING | 2026-09-30 | 2024-10-30 | 3,400 (estimated) | 254 |
| NCT07533175 | Novo Nordisk A/S | PHASE3 | RECRUITING | 2026-09-30 | 2028-08-07 | 630 (estimated) | 73 |

A monitor run. To show a change without waiting for one, **the saved snapshot was edited locally** (an enrollment, a primary completion date and the locations of one study, and a status and phase of another, were changed in the snapshot); the studies themselves are the real ones of 2 October 2026. The run returned the two changed studies and none of the three unchanged ones. One row (shortened):

```json
{
    "nctId": "NCT06077864",
    "title": "A Study to Test the Effect of Survodutide (BI 456906) on Cardiovascular Safety in People With Overweight or Obesity (SYNCHRONIZE™ - CVOT)",
    "sponsor": "Boehringer Ingelheim",
    "sponsorClass": "INDUSTRY",
    "phase": "PHASE3",
    "status": "COMPLETED",
    "whyStopped": null,
    "enrollmentCount": 5531,
    "enrollmentType": "ACTUAL",
    "primaryCompletionDate": "2026-06-01",
    "primaryCompletionDateType": "ACTUAL",
    "completionDate": "2026-06-30",
    "lastUpdatePostDate": "2026-09-30",
    "hasResults": false,
    "locationCount": 540,
    "url": "https://clinicaltrials.gov/study/NCT06077864",
    "mode": "monitor",
    "changeStatus": "changed",
    "summary": "Overall status ACTIVE_NOT_RECRUITING → COMPLETED; Phase PHASE2/PHASE3 → PHASE3",
    "changedFields": ["overallStatus", "phase"],
    "changes": [
        { "field": "overallStatus", "label": "Overall status", "from": "ACTIVE_NOT_RECRUITING", "to": "COMPLETED", "added": [], "removed": [] },
        { "field": "phase", "label": "Phase", "from": "PHASE2/PHASE3", "to": "PHASE3", "added": [], "removed": [] }
    ],
    "previousCheckedAt": "2026-09-25T06:00:00.000Z",
    "retrievedAt": "2026-10-02T06:19:15.248Z",
    "error": null,
    "errorMessage": null
}
```

For list fields (`locations`, `collaborators`, `arms`, `interventions`) a change has `added` and `removed` lists instead of `from` and `to`. When a study is stopped, `whyStopped` is reported as a change of its own and appears in the summary: `Overall status RECRUITING → TERMINATED (why stopped: ...)`.

`changeStatus` in monitor mode: `baseline` (first run, or after a change of the filters), `new` (a study that matches your filters now and was not tracked before), `changed`, `unchanged`. In recent-updates mode it is `recent-update`.

### How much does it cost?

This Actor uses **pay per event**:

| Event | Price |
| --- | --- |
| Study returned (one row per study) | **$0.002** |
| Error rows and "no results" rows | **free** |

- The default run (31 studies) costs **$0.062**; 1,000 studies cost **$2**.
- In monitor mode you pay for the rows you get: the first run returns one baseline row per tracked study; later runs return only the changed and new studies (unchanged ones only if you ask for them).
- The ClinicalTrials.gov API is free. Apify also charges a tiny standard start fee per run.
- Set **Maximum cost per run** in the run options and the Actor stops when it is reached.

### Limitations

- **Only what ClinicalTrials.gov publishes.** The data is registered by sponsors; fields can be late, wrong or removed, and the registry's own "last update" dates are what they are.
- **No field-level history in recent-updates mode**: the API does not offer version history, so that mode shows the current state of studies that were updated. Use monitor mode to get diffs from the time you start tracking.
- **Monitor mode compares with your last run**, not with the registry's history: several edits between two runs show up as one change.
- **Up to 2,000 studies tracked** per monitor (the snapshot must fit in 9 MB compressed). Studies with hundreds of locations are bigger; a snapshot that is too large is not saved and the run says so.
- Filters use ClinicalTrials.gov's own search: conditions and terms are matched by its engine (with synonyms); country filters match sites listed for the study.
- The first run of a monitor returns **baseline rows** for every tracked study. If you only want change rows from the second run on, keep the maximum low and ignore the `baseline` rows.
- A study that the API does not return in a later run keeps its saved version (and a note appears); it is not reported as removed.

### FAQ

#### Is this official data?

Yes. It comes from the ClinicalTrials.gov API v2 run by the U.S. National Library of Medicine.

#### How is monitor mode different from recent updates?

Monitor mode remembers each study and tells you **what** changed (status, dates, enrollment, sites ...). Recent updates only lists studies that were updated lately, without saying what changed.

#### Does it show contacts or investigators?

No. The Actor does not request or return contact names, e-mail addresses or phone numbers, only study facts, sponsor names, sites and dates.

#### Why did a study I track show as changed with no obvious reason?

ClinicalTrials.gov records many small updates. The `changes` list shows exactly which tracked fields differ from your last run; fields the monitor does not track (descriptions, eligibility text) do not create a change row.

#### Can I monitor competitors by sponsor?

Yes: put the sponsor in `sponsors` (for example `Pfizer`), pick phases, and run in monitor mode. New studies of that sponsor appear as `new`.

### More tools from the same developer

All pay-per-result, no proxy or login needed, built and maintained by the same developer:

**Website audits**

- [Website Accessibility Checker: WCAG 2.2 & EAA](https://apify.com/offerastudio/website-accessibility-audit): accessibility issues with fixes, SEO basics and security headers.
- [Cookie & Tracker Audit: GDPR Consent Checker](https://apify.com/offerastudio/cookie-tracker-audit): cookies and tracking tags that load before consent.
- [AI Crawler Access Checker: robots.txt & llms.txt](https://apify.com/offerastudio/ai-crawler-access-audit): which AI crawlers a site allows, plus llms.txt.
- [Structured Data Validator: Schema & Rich Results](https://apify.com/offerastudio/structured-data-validator): JSON-LD and Microdata checked against Google's rich result rules.
- [Website Change Monitor: Diffs, Prices & Alerts](https://apify.com/offerastudio/website-change-monitor): get a row only when a page changes, with a clean diff.
- [Policy Change Monitor: Privacy & Terms Tracker](https://apify.com/offerastudio/policy-change-monitor): privacy policy and terms changes, classified clause by clause.
- [SaaS Pricing Monitor: Track Competitor Plans](https://apify.com/offerastudio/saas-pricing-monitor): competitor pricing plans as structured data, with price-change diffs.
- [Sitemap Change Monitor: New & Removed URLs](https://apify.com/offerastudio/sitemap-change-monitor): new, removed and changed URLs from a site's sitemaps.
- [Site SEO Crawler: Broken Links & On-Page Audit](https://apify.com/offerastudio/site-seo-crawler-audit): site-wide crawl for broken links, redirects and on-page SEO issues.
- [Website Tech Stack Detector: Bulk Lead Filters](https://apify.com/offerastudio/website-tech-stack-detector): technologies used by websites, with filters for lead lists.
- [Domain Availability & Expiry Checker (RDAP)](https://apify.com/offerastudio/domain-whois-availability): domain availability, registrar and expiry dates from RDAP.
- [Status Page SLA Monitor: Uptime & Incidents](https://apify.com/offerastudio/status-page-sla-monitor): SaaS vendor uptime, incidents and a monthly SLA table from public status pages.

**Company data and compliance**

- [Company Contact Finder: Emails, Phones & Socials](https://apify.com/offerastudio/company-contact-finder): contact details published on company websites.
- [UK New Companies Feed: Companies House Daily](https://apify.com/offerastudio/uk-new-companies-feed): newly incorporated UK companies with sector filters.
- [EU VAT Number Validator: Bulk VIES Checker](https://apify.com/offerastudio/eu-vat-number-validator): bulk VAT checks with name, address and consultation number.
- [LEI Corporate Tree: GLEIF Parents & Subsidiaries](https://apify.com/offerastudio/gleif-lei-corporate-tree): LEI lookup with parents, subsidiaries and a KYC summary.
- [UK Company Distress Watch: Insolvency Alerts](https://apify.com/offerastudio/uk-company-distress-watch): administrations, liquidations and winding-up petitions from The Gazette.
- [IBAN Validator: Bulk Check & Bank Lookup](https://apify.com/offerastudio/iban-bank-validator): IBAN format and checksum, plus bank name and BIC where open data exists.
- [Sanctions Screening: OFAC, EU, UN & UK Lists](https://apify.com/offerastudio/sanctions-screening): names screened against official sanctions lists, with match scores.
- [OSHA & EPA Violation Monitor: Fines by Company](https://apify.com/offerastudio/osha-epa-violation-monitor): US OSHA and EPA enforcement cases and penalties by company.
- [Email List Precheck: Syntax, MX & Disposable Check](https://apify.com/offerastudio/email-list-precheck): cheap email list hygiene before a real verification.
- [UK Company Officer Changes: Director & PSC Alerts](https://apify.com/offerastudio/uk-company-officer-changes): director, owner, address and status changes for a watchlist of UK companies.
- [FDA Warning Letters Monitor: By Company & Subject](https://apify.com/offerastudio/fda-warning-letters-monitor): FDA warning letters by company and subject, with cited regulations.
- [Supplier Risk Report: Sanctions, VAT & Insolvency](https://apify.com/offerastudio/supplier-risk-report): one risk row per supplier from eight official registers, with changes since last run.
- [Brand Impersonation Domain Monitor: Look-alikes](https://apify.com/offerastudio/brand-impersonation-domain-monitor): look-alike domains and certificates that imitate your brand, with a risk score.

**Media and AI**

- [Audio & Video Transcriber: Podcasts, SRT, Speakers](https://apify.com/offerastudio/audio-video-transcriber): audio, video, podcasts and social links to text, SRT and VTT.
- [Podcast Mention Alerts: Brand Mentions by Second](https://apify.com/offerastudio/podcast-mention-alerts): where your brand is said in new podcast episodes, with the exact second.
- [News Brand Mentions Monitor: New Articles Only](https://apify.com/offerastudio/news-brand-mentions-monitor): new news articles about your brand, people or topics.
- [YouTube Channel Monitor: New Videos & Growth](https://apify.com/offerastudio/youtube-channel-monitor): new videos and view growth of the channels you watch.

**Market signals**

- [US WARN Layoff Notices: 12 States Daily Feed](https://apify.com/offerastudio/us-warn-layoff-notices): layoff and plant closure notices from official state sources.
- [US Product Recalls Monitor: FDA & CPSC Feed](https://apify.com/offerastudio/us-product-recalls-monitor): FDA and CPSC recalls in one feed, with severity.
- [EU Tenders Feed: TED Public Procurement Alerts](https://apify.com/offerastudio/eu-tender-feed): EU public tenders from TED with CPV, country and value filters.
- [Liquor License Openings: New Bars & Stores (US)](https://apify.com/offerastudio/liquor-license-openings): new US liquor licences from official state open data.
- [Career Site Jobs Monitor: ATS Jobs & New Roles](https://apify.com/offerastudio/career-site-jobs-monitor): open roles from company career sites, with new and closed roles since the last run.
- [App Reviews Monitor: App Store & Google Play](https://apify.com/offerastudio/app-store-reviews-monitor): app reviews from both stores, only new ones in monitor mode.
- [US Federal Contracts Feed: SAM.gov & USAspending](https://apify.com/offerastudio/us-federal-contracts-feed): SAM.gov contract opportunities with the buyer's award history.
- [Grants.gov Opportunities: US Federal Grants Feed](https://apify.com/offerastudio/grants-gov-opportunities): US federal grant opportunities by keyword, eligibility and agency.
- [Federal Register Monitor: US Rules & Notices Feed](https://apify.com/offerastudio/federal-register-monitor): new US rules, proposed rules and notices by agency or topic.
- [B2B Sales Trigger Feed: Hiring + Tech Leads](https://apify.com/offerastudio/b2b-sales-trigger-feed): companies hiring for a role and using (or not using) a technology, with contacts.
- [Local Business Leads: OpenStreetMap, No Website](https://apify.com/offerastudio/local-business-leads-osm): local businesses by city and category, including those with no website.
- [Solana Token Pair Monitor: New & Trending Pairs](https://apify.com/offerastudio/solana-token-pair-monitor): new and trending Solana pairs with liquidity, volume and safety flags.

### Feedback

Missing a field you want to track? Open an issue on the **Issues** tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/offerastudio/clinicaltrials-change-monitor/changelog.md

# Actor input Schema

## `mode` (type: `string`):

Recent updates: studies updated in the last N days that match your filters (no memory between runs). Monitor: keeps a snapshot of the tracked studies in a named key-value store and returns only what changed since the last run, with a field-level diff.

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

Diseases or conditions, for example obesity or "breast cancer". Studies matching any of them are included.

## `searchTerms` (type: `array`):

Other terms, such as a drug or a keyword (semaglutide, CAR-T). Studies matching any of them are included.

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

Lead sponsors or collaborators, for example Pfizer or "Novo Nordisk". Studies of any of them are included.

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

Up to 2,000 specific studies, for example NCT05567796. In monitor mode they are always tracked, besides what the other filters find.

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

Only studies of these phases. Leave empty for all.

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

Only studies with one of these overall statuses. In monitor mode this only decides which studies are picked up: once tracked, a status change (for example RECRUITING to COMPLETED) is still reported.

## `countries` (type: `array`):

Only studies with a site in one of these countries, spelled as ClinicalTrials.gov does, for example United States or Germany.

## `updatedWithinDays` (type: `integer`):

Recent updates mode: studies whose last update was posted in the last N days (1 to 365).

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

Recent updates: stop after this many studies (newest update first). Monitor: how many studies are tracked (the most recently updated that match; your NCT IDs are always tracked). Each study returned costs $0.002.

## `includeUnchanged` (type: `boolean`):

In monitor mode, also return a row for tracked studies that did not change. Off by default, so the dataset (and your alerts) only get rows when something changed. It is switched on in the example input only so a first try always shows rows; turn it off for monitoring.

## `monitorName` (type: `string`):

Name of this monitor's snapshot store (letters, digits, spaces, - and \_). Runs with the same name share the snapshot. Leave empty to derive it from the filters; then changing a filter starts a new monitor with a new baseline.

## Actor input object example

```json
{
  "mode": "recent-updates",
  "conditions": [
    "obesity"
  ],
  "phases": [
    "PHASE3"
  ],
  "updatedWithinDays": 7,
  "maxResults": 50,
  "includeUnchanged": true
}
```

# Actor output Schema

## `studies` (type: `string`):

No description

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

No description

# 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": [
        "obesity"
    ],
    "phases": [
        "PHASE3"
    ],
    "updatedWithinDays": 7,
    "maxResults": 50,
    "includeUnchanged": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("offerastudio/clinicaltrials-change-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 = {
    "conditions": ["obesity"],
    "phases": ["PHASE3"],
    "updatedWithinDays": 7,
    "maxResults": 50,
    "includeUnchanged": True,
}

# Run the Actor and wait for it to finish
run = client.actor("offerastudio/clinicaltrials-change-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 '{
  "conditions": [
    "obesity"
  ],
  "phases": [
    "PHASE3"
  ],
  "updatedWithinDays": 7,
  "maxResults": 50,
  "includeUnchanged": true
}' |
apify call offerastudio/clinicaltrials-change-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,offerastudio/clinicaltrials-change-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/Ri5g1EEIsi1ZYuuqc/builds/RxHJmU6XjChvruO2G/openapi.json
