numbered
Sponsor, CRO, or health system
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.
<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
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.