47,292
recruiting trials
~597K
total on CT.gov

Current as of the run finished 2026-08-06 10:43 UTC. See data/summary.json for the live count — it changes daily as trials open, close, or change status.

What this is

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.

Scope — read this before relying on this for anything important

This dataset is not all of ClinicalTrials.gov. It is scoped to 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.

Schema

FieldTypeNotes
nctIdstringClinicalTrials.gov registry ID
briefTitlestringShort study title, as registered
overallStatusstringAlways RECRUITING in this dataset
phasestring | nulle.g. PHASE2, PHASE1; PHASE2, or NA for non-drug/device studies
studyTypestringAlways INTERVENTIONAL in this dataset
conditionsarray of stringsCondition(s) under study
interventionsarray of stringsIntervention/treatment name(s)
leadSponsorNamestring | nullLead sponsor's registered name
leadSponsorClassstring | nullINDUSTRY, NIH, FED, OTHER, OTHER_GOV, NETWORK, UNKNOWN
enrollmentCountnumber | nullSponsor's target enrollment
enrollmentTypestring | nullESTIMATED or ACTUAL
startDatestring | nullStudy start, as registered
completionDatestring | nullExpected/actual overall completion date
locationCountriesarray of stringsCountries with a study site, deduplicated
urlstringDirect link to the study's ClinicalTrials.gov page
scrapedAtstringISO timestamp of the fetch

Sample row

Real row from the current dataset.

{
  "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"
}

Using the data

curl

curl -s https://raw.githubusercontent.com/ConorsCode/open-trials-data/main/data/trials.json | jq '.[0]'

pandas

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)

JavaScript

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");

Links