- **Map competitive landscape** across therapeutic mechanisms for any disease - **Track specific mechanism classes** (e.g., anti-IL23, anti-TL1A, JAK inhibitors) - **Identify sponsors** and their pipeline positions by phase - **Phase distribution analysis** for business development diligence - **Pipeline monitoring** for a specific sponsor's disease portfolio - **Pre-built disease configs** available (IBD with 14 mechanism classes); generic mode for any other disease
Scanned 9/4/2026
Install to Claude Code
npx -y skills add gabrielmoreira/agent-skills-mirror --skill clinicaltrials-landscape --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Clinicaltrials Landscape?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/gabrielmoreira-clinicaltrials-landscape)More formats (shields.io, HTML) on the badges page.
---
id: clinicaltrials-landscape
name: ClinicalTrials.gov Disease Landscape Scanner
category: literature
short-description: "Query ClinicalTrials.gov API v2 to map the clinical trial landscape for any disease area by mechanism, phase, and sponsor."
detailed-description: "Programmatically query the free ClinicalTrials.gov API v2 to pull all active clinical trials for a disease area, classify by therapeutic mechanism of action, and generate competitive landscape visualizations. Supports any disease with pre-built configs for IBD (Crohn's, UC). Generic mode classifies by intervention type when no disease config exists. Supports filtering by mechanism, phase, sponsor, and status. Exports structured CSVs, publication-quality plots, and pickle objects for downstream analysis. No API key required."
starting-prompt: Show me the current clinical trial landscape for IBD
---
# ClinicalTrials.gov Disease Landscape Scanner
## When to Use This Skill
- **Map competitive landscape** across therapeutic mechanisms for any disease
- **Track specific mechanism classes** (e.g., anti-IL23, anti-TL1A, JAK inhibitors)
- **Identify sponsors** and their pipeline positions by phase
- **Phase distribution analysis** for business development diligence
- **Pipeline monitoring** for a specific sponsor's disease portfolio
- **Pre-built disease configs** available (IBD with 14 mechanism classes); generic mode for any other disease
**Do NOT use for:**
- Detailed single-trial protocol analysis
- Efficacy/safety comparisons (requires literature review skill)
---
## Installation
| Software | Version | License | Commercial Use | Installation |
|----------|---------|---------|----------------|-------------|
| pandas | ≥1.3 | BSD-3 | ✅ Permitted | `pip install pandas` |
| requests | ≥2.25 | Apache-2.0 | ✅ Permitted | `pip install requests` |
| numpy | ≥1.20 | BSD-3 | ✅ Permitted | `pip install numpy` |
| plotnine | ≥0.10 | MIT | ✅ Permitted | `pip install plotnine` |
| plotnine-prism | ≥0.3 | MIT | ✅ Permitted | `pip install plotnine-prism` |
| seaborn | ≥0.11 | BSD-3 | ✅ Permitted | `pip install seaborn` |
| matplotlib | ≥3.4 | PSF | ✅ Permitted | `pip install matplotlib` |
| reportlab | ≥3.6 | BSD | ✅ Permitted | `pip install reportlab` |
| pyyaml | ≥5.0 | MIT | ✅ Permitted | `pip install pyyaml` |
```bash
pip install pandas requests numpy plotnine plotnine-prism seaborn matplotlib reportlab pyyaml
```
**System requirements:** Internet connection for ClinicalTrials.gov API calls.
---
## Inputs
**Required:**
- **Disease / condition terms** — list of conditions to search ClinicalTrials.gov
**Optional:**
- **Disease config** — pre-built config ID (e.g., `"ibd"`) for mechanism taxonomy, or `None` for generic
- **Mechanism filter** — e.g., "Anti-IL-23 (p19)", "Anti-TL1A", "JAK Inhibitor"
- **Sponsor filter** — e.g., "Takeda", "AbbVie"
- **Status filter** — Default: all active (Recruiting + Active not recruiting + Not yet recruiting)
- **Phase filter** — Phase 1, 2, 3, 4
---
## Outputs
**Visualizations (PNG + SVG):**
- `landscape_overview.png/.svg` — 6-panel landscape figure (300 DPI)
- Mechanism × Phase heatmap, top sponsors, phase stacked bars, mechanism counts, timeline, sponsor type
- `landscape_supplementary.png/.svg` — 4-panel supplementary figure
- Top 15 countries, study design by phase, enrollment distribution, phase transition funnel
**Results (CSV):**
- `trials_all.csv` — All trials with 46 columns (mechanism, phase, sponsor, geography, study design, arms, endpoints, eligibility, regulatory)
- `trials_by_mechanism.csv` — Mechanism × phase cross-tabulation
- `trials_by_sponsor.csv` — Sponsor summary with trial counts
- `trials_filtered.csv` — Filtered subset (if mechanism/sponsor filter applied)
**Reports:**
- `landscape_report.pdf` — Publication-quality PDF with 24 sections: executive summary, mechanism deep-dives, geographic landscape, study design, phase transition funnel, endpoint comparison, combination therapies, biosimilar assessment, whitespace analysis, and more
- `landscape_report.md` — Markdown version with identical 24-section structure
**Analysis objects (Pickle):**
- `analysis_object.pkl` — Complete landscape for downstream use
- Load with: `import pickle; obj = pickle.load(open('analysis_object.pkl', 'rb'))`
- Contains: trials_df (46 columns), mechanism/phase/sponsor distributions, geographic stats, design stats, parameters
---
## Clarification Questions
1. **Data Source** (ASK THIS FIRST):
- This skill queries the ClinicalTrials.gov API v2 directly (free, no key needed).
- **Use live API data?** (recommended, ~30 seconds)
- **Or use cached demo data?** Pre-loaded IBD landscape snapshot for quick demo
2. **Disease Area:**
- Which disease area to analyze?
- a) IBD (Inflammatory Bowel Disease) — pre-built config with 14 mechanism classes
- b) Oncology (generic intervention-type classification)
- c) Autoimmune / Rheumatology (generic classification)
- d) Other (specify disease and condition terms)
3. **Scope** *(if IBD selected)*:
- Which conditions?
- a) All IBD (Crohn's, UC, and IBD unspecified) — recommended
- b) Crohn's Disease only
- c) Ulcerative Colitis only
- *(If other disease)* — Provide list of condition search terms
4. **Focus:**
- Any mechanism or sponsor to highlight?
- *(IBD)* a) Anti-IL-23 — recommended for demo | b) Anti-TL1A | c) All mechanisms
- *(Other)* Specify or skip highlighting
---
## Standard Workflow
> **Note:** Run from the OmicsClaw root directory and add the workflow scripts to `sys.path`:
> ```python
> import sys; import os; sys.path.insert(0, os.path.abspath('knowledge_base/scripts/clinicaltrials-landscape'))
> ```
🚨 **MANDATORY: USE SCRIPTS EXACTLY AS SHOWN - DO NOT WRITE INLINE CODE** 🚨
**Step 1 — Load config and query ClinicalTrials.gov:**
```python
from disease_config import load_disease_config, get_default_conditions
from query_clinicaltrials import query_trials
# Load disease config (use "ibd" for IBD, or None for generic)
config = load_disease_config("ibd")
# Get conditions from config or specify manually
conditions = get_default_conditions(config) or ["Crohn's Disease", "Ulcerative Colitis", "Inflammatory Bowel Disease"]
raw_trials = query_trials(
conditions=conditions,
statuses=["RECRUITING", "ACTIVE_NOT_RECRUITING", "ENROLLING_BY_INVITATION", "NOT_YET_RECRUITING"],
)
```
**✅ VERIFICATION:** `"✓ Retrieved {N} trials from ClinicalTrials.gov"`
**Step 2 — Classify and compile:**
```python
from classify_mechanisms import classify_all
from compile_trials import compile_trials
classified = classify_all(raw_trials, config=config)
trials_df = compile_trials(classified, output_dir="landscape_results")
```
**DO NOT write inline classification code. The script loads mechanism taxonomy from config.**
**✅ VERIFICATION:** `"✓ Trial data compiled successfully!"`
**Step 3 — Generate visualizations:**
```python
from generate_landscape_plots import generate_landscape_plots
generate_landscape_plots(
trials_df,
output_dir="landscape_results",
highlight_mechanism="Anti-IL-23 (p19)", # or None for no highlight
highlight_sponsor=None, # or "Takeda" to highlight
config=config,
)
```
🚨 **DO NOT write inline plotting code. The script handles all 6 panels + PNG/SVG export.** 🚨
**✅ VERIFICATION:** `"✓ All landscape visualizations generated successfully!"`
**Step 4 — Export results:**
```python
from export_all import export_all
export_all(
trials_df,
parameters={
"conditions": conditions,
"statuses": ["RECRUITING", "ACTIVE_NOT_RECRUITING", "ENROLLING_BY_INVITATION", "NOT_YET_RECRUITING"],
"highlight_mechanism": "Anti-IL-23 (p19)",
},
output_dir="landscape_results",
config=config,
)
```
**DO NOT write custom export code. Use export_all().**
**✅ VERIFICATION:** `"=== Export Complete ==="`
---
## ⚠️ CRITICAL — DO NOT:
- ❌ **Write inline classification code** → **STOP: Use `classify_all()` from scripts**
- ❌ **Write inline plotting code (ggplot, plt, sns)** → **STOP: Use `generate_landscape_plots()`**
- ❌ **Write custom export code** → **STOP: Use `export_all()`**
- ❌ **Try to scrape ClinicalTrials.gov HTML** → **Use the API via `query_trials()`**
---
## ⚠️ IF SCRIPTS FAIL — Script Failure Hierarchy:
1. **Fix and Retry (90%)** — Install missing package, re-run script
2. **Modify Script (5%)** — Edit the script file itself, document changes
3. **Use as Reference (4%)** — Read script, adapt approach, cite source
4. **Write from Scratch (1%)** — Only if genuinely impossible, explain why
**NEVER skip directly to writing inline code without trying the script first.**
---
## Common Issues
| Error | Cause | Solution |
|-------|-------|----------|
| **ConnectionError / Timeout** | ClinicalTrials.gov unreachable | Check internet connection; retry after 30 seconds |
| **HTTP 429 Too Many Requests** | Rate limit exceeded | Increase `RATE_LIMIT_DELAY` in query_clinicaltrials.py |
| **ModuleNotFoundError: plotnine** | Missing visualization package | `pip install plotnine plotnine-prism` |
| **Empty results (0 trials)** | Overly restrictive filters | Broaden condition/status/phase filters |
| **Many "Unclassified" mechanisms** | No disease config or new drugs | Use a disease config (e.g., `"ibd"`) or update `disease_configs/*.yaml` |
| **SVG export failed** | Missing SVG backend | Normal — PNG is always generated as fallback |
| **Sponsor name variants** | Same company, different names | Update `SPONSOR_NORMALIZATION` in compile_trials.py |
| **ModuleNotFoundError: yaml** | Missing pyyaml | `pip install pyyaml` |
---
## Interpretation Guidelines
- **Mechanism classification** is based on intervention names and descriptions — some trials with vague descriptions (e.g., "Study Drug") will be classified as "Other Biologic" or "Unclassified"
- **Phase 2/3** indicates a combined Phase 2/3 study design
- **Sponsor normalization** groups subsidiaries under parent company (e.g., Millennium → Takeda)
- **Industry vs Academic** based on ClinicalTrials.gov `leadSponsor.class` field
- The landscape reflects **registered trials**, not all pipeline programs (pre-IND programs won't appear)
- **Disease configs** provide curated mechanism taxonomies; without config, classification uses generic intervention types
---
## Suggested Next Steps
1. **Deep-dive a mechanism** — Use `literature-preclinical` to review mechanism biology
2. **Track a sponsor's full pipeline** — Use `development-landscape` for broader pipeline view
3. **Biomarker analysis** — Use `lasso-biomarker-panel` to identify response biomarkers from trial data
4. **Export to presentation** — Use landscape_report.md and plots for stakeholder review
---
## Related Skills
- `development-landscape` — Broader, multi-source pipeline landscape for any target
- `literature-preclinical` — Literature review for mechanism biology
- `lasso-biomarker-panel` — Biomarker discovery from expression data
---
## References
- ClinicalTrials.gov API v2: https://clinicaltrials.gov/data-api/api
- ClinicalTrials.gov: https://clinicaltrials.gov/
- See `references/api-parameters.md` for full API parameter reference
- See `references/mechanisms.md` for mechanism taxonomy details
- See `references/output-schema.md` for output column definitions
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!