Public Signal Data / Actors / ClinicalTrials.gov Change Monitor

Life sciences

ClinicalTrials.gov Change Monitor API — Status Flips & New Sites

The ClinicalTrials.gov Change Monitor is an API over the official ClinicalTrials.gov v2 registry (~600,000 studies) that returns only what changed since the last run: newly registered trials matching your filters, status flips with previous and new status, enrollment changes with the delta, and newly added trial sites with facility, location and principal-investigator name as published.

Capabilities

What it does

Catches the flip snapshot scrapers can't

A study whose status flips out of your filter (Recruiting → Terminated) simply vanishes from a snapshot. This actor persists a fingerprint of every tracked study and re-checks tracked studies by NCT ID with no status filter — so the flip itself arrives as a record, with previous_status, new_status and why_stopped.

Field-level diffs, not “this study was updated”

CT.gov's own email alerts tell you something changed and leave the clicking to you. Here every record states exactly what changed: the specific status transition, the enrollment delta, the named new sites.

Site-level and KOL detail

sites_added records carry facility name, city, state, country, site status and PI name exactly as published — site-selection intelligence and KOL mapping straight from the registry.

Any number of watchlists

Each schedule gets its own tracked universe via a stateKey — an oncology phase-3 watch, a single-sponsor watch (e.g. lead sponsor AstraZeneca), and a country-level watch can run side by side.

sample output — one dataset record
{
  "change": "status_change",
  "nct_id": "NCT03606967",
  "brief_title": "Testing the Addition of an Individualized
    Vaccine to Durvalumab and Tremelimumab...",
  "lead_sponsor": "National Cancer Institute (NCI)",
  "previous_status": "RECRUITING",
  "new_status": "ACTIVE_NOT_RECRUITING",
  "why_stopped": null,
  "phases": ["PHASE2"],
  "conditions": ["Metastatic Triple-Negative Breast Carcinoma"],
  "enrollment_count": 86,
  "num_sites": 30,
  "url": "https://clinicaltrials.gov/study/NCT03606967",
  "observed_at": "2026-08-06T22:34:59+00:00"
}
input
{
  "condition": "non-small cell lung cancer",
  "sponsor": "AstraZeneca",
  "phases": ["PHASE2", "PHASE3"],
  "statuses": ["RECRUITING"],
  "countries": ["United States", "Germany"],
  "mode": "delta"
}

Everything is optional — empty input runs a sensible oncology phase-2/3 delta watch. Snapshot mode works too, for one-off pulls.

Playbook

How people use it

Competitive intelligence

A competitor just registered a phase-2 in your indication — that's a new_trial record in tomorrow's run, not a surprise at a conference six months later.

CRO business development

Status flips are BD triggers: enrollment closing means rescue-study and next-phase conversations; a termination means white space. Field-level flips with why_stopped arrive as structured rows your CRM can route.

Site selection & KOL mapping

sites_added records show who is expanding where, with PI names as published — a live map of investigator activity in your therapeutic area.

Biotech investing

Enrollment cuts signal trouble; raises signal confidence. enrollment_change records carry the exact delta, per study, per day.

Integration

Call it from your stack

Synchronous REST, official clients, schedules with webhooks — or expose it directly to an AI agent through the Apify MCP server. More patterns on the integrations page.

run synchronously, get dataset items back
curl -X POST \
  "https://api.apify.com/v2/acts/splendorous_astrolabe_xs9~clinicaltrials-change-monitor/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
  "condition": "non-small cell lung cancer",
  "sponsor": "AstraZeneca",
  "phases": ["PHASE2", "PHASE3"],
  "statuses": ["RECRUITING"],
  "countries": ["United States", "Germany"],
  "mode": "delta"
}'
pip install apify-client
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("splendorous_astrolabe_xs9/clinicaltrials-change-monitor").call(
    run_input={
  "condition": "non-small cell lung cancer",
  "sponsor": "AstraZeneca",
  "phases": ["PHASE2", "PHASE3"],
  "statuses": ["RECRUITING"],
  "countries": ["United States", "Germany"],
  "mode": "delta"
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
any MCP client (Claude, Cursor, ChatGPT, …)
{
  "mcpServers": {
    "public-signal": {
      "url": "https://mcp.apify.com/?actors=splendorous_astrolabe_xs9/clinicaltrials-change-monitor",
      "headers": {
        "Authorization": "Bearer <APIFY_TOKEN>"
      }
    }
  }
}

Pricing

Pay per result, not per seat

Billed through your Apify account's usage credit. The free plan includes $5 of usage every month — no card needed to try it.

Billable eventPriceCharged
Change record$0.01per record: new_trial, status_change, enrollment_change, sites_added, baseline or snapshot row

A single-sponsor daily watch usually costs under $0.10/day; a broad oncology phase-2/3 watch runs $0.30–$1.50/day after a one-time ~$4–5 baseline.

Questions

Frequently asked

How is this better than free ClinicalTrials.gov email alerts?

The free alerts say “this study was updated” in HTML email, one study per blob. This actor delivers field-level diffs as structured JSON — the exact status flip, the enrollment delta, the named new sites — schedulable, webhook-able, and usable by CRMs and AI agents.

How does it compare to Citeline/TrialTrove?

Those platforms cost five figures a year and do far more. If what you need is reliable change detection on the public registry, a daily watch here costs pennies.

What exactly triggers a record?

Five change types: new_trial (a study entered your funnel), status_change (with previous/new status and why_stopped), enrollment_change (with the delta), sites_added (with facility and PI detail), plus one-time baseline records that seed the tracked universe.

Can I track just one sponsor?

Yes — the sponsor filter matches the lead sponsor (e.g. "Merck Sharp & Dohme"), and a dedicated stateKey keeps that watchlist's tracked universe separate from your other schedules.

Related

Pairs well with

Lead generation$0.003

GovCon Monitor

SAM.gov opportunities, fresh awards, and the money mode: expiring federal contracts 6–12 months before the recompete RFP drops.

Lead generation$0.004

New Business Filings

Fresh LLC and corporation registrations from official state portals, normalized and cleaned of formation-mill noise. Day-one B2B leads.

Try ClinicalTrials.gov Change Monitor now

A single-sponsor daily watch usually costs under $0.10/day; a broad oncology phase-2/3 watch runs $0.30–$1.50/day after a one-time ~$4–5 baseline.

Run on Apify ↗