
ClinicalTrials.gov Scraper
hipersoft/clinicaltrials-scraper
Search ClinicalTrials.gov for clinical trials by condition, drug or sponsor and get status, phase, interventions, sponsors, enrollment, dates, eligibility, outcomes and locations. For pharma, biotech and medical research. No setup.
Total users
1Monthly users
1Total runs
115Per trial scraped
$0.0016Last rebuilt
Oct 28, 2026Overview
Search and extract clinical trial records from ClinicalTrials.gov as clean, structured JSON, CSV, Excel or XML — trial IDs, titles, status, phases, conditions, interventions, sponsors, enrollment, eligibility, outcomes and study locations. Search by condition, drug, sponsor or free text, filter by recruitment status, and collect thousands of trials per term. No account, no API key — fast and reliable, built for pharma, biotech, CRO and academic teams who need trial data at scale.

What does the ClinicalTrials.gov Scraper do?
The ClinicalTrials.gov Scraper searches the public clinical trials registry and returns a rich, flat record for every matching study. Pass multiple search terms, filter by recruitment status, and optionally attach every study site — then export analysis-ready data for competitive landscaping, patient matching, site selection and market research.
Features
- 🔎 Multi-term search — pass any number of
queries(condition, drug/intervention, sponsor or free text); each is run and trials are deduped bynctId. - 🎯 Status filtering — narrow results with
statusessuch asRECRUITING,COMPLETED,ACTIVE_NOT_RECRUITING,TERMINATEDorNOT_YET_RECRUITING; leave empty for all. - 📊 Deep trial detail — phases, study type, enrollment count and type, eligibility (sex, age range, healthy volunteers) and primary outcome measures in every record.
- 🏥 Study locations — toggle
includeLocationsto attach facility, city, state and country for each site (up to 100 per trial), plus alocationCount. - 🏢 Sponsor intelligence — lead sponsor, sponsor class and full collaborator list for every trial.
- 📈 Scales cleanly — set
maxResultsPerQueryup to 10,000, collected reliably across pages.
What you get

Each dataset row is one clinical trial:
{
"searchTerm": "lung cancer",
"nctId": "NCT05012345",
"url": "https://clinicaltrials.gov/study/NCT05012345",
"briefTitle": "A Study of Drug X in Advanced Non-Small Cell Lung Cancer",
"officialTitle": "A Phase 2 Randomized Study of Drug X Versus Standard of Care in NSCLC",
"overallStatus": "RECRUITING",
"studyType": "INTERVENTIONAL",
"phases": ["PHASE2"],
"conditions": ["Non-Small Cell Lung Cancer"],
"interventions": [{ "type": "DRUG", "name": "Drug X" }],
"leadSponsor": "Example Oncology Inc.",
"sponsorClass": "INDUSTRY",
"collaborators": ["National Cancer Institute"],
"enrollmentCount": 240,
"enrollmentType": "ESTIMATED",
"startDate": "2023-06-01",
"primaryCompletionDate": "2025-12-01",
"completionDate": "2026-06-01",
"lastUpdateDate": "2024-11-15",
"briefSummary": "This study evaluates the efficacy and safety of Drug X...",
"sex": "ALL",
"minimumAge": "18 Years",
"maximumAge": "N/A",
"healthyVolunteers": false,
"primaryOutcomes": ["Overall Survival", "Progression-Free Survival"],
"locationCount": 42,
"locations": [
{ "facility": "City Cancer Center", "city": "Boston", "state": "Massachusetts", "country": "United States" }
]
}
Output schema
| Field | Type | Description |
|---|---|---|
searchTerm |
string | The query this trial matched (echoed for traceability) |
nctId |
string | The trial's NCT registry identifier |
url |
string (URL) | Link to the study page on ClinicalTrials.gov |
briefTitle |
string | Short public title of the study |
officialTitle |
string | Full official study title |
overallStatus |
string | Recruitment status, e.g. RECRUITING, COMPLETED, TERMINATED |
studyType |
string | Study type, e.g. INTERVENTIONAL, OBSERVATIONAL |
phases |
array | Trial phase(s), e.g. PHASE1, PHASE2 |
conditions |
array | Conditions or diseases studied |
interventions |
array | Interventions, each with type and name |
leadSponsor |
string | Primary sponsor of the trial |
sponsorClass |
string | Sponsor classification, e.g. INDUSTRY, NIH, OTHER |
collaborators |
array | Collaborating organizations |
enrollmentCount |
integer | Number of participants enrolled or targeted |
enrollmentType |
string | Whether enrollment is ACTUAL or ESTIMATED |
startDate |
string | Study start date |
primaryCompletionDate |
string | Primary completion date |
completionDate |
string | Overall study completion date |
lastUpdateDate |
string | Date the record was last updated |
briefSummary |
string | Plain-language summary of the study |
sex |
string | Eligible sex, e.g. ALL, FEMALE, MALE |
minimumAge |
string | Minimum eligible age |
maximumAge |
string | Maximum eligible age |
healthyVolunteers |
boolean | Whether healthy volunteers are accepted |
primaryOutcomes |
array | Primary outcome measures |
locationCount |
integer | Number of study sites |
locations |
array | Study sites with facility, city, state and country |
Input
{
"queries": ["lung cancer", "semaglutide"],
"statuses": ["RECRUITING"],
"maxResultsPerQuery": 100,
"includeLocations": true
}
| Field | Type | Description |
|---|---|---|
queries |
array | Search terms — condition, drug/intervention, sponsor or free text. One run per term. |
statuses |
array | Optional status filter (e.g. RECRUITING, COMPLETED). Empty means all statuses. |
maxResultsPerQuery |
integer | Maximum trials to collect per search term (1–10,000). |
includeLocations |
boolean | Include each trial's study sites (facility, city, state, country). |
Use cases
- Build a competitive landscape of trials for a drug, target or indication across sponsors and phases.
- Feed recruiting-trial data (with locations) into patient-matching or site-selection workflows.
- Track sponsor and collaborator activity in a therapeutic area over time.
- Assemble structured trial datasets for market research, due diligence or academic meta-analysis.
- Monitor status changes across a portfolio of trials of interest.
How to scrape ClinicalTrials.gov data
- Add the ClinicalTrials.gov Scraper to your Apify account.
- Enter one or more queries (condition, drug, sponsor or free text).
- Optionally set statuses, maxResultsPerQuery and toggle includeLocations.
- Click Run.
- Export the dataset as JSON, CSV, Excel or XML, or pull it via the Apify API.
Need more research data?
- PubMed Scraper — biomedical papers, abstracts and MeSH terms.
- arXiv Scraper — preprints with abstracts, authors and PDF links.
- Crossref Scraper — DOIs, citation counts and metadata from 150M+ works.
FAQ
Do I need an API key or login? No. There's no account, login or API key required — just add your queries and run.
How many trials can I scrape per run?
Up to 10,000 trials per query via maxResultsPerQuery, and you can pass multiple queries in one run, so a single run can collect many thousands of trials (deduped by nctId).
How does billing work? You pay only per trial you get, so small filtered runs stay cheap. See the Pricing tab for current rates.
What format is the output? Structured JSON — one flat record per trial — exportable as JSON, CSV, Excel or XML. Each record includes NCT ID, titles, status, phases, conditions, interventions, sponsors, enrollment, eligibility, primary outcomes and (optionally) study locations.
Can I filter by recruitment status or include locations?
Yes. Use statuses to keep only trials that are RECRUITING, COMPLETED, TERMINATED etc. (leave empty for all), and toggle includeLocations to attach each trial's facility, city, state and country.
Is this only public data? Yes. ClinicalTrials.gov is a public registry and this Actor returns only its openly available records.
Can I connect this to other tools? The ClinicalTrials.gov Scraper can be connected with almost any cloud service or web app thanks to integrations on the Apify platform. It works with Make, Zapier, Slack, Airbyte, GitHub, Google Drive and many more, plus the Apify API, JavaScript/Python clients and MCP. Or use webhooks to trigger an action whenever a run finishes.
Notes
Original clean-room implementation. Returns only public registry data; you are responsible for compliance with ClinicalTrials.gov's terms. Not affiliated with, endorsed by, or sponsored by ClinicalTrials.gov, the U.S. National Library of Medicine or the National Institutes of Health.
Input
| Field | Type | Description |
|---|---|---|
queriesSearch terms | array | Search by condition, drug/intervention, sponsor or free text, e.g. "lung cancer", "semaglutide". |
statusesFilter by status | array | Only include trials with these statuses, e.g. RECRUITING, COMPLETED, ACTIVE_NOT_RECRUITING, TERMINATED, NOT_YET_RECRUITING. Empty = all. |
maxResultsPerQueryMax results per query | integer | Maximum trials to collect per search term. Default: 100 |
includeLocationsInclude locations | boolean | Include the trial's study locations (facility, city, country). Trials can have many sites. Default: true |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~clinicaltrials-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"queries": [
"lung cancer"
],
"statuses": [
"RECRUITING"
]
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/clinicaltrials-scraper").call(run_input={
"queries": [
"lung cancer"
],
"statuses": [
"RECRUITING"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/clinicaltrials-scraper').call({
"queries": [
"lung cancer"
],
"statuses": [
"RECRUITING"
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Trial scraped One clinical trial with status, phase, interventions, sponsor, enrollment, dates, eligibility, outcomes and locations | $0.0016 | $0.0008 |
| API request One ClinicalTrials.gov results page (up to 100 trials) | $0.0005 | $0.0005 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Europe PMC Scraper
Bulk-scrape life-science and biomedical literature from Europe PMC (40M+ records: PubMed, PMC, preprints, patents): title, abstract, authors, journal, year, DOI, PMID/PMCID, citation count, MeSH terms, open-access flag and full-text/PDF links. Thousands per run. No setup.
325 runs · 5 users · $0.001 / article scrapedarXiv Papers Scraper
Search and extract arXiv papers: title, abstract, authors, categories, published/updated dates, DOI, journal reference, and direct PDF links. Filter by category and sort by newest, recently updated or relevance. Fetch by arXiv ID too. For research, lit reviews and AI/ML monitoring. No setup.
140 runs · 2 users · $0.0025 / paper scrapedLetterboxd Scraper
Scrape Letterboxd films with ratings, rating counts, genres, director, cast, runtime and synopsis. Feed it film pages, a user's films/watchlist/diary, any list URL, or browse pages. For film data, recommendations and research.
139 runs · 7 users · $0.0042 / film scrapedOpenLibrary Book Scraper
Search millions of books on OpenLibrary by keyword, author, subject or ISBN and get title, authors, publisher, year, subjects, ISBNs, edition count, ratings, page count and cover. Clean, no setup.
124 runs · 5 users · $0.002 / book scrapedSemantic Scholar Scraper
Bulk-scrape academic papers from Semantic Scholar's 200M+ corpus: title, abstract, AI TLDR summary, authors, venue, year, citation & influential-citation counts, fields of study, DOI/PubMed/arXiv IDs and open-access PDF links. Filter by year, field and citations. Thousands per run. No setup.
123 runs · 7 users · $0.001 / paper scrapedWikipedia Scraper
Search Wikipedia or look up exact articles and get the full plain-text content, summary, categories, image, Wikidata ID and monthly pageview trends. Any language. Great for research, RAG and AI datasets. No setup.
121 runs · 1 users · $0.001 / article scrapedSend the site and the fields. We build it and you get it first.