Recipe: What trials are recruiting for X
The task
A patient, caregiver, or researcher wants to know which clinical trials are currently enrolling for a condition or drug — not every trial ever registered, just the ones a real person could actually join today.
Tool used: ct_search. One call, with the status filter set explicitly.
Copy-paste prompt
Find clinical trials that are currently recruiting for "<condition or drug>" using
Pipeworx's clinical trials tool. Only include trials with status RECRUITING — exclude
completed, terminated, or active-but-closed-to-new-patients trials. For each result give
me the NCT ID, title, phase, sponsor, and a link to the study page.
What a good answer looks like
ct_search({ query: "pancreatic cancer", status: "RECRUITING", limit: 5 })
returns (live call, 2026-08-10 — trimmed to 2 of 5):
{
"query_used": "pancreatic cancer",
"filters_applied": { "status": "RECRUITING", "phase": null, "sponsor": null },
"total_count": 1150,
"studies": [
{
"nct_id": "NCT05746182",
"title": "Genetic Predisposition Testing Program for Pancreatic Neuroendocrine Neoplasms",
"status": "RECRUITING",
"phase": null,
"sponsor": "University of California, San Francisco",
"start_date": "2023-04-07"
},
{
"nct_id": "NCT06242470",
"title": "A Study of MGC026 in Participants With Advanced Solid Tumors",
"status": "RECRUITING",
"phase": "PHASE1",
"sponsor": "MacroGenics",
"start_date": "2024-03-06"
}
]
}
A trustworthy answer:
- echoes
filters_applied.statusback as"RECRUITING"— notnull— so you can confirm the filter actually took effect, not just that you asked for it - shows every returned study with
status: "RECRUITING"literally on the record, not inferred from the query wording - gives you
total_count(the full match count) separately from how many rows you actually got back, so “5 results” doesn’t get misread as “only 5 trials exist”
The plausible-sounding failure: omitting status doesn’t default to recruiting-only —
it returns every status, unfiltered, and still looks like a normal answer. Here’s the
same query with status left off:
ct_search({ query: "test", limit: 3 })
// → filters_applied: { "status": null, "phase": null, "sponsor": null }
// → studies: [
// { "nct_id": "NCT06243289", "status": "TERMINATED", ... },
// { "nct_id": "NCT01137240", "status": "COMPLETED", ... },
// { "nct_id": "NCT04156789", "status": "COMPLETED", ... }
// ]
Nothing about that response looks broken — real NCT IDs, real titles, a normal-shaped
list. But a caregiver told “here are trials for X” and handed a TERMINATED or COMPLETED
study has been actively misled: there is nowhere to enroll. ct_search has no default
status filter; you supply one or you get everything. Always pass status: "RECRUITING"
explicitly — never rely on the query text (“recruiting pancreatic cancer trials”) to
imply it, since the query field only searches title/condition/intervention text, not
status.
Step-by-step tool calls
1. Search with the status filter set
ct_search({ query: "<condition or drug>", status: "RECRUITING", limit: 10 })
Combine statuses with a comma union if you want a broader “still open” view — e.g.
status: "RECRUITING,NOT_YET_RECRUITING" includes trials that have posted but haven’t
started screening patients yet.
2. Or search by location instead of keyword
For “trials near me” rather than “trials for X”, use ct_trials_by_location — it
defaults status to RECRUITING when you don’t pass one, which is the opposite
default behavior from ct_search in the same pack:
ct_trials_by_location({ condition: "breast cancer", location: "Boston", limit: 10 })
// → status defaults to RECRUITING (see the tool's own description)
Don’t assume this default carries over to ct_search — it doesn’t. Two tools, two
different unset-status behaviors, in the same pack.
3. Get full detail on one trial
ct_get_study({ nct_id: "NCT05746182" })
// → eligibility criteria, primary outcomes, sponsor, site locations
Eligibility criteria are where “can this patient actually enroll” gets decided —
ct_search results don’t carry them; you need the per-study call.
4. Distinguish “recruiting” from “still running but closed to new patients”
RECRUITING and ACTIVE_NOT_RECRUITING are different statuses for a reason: a trial can
be fully enrolled and still ongoing (following existing participants) while no longer
accepting new ones. If your prompt says “can I join,” filter to RECRUITING only —
don’t fold ACTIVE_NOT_RECRUITING into the same bucket, even though both sound like
“the trial is active.”
Caveats
ct_search’s status filter is opt-in, not a default. See the plausible-failure section above — this is the one trap that makes an otherwise-correct-looking answer actively wrong.RECRUITING≠ACTIVE_NOT_RECRUITING. The full status vocabulary isRECRUITING,ACTIVE_NOT_RECRUITING,COMPLETED,TERMINATED,WITHDRAWN,ENROLLING_BY_INVITATION,SUSPENDED,NOT_YET_RECRUITING. Only the first (and arguably the last, with a caveat that it hasn’t opened yet) answers “can a new patient join today.”ct_count_by_condition’s description promises a status/phase breakdown; the live tool doesn’t return one — it returns a single filteredtotal_countfor whatever status/phase you passed (e.g.{"total_count": 5024}for “pancreatic cancer” with no filter). Filed as fleet #215. Don’t rely on it for a per-status landscape count today — callct_searchonce per status value instead if you need the breakdown.total_countcan be large relative tolimit. “1,150 recruiting trials for pancreatic cancer” doesn’t mean the 5 you fetched are the most relevant 5 — there’s no relevance ranking beyond ClinicalTrials.gov’s own ordering. Narrow withphaseorsponsorif the caller cares which trials, not just whether any exist.- This is ClinicalTrials.gov (US-centric, though it lists many international sites) — not a substitute for eligibility screening. Enrollment criteria are strict and site-specific; a trial appearing in results doesn’t mean a specific patient qualifies.