Built for HEOR, market access & evidence synthesis

Digitize Kaplan–Meier curves and reconstruct patient-level data

Upload a Kaplan–Meier figure from any paper, multi-panel figures included. In about a minute you get patient-level data, hazard ratios and medians, checked against the numbers printed in the paper.

3 free figures a month. Nothing you upload is stored.

0612182430360.000.250.500.751.00Months Reconstructed patients: ● event ○ censored
95%of printed hazard ratios reproduced within 10% (40 trials)
91%of hazard ratios within 5% of the truth
0.09 momedian error in median survival
~1 minper figure, vs 20–60 min by hand

Tested on published trials and on 80 simulated figures with known truth. How we measure →

Better than doing it by hand

The usual route is a manual digitizer, a typed-in at-risk table and an R script.

By handWebPlotDigitizer + IPDfromKMTrialCurve
Time per figure20–60 minutesAbout a minute
Multi-panel figuresOne panel at a timeEvery panel at once
Numbers-at-risk tableTyped in by handRead automatically
IPD, HRs, medians, RMSTSeparate R scriptsIn one response
Checked against the paperIf there's timeAlways, automatically
Audit trail for HTAYour notesBuilt in
AccuracyGood, done carefullyAs good: 95% of printed HRs within 10%

Every KM digitizer compared →

See it work

Try an example or drop in your own figure. Whole multi-panel figures are fine.

Uploads run on the live engine (a few per hour without a key). Nothing is stored.

Choose an example

Results appear here: the figure with the reconstructed curves drawn over it, per-arm statistics, hazard ratios and the validation pack.

What happens to your figure

Claude Opus 5.5, currently the most accurate model on our benchmark, reads the whole figure: every panel, curve, at-risk table and printed statistic. Pixel measurement double-checks each curve, and every reconstruction is checked against the numbers printed on the figure. The statistics are the method HTA bodies already know.

Read the whole figure

Every panel, curve, at-risk table and printed statistic, zooming in wherever the text is small.

Cross-check the curves

Pixel measurement traces every curve independently and flags any disagreement.

Check against the paper

The result must reproduce the printed hazard ratios and medians. A failed check triggers a second reading by a larger model.

Reconstruct IPD

The Guyot (2012) method rebuilds patient-level data: hazard ratios with CIs, medians, RMST, CSV export.

EU JCA · NICE · CDA-AMC · PBAC

Audit-grade output for HTA dossiers

JCA and NICE assessors want to see how digitised data were checked. Every result comes with the evidence.

  • Two independent readings: vision model and pixel measurement, like dual data extraction (Cochrane MECIR C46).
  • Checks against the paper: printed hazard ratios, medians and events, with a prespecified 10% tolerance.
  • Overlay and provenance: reconstructed curves drawn over your figure, image hash, engine and model versions.
  • AI-use disclosure ready to paste into a JCA dossier, as the EU HTA AI principles require.

Accuracy you can check

Tested on real published figures and on simulated trials where the truth is known.

Published trials

95% of printed hazard ratios and 96% of printed medians reproduced within 10%, across 40 trials.

Simulated trials

91% of hazard ratios within 5% of the truth, and 100% of at-risk cells read exactly.

Known limits

Tiny arms, adjusted hazard ratios and blurry screenshots are the hard cases. Every result says which checks failed. Details →

One request

Send an image, get JSON or CSV back: curves, at-risk tables, pseudo-IPD and statistics, ready for survival, flexsurv, NMA or MAIC.

  • Optional hints: arm names, at-risk table, N, events, reference arm.
  • "audit" mode for dossier work, "csv" for IPD rows. No SDK needed.
# reconstruct IPD from a KM figure
curl https://trialcurve.com/v1/reconstruct \
  -H "Authorization: Bearer $TRIALCURVE_KEY" \
  -F image=@figure2a.png \
  -F 'options={"mode":"audit","published":{"hazard_ratio":0.72}}'
import requests, json

r = requests.post(
    "https://trialcurve.com/v1/reconstruct",
    headers={"Authorization": f"Bearer {KEY}"},
    files={"image": open("figure2a.png", "rb")},
    data={"options": json.dumps({"mode": "standard"})},
)
res = r.json()
for c in res["comparisons"]:
    print(c["arm"], "vs", c["reference"], c["hazard_ratio"], c["ci95"])
library(httr2); library(survival)

ipd <- request("https://trialcurve.com/v1/reconstruct") |>
  req_auth_bearer_token(Sys.getenv("TRIALCURVE_KEY")) |>
  req_body_multipart(image = curl::form_file("figure2a.png"),
                     options = '{"format":"csv"}') |>
  req_perform() |> resp_body_string() |> read.csv(text = _)

coxph(Surv(time, event) ~ arm, data = ipd)

Pricing

Per figure, not per seat. A standard figure uses 1 credit; audit mode, for dossiers, uses 3.

Pay as you go

$15 / credit
3 free credits every month · billed monthly in arrears
  • Standard: $15 per figure
  • Audit-grade: $45 per figure
  • Full API, CSV/JSON export, all hints
  • Cancel any time from the billing portal

Enterprise

Custom
For consultancies and pharma HEOR groups
  • Private deployment (your cloud or on-premises)
  • Validation dossier for your SOPs
  • SSO, DPA, invoicing, volume pricing
  • Batch processing of whole systematic reviews
Talk to us

Academic groups: apply for free credits for published or registered methods work.

Questions

Is reconstructed IPD accepted by HTA bodies?

Yes. Reconstructing pseudo-IPD from published KM curves (Guyot 2012) is standard in indirect comparisons and survival extrapolation, and is referenced in NICE DSU and EU HTA guidance. You stay responsible for the analysis; TrialCurve adds the evidence that it was checked.

Why not just ask a chatbot to read the curve?

A chatbot gives you a reading, not a checked reconstruction. TrialCurve extracts every panel in a fixed structure, runs the Guyot reconstruction, checks the result against the paper and keeps an audit trail. With its zoom tool, it now reads curves as precisely as pixel measurement.

What figures work best?

Whole figures work, multi-panel ones included. Use the sharpest copy you have: export from the PDF or zoom to 200% before taking a screenshot. An at-risk table makes results much more precise; without one, pass N per arm.

What happens to my figures?

They are processed in memory and discarded: we store no images and no results. The image is sent to Anthropic's API (Claude), which does not train on API data. Enterprise customers can run a fully private deployment.

Can it handle vector PDFs or a whole review at once?

PDF input and batch processing are on the roadmap for Team and Enterprise. Tell us what you need.

Is there a library of reconstructed trial data?

Yes. The trial library has reconstructed curves and pseudo-IPD from openly licensed trials, each checked against its figure, with CSV downloads. It is free.

Is this a medical device?

No. It is a research tool for published aggregate data, not for decisions about individual patients.