ClinicalTrials Scraper · Trials, Sponsors, Phases & Outcomes avatar

ClinicalTrials Scraper · Trials, Sponsors, Phases & Outcomes

Pricing

from $0.90 / 1,000 trial returneds

Go to Apify Store
ClinicalTrials Scraper · Trials, Sponsors, Phases & Outcomes

ClinicalTrials Scraper · Trials, Sponsors, Phases & Outcomes

Clinical Trials Scraper (ClinicalTrials.gov Scraper) for clinical trials, studies, medical research, sponsors, phases, and outcomes. Scrape ClinicalTrials.gov by condition, intervention, sponsor, phase, status, or country. Returns structured NCT trial datasets. No API key required.

Pricing

from $0.90 / 1,000 trial returneds

Rating

0.0

(0)

Developer

Tarek Etman

Tarek Etman

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

reapX — public sources in, addressable records out

Clinical Trials Scraper (ClinicalTrials.gov Scraper) · Studies, Sponsors & Outcomes

Clinical Trials Scraper and ClinicalTrials.gov Scraper that pulls clinical trial studies straight from the ClinicalTrials.gov registry and returns one clean row per trial: the NCT ID, sponsor, phase, recruitment status, planned enrolment, eligibility, primary outcomes, site countries and every relevant date. Search by condition, intervention, sponsor, location or raw registry expression. No API key, no login, no browser.

Maintained by reapX. Every row cites the Apify run that produced it — nothing is inferred, modelled or filled in, and a field absent from the source is absent from the row. The extracted archive for this source is browsable at reapx.dev/data/clinicaltrials-scraper/ and mirrored as an open dataset on Hugging Face and Kaggle. Questions: reapxdev@proton.me

How to scrape ClinicalTrials.gov clinical trials

  1. Type a condition such as pancreatic cancer, or an intervention such as pembrolizumab, or a sponsor such as Pfizer. Combine as many as you like - they narrow each other exactly as the registry's own search does.
  2. Optionally restrict recruitment status, phase, study type, site country, minimum enrolment or last-updated date.
  3. Set maximum trials to return. That is your cost ceiling.
  4. Press Start. Leaving every field empty returns recruiting lung cancer trials, so the actor always has a working default run.

Clinical Trials Scraper data output

ColumnWhat it is
nctIdClinicalTrials.gov registry ID - the stable join key for every row
studyTitle, officialTitle, studyAcronymPublic title, full scientific title, sponsor's acronym
overallStatusRecruiting, completed, terminated, withdrawn and the rest
studyType, phases, primaryPurposeInterventional or observational, phase list, what the trial is for
studyAllocation, studyMaskingRandomised or not, and the blinding applied
plannedEnrollmentParticipant count the sponsor registered
sponsorName, sponsorClass, sponsorOrganization, sponsorCollaboratorsWho runs it, in which sector, with whom
studyConditions, studyInterventions, studyInterventionTypesDiseases addressed and treatments tested
primaryOutcomesWhat the trial primarily measures
patientSex, patientAgeMin, patientAgeMax, patientAgeGroups, volunteersAcceptedFull eligibility profile
startDate, primaryCompletionDate, studyCompletionDate, postedDate, updatedDateEvery date, normalised to YYYY-MM-DD
studyLocationCount, studyCountriesHow many sites, and which countries they are in
resultsPosted, studyUrl, summaryWhether results exist, the registry link, the plain-language summary

Five named views ship with the dataset: Trials, Sponsors and funding, Design and outcomes, Eligibility and sites, and Timeline. Export any of them to JSON, CSV, Excel or XML, or read them from the API.

Search clinical trials by sponsor

Put a company or institute in the sponsor field and you get that organisation's whole registered pipeline - every phase, every status, with enrolment and completion dates attached. Combine it with phase to isolate late-stage assets, or with recruitment status to see only what is actively enrolling. sponsorClass separates industry from NIH, federal and academic sponsors in one column.

Find recruiting trials near a location

Set location to a country, state or city and the registry restricts to trials with sites there. studyCountries on every row lists the distinct countries that trial actually runs in, so a multinational study is visible as such rather than being reduced to one address. Add only trials with a site in to keep results to a specific country after the fact.

Track trials by phase and status

Phase and recruitment status are registry-side filters, applied before anything is fetched, so narrowing them costs nothing and speeds the run up. updatedAfter turns the actor into a change feed: run it on a schedule with a rolling date and you get only records the registry has touched since your last run.

Advanced registry expressions

Anything the fields do not cover goes in advanced registry expression as a raw ClinicalTrials.gov AREA expression - for example AREA[StartDate]RANGE[2025-01-01,MAX], or AREA[LeadSponsorClass]INDUSTRY. It is merged into the same query as the structured fields.

Limits you should know about

  • The registry serves up to 1,000 studies per request; this actor pages through them for you with nextPageToken.
  • Country, minimum-enrolment, results-posted and last-updated filters are applied after fetching, so the actor scans deeper than your row target to fill it. Scanned-but-dropped trials are never charged.
  • Requests are plain HTTP, held to a polite rate, with exponential backoff on 429 and 5xx.
  • ClinicalTrials.gov is a public US government registry. Everything returned is public record.

Input configuration

Every field is optional. The prefilled values below are what runs if you press Start without changing anything.

What to search for

Fill in any combination. They are combined with AND, exactly as the registry's own search does. Leave all of them empty and the run falls back to recruiting lung cancer trials.

FieldTypeAcceptsWhat it does
conditionstringfree textThe disease, condition or health problem the trial studies. Example: pancreatic cancer. Prefilled with "lung cancer".
interventionstringfree textDrug, device, procedure or behavioural intervention under study. Example: pembrolizumab. Prefilled with "".
sponsorstringfree textOrganisation running or funding the trial. Example: Pfizer, or National Cancer Institute. Prefilled with "".
locationstringfree textCountry, state or city where the trial has sites. Example: Germany. Prefilled with "".
searchTermsstringfree textAny other words to match across the whole study record. Example: CAR-T relapsed. Prefilled with "".
advancedFilterstringfree textRaw ClinicalTrials.gov AREA expression for anything the fields above do not cover. Example: AREA[StartDate]RANGE[2025-01-01,MAX]. Prefilled with "".

Narrow the trials

Registry-side filters are applied before anything is fetched, so they cost you nothing.

FieldTypeAcceptsWhat it does
statuseslistone value per lineKeep only trials in these recruitment states. Leave empty for every status. Example: RECRUITING. Prefilled with [].
phaseslistone value per lineKeep only these phases. Leave empty for every phase. Example: PHASE3. Prefilled with [].
studyTypestring``, INTERVENTIONAL, OBSERVATIONAL, EXPANDED_ACCESSInterventional trials test a treatment; observational ones only watch. Example: INTERVENTIONAL. Prefilled with "".
countrieslistone value per lineCountry names as the registry writes them. A trial is kept if any of its sites is in one of them. Example: United States, Germany. Prefilled with [].
minEnrollmentinteger0 to 10000000Drop small trials below this participant count. Example: 500 keeps only large studies. Prefilled with 0.
onlyWithResultstrue/falsecheckboxKeep only trials that have published results on the registry. Example: true for outcome research. Prefilled with false.
updatedAfterstringYYYY-MM-DDDrop records whose last registry update predates this date. Example: 2026-01-01. Prefilled with "".

How much to return

You pay per trial returned. Filtered-out trials are never charged.

FieldTypeAcceptsWhat it does
sortBystringone of 7: LastUpdatePostDate:desc, LastUpdatePostDate:asc, StudyFirstPostDate:desc, StudyFirstPostDate:asc, ...Which trials come back first. Example: LastUpdatePostDate:desc for the freshest records. Prefilled with "LastUpdatePostDate:desc".
maxTrialsinteger1 to 20000Hard stop for the run, and your cost ceiling. Example: 100. Prefilled with 100.

Connection

FieldTypeAcceptsWhat it does
proxyConfigurationobjectfree textRoutes registry reads through Apify Proxy. Leave it on unless you have a reason not to. Example: the default. Prefilled with {"useApifyProxy": true}.

Pricing

Pay per event. The primary event is Trial returned (trial), charged at $0.0015 per event on the free plan, falling to $0.0005 on the highest tier.

Charged once for each clinical trial written to the dataset. Registry searches that match nothing, blocked runs and trials removed by your filters are never charged.

Other charged events: apify-actor-start (Actor Start).

Minimum charge cap per run: $0.0015.

Tiered discounts apply automatically on every paid Apify plan. Platform usage is absorbed by the Actor, so the per-event price is the whole price.

Usage examples

The prefilled run, which is what Start does with nothing changed

{
"condition": "lung cancer",
"minEnrollment": 0,
"onlyWithResults": false,
"sortBy": "LastUpdatePostDate:desc",
"maxTrials": 100,
"proxyConfiguration": {
"useApifyProxy": true
}
}

A larger run, with the record cap as the cost cap

{
"condition": "lung cancer",
"minEnrollment": 0,
"onlyWithResults": false,
"sortBy": "LastUpdatePostDate:desc",
"maxTrials": 5000,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Output example

One row, exactly as the actor wrote it to the dataset:

{
"nctId": "NCT07739511",
"studyTitle": "Paclitaxel Oral Solution in HER2-Positive Breast Cancer Neoadjuvant Therapy: A Dose-Finding Study",
"officialTitle": "A Dose-Finding Study of Paclitaxel Oral Solution in Neoadjuvant Therapy for Patients With HER2-Positive Breast Cancer",
"studyAcronym": "GBCF002",
"overallStatus": "NOT_YET_RECRUITING",
"studyType": "INTERVENTIONAL",
"phases": [
"PHASE1",
"PHASE2"
],
"primaryPurpose": "TREATMENT",
"studyAllocation": "NON_RANDOMIZED",
"studyMasking": "NONE",
"plannedEnrollment": 30,
"sponsorName": "Liu Shu",
"sponsorClass": "OTHER",
"sponsorOrganization": "The Affiliated Hospital Of Guizhou Medical University",
"sponsorCollaborators": [],
"studyConditions": [
"HER2 + Breast Cancer"
],
"studyInterventions": [
"Paclitaxel oral solution plus Trastuzumab and Pertuzumab"
],
"studyInterventionTypes": [
"COMBINATION_PRODUCT"
]
}

That row carries 36 fields in total; 18 are shown.

Fields on every row

FieldTypeWhat it is
nctIdstringClinicalTrials.gov registry identifier. Unique and stable across runs - use it as the join key.
studyTitlestringShort public title of the trial.
officialTitlestringFull scientific title as registered.
studyAcronymstringShort trial acronym, when the sponsor registered one.
overallStatusstringCurrent recruitment state of the trial.
studyTypestringWhether the study tests an intervention or only observes.
phaseslistTrial phases. Observational studies carry NA.
primaryPurposestringWhat the trial is trying to do.
studyAllocationstringHow participants are assigned to arms.
studyMaskingstringBlinding applied in the trial design.
plannedEnrollmentintegerParticipant count the sponsor registered, estimated or actual.
sponsorNamestringOrganisation responsible for the trial.
sponsorClassstringSector the lead sponsor belongs to.
sponsorOrganizationstringOrganisation that submitted the record to the registry.
sponsorCollaboratorslistOther organisations named on the trial.
studyConditionslistDiseases or conditions the trial addresses.
studyInterventionslistNames of the drugs, devices or procedures under study.
studyInterventionTypeslistKinds of intervention involved.
primaryOutcomeslistWhat the trial primarily measures.
patientSexstringWhich participants the trial accepts.
patientAgeMinstringLowest eligible age, as registered.
patientAgeMaxstringHighest eligible age, when the sponsor set one.
patientAgeGroupslistStandard age bands the trial recruits from.
volunteersAcceptedtrue/falseWhether the trial enrols healthy volunteers.
startDatestringStudy start date, normalised to YYYY-MM-DD.
primaryCompletionDatestringDate the primary outcome measure is or was due.
studyCompletionDatestringDate the whole study is or was due to finish.
postedDatestringDate the record first appeared on the registry.
updatedDatestringDate of the most recent registry update.
studyLocationCountintegerNumber of registered trial sites.
studyCountrieslistDistinct countries the trial has sites in.
resultsPostedtrue/falseWhether the sponsor has published results on the registry.
studyUrlstringPublic ClinicalTrials.gov page for the trial.
summarystringPlain-language description of the trial as registered.
scrapedAtstringWhen this run read the registry.
sourceQuerystringThe registry search this row came from, echoed for provenance.

5 named dataset views ship with it: Trials, Sponsors and funding, Design and outcomes, Eligibility and sites, Timeline. They drive the Output tab in Console and the Output block on the Actor's .md page.

FAQ

Can I scrape ClinicalTrials.gov without an API key?

Yes. The registry publishes an open REST API (v2) with no authentication, and this actor uses it directly.

What is the NCT number and why is it on every row?

It is the registry's permanent identifier for a study, like NCT07586202. It never changes, so it is the right key for joining this dataset to your own records or to a later re-run.

Can I get only Phase 3 recruiting trials?

Set phase to PHASE3 and recruitment status to RECRUITING. Both are applied by the registry before any data is fetched.

How do I find every trial a company is running?

Put the company in sponsor and leave the condition blank. Add a phase or status filter to narrow it. sponsorCollaborators also surfaces trials where the company is a partner rather than the lead.

Does this return trial results?

It returns whether results have been posted (resultsPosted) and the primary outcome measures the trial is designed to report. Full result tables are on the registry page linked from studyUrl.

How fresh is the data?

Live. Every run queries the registry at that moment, and updatedDate tells you when each record was last changed at source.

Can I run this on a schedule?

Yes. Save any configuration as an Apify task and schedule it. With updatedAfter set to a rolling date it becomes an incremental feed rather than a full re-pull.


Unofficial - not affiliated with ClinicalTrials.gov. Collects public data only. reapx. Contact reapxdev@proton.me.

The full published archive

Each archive page carries Dataset JSON-LD, a canonical URL and the identifiers used, so an agent can resolve an entity without running anything. Nothing on those pages is estimated or modelled.

🧪 Example input

A real, runnable configuration — this is an actual input this Actor has run with.

{
"maxTrials": 200,
"sortBy": "StudyFirstPostDate:desc",
"advancedFilter": "AREA[StudyFirstPostDate]RANGE[2026-01-01,MAX]",
"searchTerms": "study"
}

📄 Sample output

One real row from a real run of this Actor, unedited.

{
"nctId": "NCT07739511",
"studyTitle": "Paclitaxel Oral Solution in HER2-Positive Breast Cancer Neoadjuvant Therapy: A Dose-Finding Study",
"officialTitle": "A Dose-Finding Study of Paclitaxel Oral Solution in Neoadjuvant Therapy for Patients With HER2-Positive Breast Cancer",
"studyAcronym": "GBCF002",
"overallStatus": "NOT_YET_RECRUITING",
"studyType": "INTERVENTIONAL",
"phases": [
"PHASE1",
"PHASE2"
],
"primaryPurpose": "TREATMENT",
"studyAllocation": "NON_RANDOMIZED",
"studyMasking": "NONE",
"plannedEnrollment": 30,
"sponsorName": "Liu Shu",
"sponsorClass": "OTHER",
"sponsorOrganization": "The Affiliated Hospital Of Guizhou Medical University",
"sponsorCollaborators": [],
"studyConditions": [
"HER2 + Breast Cancer"
],
"studyInterventions": [
"Paclitaxel oral solution plus Trastuzumab and Pertuzumab"
],
"studyInterventionTypes": [
"COMBINATION_PRODUCT"
],
"primaryOutcomes": [
"Maximum Tolerated Dose(MTD)"
],
"patientSex": "FEMALE",
"patientAgeMin": "18 Years",
"patientAgeMax": "70 Years",
"patientAgeGroups": [
"ADULT",
"OLDER_ADULT"
],
"volunteersAccepted": false,
"startDate": "2026-07-31",
"primaryCompletionDate": "2027-07-31",
"studyCompletionDate": "2029-07-30",
"postedDate": "2026-07-31",
"updatedDate": "2026-07-31",
"studyLocationCount": 0,
"studyCountries": [],
"resultsPosted": false,
"studyUrl": "https://clinicaltrials.gov/study/NCT07739511",
"summary": "This is a multicenter, open-label, dose-finding trial using a backfill Bayesian optimal interval (BF-BOIN) design to determine the maximum tolerated dose (MTD) and/or recommended phase 2 dose (RP2D) for paclitaxel oral solution combined with anti-HER2 treatment. Eligible HER2-positive breast cancer patients receive 6 cycles of neoadjuvant THP regimen(paclitaxel oral solution + trastuzumab+pertuzumab) and are enrolled in three cohorts at oral paclitaxel dose levels 1-3 (125, 150, 175 mg/m²).",
"scrapedAt": "2026-08-03T01:42:21Z",
"sourceQuery": "terms=study; advanced=AREA[StudyFirstPostDate]RANGE[2026-01-01,MAX]"
}

How it works

  1. You set the filters below, or none at all.
  2. The Actor calls the source's own public endpoint and pages through the results.
  3. Every row is pushed to the dataset as it is built, not buffered to the end — so a run that hits its time limit still returns everything it collected up to that point.
  4. You are charged per row returned, so the maximum-results field is also your cost cap.

💬 Your feedback

Found a bug, or need a field this does not return yet? Open an issue on the Actor's Issues tab, or write to reapxdev@proton.me. Bugs get fixed and reasonable field requests get added.