· 14 min read
WHO ICTRP Clinical Trials Scraper: 34 Data Fields per Record (2026)
Aggregating clinical trial registrations from 22 national and regional databases, this scraper returns 34 structured fields per record directly from the WHO ICTRP portal. Each result carries essential metadata including eligibility criteria, primary sponsors, study design, and trial outcomes without requiring complex registry-specific API keys or accounts. The data is available at the free-plan price of $5.00 per 1,000 results, making global trial tracking highly accessible. This tool is designed for medical researchers, market analysts, and platform developers who need unified access to international registries, though teams requiring real-time instant synchronization might find the upstream portal's weekly update cadence too slow.
Try it: open WHO ICTRP Clinical Trials Scraper on Apify, sign in on the free plan and run the prefilled example.
Can you try WHO ICTRP Clinical Trials Scraper before paying?
Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.005 per result, that covers up to 1,000 results of WHO ICTRP Clinical Trials Scraper a month, before run-start charges and platform usage.
The example request further down caps maxItems at 20, so a first run returns at most 20 results and costs at most $0.10 in result charges. That is enough to see the real shape of the data before deciding anything.
WHO ICTRP Clinical Trials Scraper was last updated on 2026-07-11. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 692,561 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.
What does it cost to run WHO ICTRP Clinical Trials Scraper?
Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
The maxItems parameter is the primary driver of your bill, as it sets the maximum number of items written to the dataset. To test your queries and filters without incurring high costs, run a trial with maxItems set to 20. This first run returns at most 20 results and costs at most $0.10 in result charges, allowing you to verify the dataset schema cheaply.
How do you run WHO ICTRP Clinical Trials Scraper from the API?
The schema marks 1 of its 15 controls as required: mode. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~who-ictrp-clinical-trials-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"search","condition":"cancer","trialIds":[],"recruitingStatus":"ALL","phase":"","sourceRegistry":"","hasResults":"ALL","maxItems":20}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"mode": "search",
"condition": "cancer",
"trialIds": [],
"recruitingStatus": "ALL",
"phase": "",
"sourceRegistry": "",
"hasResults": "ALL",
"maxItems": 20
}
run = client.actor("crawlerbros~who-ictrp-clinical-trials-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"mode": "search",
"condition": "cancer",
"trialIds": [],
"recruitingStatus": "ALL",
"phase": "",
"sourceRegistry": "",
"hasResults": "ALL",
"maxItems": 20
}
const run = await client.actor('crawlerbros~who-ictrp-clinical-trials-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.
Which WHO ICTRP Clinical Trials Scraper inputs matter, and which can you skip?
The mode parameter is the single required control and dictates whether you search globally or retrieve explicit trials by ID. For most search operations, condition and sponsor are the key inputs that shape your initial results, while advanced settings like phase and country should be adjusted to filter the dataset client-side.
mode(string): What to fetch. Default:"search".condition(string): Health condition or disease to search for (mode=search), e.g.diabetes,breast cancer. Leave empty to search by intervention, title, sponsor, or secondaryId alone. If every search filter is left empty, the actor falls back to a demo condition ("cancer") so the daily test run still returns data. Default:"".trialIds(array): Exact WHO ICTRP trial/registration IDs, e.g.NCT06012345,ChiCTR2600127247,ISRCTN12345678. Default:[].recruitingStatus(string): Filter to currently-recruiting trials only, or include all statuses. Default:"ALL".phase(string): Filter results to a specific trial phase (client-side, matched against each trial's reported phase). Default:"".sourceRegistry(string): Filter results to trials registered with a specific national registry (client-side). Default:"".hasResults(string): Filter to trials that have (or don't have) posted results, mirroring WHO ICTRP's 'Results Only' search option (client-side, matched against each trial's parsed results-availability field). Default:"ALL".maxItems(integer): Hard cap on emitted records. trialsearch.who.int is a slow legacy server - for large values combined with restrictive phase/sourceRegistry/country filters, increase the run timeout under Run options. Default:20.intervention(string): Drug, device, procedure or other intervention to search for (mode=search), e.g.metformin.title(string): Restrict to trials whose public/scientific title contains this text.sponsor(string): Restrict to trials with this primary sponsor (partial match).secondaryId(string): Restrict to trials with this secondary/supplementary ID (e.g. a sponsor protocol number or IND/IDE number) - NOT the primary registry trial ID. To look up an exact trial ID, use mode=byTrialIds instead.
The other 3 controls, with their defaults, are listed in the input schema on WHO ICTRP Clinical Trials Scraper on Apify.
Fixed-choice controls: mode accepts search (Search trials), byTrialIds (Lookup by trial ID); recruitingStatus accepts ALL (All statuses), Recruiting (Recruiting only); phase accepts 9 values (default ""), including "" (Any phase), Phase 0, Phase 1, Phase 2; sourceRegistry accepts 22 values (default ""), including "" (Any registry), ClinicalTrials.gov (USA), ChiCTR (China), EUCTR (Europe, legacy); hasResults accepts ALL (Any (with or without results)), Yes (Only trials with posted results), No (Only trials without posted results).
What does WHO ICTRP Clinical Trials Scraper return?
The returned records contain rich trial metadata including target enrollment sizes, recruiting countries, study phases, and eligibility criteria text. However, they do not contain raw patient records, individual site coordinator emails, or unpublished internal clinical data, as these are not hosted on the public WHO registry.
trialId,sourceRegistry- the national/regional registry that owns the record (e.g.ClinicalTrials.gov,ChiCTR,EUCTR)title,scientificTitle,acronymcondition,interventionsponsor- primary sponsorsecondaryId- supplementary identifier (sponsor protocol number, IND/IDE number), when on filerecruitmentStatus,phasestudyType,studyDesign,allocation,assignmentgender,ageMinimum,ageMaximum- eligibility criteriainclusionCriteria,exclusionCriteria- full eligibility criteria text, when split by the sourcesourceOfMonetarySupport- funding sourcecountries[]- countries of recruitmentdateRegistration,dateEnrollment,lastUpdatedtargetSizeresultsAvailable- booleanoutcomes[]- primary/secondary outcome names (up to 10)trialUrl- canonical WHO ICTRP trial detail page (mirror)sourceRegistryUrl- canonical page on the primary registry (e.g. the actualclinicaltrials.govorchictr.org.cnpage), when linkedresultsUrl,protocolUrl- links to posted results / study protocol, when publishedrecordType: "trial",scrapedAt
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open WHO ICTRP Clinical Trials Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Select the operation mode by setting mode to search for a broad query or byTrialIds to retrieve specific records.
- If using search mode, define your query target by setting at least one text constraint such as condition, intervention, or sponsor.
- Apply upstream server-side filters like recruitingStatus to narrow the retrieved candidate pool before client-side evaluation.
- Configure client-side filters like phase, sourceRegistry, or country to precisely isolate target trials during processing.
- Set the maxItems limit to a low value like 20 for your initial test run to verify the output structure without burning platform usage.
- Run the Actor and open the default dataset to inspect the generated records.
- Verify that key output fields such as trialId, sourceRegistry, and trialUrl are populated correctly before running larger batches.
How do you apply it? Three worked playbooks
These are WHO ICTRP Clinical Trials Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Pharma competitive intelligence
Outcome: Track a competitor's trial pipeline across every major registry from a single feed
Configure: Set mode to "search", sponsor to "Pfizer", and maxItems to 50.
Working method: Execute the Actor with the target competitor name in the sponsor field. Review the output dataset to ensure the trialId and scientificTitle fields are fully populated. Compare the results against previous runs using the trialId as a unique key to identify newly registered or updated clinical trials.
Deliverable: A consolidated JSON dataset containing matching trial records with active phases, primary sponsors, and official registry source URLs.
Stop condition: The run finishes with zero results despite the target sponsor having an active pipeline, indicating a potential upstream search interface change.
Use case 2: Academic research
Outcome: Bulk-export trial metadata for systematic reviews and meta-analyses
Configure: Set mode to "search", condition to "diabetes", recruitingStatus to "ALL", and maxItems to 200.
Working method: Run the query for your target disease with a high maxItems cap. Check the generated dataset to ensure complex fields like inclusionCriteria, exclusionCriteria, and outcomes are captured. Export the dataset to CSV format for statistical analysis or evidence synthesis.
Deliverable: A CSV export containing structured trial metadata, eligibility criteria, and study designs for the specified therapeutic area.
Stop condition: The inclusionCriteria or exclusionCriteria fields are completely empty across all returned trials, suggesting a layout change on the detail pages.
Use case 3: Patient recruitment platforms
Outcome: Surface currently-recruiting trials by condition and country
Configure: Set mode to "search", condition to "cancer", recruitingStatus to "Recruiting", country to "Germany", and maxItems to 30.
Working method: Configure the search with your target disease and limit the status to recruiting. Set the client-side country filter to isolate local sites. Run the Actor and verify that the country array in each returned trial record contains the specified location.
Deliverable: A clean list of recruiting trials featuring direct registration links, age eligibility criteria, and contact metadata.
Stop condition: The recruitmentStatus field on the returned records shows values other than Recruiting, indicating a failure in the client-side filter logic.
What breaks, and how do you design around it?
Because the upstream WHO ICTRP portal is a slow legacy server, broad searches with restrictive client-side filters can require scanning hundreds of pages and trigger timeouts. When retrieving highly filtered datasets, you should increase the run timeout under your Run options. For faster, targeted queries, narrow down the initial condition or sponsor terms to minimize the volume of candidate records the scraper must scan.
When should you not use WHO ICTRP Clinical Trials Scraper?
Do not use this Actor if you only need clinical trial records originating from the United States, as searching a global meta-registry introduces unnecessary translation delays and client-side filtering overhead. If your research is strictly focused on US-based studies, you will get faster execution speeds and direct access to local facility locations by using the ClinicalTrials.gov Scraper instead. Additionally, if you need real-time, sub-second updates for active trials, do not use this scraper; the WHO ICTRP database is an aggregator that syncs with national registries on a weekly or daily delay, making it unsuitable for high-frequency trading or immediate regulatory alerts.
What should you check before trusting the output?
- Check that trialId is present and follows the expected registry format, such as NCT digits or ChiCTR prefixes.
- Monitor the presence of trialUrl to ensure the direct WHO ICTRP detail page link is generated for every record.
- Verify that critical trial design properties like phase and recruitmentStatus are not coming back empty when client-side filters are active.
- Set up an alert to stop scheduled runs if the output dataset contains zero records when searching for a historically active condition.
- Ensure that the sourceRegistryUrl field is parsed and populated for records originating from major registries like ClinicalTrials.gov.
None of this proves a record is correct. It gives a scheduled WHO ICTRP Clinical Trials Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
What is the cost of running this Actor?
This Actor is billed at the free-plan price of $5.00 per 1,000 results, which is $0.005 per result. Apify's free plan includes $5.00 of monthly usage, which covers up to 1,000 results before platform usage costs. Run-start charges apply to every run, while per-result charges apply only to data written to your dataset.
Why are some search filters applied client-side instead of upstream?
The upstream WHO ICTRP portal utilizes complex JavaScript-driven components for picking phases or countries, which cannot be reliably replicated in simple HTTP requests. To bypass this, the Actor fetches the matching candidates from the main search and parses the full page content, applying precise client-side filters to output only the records you actually requested.
How often is the underlying trial registry data updated?
The data freshness depends on the WHO ICTRP platform's synchronization schedule with its 22+ primary registries. Most national registries are imported on a weekly cadence, though some are updated daily. You can inspect the lastUpdated field on each returned trial record to see when it was last modified in its source registry.
Why does a narrow search query sometimes take several minutes to finish?
The WHO ICTRP search portal is hosted on a slow legacy IIS server. When you combine broad search terms with strict client-side filters like phase or country, the Actor has to load and parse the details of hundreds of candidate trials to find the ones matching your filters, which naturally takes more time.
Does this scraper require proxies or an external API key?
No. This Actor uses HTTP-only requests to collect public metadata directly from the WHO ICTRP search portal. You do not need to purchase proxies, configure external API keys, or create an account on the target registry to retrieve the complete dataset.
Where to go next
When you are ready to run it, open WHO ICTRP Clinical Trials Scraper on Apify; the free plan covers up to 1,000 results a month.
Other Actors we maintain for related data:
- ClinicalTrials.gov Scraper: Search and extract clinical trial data from ClinicalTrials.gov - conditions, interventions, phases, enrollment, sponsors, locations and status.
- NCS (India) Vocational Training Courses Scraper: Scrape India's National Career Service (NCS) / Skill India Digital Hub vocational and skilling course catalog.
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-29.
Actor last updated by its maintainers on 2026-07-11.
Run outcome figures cover the 30 day public window ending 2026-09-29.
Featured actors
WHO ICTRP Clinical Trials Scraper
Scrape the WHO ICTRP clinical trials search portal, aggregating 22+ national registries (ClinicalTrials.gov, EU-CTR/CTIS, ISRCTN, ChiCTR, ANZCTR, CTRI and more). Search by condition, intervention, sponsor, status or trial ID; get full trial metadata.
Run on Apify ↗