
clinical-trials-database
Query ClinicalTrials.gov via APIv2. Use when you want to search for trials by condition, drug, location, status, or phase; retrieve trial details by NCT ID; check eligibility/inclusion criteria; count trials across conditions or time periods; identify a sponsor's trial portfolio; find recruiting trials for patient matching.
- Installs
- 2.4K
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/google-deepmind/science-skills --skill clinical-trials-database- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads clinical-trials-database automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Clinical Trials Database
Prerequisites
uv: Read theuvskill and follow its Setup instructions to ensureuvis installed and on PATH.- User Notification: If .licenses/clinical_trials_database_LICENSE.txt does not already exist in the workspace root directory then (1) prominently notify the user to check the terms at https://clinicaltrials.gov/, then (2) create the file recording the notification text and timestamp.
Overview
Access worldwide clinical trial data from ClinicalTrials.gov via the REST API
v2. The CLI script at scripts/clinical_trials_api.py wraps the API with
dedicated flags for common filters (phase, age group, status, intervention,
sponsor, etc.) so you rarely need to construct raw queries.
Core Rules
- Use the Wrapper: ALWAYS execute the provided helper scripts to query the database rather than accessing the database directly. The scripts automatically enforce the required rate limit gracefully.
- Always use
--fields— trial JSON records can be very large; restrict to the data points you need. - Use
--count-totalfirst — check result volume before fetching all records. - Paginate large result sets — use
--limitwith--page-tokento iterate. - Trust Search Filters: Do not manually re-filter results unless explicitly asked to verify detailed eligibility.
- Notification: If this skill is used, ensure this is mentioned in the output.
Context Efficiency Warning
Trial JSON records can be very large. Always use the --fields parameter to
restrict the response to only the data points you need. After writing to file,
read only the fields you need rather than the entire file.
[!TIP] Use
references/studies_schema.mdto identify exact field paths for--fields.
Response Layout Summary
API responses contain a list of studies (usually in a studies[] array). Each
study is split into protocolSection and optional resultsSection.
[!Tip] Use the shorthand aliases below with the
--fieldsparameter to request specific data and keep responses small.
Top-Level Fields
totalCount— Total studies matching query (integer)studies[]— Array of study objectsnextPageToken— cursor string for pagination
Common Study Fields (and shorthand alias)
- Identification
protocolSection.identificationModule.nctId(NCTId) — Unique trial IDprotocolSection.identificationModule.briefTitle(BriefTitle) — Short title
- Status
protocolSection.statusModule.overallStatus(OverallStatus) — Recruitment status
- Description
protocolSection.descriptionModule.briefSummary(BriefSummary) — Short description
- Arms & Interventions
protocolSection.armsInterventionsModule.interventions(ArmsInterventionsModule)
- Eligibility
protocolSection.eligibilityModule.eligibilityCriteria(EligibilityCriteria) — Inclusion/ExclusionprotocolSection.eligibilityModule.stdAges(StdAge) — CHILD, ADULT, etc.
Consult references/studies_schema.md for full paths (Locations, Outcomes,
Results) and common --fields recipes.
Commands
Search for studies
Use for: finding trials by disease, drug, phase, status, age group, or any combination of these filters.
uv run scripts/clinical_trials_api.py search \
--condition "<disease>" \
--intervention "<drug_or_treatment>" \
--status "<status>" \
--phase "<phase>" \
--age-group "<age_group>" \
--study-type "<study_type>" \
--sponsor "<sponsor_name>" \
--has-results \
--sort "<field>:<asc|desc>" \
--fields "<fields>" \
--limit <N> \
--count-total \
--page-token "<token>" \
--output /tmp/search_results.json
All flags are optional and combine via AND logic.
Flag reference:
--condition— Disease or condition to search for (e.g."cystic fibrosis").--intervention— Drug, device, or treatment name (e.g."pembrolizumab").--status— Recruitment status filter. Values: RECRUITING, COMPLETED, NOT_YET_RECRUITING, ACTIVE_NOT_RECRUITING, ENROLLING_BY_INVITATION, TERMINATED, SUSPENDED, WITHDRAWN.--phase— Trial phase filter. Values: PHASE1, PHASE2, PHASE3, PHASE4, EARLY_PHASE1, NA.--age-group— Patient age group filter. Values: CHILD (0–17), ADULT (18–64), OLDER_ADULT (65+).--study-type— Type of study. Values: INTERVENTIONAL, OBSERVATIONAL, EXPANDED_ACCESS.--sponsor— Lead sponsor or institution name (e.g."National Cancer Institute").--has-results— Boolean flag (no value needed). When present, filters for studies that have results available on ClinicalTrials.gov.--sort— Sort order asFieldName:ascorFieldName:desc. Common fields:LastUpdatePostDate,EnrollmentCount,StudyFirstPostDate,StartDate.--fields— Comma-separated list of JSON field names to include in the response. Use this to keep responses small (e.g."NCTId,BriefTitle,OverallStatus,Phase"). Seereferences/studies_schema.mdfor available field paths.--limit— Maximum number of studies to return per request (1–1000, default 10).--count-total— Boolean flag (no value needed). When present, the response includes atotalCountfield showing the total number of matching studies across all pages.--page-token— An opaque cursor string used to fetch the next page of results. Obtain this value from thenextPageTokenfield in a previous search response. Do not construct this string yourself; always copy it verbatim from the API response. See the Pagination section below.--advanced— Raw Essie filter expression for structured queries beyond the dedicated flags (e.g."AREA[LocationCountry]United States"). Combined with other flags via AND. Seereferences/clinical_trials_api.mdfor syntax.--output— (Required) File path where the JSON response is written.
Example — actively recruiting Phase 3 pediatric cystic fibrosis trials:
uv run scripts/clinical_trials_api.py search \
--condition "cystic fibrosis" \
--status RECRUITING \
--phase PHASE3 \
--age-group CHILD \
--fields "NCTId,BriefTitle,OverallStatus,Phase" \
--limit 10 \
--output /tmp/cf_trials.json
Example — recruiting atezolizumab trials for esophageal cancer:
uv run scripts/clinical_trials_api.py search \
--condition "esophageal cancer" \
--intervention "Atezolizumab" \
--status RECRUITING \
--fields "NCTId,BriefTitle,Phase" \
--limit 10 \
--output /tmp/atezolizumab_trials.json
Retrieve a study by NCT ID
Use for: fetching full details of a specific trial when you already have the NCT identifier.
uv run scripts/clinical_trials_api.py get-study \
<nct_id> [--fields "<fields>"] \
--output /tmp/study.json
Returns a useful default set of fields if --fields is omitted:
NCTId,BriefTitle,OverallStatus,Phase,BriefSummary,
ConditionsModule,ArmsInterventionsModule,EligibilityModule
Structure of the default response:
{
"protocolSection": {
"identificationModule": {
"nctId": "NCT00000000",
"briefTitle": "Study Title"
},
"statusModule": {
"overallStatus": "RECRUITING"
},
"descriptionModule": {
"briefSummary": "This study is about..."
},
"conditionsModule": {
"conditions": [ "Condition Name" ]
},
"armsInterventionsModule": {
"interventions": [ { "type": "DRUG", "name": "Drug Name" } ]
},
"eligibilityModule": {
"eligibilityCriteria": "Inclusion:\n- ...",
"stdAges": [ "ADULT" ]
}
}
}
Get eligibility / inclusion criteria
Use for: pulling inclusion/exclusion rules, age ranges, and sex requirements for patient-matching tasks.
uv run scripts/clinical_trials_api.py \
get-eligibility <nct_id> \
--output /tmp/eligibility.json
Shortcut that returns title and the full eligibility module (inclusion/exclusion criteria, age range, sex).
Example — inclusion criteria for NCT04886804:
uv run scripts/clinical_trials_api.py \
get-eligibility NCT04886804 \
--output /tmp/eligibility_NCT04886804.json
Count matching studies
Use for: exploring the trial landscape — checking how many trials exist for a condition, phase, or status before fetching full records.
uv run scripts/clinical_trials_api.py count \
--condition "<disease>" \
[--status "<status>"] [--phase "<phase>"] ... \
--output /tmp/count.json
Returns only the total count of clinical trials matching the search criteria
without fetching study records. Accepts the same filter flags as search.
Search by location / geography
Use for: narrowing trials to a specific country, state, or city.
Use --advanced with AREA[LocationCountry] or AREA[LocationCity] to
restrict results by geography:
uv run scripts/clinical_trials_api.py search \
--condition "cystic fibrosis" \
--status RECRUITING \
--advanced "AREA[LocationCity]New York" \
--fields "NCTId,BriefTitle" \
--limit 20 \
--output /tmp/nyc_cf_trials.json
Search by sponsor / organization
Use for: identifying a sponsor's or institution's trial portfolio.
Use --sponsor to find trials run by a specific institution or company:
uv run scripts/clinical_trials_api.py search \
--sponsor "National Cancer Institute" \
--fields "NCTId,BriefTitle,LeadSponsorName" \
--limit 20 \
--output /tmp/nci_trials.json
Combined multi-criteria search
Use for: complex queries that layer multiple filters (condition and drug and phase and geography and sponsor, etc.).
All flags combine via AND, so you can layer conditions, interventions, status, phase, geography, and sponsor in a single query:
uv run scripts/clinical_trials_api.py search \
--condition "pancreatic cancer" \
--intervention "immunotherapy" \
--status RECRUITING \
--phase PHASE3 \
--advanced "AREA[LocationCountry]United States" \
--fields "NCTId,BriefTitle,Phase,LeadSponsorName" \
--limit 20 \
--output /tmp/panc_trials.json
Raw API query (escape hatch)
Use for: uncommon endpoints or parameter combinations not covered by the dedicated flags.
uv run scripts/clinical_trials_api.py raw-query \
--endpoint <path> \
--params '<json_dict>' \
--output /tmp/raw_result.json
Pagination
When results exceed --limit, the response includes a nextPageToken. Pass it
with --page-token to fetch the next page:
uv run scripts/clinical_trials_api.py search \
--condition "breast cancer" \
--status RECRUITING \
--limit 50 --count-total \
--output /tmp/breast_cancer_p1.json
uv run scripts/clinical_trials_api.py search \
--condition "breast cancer" \
--status RECRUITING \
--limit 50 --page-token "CAo=" \
--output /tmp/breast_cancer_p2.json
Advanced Querying
For complex filtering beyond the dedicated flags, use --advanced with an Essie
expression.
What is an Essie Expression? Essie is the search engine powering ClinicalTrials.gov. An Essie expression is a structured query that targets specific fields (e.g., country, phase) rather than doing general keyword searches.
AREA[Field]Value: Targets a specific field.AREA[LocationCountry]United StatesAREA[Phase]PHASE3
- Boolean operators: Combine with
AND,OR,NOT. RANGE[min, max]: For numeric/date fields (e.g.RANGE[500, MAX]).
See references/clinical_trials_api.md for syntax and available fields.
It is combined with other flags via AND:
uv run scripts/clinical_trials_api.py search \
--condition "diabetes" \
--advanced "AREA[LocationCountry]United States \
AND AREA[EnrollmentCount]RANGE[500, MAX]" \
--fields "NCTId,BriefTitle,EnrollmentCount" \
--output /tmp/diabetes_us_large.json
References
- API parameters, enum values, and Essie syntax:
references/clinical_trials_api.md - JSON field paths and
--fieldsrecipes:references/studies_schema.md
FAQ
What does the clinical-trials-database skill do?
Query ClinicalTrials.gov via APIv2. Use when you want to search for trials by condition, drug, location, status, or phase; retrieve trial details by NCT ID; check eligibility/inclusion criteria; count trials across conditions or time periods; identify a sponsor's trial portfolio; find recruiting trials for patient matching.
How do I install clinical-trials-database?
Run npx skills add https://github.com/google-deepmind/science-skills --skill clinical-trials-database in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/clinical-trials-database/ (personal) or .claude/skills/clinical-trials-database/ (project).
Which AI agents can use clinical-trials-database?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is clinical-trials-database safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains clinical-trials-database?
It is published by google-deepmind in google-deepmind/science-skills. It has 2,363 recorded installs.
More from google-deepmind/science-skills
literature-search-arxiv
google-deepmind/science-skills
Search for scientific papers, preprints, and publications on arXiv. Extract metadata, abstracts, and download full-text PDFs or HTML versions of papers. Use when the user asks to find research papers, literature, or specific arXiv IDs.
literature-search-openalex
google-deepmind/science-skills
Query the OpenAlex scholarly database for research papers, authors, institutions, topics, sources, publishers, funders, geo-locations, and keywords. Use when searching academic papers, resolving DOIs, downloading open-access PDFs, finding an author's publications, aggregating bibliometric data (citation counts, h-index, impact factor), exploring the research taxonomies, or performing DOI lookups.
pubmed-database
google-deepmind/science-skills
Search PubMed for scientific literature, including published clinical trials. Fetch abstracts and full text. Link published research to biological databases (gene, protein, nucleotide, PubChem) to discover associations between papers and specific compounds or genes. Verify medical spelling, match raw citations, and cache result sets for bulk processing. Interfaces NCBI E-utilities and PMC BioC APIs.
literature-search-europepmc
google-deepmind/science-skills
Search Europe PMC for scientific literature and download open-access full texts and PDFs. Retrieve full-text XML/plain text by PMCID, get citation lists and bibliography.
literature-search-biorxiv
google-deepmind/science-skills
Browse and filter life sciences, biology, and medical preprints from bioRxiv and medRxiv. Supports fetching paper metadata by DOI, and browsing by date range with category and keyword filters. Keyword filtering is local, so date ranges MUST be narrow (1-4 weeks) with a category to prevent timeouts.
uv
google-deepmind/science-skills
Checks whether the uv Python package manager is installed and installs it if missing. Ensures uv is on PATH. Use when another skill requires uv as a prerequisite.
Popular data & databases skills
supabase-postgres-best-practices
supabase/agent-skills
Postgres best practices maintained by Supabase, for Postgres running anywhere. Load this skill BEFORE writing or changing anything that lives in a Postgres database: creating or altering tables and columns (including choosing column types), schema design, migrations and declarative schema files, RLS policies and the tests that verify them, indexes, triggers, database functions, queues and scheduled jobs (pgcron, pgmq), vector/semantic search (pgvector), and restoring dumps (pgrestore) or importing data. Also load it when diagnosing slow queries, high CPU, timeouts, EXPLAIN plans, connection exhaustion, locking, bloat, or rows visible to the wrong user or tenant. This is not just a performance guide — schema, migration, security, and SQL authoring tasks need these rules too, even for a one-column change or a single query.
prisma-client-api
prisma/skills
Prisma Client API reference covering model queries, filters, operators, and client methods. Use when writing database queries, using CRUD operations, filtering data, or configuring Prisma Client. Triggers on "prisma query", "findMany", "create", "update", "delete", "$transaction".
prisma-database-setup
prisma/skills
Deprecated compatibility name for prisma-orm-setup. Use only when a user or existing integration explicitly invokes prisma-database-setup; otherwise select prisma-orm-setup.
prisma-cli
prisma/skills
Prisma ORM 7 CLI reference for existing Prisma 7 applications or explicitly selected Prisma 7 workflows. Covers prisma init, generate, migrate, db, dev, studio, and mcp. For setup, connection repair, or Prisma 8, use prisma-orm-setup; not the Prisma Platform CLI.
prisma-postgres
prisma/skills
Deprecated compatibility name for prisma-postgres-setup. Use only when a user or existing integration explicitly invokes prisma-postgres; otherwise select prisma-postgres-setup.
prisma-driver-adapter-implementation
prisma/skills
Required reference for Prisma ORM 7 SQL driver adapter work. Use when implementing or modifying adapters, adding database drivers, or touching SqlDriverAdapter, Transaction, savepoint, result mapping, or DriverAdapterError behavior. Covers current transaction lifecycle, optional savepoint hooks, original database-error preservation, and verification.