METHODOLOGY

How ClinicalMetric Works

ClinicalMetric is built on three principles: real data, transparent sourcing, and fast access. Here's exactly how we collect, process, and present clinical trial intelligence.

Data Source

All data is fetched from the ClinicalTrials.gov REST API v2 — the official public registry of the U.S. National Institutes of Health (NIH). The endpoint used is:

GET https://clinicaltrials.gov/api/v2/studies

No authentication is required. ClinicalTrials.gov is a public resource mandated by U.S. federal law (FDAAA 801). We query for studies across all statuses, fetching up to 10,000 trials per daily refresh cycle.

Data Fields

We extract and normalize the following fields from each study record:

NCT IDidentificationModule.nctId — unique ClinicalTrials.gov identifier
TitlebriefTitle / officialTitle — plain-language study name
StatusstatusModule.overallStatus — e.g. Recruiting, Completed, Terminated
PhasedesignModule.phases — Phase 1–4 or N/A
SponsorsponsorCollaboratorsModule.leadSponsor.name
ConditionsconditionsModule.conditions — list of medical conditions studied
SummarydescriptionModule.briefSummary — plain-language description
EligibilityeligibilityModule.eligibilityCriteria — inclusion/exclusion criteria
EnrollmentdesignModule.enrollmentInfo.count — target participant count
DatesstartDate / completionDate from statusModule
LocationscontactsLocationsModule.locations — up to 5 sites (city, country)
InterventionsarmsInterventionsModule.interventions — drugs, devices, or procedures
Eligibilitysex, minimumAge, maximumAge from eligibilityModule

Trial Status Classification

Each trial is assigned a normalized status label from the raw ClinicalTrials.gov status codes:

RecruitingRECRUITING — actively enrolling participants
Not Yet RecruitingNOT_YET_RECRUITING — approved but not yet open
Active, Not RecruitingACTIVE_NOT_RECRUITING — ongoing but enrollment closed
Enrolling by InvitationENROLLING_BY_INVITATION — selective enrollment only
CompletedCOMPLETED — study finished
TerminatedTERMINATED — stopped early

Caching & Freshness

To ensure fast page loads without overloading the ClinicalTrials.gov API, we use a two-tier caching strategy:

  • In-memory cache: 5-minute TTL. Prevents redundant API calls within a single server instance.
  • Cloudflare KV cache: 24-hour TTL. Shared across all edge nodes globally. A scheduled Worker refreshes the cache daily at 08:30 UTC.

This means data is typically 0–24 hours old. For time-sensitive decisions — such as verifying that a trial is still recruiting — always confirm directly on ClinicalTrials.gov.

AI Analysis

Each trial card includes an optional AI-generated briefing powered by Claude (Anthropic). When requested, our API sends the trial title, sponsor, phase, conditions, and summary to Claude, which returns a concise 2-sentence intelligence brief.

AI briefings are generated on demand and are not cached — they reflect the trial data at the time of request. They are intended as a quick orientation aid, not a substitute for reading the full protocol.

Limitations

  • We display up to 10,000 trials per daily refresh. Not all registered studies on ClinicalTrials.gov may be represented.
  • Location data is limited to the first 5 sites per trial to optimize performance.
  • Eligibility criteria are shown as raw text from the registry and have not been interpreted or summarized.
  • ClinicalMetric is for informational purposes only. Nothing on this site constitutes medical advice. Always consult a qualified healthcare provider before making any medical decisions.