AIDEVELOPER TOOLS

Clinical Trial Tracker

## What does Clinical Trial Tracker do?

Try on Apify Store
$0.002per event
1
Users (30d)
35
Runs (30d)
90
Actively maintained
Maintenance Pulse
$0.002
Per event

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

trial-fetcheds
Estimated cost:$0.20

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
trial-fetchedCharged 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

  1. 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.
  2. 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.
  3. 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.
  4. Run the actor -- Click "Start" on the Apify platform or trigger via the API.
  5. Export your data -- Download results as JSON, CSV, or Excel from the Apify dataset view.

Input parameters

ParameterTypeRequiredDefaultDescription
conditionStringAt least one search field"lung cancer"Disease or condition to search for
interventionStringAt least one search field-Drug, device, or intervention name
sponsorStringAt least one search field-Sponsor organization name
locationStringAt least one search field-Country, state, or city for trial site filtering
statusFilterString[]NoRecruiting + ActiveFilter by trial recruitment status
phaseFilterString[]NoAll phasesFilter by trial phase
maxResultsIntegerNo50Maximum number of trials to return (1-5,000)
sortByStringNoStartDate:descSort 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 COMPLETED status for historical analysis -- Include completed trials to see what has been studied in your area of interest.
  • Sort by LastUpdatePostDate:desc for 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

FieldTypeDescription
nctIdStringClinicalTrials.gov unique identifier (e.g., NCT05839626)
titleStringBrief title of the study
officialTitleString/nullFull official title
statusStringRecruitment status (RECRUITING, COMPLETED, etc.)
phasesString[]Trial phases (PHASE1, PHASE2, PHASE3, PHASE4, EARLY_PHASE1, NA)
studyTypeString/nullStudy type (INTERVENTIONAL, OBSERVATIONAL, etc.)
sponsorString/nullLead sponsor organization name
sponsorClassString/nullSponsor classification (INDUSTRY, NIH, NETWORK, OTHER)
collaboratorsString[]Names of collaborating organizations
conditionsString[]Conditions or diseases studied
interventionsObject[]Array of { type, name, description } for each intervention
enrollmentNumber/nullTarget or actual enrollment count
enrollmentTypeString/nullESTIMATED or ACTUAL
startDateString/nullStudy start date
primaryCompletionDateString/nullPrimary completion date (primary endpoint data collection)
completionDateString/nullOverall study completion date
lastUpdatedString/nullDate of last update on ClinicalTrials.gov
briefSummaryString/nullBrief description of the study
eligibilityObject/nullEligibility criteria including age range, sex, healthy volunteers
locationsObject[]Array of { facility, city, state, country } for each trial site
primaryOutcomesObject[]Array of { measure, timeFrame } for primary endpoints
hasResultsBooleanWhether the trial has posted results on ClinicalTrials.gov
urlStringDirect 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

  1. Query construction -- The actor maps input parameters to ClinicalTrials.gov API v2 query fields: query.cond for condition, query.intr for intervention, query.spons for sponsor, and query.locn for location.

  2. Pagination -- The ClinicalTrials.gov API v2 uses cursor-based pagination with page tokens. The actor requests up to 100 studies per page and follows nextPageToken values until all results are fetched or the maxResults limit is reached. The first request includes countTotal=true to get the total match count.

  3. 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 statusFilter and phaseFilter sets and skips non-matching records.

  4. 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.

  5. Rate limiting -- Requests are throttled to 1.5-second intervals (approximately 40 requests/minute), staying safely below the API's ~50 requests/minute guideline.

  6. Output -- One record per trial is pushed to the Apify dataset with all structured fields.

How much does it cost?

ScenarioTrialsEst. RuntimeEst. Cost
Quick check50~15 sec~$0.002
Standard search500~2 min~$0.02
Large dataset5,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

StatusDescription
RECRUITINGActively seeking participants
NOT_YET_RECRUITINGApproved but not yet recruiting
ACTIVE_NOT_RECRUITINGOngoing but no longer enrolling
COMPLETEDStudy has ended normally
TERMINATEDStudy stopped early
WITHDRAWNWithdrawn before enrollment
SUSPENDEDTemporarily halted
ENROLLING_BY_INVITATIONEnrolling by invitation only
UNKNOWNStatus has not been verified recently

Trial phase reference

PhaseDescriptionTypical Enrollment
EARLY_PHASE1Exploratory IND studies10-30
PHASE1Safety, dosage, side effects20-100
PHASE2Efficacy, side effects100-300
PHASE3Confirm efficacy, monitor side effects300-3,000+
PHASE4Post-marketing surveillance1,000+
NANot 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

01

Configure

Set your parameters in the Apify Console or pass them via API.

02

Run

Click Start, trigger via API, webhook, or set up a schedule.

03

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.

Ready to try Clinical Trial Tracker?

Start for free on Apify. No credit card required.

Open on Apify Store