Lab PDF to spreadsheet: turn a lab report into a CSV or Excel file
A lab report PDF is made to be printed, not to be worked with. The values are there, but you can’t sort them, chart them, or line this year’s up against last year’s without typing every one out again. This tool reads the table out of the PDF and gives it back as a spreadsheet: one row per result, with the test, value, unit, reference range, flag and date in their own columns.
It runs entirely in your browser. The PDF is opened on your own computer by the same code the HealthViewer app uses, and nothing is sent to us or to anyone else. You can turn your network off and it still works.
What it reads
The tool reads the layouts most people have, by name:
- Quest Diagnostics, both the courtesy copy a doctor’s office prints and the PDF you download from MyQuest.
- Labcorp patient reports.
- MyChart, the Epic portal most hospital systems use, including the component tables it prints for a single test.
Any other lab goes to a general reader that looks for a table with the usual columns (test, result, unit, range, flag) or for lines that print a whole result at once. It reads most hospital and independent lab reports well enough, but check the table against the PDF before you rely on it: a column it mislabels or a wrapped line it splits looks like a result and isn’t.
Two kinds of PDF it can’t read:
- A scan or a photo. If you can’t select the text in the PDF, there is no text to read. The HealthViewer app can send a scan to a vision model; this tool can’t.
- A password-protected PDF. Open it, print or save a copy as PDF, and use that.
What you get
The download has these columns, in this order:
| Column | What’s in it |
|---|---|
| Date | The collection date, as yyyy-mm-dd, so it sorts |
| Test | The test’s name as the report printed it |
| Value | The number, or a word result such as “Negative” |
| Unit | mg/dL, mmol/L, and so on |
| Reference Range | The lab’s range for this test, as printed |
| Flag | Normal, Abnormal or Borderline, where the report flagged the result |
| Category | Lipid, Thyroid, Metabolic: a grouping the parser adds |
| Panel | The panel the test was printed under |
The Excel file has the header frozen and a filter on each column. The CSV opens in anything, including Google Sheets and Numbers; “Copy for Google Sheets” puts the same table on the clipboard, so you can paste it into a sheet you already have.
The columns are the ones in our lab results spreadsheet template, so a report you convert here drops straight into that layout, and the file imports into HealthViewer unchanged if you later want it there.
Why a converter and not a spreadsheet
One report is one visit. The reason to have your results in a spreadsheet at all is to see several visits together, and that is where the spreadsheet starts to need work: each new report has to be converted and appended, the same test comes back under three different names, and a lab that switches units leaves a chart with a cliff in it.
That maintenance is what the HealthViewer app does for you. It reads the same PDFs with more layouts than this page carries (Cerner, Mayo, ARUP, Athena, TriCore and more), falls back to an AI model you choose for a layout no one has seen, pulls results straight from Epic and Cerner portals without a PDF at all, and keeps the history in an encrypted file on your own disk. If you’ve converted more than two or three reports here, the app is the shorter path. The first week is free.
Getting the PDF in the first place
If you don’t have the PDF yet, these walk through each portal’s export:
And once the results are in a sheet, how to track lab results over time covers what to chart and what to ignore.
Privacy
Your PDF never leaves your computer. The page loads two scripts, the parser and a PDF reader, and from then on everything happens in the browser tab. There is no upload, no account, no storage, and no analytics on what you convert. If you want to check, open your browser’s network panel before you drop the file: nothing is sent.