Solution

Quality assurance – lab test reports from PDFs as a table

Test reports and certificates of analysis from contract labs into one table – every parameter with LOQ, result, limit and assessment. With a real example.

By Christian Gerloff · Published August 30, 2026

In short: Tiro reads laboratory test reports and certificates of analysis from PDFs and scans and returns them as a table – header fields such as report number, sample, lot and overall assessment once per document, every tested parameter as its own row with method, LOQ, result, limit and assessment. No template, no training – the example is a two-page report with 21 parameters, one of them above its limit.

Below is the complete example: the report, the extracted data and the result in the app.

Who this is built for

Whoever runs the laboratory writes test reports – whoever has many samples tested by contract laboratories receives them. Quality assurance at food importers, brand owners and retailers, at water suppliers and environmental consultancies, at consumer-goods and packaging buyers gets a report for every lot, every sampling point, every product: from Eurofins, SGS, Intertek, AGROLAB or the regional lab, as PDF by e-mail or from a customer portal, each in a different layout. The values then have to be recorded for the lot release, the supplier trend and the audit file – parameter by parameter. That retyping is what disappears.

What else quality teams use it for

  • Test reports for food and feed (the example below; scanned reports work as shown on the PDFs & scans page): microbiology, contaminants, pesticide residues, mycotoxins, allergens, nutritional analysis – one row per parameter per lot.
  • Certificates of analysis (CoA) from raw material, ingredient and packaging suppliers: batch, parameter, specification, result – as rows for the batch record.
  • Drinking water and environmental analyses: water, soil, waste and air samples with parameter, LOQ, limit and result – for the sampling-point history and the report to the authority.
  • Consumer product and textile testing: chemical safety (REACH, formaldehyde, phthalates, azo dyes), physical and flammability tests from the test house.
  • Calibration certificates and first article inspection reports: instrument, serial number, deviation, next due date – or characteristics, nominal, actual, tolerance.

Why not just a PDF-to-Excel converter?

A PDF-to-Excel converter copies the page layout into cells. For a lab report that means group headings and footnotes between the results, "< 0.005" as text that Excel cannot sum or compare, pages that land in separate sheets, and a different column order for every laboratory. Parseur and Airparser solve this with fields instead of layout, but neither of them shows a laboratory report – their world is invoices and e-mails. Tiro takes the field approach into the quality department with one difference that matters at lot release: numbers and dates are normalised by default, and values below the limit of quantification stay honest – as printed in a text column, empty in the number column, never silently turned into a number. What comes out of Tiro, Excel can compare against your specification right away.

Example: from document to table

A fictional document, one inbox, one run in Tiro — shown unchanged. Company, people and figures are invented.

1. The document

Example test report of the fictional laboratory Halden Analytical for a lot of dried apricots with microbiology, contaminants, pesticide residues and additives, one parameter exceeding its limit
Open the example PDF: Laboratory test report (PDF, two pages)

2. The extracted data

Header fields once per document, the table as one row per line item — dates as dates, numbers as numbers. The first rows are expanded, the rest follows behind.

Header fields
FieldValue
Report no.AR-26-HAL-041872-01
LaboratoryHalden Analytical Services Ltd.
CustomerNorthwind Foods Trading B.V.
Customer orderPO 2026-QA-0389
Sample no.26-041872-001
Sample descriptionDried apricots, whole, pitted, 12.5 kg carton
Lot / batch no.DA-0713-26
Country of originTürkiye (Malatya)
Sampling dateJul 9, 2026
Sample receivedJul 10, 2026
Analysis startJul 10, 2026
Analysis endJul 20, 2026
Report dateJul 21, 2026
Overall assessmentnon-compliant
Parameters tested22
Parameters exceeding1
Line items (21)
GroupParameterMethodUnitLOQResult (as printed)Result valueLimitAssessment
MicrobiologySalmonella spp. (in 25 g)ISO 6579-1:2017/25 gnot detectedcompliant
MicrobiologyListeria monocytogenes (in 25 g)ISO 11290-1:2017/25 gnot detectedcompliant
MicrobiologyEscherichia coliISO 16649-2:2001CFU/g10< 10100compliant
MicrobiologyEnterobacteriaceaeISO 21528-2:2017CFU/g1040401,000compliant
MicrobiologyYeastsISO 21527-2:2008CFU/g1001,2001,20010,000compliant
MicrobiologyMouldsISO 21527-2:2008CFU/g10030030010,000compliant
ContaminantsLead (Pb)EN 15763:2009mg/kg0.010.0210.0210.1compliant
ContaminantsCadmium (Cd)EN 15763:2009mg/kg0.005< 0.0050.05compliant
ContaminantsArsenic, total (As)EN 15763:2009mg/kg0.01< 0.010no limit
ContaminantsAflatoxin B1HAL-M-214 (LC-MS/MS)µg/kg0.2< 0.22compliant
ContaminantsAflatoxins, sum B1+B2+G1+G2HAL-M-214 (LC-MS/MS)µg/kg0.4< 0.44compliant
ContaminantsOchratoxin AHAL-M-214 (LC-MS/MS)µg/kg0.51.81.810compliant
Pesticide residuesBoscalidEN 15662:2018 (QuEChERS)mg/kg0.010.340.3417.5compliant
Pesticide residuesPyraclostrobinEN 15662:2018 (QuEChERS)mg/kg0.010.0580.0583.5compliant
Pesticide residuesTebuconazoleEN 15662:2018 (QuEChERS)mg/kg0.010.120.122.1compliant
Pesticide residuesChlorpyrifosEN 15662:2018 (QuEChERS)mg/kg0.005< 0.0050.01compliant
Pesticide residuesEthylene oxide (sum of ethylene oxide and 2-chloroethanol, expressed as ethylene oxide)HAL-M-330 (GC-MS/MS)mg/kg0.010.160.160.1exceeds limit
Pesticide residuesOther compounds of the screenEN 15662:2018mg/kg0.01< 0.010compliant
Additives and quality parametersSulphur dioxide (SO₂), totalMonier-Williams, AOAC 990.28mg/kg101,4601,4602,000compliant
Additives and quality parametersMoistureHAL-M-101 (gravimetric, 70 °C)g/100 g0.122.422.425compliant
Additives and quality parametersWater activity (aw)ISO 18787:20170.010.620.620.65compliant
Show all 21 rowsShow fewer rows

3. What it looks like in Tiro

The result in the browser, right after the upload. From here it is one click to Excel or CSV.

The result in Tiro – header fields of the test report and one row per tested parameter with LOQ, result as printed, numeric value, limit and assessment, with download as CSV or Excel

How it works

  1. Create a "Lab test reports" inbox

    After signing up you give the inbox a name. On the first upload the AI proposes the fields – report number, sample, lot, dates, one table with the parameters. You decide what you need (method, LOQ, limit, assessment) and adjust the names once.

  2. Upload test reports

    From any laboratory, in any layout, one or ten pages – every PDF is read on its own. Scanned or e-mailed reports work exactly like digitally signed ones.

  3. Download the table

    One row per parameter across all reports, results as real numbers, "< LOQ" kept as printed. Excel or CSV – ready for the lot release, the trend chart per supplier or the import into your LIMS or QM system.

Frequently asked questions

What is in a laboratory test report and who receives many of them?

A test report (also called analysis report, certificate of analysis or CoA) is the laboratory's documentation of what was measured on a sample – per parameter the method, the limit of quantification (LOQ), the result, the unit, the applicable limit and an assessment, plus a compliance statement. Food importers and brand owners, water suppliers, environmental consultants and consumer-goods buyers receive one for every lot, every sampling point or every product – from Eurofins, SGS, Intertek, TÜV, AGROLAB and regional labs alike, each in its own layout.

How does Tiro handle results such as "< 0.005" or "not detected"?

Honestly. The result as printed goes into a text column so nothing is lost, and the numeric value into a number column – which stays empty when the result is below the LOQ or not detected, instead of turning "< 0.005" into 0.005 or 0. In the example above you see both columns side by side.

Does it work when the report has several pages and parameter groups?

Yes – the example is a two-page report with microbiology, contaminants, pesticide residues and additives. Tiro reads all pages as one document, skips the group headings and writes the group name into its own column so you can filter by it later. A two-page report costs two credits.

Can Tiro check the results against my own limits?

Not yet inside Tiro – the laboratory's assessment is extracted as a field, and the numeric result and limit columns make your own check in Excel a formula per row. A rule check directly in the app is planned as part of the review step.

How do I get lab reports into an Excel table?

Upload the report PDF to an inbox – Tiro returns one row per parameter with method, LOQ, result, limit and assessment, as Excel or CSV. Certificates of analysis (CoA) and test reports from other laboratories run into the same table because the fields count, not the layout.

Which other documents does it handle?

Certificates of analysis (CoA) from raw material and packaging suppliers, drinking water analyses, soil and waste analyses, pesticide residue screens, textile and toy safety reports (REACH, formaldehyde, phthalates), calibration certificates, first article inspection reports. Each document type gets its own inbox with its own fields – the principle is always the same: define fields, upload, table.

Where are the documents processed and how long are they kept?

The app runs on servers in Germany, AI processing goes through AWS Bedrock in the EU region Frankfurt, with no training on your data. Retention is set per inbox – down to "delete right after export".

What does it cost?

Getting started is free – 20 pages per month, no credit card. One page is one credit, so the two-page report above costs two credits. Paid plans differ only in the number of pages.