# ClinicalTrials.gov Scraper | Trial Search & Study Updates (`signalfoundryhq/clinical-trials-change-radar`) Actor

Find clinical study metadata by condition, sponsor, intervention and recruitment status. Track updated versions and export JSON or CSV. $3 per 1,000 records.

- **URL**: https://apify.com/signalfoundryhq/clinical-trials-change-radar.md
- **Developed by:** [Signal Foundry](https://apify.com/signalfoundryhq) (community)
- **Categories:** Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.55 / 1,000 delivered study metadata versions

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Search & Study Updates

Search official ClinicalTrials.gov registry metadata for research and pipeline analysis. Filter conditions, sponsors, interventions and study status, or follow known NCT IDs. Repeat calls can emit only newly observed or changed metadata versions.

### Pricing

**$3 per 1,000 delivered records** ($0.003 per result). No Actor start fee. Platform usage is included in this Actor's price. Set a run charge limit in Apify to bound the cost. Skipped duplicate versions are not charged.

For example, 100 delivered records cost $0.30. Zero delivered records have no result charge.

### Quick start

Open Input, supply your filters and click Start. The default dataset can be exported as JSON, CSV or Excel. Each public Example provides a ready-to-use preset.

```json
{
  "condition": "diabetes",
  "statuses": [
    "RECRUITING"
  ],
  "lookbackDays": 90,
  "maxStudiesScanned": 300,
  "onlyNew": false,
  "maxItems": 25
}
```

### Repeat calls and change tracking

Use **onlyNew: true** and the same **stateKey** for a stable feed. The first call delivers current matching versions. Later calls skip already delivered versions and charge only for newly delivered versions. Use a different stateKey for a different query. Reset saved history only when you want a replay.

History retains the most recent 25,000 fingerprints. Versions that leave this bounded history may be delivered again. Collection scans within the configured scan limit before the delivery limit is applied, so unchanged rows cannot consume maxItems. Use onlyNew: false for complete snapshots within these limits.

### Real output example

Captured from the live source on **2026-10-02**. Selected fields are shown below; source dates are preserved.

```json
{
  "nctId": "NCT01496625",
  "title": "National Eye Institute Biorepository for Retinal Diseases",
  "overallStatus": "RECRUITING",
  "phases": [],
  "sponsorName": "National Eye Institute (NEI)",
  "conditions": [
    "Age-Related Macular Degeneration",
    "Diabetic Retinopathy",
    "Von Hippel-Lindau Syndrome",
    "Retinal Disease",
    "Retinal Vein Occlusion"
  ],
  "lastUpdatePosted": "2026-10-02",
  "locations": [
    {
      "facility": "National Institutes of Health Clinical Center",
      "city": "Bethesda",
      "state": "Maryland",
      "country": "United States"
    }
  ],
  "sourceProcessedAt": "2026-10-02T09:00:04",
  "studyUrl": "https://clinicaltrials.gov/study/NCT01496625",
  "signalId": "NCT01496625:7264bac816cc623be1dfb975"
}
```

### API integration

Send your JSON input to the synchronous Apify endpoint. Supply your own Apify token in the Authorization header.

```bash
curl --request POST \
  'https://api.apify.com/v2/acts/signalfoundryhq~clinical-trials-change-radar/run-sync-get-dataset-items?maxTotalChargeUsd=0.05' \
  --header 'Authorization: Bearer YOUR_APIFY_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{"condition":"diabetes","statuses":["RECRUITING"],"lookbackDays":90,"maxStudiesScanned":300,"onlyNew":false,"maxItems":10}'
```

For runs longer than the synchronous endpoint timeout, start an asynchronous Actor run, wait for its final status and retrieve the default dataset. The default key-value store OUTPUT record contains delivered count, skipped duplicates and charge-limit status.

### Coverage and limitations

- ClinicalTrials.gov refreshes its database on working days. Every returned record contains sourceProcessedAt from the official API version endpoint, lastUpdatePosted from the study and collectedAt from this run. Source dates can differ and represent different events.
- Up to **100 NCT IDs**, **10,000 source studies scanned**, and **5,000 delivered study versions** per run. Pagination uses fixed 200-row source pages.
- All search filters combine, including NCT IDs. For unrestricted ID lookup, clear condition, statuses and date filters. Sponsor search may match collaborators. Location search matches source location terms.
- The phase filter is applied locally to the scanned source window. Mixed PHASE2/PHASE3 studies match PHASE3. Narrow filters can return fewer results than maxItems.
- Overall recruitment status describes the study, not every individual site. A registry entry does not establish safety, effectiveness or eligibility. This product is for registry research and is not a medical recommendation.
- One result is one study **metadata version**, not an individual recruitment site, patient or publication. Field-level differences and deleted-study events are not produced.
- Full protocol text, outcome narratives, study documents, contact names, email addresses and patient-level data are excluded.

### Source and reuse

Source: **ClinicalTrials.gov**, a United States Government database. Follow its [Terms and Conditions](https://clinicaltrials.gov/about-site/terms-conditions), including source attribution and keeping redistributions current. No proprietary rights to the registry are claimed. The Actor charges for retrieval, normalization and delivery.

**Modifications:** selected registry metadata is mapped to named JSON fields; record fingerprints, source URLs, collection date and source processing date are added. Protocol narratives, documents and contacts are omitted. The official [API](https://clinicaltrials.gov/data-api/api) supplies the underlying records.

### Support

Report a reproducible issue through this Actor's Issues tab. Include the run ID and filters. Never post an Apify token or private information.

# Actor input Schema

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

ClinicalTrials.gov condition query, such as diabetes.

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

Additional source search expression.

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

Source sponsor search; can match collaborators as well as lead sponsors.

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

Source intervention query, such as pembrolizumab.

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

Source location query. An overall study recruitment status does not prove that an individual site is recruiting.

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

Exact source values, such as RECRUITING, COMPLETED or ACTIVE_NOT_RECRUITING.

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

Optional local filter: EARLY_PHASE1, PHASE1, PHASE2, PHASE3, PHASE4 or NA. Studies without a phase are omitted when this is set.

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

Optional up to 100 NCT IDs. All other filters still apply; clear condition and statuses for unrestricted ID lookup.

## `lookbackDays` (type: `integer`):

0 disables the relative update window. An explicit updatedSince overrides this value.

## `updatedSince` (type: `string`):

Optional inclusive YYYY-MM-DD on the registry last update posted date.

## `maxStudiesScanned` (type: `integer`):

Source studies examined before local phase filtering. Page tokens use a fixed 200-row page size.

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

Keep the same key across repeated calls for one feed. Use a different key for a different query.

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

Skip record versions already delivered with this history key. Changes produce a new fingerprint; field-level diffs and deletion events are not produced.

## `resetState` (type: `boolean`):

Replay current matching records by clearing remembered fingerprints.

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

Maximum matching normalized study versions written to the dataset.

## Actor input object example

```json
{
  "condition": "diabetes",
  "statuses": [
    "RECRUITING"
  ],
  "phases": [],
  "nctIds": [],
  "lookbackDays": 0,
  "maxStudiesScanned": 1000,
  "stateKey": "default",
  "onlyNew": false,
  "resetState": false,
  "maxItems": 100
}
```

# Actor output Schema

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

No description

## `summary` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("signalfoundryhq/clinical-trials-change-radar").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("signalfoundryhq/clinical-trials-change-radar").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 '{}' |
apify call signalfoundryhq/clinical-trials-change-radar --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,signalfoundryhq/clinical-trials-change-radar"
        }
    }
}
```

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/fVWK7HAoX2TO4Z8lY/builds/e9YAeXzdJgEdKTecg/openapi.json
