All currently-recruiting interventional clinical trials worldwide, pulled directly from ClinicalTrials.gov's public API v2 and normalized into one schema.
ClinicalTrials.gov publishes a public, unauthenticated, paginated JSON API (v2) covering every registered trial. It's comprehensive but not pre-filtered to "what can I actually enroll in right now" — that requires querying by status and study type and paging through the result set yourself. This dataset does that once a day: recruiting, interventional trials only, normalized into one flat schema.
overallStatus = RECRUITING (actively enrolling at fetch time) and studyType = INTERVENTIONAL (trials that assign participants to a treatment/intervention — observational studies are excluded entirely). That is roughly 47,000 of ClinicalTrials.gov's ~597,000 total registered studies. Excluded: completed, terminated, withdrawn, suspended, not-yet-recruiting, and active-not-recruiting trials, and all observational studies.
This is also a live snapshot, not a historical record: a trial that was recruiting yesterday and filled up today drops out of tomorrow's file with no trace here (ClinicalTrials.gov itself retains full history; this dataset doesn't). No personal or facility-level data is collected — locationCountries is country-level only, deduplicated; no facility names, addresses, or investigator/contact personal data, even though ClinicalTrials.gov's API publishes some of those fields elsewhere.
| Field | Type | Notes |
|---|---|---|
nctId | string | ClinicalTrials.gov registry ID |
briefTitle | string | Short study title, as registered |
overallStatus | string | Always RECRUITING in this dataset |
phase | string | null | e.g. PHASE2, PHASE1; PHASE2, or NA for non-drug/device studies |
studyType | string | Always INTERVENTIONAL in this dataset |
conditions | array of strings | Condition(s) under study |
interventions | array of strings | Intervention/treatment name(s) |
leadSponsorName | string | null | Lead sponsor's registered name |
leadSponsorClass | string | null | INDUSTRY, NIH, FED, OTHER, OTHER_GOV, NETWORK, UNKNOWN |
enrollmentCount | number | null | Sponsor's target enrollment |
enrollmentType | string | null | ESTIMATED or ACTUAL |
startDate | string | null | Study start, as registered |
completionDate | string | null | Expected/actual overall completion date |
locationCountries | array of strings | Countries with a study site, deduplicated |
url | string | Direct link to the study's ClinicalTrials.gov page |
scrapedAt | string | ISO timestamp of the fetch |
{
"nctId": "NCT05879276",
"briefTitle": "Effect at 3 Months of Early Empagliflozin Initiation in Cardiogenic Shock Patients on Mortality, Rehospitalization, Left Ventricular Ejection Fraction and Renal Function.",
"overallStatus": "RECRUITING",
"phase": "PHASE3",
"studyType": "INTERVENTIONAL",
"conditions": ["Cardiogenic Shock"],
"interventions": ["Empagliflozin 10 MG"],
"leadSponsorName": "Central Hospital, Nancy, France",
"leadSponsorClass": "OTHER",
"enrollmentCount": 164,
"enrollmentType": "ESTIMATED",
"startDate": "2024-12-16",
"completionDate": "2027-03-16",
"locationCountries": ["France"],
"url": "https://clinicaltrials.gov/study/NCT05879276",
"scrapedAt": "2026-08-06T10:43:08.596Z"
}
curl -s https://raw.githubusercontent.com/ConorsCode/open-trials-data/main/data/trials.json | jq '.[0]'
import pandas as pd
df = pd.read_json("https://raw.githubusercontent.com/ConorsCode/open-trials-data/main/data/trials.json")
df.explode("conditions").groupby("conditions").size().sort_values(ascending=False).head(20)
const trials = await fetch("https://raw.githubusercontent.com/ConorsCode/open-trials-data/main/data/trials.json").then(r => r.json());
console.log(trials.length, "recruiting interventional trials");