Clinical Trial Tracker
## What does Clinical Trial Tracker do?
Maintenance Pulse
90/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| trial-fetched | Charged per clinical trial record retrieved from ClinicalTrials.gov. | $0.002 |
Example: 100 events = $0.20 · 1,000 events = $2.00
Documentation
What does Clinical Trial Tracker do?
Clinical Trial Tracker is an Apify actor that searches and extracts structured data from ClinicalTrials.gov, the world's largest registry of clinical studies with over 500,000 trials from 221 countries. Filter by disease, drug, sponsor, trial phase, recruitment status, or geographic location and get clean, structured JSON output ready for analysis, integration, or monitoring.
This actor uses the official ClinicalTrials.gov API v2 -- no API key required, no login needed, and no scraping involved. Every run returns richly detailed trial records including interventions, eligibility criteria, enrollment numbers, primary outcomes, site locations, and direct links back to the source registry.
Why use Clinical Trial Tracker on Apify?
The ClinicalTrials.gov website is designed for one-off searches, not systematic data collection. There is no built-in export for large datasets, no way to monitor for new trials, and no structured data format suitable for analysis pipelines.
The raw ClinicalTrials.gov API v2, while free and powerful, requires handling pagination with page tokens, mapping deeply nested response objects, managing rate limits (~50 requests/minute), and building query parameters. This actor does all of that:
- No API key required -- The ClinicalTrials.gov API is completely free and public.
- Structured output -- Deeply nested API responses are mapped to flat, consistent JSON records.
- Automatic pagination -- Retrieves up to 5,000 trials per run with cursor-based pagination.
- Post-query filtering -- Filter results by recruitment status and trial phase after the API query.
- Built-in rate limiting -- Stays within ClinicalTrials.gov guidelines (1.5-second intervals between requests).
- Scheduled monitoring -- Track new trials weekly with Apify's scheduler.
Key features
- Search by disease or condition -- Query trials for any condition: diabetes, lung cancer, Alzheimer's, rare diseases, or any of the thousands of conditions tracked.
- Filter by drug or intervention -- Narrow results to specific drugs (pembrolizumab, metformin), devices, biologics, or behavioral interventions.
- Sponsor and collaborator search -- Find all trials run by a specific pharmaceutical company, university, or government agency.
- Geographic location filtering -- Search trials by country, state, or city to find studies recruiting near a specific location.
- Recruitment status filters -- Focus on actively recruiting trials, completed studies, or any combination.
- Phase-level filtering -- Isolate Phase 1, Phase 2, Phase 3, or Phase 4 trials.
- Rich structured output -- Every trial record includes conditions, interventions, eligibility, enrollment counts, outcome measures, site locations, and timeline dates.
- Up to 5,000 results per run -- Automatic pagination with cursor-based tokens.
Use cases
Pharmaceutical competitive intelligence -- A market intelligence team at a mid-size pharma company tracks all Phase 3 trials for PD-1/PD-L1 inhibitors. They run the actor weekly with intervention: "pembrolizumab" and phaseFilter: ["PHASE3"], exporting results to Google Sheets where they compare enrollment targets and site counts across competitors.
CRO business development -- A clinical research organization monitors newly registered trials by running daily with statusFilter: ["NOT_YET_RECRUITING"] and sortBy: "StartDate:desc". When a new trial appears from a target sponsor, they trigger a Slack notification to the BD team.
Patient advocacy database -- A rare disease foundation searches for all trials mentioning their condition, regardless of status. They schedule monthly runs and publish the results on their website to help patients find relevant studies.
Biotech investment analysis -- A venture capital analyst evaluates a biotech startup's pipeline by searching for all trials sponsored by the company. They compare enrollment numbers, phases, and completion timelines against the company's investor presentations.
Systematic review -- An academic researcher gathers all completed trials for a specific drug across all phases and countries. They export to CSV for meta-analysis, using the structured eligibility criteria and primary outcomes to assess study quality.
Healthcare policy research -- A policy researcher tracks clinical trial activity by geographic region, using the location filter to compare trial density across US states or between countries.
How to use Clinical Trial Tracker
- Set your search parameters -- Enter at least one of: a condition or disease name, an intervention or drug name, a sponsor organization, or a geographic location. You can combine multiple parameters to narrow your search.
- Apply optional filters -- Use the status filter to focus on recruiting trials only, or the phase filter to isolate Phase 3 studies. Leave these empty to return all statuses and phases.
- Configure result limits and sorting -- Set the maximum number of results (up to 5,000) and choose how results are sorted: by start date, last update, or enrollment count.
- Run the actor -- Click "Start" on the Apify platform or trigger via the API.
- Export your data -- Download results as JSON, CSV, or Excel from the Apify dataset view.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
condition | String | At least one search field | "lung cancer" | Disease or condition to search for |
intervention | String | At least one search field | - | Drug, device, or intervention name |
sponsor | String | At least one search field | - | Sponsor organization name |
location | String | At least one search field | - | Country, state, or city for trial site filtering |
statusFilter | String[] | No | Recruiting + Active | Filter by trial recruitment status |
phaseFilter | String[] | No | All phases | Filter by trial phase |
maxResults | Integer | No | 50 | Maximum number of trials to return (1-5,000) |
sortBy | String | No | StartDate:desc | Sort order for results |
Input examples
Phase 3 cancer immunotherapy trials:
{
"condition": "non-small cell lung cancer",
"intervention": "pembrolizumab",
"phaseFilter": ["PHASE3"],
"statusFilter": ["RECRUITING", "ACTIVE_NOT_RECRUITING"],
"maxResults": 100
}
All trials by a specific sponsor:
{
"sponsor": "Pfizer",
"maxResults": 500,
"sortBy": "StartDate:desc"
}
Recruiting trials near a location:
{
"condition": "type 2 diabetes",
"location": "Texas",
"statusFilter": ["RECRUITING"],
"maxResults": 200
}
Completed rare disease trials for systematic review:
{
"condition": "cystic fibrosis",
"statusFilter": ["COMPLETED"],
"maxResults": 5000,
"sortBy": "StartDate:desc"
}
Input tips
- Combine search fields for precision -- Searching for condition "breast cancer" AND intervention "trastuzumab" AND sponsor "Roche" returns highly targeted results.
- Use
COMPLETEDstatus for historical analysis -- Include completed trials to see what has been studied in your area of interest. - Sort by
LastUpdatePostDate:descfor monitoring -- When scheduling recurring runs, this ensures you catch newly modified trials first. - Start small -- Run with 10-20 results first to verify your search parameters before scaling to thousands.
Output example
Each trial record in the dataset:
{
"nctId": "NCT05839626",
"title": "A Study of Datopotamab Deruxtecan in Participants With Advanced Non-Small Cell Lung Cancer",
"officialTitle": "TROPION-Lung08: A Phase 3 Study...",
"status": "RECRUITING",
"phases": ["PHASE3"],
"studyType": "INTERVENTIONAL",
"sponsor": "AstraZeneca",
"sponsorClass": "INDUSTRY",
"collaborators": ["Daiichi Sankyo, Inc."],
"conditions": ["Non-small Cell Lung Cancer"],
"interventions": [
{
"type": "DRUG",
"name": "Datopotamab Deruxtecan",
"description": "Antibody-drug conjugate targeting TROP2"
}
],
"enrollment": 860,
"enrollmentType": "ESTIMATED",
"startDate": "2023-07-18",
"primaryCompletionDate": "2027-03-15",
"completionDate": "2028-06-30",
"lastUpdated": "2024-11-22",
"briefSummary": "This study will evaluate the efficacy and safety...",
"eligibility": {
"criteria": "Inclusion Criteria:\n- Adults aged 18 years or older...",
"healthyVolunteers": false,
"sex": "ALL",
"minimumAge": "18 Years",
"maximumAge": null
},
"locations": [
{
"facility": "MD Anderson Cancer Center",
"city": "Houston",
"state": "Texas",
"country": "United States"
}
],
"primaryOutcomes": [
{
"measure": "Progression-Free Survival (PFS)",
"timeFrame": "From randomization until disease progression or death, up to 48 months"
}
],
"hasResults": false,
"url": "https://clinicaltrials.gov/study/NCT05839626"
}
Output fields
| Field | Type | Description |
|---|---|---|
nctId | String | ClinicalTrials.gov unique identifier (e.g., NCT05839626) |
title | String | Brief title of the study |
officialTitle | String/null | Full official title |
status | String | Recruitment status (RECRUITING, COMPLETED, etc.) |
phases | String[] | Trial phases (PHASE1, PHASE2, PHASE3, PHASE4, EARLY_PHASE1, NA) |
studyType | String/null | Study type (INTERVENTIONAL, OBSERVATIONAL, etc.) |
sponsor | String/null | Lead sponsor organization name |
sponsorClass | String/null | Sponsor classification (INDUSTRY, NIH, NETWORK, OTHER) |
collaborators | String[] | Names of collaborating organizations |
conditions | String[] | Conditions or diseases studied |
interventions | Object[] | Array of { type, name, description } for each intervention |
enrollment | Number/null | Target or actual enrollment count |
enrollmentType | String/null | ESTIMATED or ACTUAL |
startDate | String/null | Study start date |
primaryCompletionDate | String/null | Primary completion date (primary endpoint data collection) |
completionDate | String/null | Overall study completion date |
lastUpdated | String/null | Date of last update on ClinicalTrials.gov |
briefSummary | String/null | Brief description of the study |
eligibility | Object/null | Eligibility criteria including age range, sex, healthy volunteers |
locations | Object[] | Array of { facility, city, state, country } for each trial site |
primaryOutcomes | Object[] | Array of { measure, timeFrame } for primary endpoints |
hasResults | Boolean | Whether the trial has posted results on ClinicalTrials.gov |
url | String | Direct link to the trial on ClinicalTrials.gov |
How to use the API programmatically
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_API_TOKEN")
run_input = {
"condition": "non-small cell lung cancer",
"phaseFilter": ["PHASE3"],
"statusFilter": ["RECRUITING"],
"maxResults": 100,
}
run = client.actor("ryanclinton/clinical-trial-tracker").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['nctId']}: {item['title']}")
print(f" Sponsor: {item['sponsor']} | Enrollment: {item['enrollment']} | Phase: {item['phases']}")
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_APIFY_API_TOKEN" });
const run = await client.actor("ryanclinton/clinical-trial-tracker").call({
condition: "non-small cell lung cancer",
phaseFilter: ["PHASE3"],
statusFilter: ["RECRUITING"],
maxResults: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
console.log(`${item.nctId}: ${item.title}`);
console.log(` Sponsor: ${item.sponsor} | Enrollment: ${item.enrollment}`);
});
cURL
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~clinical-trial-tracker/runs?token=YOUR_APIFY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"condition": "lung cancer",
"phaseFilter": ["PHASE3"],
"maxResults": 50
}'
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_APIFY_API_TOKEN&format=json"
How it works
-
Query construction -- The actor maps input parameters to ClinicalTrials.gov API v2 query fields:
query.condfor condition,query.intrfor intervention,query.sponsfor sponsor, andquery.locnfor location. -
Pagination -- The ClinicalTrials.gov API v2 uses cursor-based pagination with page tokens. The actor requests up to 100 studies per page and follows
nextPageTokenvalues until all results are fetched or themaxResultslimit is reached. The first request includescountTotal=trueto get the total match count. -
Post-query filtering -- Status and phase filters are applied after the API returns results. This is necessary because the API's native filtering options are limited. The actor checks each trial against the specified
statusFilterandphaseFiltersets and skips non-matching records. -
Response mapping -- The ClinicalTrials.gov API returns deeply nested protocol section objects (identificationModule, statusModule, sponsorCollaboratorsModule, etc.). The actor maps these to a flat, consistent output structure, extracting the primary contact, lead sponsor, interventions, locations, eligibility criteria, and primary outcomes.
-
Rate limiting -- Requests are throttled to 1.5-second intervals (approximately 40 requests/minute), staying safely below the API's ~50 requests/minute guideline.
-
Output -- One record per trial is pushed to the Apify dataset with all structured fields.
How much does it cost?
| Scenario | Trials | Est. Runtime | Est. Cost |
|---|---|---|---|
| Quick check | 50 | ~15 sec | ~$0.002 |
| Standard search | 500 | ~2 min | ~$0.02 |
| Large dataset | 5,000 | ~10 min | ~$0.10 |
Apify Free Tier: $5 of free monthly credits -- enough for hundreds of runs per month.
ClinicalTrials.gov API: Completely free. No API key, no charges, no registration.
Recruitment status reference
| Status | Description |
|---|---|
RECRUITING | Actively seeking participants |
NOT_YET_RECRUITING | Approved but not yet recruiting |
ACTIVE_NOT_RECRUITING | Ongoing but no longer enrolling |
COMPLETED | Study has ended normally |
TERMINATED | Study stopped early |
WITHDRAWN | Withdrawn before enrollment |
SUSPENDED | Temporarily halted |
ENROLLING_BY_INVITATION | Enrolling by invitation only |
UNKNOWN | Status has not been verified recently |
Trial phase reference
| Phase | Description | Typical Enrollment |
|---|---|---|
EARLY_PHASE1 | Exploratory IND studies | 10-30 |
PHASE1 | Safety, dosage, side effects | 20-100 |
PHASE2 | Efficacy, side effects | 100-300 |
PHASE3 | Confirm efficacy, monitor side effects | 300-3,000+ |
PHASE4 | Post-marketing surveillance | 1,000+ |
NA | Not applicable (observational, etc.) | Varies |
Combine with other actors
- openFDA Drug Event Monitor -- Search FDA adverse drug event reports for drugs being tested in clinical trials. Cross-reference safety signals with trial phases.
- PubMed Biomedical Literature Search -- Find published research papers related to trial conditions and interventions for literature reviews.
- NIH Research Grants Search -- Discover NIH-funded research grants linked to clinical trial programs and therapeutic areas.
- SEC EDGAR Filing Analyzer -- Analyze pharma company SEC filings for pipeline disclosures, revenue projections, and risk factors related to their clinical programs.
- EMA Medicines Search -- Search European Medicines Agency data for drugs with marketing authorization, complementing US clinical trial data.
- OpenAlex Research Search -- Search 250M+ academic works for publications related to trial results and endpoints.
- FDA Medical Device Recall Search -- Track device recalls alongside clinical trial safety data for medical devices.
Limitations
- Post-query filtering reduces results -- Status and phase filters are applied after the API query, meaning the actor may fetch more records from the API than appear in the output. If you request 50 results but filter aggressively, you may get fewer.
- Location search is text-based -- The location filter uses text matching, not geographic radius. Search "Texas" or "United States" rather than coordinates.
- No full-text search -- The API searches specific fields (condition, intervention, sponsor, location) but does not support full-text search across all trial content.
- Rate limiting adds latency -- The 1.5-second interval between requests means large runs (5,000 trials) take 10+ minutes. This is necessary to respect API guidelines.
- Eligibility criteria is unstructured text -- While enrollment age and sex are structured, the detailed inclusion/exclusion criteria are returned as raw text, not parsed fields.
- 5,000 result cap -- The actor supports up to 5,000 trials per run. For larger datasets, run multiple queries with different filter combinations.
Responsible use
- Public data -- All data comes from ClinicalTrials.gov, a public registry maintained by the U.S. National Library of Medicine. No private or restricted data is accessed.
- Rate limiting -- The actor throttles requests to stay within API guidelines. Do not bypass or modify the rate limiting.
- Not medical advice -- Trial data is for research and informational purposes only. Do not use this data to make medical decisions. Patients should consult healthcare providers.
- Scheduling -- Weekly or daily runs are appropriate. Avoid scheduling more frequently than needed.
- Data accuracy -- Trial information is self-reported by study sponsors and may not always be current. Always verify critical details on ClinicalTrials.gov.
FAQ
What data source does this actor use? The official ClinicalTrials.gov API v2 maintained by the U.S. National Library of Medicine (NLM), containing over 500,000 clinical studies from 221 countries.
Do I need an API key? No. The ClinicalTrials.gov API v2 is completely free and open with no authentication required.
How current is the data? ClinicalTrials.gov is updated in real time by study sponsors. The actor fetches live data on each run.
Can I search for rare diseases? Yes. ClinicalTrials.gov includes trials for rare and orphan diseases. Consider removing status filters to capture all historical trials.
Can I get results for trials outside the United States? Absolutely. Use the location field to search by any country, city, or region. ClinicalTrials.gov contains trials from 221 countries.
What are the API rate limits? The actor includes built-in rate limiting (1.5-second intervals) to stay within ClinicalTrials.gov guidelines of approximately 50 requests per minute.
Can I export to CSV or Excel?
Yes. After the actor completes, click "Export" on the dataset page and choose your format. The Apify API also supports format=csv and format=xlsx parameters.
How do I find trials for a specific drug?
Use the intervention field with the drug name (e.g., "pembrolizumab", "metformin"). You can combine this with a condition for more targeted results.
Integrations
- Google Sheets -- Export trial data directly for collaborative analysis and tracking.
- Slack / Email -- Get notifications when new trials appear for your monitored conditions.
- Webhooks -- Push results to your data warehouse, CRM, or custom pipeline.
- Zapier / Make -- Build multi-step automations combining trial data with other sources.
- REST API -- Call the actor programmatically from any language or platform.
- Python & JavaScript SDKs -- Use the official Apify client libraries for seamless integration.
How it works
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
Get results
Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.
Use cases
Sales Teams
Build targeted lead lists with verified contact data.
Marketing
Research competitors and identify outreach opportunities.
Data Teams
Automate data collection pipelines with scheduled runs.
Developers
Integrate via REST API or use as an MCP tool in AI workflows.
Related actors
Bulk Email Verifier
Verify email deliverability at scale. MX record validation, SMTP mailbox checks, disposable and role-based detection, catch-all flagging, and confidence scoring. No external API costs.
GitHub Repository Search
Search GitHub repositories by keyword, language, topic, stars, forks. Sort by stars, forks, or recently updated. Returns metadata, topics, license, owner info, URLs. Free API, optional token for higher limits.
Website Content to Markdown
Convert any website to clean Markdown for RAG pipelines, LLM training, and AI apps. Crawls pages, strips boilerplate, preserves headings, tables, and code blocks. GFM support.
Website Tech Stack Detector
Detect 100+ web technologies on any website. Identifies CMS, frameworks, analytics, marketing tools, chat widgets, CDNs, payment systems, hosting, and more. Batch-analyze multiple sites with version detection and confidence scoring.
Ready to try Clinical Trial Tracker?
Start for free on Apify. No credit card required.
Open on Apify Store