numbered
Sponsor, CRO, or health system
← Back to Agent Library

Trial Matching Agent

Reads a patient's chart and ranks the active trials they're eligible for, in seconds instead of a manual review cycle.

Who it's for
Trial coordinators, and oncology or specialty providers.
What it replaces
Manual chart review for trial eligibility, one patient at a time.
<div class="hx-demo-box" style="margin-top:40px;border:1px solid #D2D2CA;border-radius:12px;overflow:hidden;background:#fff;box-shadow:0 12px 32px -12px rgba(23,25,21,.18)"><div style="background:#F7F7F3;border-bottom:1px solid #D2D2CA;padding:10px 20px;display:flex;align-items:center;gap:10px"><span style="width:11px;height:11px;border-radius:50%;background:#E4E4DE"></span><span style="width:11px;height:11px;border-radius:50%;background:#E4E4DE"></span><span style="width:11px;height:11px;border-radius:50%;background:#E4E4DE"></span><span style="font-size:12px;color:#8B9086;margin-left:6px">trials.local/match/patient-{{ pid }}</span></div><div style="display:flex"><div style="flex:0 0 280px;border-right:1px solid #E4E4DE;padding:20px;background:#FAFAF7"><div style="font-size:11px;letter-spacing:0.06em;text-transform:uppercase;color:#8B9086;margin-bottom:12px;font-weight:600">Patient profile</div><div style="display:flex;flex-direction:column;gap:10px;font-size:13px;color:#171915"><div style="display:flex;justify-content:space-between"><span style="color:#8B9086">Diagnosis</span><span>NSCLC, IIIB</span></div><div style="display:flex;justify-content:space-between"><span style="color:#8B9086">Biomarker</span><span>EGFR exon 19</span></div><div style="display:flex;justify-content:space-between"><span style="color:#8B9086">Prior lines</span><span>1</span></div><div style="display:flex;justify-content:space-between"><span style="color:#8B9086">ECOG</span><span>1</span></div></div></div><div style="flex:1;padding:20px 24px;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:220px"><sc-if value="{{ isScanning }}"><div style="font-size:14px;color:#8B9086;animation:fadeUp .3s ease both">Comparing chart against 340 open protocols...</div></sc-if><sc-if value="{{ isDone }}"><div style="width:100%;max-width:420px;display:flex;flex-direction:column;gap:12px;animation:pop .4s ease both"><div><div style="display:flex;justify-content:space-between;font-size:13px;margin-bottom:4px"><span>NCT05512-EGFR2, Phase 2</span><span style="font-weight:600">94% match</span></div><div style="height:6px;background:#E4E4DE;border-radius:100rem;overflow:hidden"><div style="height:100%;width:94%;background:#D7F154;animation:grow .6s ease both"></div></div></div><div><div style="display:flex;justify-content:space-between;font-size:13px;margin-bottom:4px"><span>NCT04871-LUNG9, Phase 3</span><span style="font-weight:600">78% match</span></div><div style="height:6px;background:#E4E4DE;border-radius:100rem;overflow:hidden"><div style="height:100%;width:78%;background:#D7F154;animation:grow .6s ease both"></div></div></div><div><div style="display:flex;justify-content:space-between;font-size:13px;margin-bottom:4px"><span>NCT03920-TKI4, Phase 1/2</span><span style="font-weight:600">61% match</span></div><div style="height:6px;background:#E4E4DE;border-radius:100rem;overflow:hidden"><div style="height:100%;width:61%;background:#D7F154;animation:grow .6s ease both"></div></div></div></div></sc-if></div></div></div>
window.HX_DEMOS=window.HX_DEMOS||{}; window.HX_DEMOS["tm"]=function(Base){ const CYCLE_SEC=9; class Comp_tm extends Base { state={t:0,pid:2291,name:'',email:'',org:'',formSubmitted:false}; componentDidMount(){ this._start=Date.now(); this._iv=setInterval(()=>{ if((Date.now()-this._start)/1000>=CYCLE_SEC){clearInterval(this._iv);return;} const elapsed=(Date.now()-this._start)/1000; const t=elapsed%CYCLE_SEC; const cycle=Math.floor(elapsed/CYCLE_SEC); this.setState({t,pid:2291+cycle}); },150); } componentWillUnmount(){clearInterval(this._iv);} onName=(e)=>this.setState({name:e.currentTarget.value}); onEmail=(e)=>this.setState({email:e.currentTarget.value}); onOrg=(e)=>this.setState({org:e.currentTarget.value}); submit=()=>this.setState({formSubmitted:true}); renderVals(){ const scanning=this.state.t<4; return {pid:this.state.pid,stageLabel:scanning?'Matching...':'Matches ranked',isScanning:scanning,isDone:!scanning, name:this.state.name,onName:this.onName,email:this.state.email,onEmail:this.onEmail,org:this.state.org,onOrg:this.onOrg,submit:this.submit, formOpen:!this.state.formSubmitted,formSubmitted:this.state.formSubmitted,nameSuffix:this.state.name?', '+this.state.name.split(' ')[0]:''}; } } return Comp_tm; };
Match your own patients →
Free to start. No credit card.

How the Trial Matching Agent works

1
Reads the chart
Reads the chart
Pulls structured and unstructured data from the patient's record.
2
Compares to open protocols
Compares to open protocols
Checks the patient's clinical profile against eligibility criteria for active trials.
3
Ranks the matches
Ranks the matches
Scores and ranks trials by fit, flagging any disqualifying criteria.
4
Step label
Notifies the care team
Surfaces the top matches to the treating physician or trial coordinator for outreach.
5
Step label
3 to 5x
improvement in eligible patient identification
340
open protocols checked per patient, in seconds
60%
faster outreach to eligible patients

Find eligible patients you're missing today.

Start free, we'll match a sample of your real patients against your open protocols.

Reads unstructured chart data, not just structured fields
Rechecks matches automatically as new protocols open
Free for your first 100 patient matches
Starts free
Takes about 30 seconds. No sales deck required.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.