Clinical Trials Database
Google DeepMindOfficialPublished by Google DeepMind
- Skill
- Tool integration
- Science and research
- Apache-2.0
- Low risk
- Has scripts
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The Clinical Trials Database skill provides a structured interface to the ClinicalTrials.gov API v2. It allows users to search for, filter, and retrieve detailed information about clinical trials, including eligibility criteria, study status, and sponsor portfolios. The skill includes a Python-based CLI wrapper that manages rate limits and simplifies complex queries through dedicated flags and advanced filtering expressions.
What it does
- Searches for clinical trials by condition, intervention, status, phase, or location.
- Retrieves full trial details using a unique NCT identifier.
- Extracts specific eligibility and inclusion criteria for patient matching.
- Counts the number of trials matching specific criteria to assess research landscapes.
- Supports advanced filtering using Essie expressions for complex query requirements.
- Provides pagination support for handling large result sets efficiently.
When to use it
- When you need to identify active or completed clinical trials for a specific medical condition.
- When performing patient matching based on eligibility criteria.
- When analyzing the trial portfolio of a specific sponsor or institution.
- When you need to gather statistical data on trial counts across different phases or time periods.
Advantages
- Simplifies complex API interactions with a dedicated CLI wrapper.
- Enforces rate limiting automatically to ensure stable data retrieval.
- Reduces token usage and context clutter by allowing field-specific data selection.
- Provides structured access to standardized trial data fields.
Usage examples
- “Find all recruiting Phase 3 pediatric trials for cystic fibrosis.”
- The agent executes the search command with filters for condition, status, phase, and age group, outputting the results to a JSON file.
- “Get the eligibility criteria for trial NCT04886804.”
- The agent uses the get-eligibility command to retrieve and display the inclusion and exclusion requirements for the specified trial.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/google-deepmind/clinical-trials-database/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip clinical-trials-database.zip -d .agents/skills
Documentation by Google DeepMind
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.jsonAll 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.jsonExample — 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.jsonRetrieve 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.jsonReturns 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.jsonShortcut 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.jsonCount 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.jsonReturns 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.jsonSearch 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.jsonCombined 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.jsonRaw 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.jsonPagination
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.jsonAdvanced 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.jsonReferences
API parameters, enum values, and Essie syntax:
references/clinical_trials_api.mdJSON field paths and
--fieldsrecipes:references/studies_schema.md
Files
- ATTRIBUTION.mdAdded by AutoGineer930 B
- LICENSELicence file added by AutoGineer11.1 KiB
- SKILL.md12.4 KiB
- references/citation.bib376 B
- references/clinical_trials_api.md6.2 KiB
- references/studies_schema.md5.0 KiB
- scripts/clinical_trials_api.pyScript11.4 KiB
ATTRIBUTION.md
Attribution
This folder is an unmodified copy of the Agent Skill "clinical-trials-database", distributed by AutoGineer (https://autogineer.com/agent-skills).
Commit: 4de6786171f1479026da5d3a00f110703c8ba35e
Published by: Google DeepMind (https://github.com/google-deepmind)
Publisher: Google DeepMind (https://github.com/google-deepmind)
Licence: Apache License 2.0 (https://github.com/google-deepmind/science-skills/blob/4de6786171f1479026da5d3a00f110703c8ba35e/LICENSE)
Licence evidence: repository licence LICENSE
Retrieved: 2026-11-07
The skill's own files are unmodified copies. AutoGineer is not affiliated with or endorsed by the author or the publisher.
Files added by AutoGineer
ATTRIBUTION.md: this file, written by AutoGineer
LICENSE: copied from LICENSE
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Python
Security
What our scanner noticed· Low risk
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Google DeepMind
- Publisher
- Google DeepMind (Official)
- Source
- google-deepmind/science-skills · skills/clinical_trials_database · commit 4de6786
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Google DeepMind or Google DeepMind.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download clinical-trials-database.zip