Clinical Trials Scraper for Pipeline Intel avatar

Clinical Trials Scraper for Pipeline Intel

Pricing

from $2.10 / 1,000 results

Go to Apify Store
Clinical Trials Scraper for Pipeline Intel

Clinical Trials Scraper for Pipeline Intel

Scrape ClinicalTrials.gov by condition, sponsor, drug, phase, or location. Get sponsors, phases, enrollment, geo-coded sites, and a pipeline summary of the competitive landscape in every run.

Pricing

from $2.10 / 1,000 results

Rating

0.0

(0)

Developer

Skootle

Skootle

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Share

Fast answer: what this Actor is for

Pull every trial matching a drug, disease, sponsor, or city from ClinicalTrials.gov, and get a read on the competitive landscape in the same run. Built for pharma and biotech teams tracking rival pipelines, investors sizing a therapeutic area, CROs and site networks hunting enrollment, and AI agents that need structured trial data instead of scraped HTML.

  • Run it from the Apify UI for a one-off pull.
  • Schedule it or call it by API to watch a competitor's pipeline week over week.
  • Feed the dataset straight into spreadsheets, dashboards, and LLM workflows.

Clinical Trials Pipeline Intelligence

TL;DR

Search ClinicalTrials.gov by term, condition, sponsor, intervention, or location. Every trial comes back as a clean row: nctId, briefTitle, status and phase as normalized enums, leadSponsor with leadSponsorClass (INDUSTRY, NIH, ACADEMIC, and so on), conditions[], interventions[] with type, enrollmentCount as a real number, siteCount and countryCount, ISO 8601 startDate and primaryCompletionDate, durationDays, eligibility (minimumAge, sex, healthyVolunteers), primaryOutcomes[], and sites[] with facility, city, country, and lat/lon coordinates.

Then the part nobody else ships: one pipeline_summary record per run that turns those rows into a market view. Sponsor competition ranked by trial count, late-phase count, and total enrollment. Phase mix and status mix with percentages. Industry-sponsored share. Median enrollment. Site geography. Every record also carries an agentMarkdown field, and each run writes an AGENT_BRIEFING you can hand straight to an LLM.

Try it on a small query, then let us know what you think in a review.

What does this Actor do?

It queries the official ClinicalTrials.gov v2 API, normalizes every study into a typed record, and computes a landscape summary across the result set. No browser, no proxy, no scraping of rendered HTML, which is why it runs in seconds and costs a fraction of a cent.

Two record types land in one dataset:

  1. trial, one per study, with the fields listed above. Dates are ISO 8601 even though the source mixes 2019, 2019-10, and 2019-10-05 formats. Phases are collapsed into a single enum, including combined phases like PHASE1_PHASE2. Enrollment and site counts are numbers, not strings, so you can sum and sort them without cleaning.

  2. pipeline_summary, one per run, with topSponsors[] (each with trialCount, latePhaseCount, totalEnrollment), byPhase[] and byStatus[] with counts and percentages, topConditions[], topInterventionTypes[], topCountries[] by site count, plus industrySponsoredPct, latePhasePct, recruitingCount, medianEnrollment, and totalEnrollment.

Why scrape clinical trial data?

ClinicalTrials.gov is the single registry where drug developers are legally required to disclose what they are testing, on whom, where, and when. That makes it the closest thing to a public map of the pharma pipeline. The problem is the site is built for reading one study at a time. The export gives you flat CSV with no normalization, dates in three formats, phases as ragged arrays, and no way to ask "who is winning in this indication".

Teams end up doing this by hand: search, click, copy sponsor names into a sheet, eyeball which competitors are in phase 3, guess at enrollment totals. That is a day of work that goes stale in a week.

This Actor collapses that into one call. You get the rows and the read on the room together.

  • Competitive intelligence. Point it at a drug class and see which sponsors own the late-stage trials, how many patients they have enrolled, and who just started recruiting.
  • Investor diligence. Size a therapeutic area before a term sheet: how crowded is it, how much of it is industry money versus academic, what is the median trial size.
  • Site and patient recruitment. Filter to RECRUITING and pull geo-coded sites, then map which facilities are actively enrolling near your catchment.
  • AI agents and RAG. Every record ships with agentMarkdown and every run writes an AGENT_BRIEFING, so an LLM can reason over the landscape without you writing a formatter.
  • Regulatory and medical affairs. Track status changes (a trial flipping to TERMINATED or COMPLETED) by scheduling this weekly and diffing the output.

Worked example: the GLP-1 obesity landscape

Input:

{
"query": "GLP-1 obesity",
"maxItems": 50
}

That run finished in 6 seconds. Real rows it returned:

NCT IDTitleStatusPhaseSponsorTypeEnrollmentSitesCountries
NCT07284901Efficacy and Safety of KAI-9531 Once Weekly in Obesity or Overweight and DiabetesRECRUITINGPHASE3KaileraINDUSTRY1700584
NCT06603571Weight Management With LY3841136 and Tirzepatide, Alone or in CombinationACTIVE_NOT_RECRUITINGPHASE2Eli Lilly and CompanyINDUSTRY350522
NCT06857942Tirzepatide Following Ixekizumab in Plaque Psoriasis and Obesity (TOGETHER AMPLIFY-PsO)RECRUITINGPHASE4Eli Lilly and CompanyINDUSTRY200401
NCT05671653Effect of PF-07081532 on Blood Levels of Common Birth Control PillsTERMINATEDPHASE1PfizerINDUSTRY3211
NCT06517212Tirzepatide Weight Loss for MRD+ Early Breast CancerRECRUITINGPHASE2Baylor Research InstituteOTHER4811

And the pipeline_summary record from the same run, rendered from its agentMarkdown:

## Trial landscape: GLP-1 obesity
50 trials. 10 recruiting or about to. 18% industry sponsored. 22% in late phase (P3, P2/P3, P4).
Median enrollment 49, 7820 participants across the set.
### Phase mix
- NA: 23 (46%)
- PHASE4: 9 (18%)
- PHASE2: 5 (10%)
- PHASE1: 3 (6%)
- PHASE3: 2 (4%)
### Top sponsors
- University of Aarhus (OTHER): 2 trials, 0 late phase, 38 enrolled
- Eli Lilly and Company (INDUSTRY): 2 trials, 1 late phase, 550 enrolled
- Hvidovre University Hospital (OTHER): 2 trials, 0 late phase, 20 enrolled

In one call you learn that the space is mostly investigator-initiated mechanism studies, that Lilly is the industry player with late-stage weight, and that Kailera just put 1,700 patients into a phase 3 across 58 sites. That is the read a competitive intelligence analyst would spend a morning assembling.

Which inputs should I use?

Every field is optional, but give it at least one. They combine.

  • query searches titles, conditions, and interventions together. Best starting point. Example: CAR-T lymphoma.
  • condition narrows to a disease area. Example: non-small cell lung cancer.
  • sponsor watches one company. Example: Eli Lilly. Pair it with nothing else to get that sponsor's whole registered pipeline.
  • intervention tracks a molecule or device. Example: semaglutide.
  • location filters by where trial sites sit. Example: Texas.
  • statuses limits recruitment status. Pick RECRUITING to find trials enrolling right now.
  • phases limits phase. PHASE3 plus PHASE4 gives you the late-stage picture only.
  • maxItems caps how many trial records come back, up to 1,000. The pipeline summary is computed from exactly the trials you pull, so a bigger pull gives a more representative landscape.
  • emitPipelineSummary defaults to true. Turn it off if you only want raw rows.

Three recipes that pay for themselves

Watch a rival's whole pipeline.

{ "sponsor": "Novo Nordisk", "maxItems": 200 }

The summary tells you how much of their registered work is late phase, how many patients they have committed, and which conditions they are pushing into. Schedule it weekly and the diff is your early warning system.

Find sites that are actively enrolling near you.

{ "condition": "pancreatic cancer", "statuses": ["RECRUITING"], "location": "Texas", "maxItems": 100 }

Every returned trial carries sites[] with facility names and lat/lon, so this drops straight into a map.

Size a therapeutic area before you invest.

{ "condition": "ALS", "phases": ["PHASE2", "PHASE3"], "maxItems": 300 }

industrySponsoredPct tells you whether real money is in the space or whether it is still academic. medianEnrollment tells you what a serious trial costs to run. topSponsors tells you who you would be competing with, and latePhaseCount per sponsor tells you how close they are.

Field reference

Trial record

FieldTypeNotes
nctIdstringRegistry identifier, stable and idempotent
urlstringDirect link to the study page
briefTitle, officialTitlestringOfficial title is null when the sponsor did not post one
statusenumRECRUITING, COMPLETED, TERMINATED, WITHDRAWN, and others; UNKNOWN if absent
phaseenumPHASE1 through PHASE4, plus PHASE1_PHASE2, PHASE2_PHASE3, NA, UNKNOWN
leadSponsor, leadSponsorClassstring, enumINDUSTRY, NIH, FED, ACADEMIC, OTHER_GOV, NETWORK, OTHER
isIndustrySponsoredbooleanConvenience flag for filtering commercial work
collaboratorsstring[]Co-sponsors, often where partnerships surface
conditionsstring[]Diseases under study
interventionsobject[]type (DRUG, BIOLOGICAL, DEVICE, PROCEDURE, RADIATION) and name
enrollmentCount, enrollmentTypenumber, stringACTUAL or ESTIMATED; null when not posted
siteCount, countryCountnumberNumeric mirrors, sortable without cleaning
startDate, primaryCompletionDate, completionDate, lastUpdateDateISO 8601Normalized from the registry's mixed formats
durationDaysnumberComputed start to completion
minimumAge, maximumAge, sex, healthyVolunteersmixedEligibility signals
sitesobject[]facility, city, state, country, zip, lat, lon
primaryOutcomesstring[]The endpoints the trial is actually measuring
fieldCompletenessScorenumber0 to 100, weighted by what buyers use
agentMarkdownstringOne-line LLM-ready summary of the record

Pipeline summary record

trialCount, byPhase[], byStatus[], topSponsors[], topConditions[], topInterventionTypes[], topCountries[], industrySponsoredPct, recruitingCount, medianEnrollment, totalEnrollment, latePhasePct, agentMarkdown.

How much does it cost?

Pay per event. You pay for the trial records and the summary you receive, nothing else. There is no proxy surcharge because this Actor does not need a proxy: it talks to the official ClinicalTrials.gov API directly. A 50-trial run finishes in about 6 seconds.

Because the underlying data is a public API rather than a defended website, this is one of the cheapest data sources in the Skootle catalog, and that is reflected in the price.

FAQ

Is this legal? Yes. ClinicalTrials.gov is a public registry operated by the U.S. National Library of Medicine, and it publishes an official public API specifically so tools can query it. This Actor uses that API as intended. It reads only public registry data. It does not touch patient records, and no protected health information exists in the output.

How fresh is the data? As fresh as the registry. Sponsors update their entries and this Actor reads the live API on every run, so you see what ClinicalTrials.gov shows today. The lastUpdateDate field on each record tells you when the sponsor last touched that study.

Why do some trials show phase NA or UNKNOWN? Because the registry does. Observational studies and many investigator-initiated studies have no assigned phase, which the registry records as NA. Where a sponsor left the field blank entirely, this Actor normalizes it to UNKNOWN rather than guessing. Both are honest reflections of the source.

Why is enrollment sometimes missing? Sponsors are not always required to post it, particularly for very early studies. The field comes back null rather than zero, so your averages are not silently wrong. Every record carries a fieldCompletenessScore so you can filter to only the well-populated rows if you want.

Can I track a competitor over time? Yes, and this is the highest-value way to use it. Schedule the Actor weekly with a sponsor filter, then diff the datasets. New NCT IDs are new programs. Status flips to TERMINATED are failures. Status flips to RECRUITING on a phase 3 mean a program just got serious.

What happens if my query matches nothing? The run fails with a clear message instead of quietly reporting success with an empty dataset. You are never billed for a run that gave you nothing. This is a deliberate design choice across every Skootle Actor.

Can I get results as CSV or Excel? Yes. Every Apify dataset exports to CSV, Excel, JSON, XML, and RSS from the UI or the API. The dataset also ships with two prepared views, one for trials and one for the pipeline summary.

Your feedback

Found a bug, a missing field, or a query that behaves oddly? Please open it on the Issues tab rather than the reviews page. Issues get a response within 48 hours and I use every Actor I publish, so breakages get fixed the same week. Reviews are best saved for whether the tool actually earned its keep.

More from Skootle

Production scrapers for niches that move money: