Extract lab reports to structured JSON

Lab reports contain test results, reference ranges, specimen details, and ordering physician information. Labs like Quest and LabCorp each use different formats. Sensible turns lab data into structured JSON for clinical integration, population health analytics, and compliance.

Why lab reports resist automated extraction

Result tables with abnormal flags, multi-panel groupings, and varying reference ranges resist parsing.

Result Table Complexity

Test names, values, units, reference ranges, abnormal flags: all packed into dense result tables. Each result returns as a structured item with its full context, even when labs use different column arrangements.

Multi-Panel Grouping

CBC, CMP, lipid, thyroid, urinalysis: results grouped under panels with distinct reporting conventions. The panel hierarchy is preserved, with results nested under their parent grouping in the output.

Reference Range Parsing

Some labs express ranges as '10-20'. Others use '<5' or 'negative'. Sensible normalizes these formats and flags results that fall outside the reference range, giving your clinical system structured abnormal indicators.

Fields we extract

Result-level fields include test values, reference ranges, and abnormal flags. Map to your clinical data schema.

Order and specimen

Patient name, DOB, MRN, ordering physician, specimen type, collection date/time, received date, report date, lab name/CLIA number

Test results

Test name, result value, units, reference range, abnormal flag (high/low/critical), result status (final/preliminary), LOINC code

Panel summaries

Panel name, component tests, overall interpretation, pathologist notes, critical value alerts


{ /* SenseML: lab report extraction */
"fields": [
{
"method": {
"id": "queryGroup",
"queries": [
{
// Patient name
"id": "patient_name",
"description": "patient name, patient"
},
{
// Test name
"id": "test_name",
"description": "test name, test, analyte, component"
},
{
// Result value
"id": "result_value",
"description": "result, value, result value",
"type": { "id": "number" }
},
{
// Reference range
"id": "reference_range",
"description": "reference range, normal range, expected range"
}
// Additional fields for units, abnormal flag, specimen date, panel name, etc.
]
}
}
]
}
Urinalysis Report

Urine test results with chemical, microscopic, and physical analysis.

Comprehensive Metabolic Panel

CMP results covering glucose, electrolytes, kidney, and liver function markers.

Complete Blood Count (CBC)

Standard CBC lab report with WBC, RBC, hemoglobin, hematocrit, and platelet values.

Supported lab formats

Sensible processes lab reports from Quest, LabCorp, hospital systems, and specialty labs. Hybrid extraction handles the visual differences between lab platforms while enforcing consistent output for your clinical data pipeline.

Reference labs

Quest Diagnostics, LabCorp, BioReference, ARUP, Mayo Clinic Laboratories, Sonic Healthcare

Hospital and specialty

Hospital reference labs, pathology reports, cytology results, microbiology, toxicology screens

Trusted by operations and engineering teams at

Common Questions

Answers about lab platform support, result parsing, and panel grouping.

Can Sensible group results by test panel?

Yes. Sensible preserves panel groupings (CBC, CMP, lipid panel, thyroid panel) and returns results nested under their parent panel in the structured output.

What patient and specimen data does Sensible extract?

Sensible captures patient name, DOB, MRN, ordering physician, specimen collection date/time, specimen type, and lab facility information.

How does Sensible extract lab results?

Sensible extracts each test result with test name, result value, units, reference range, and abnormal flag. Results are returned as structured arrays preserving the report's panel groupings.

Does Sensible parse reference ranges from lab reports?

Yes. Sensible extracts the reference range for each test and indicates whether the result falls within, above, or below the normal range.

Do you support webhooks?

Yes. Sensible sends extraction results to your webhook endpoint when processing completes. You can also poll the API for status.

Does Sensible support human review?

Yes. Sensible flags extractions with low confidence for human review. You can configure review thresholds and workflows.

What security certifications does Sensible have?

Sensible is SOC 2 Type II certified and HIPAA compliant. Data is encrypted in transit and at rest.

How long is document data retained?

Document data is stored indefinitely by default. Custom retention policies are available and can be configured for same-day deletion if needed.

Is there a free trial?

Yes. Sensible offers a 14-day free trial on the Growth plan. No credit card required to start.

How is pricing structured?

Sensible uses per-document pricing for predictable costs. No token-based billing or usage surprises. Volume discounts are available for higher throughput.

How do I integrate with Sensible?

Sensible provides REST APIs and SDKs for Python and Node.js. Most integrations take a few hours. Webhooks, Zapier, and direct API calls are all supported.

What file formats does Sensible support?

Sensible processes PDFs (native or scanned), Microsoft Word (DOC, DOCX), spreadsheets (XLSX, XLS, CSV), single-page images (JPEG, PNG), multi-page images (TIFF), and email bodies with attachments.

How accurate is the extraction?

Accuracy depends on document quality and configuration. Most production deployments achieve 95%+ accuracy with proper validation rules and confidence signals.

How fast is document processing?

Processing speed depends on document size, page count, OCR requirements, and which extraction methods are used. Simple single-page documents process in seconds. Larger or more complex documents that use LLM-based extraction take longer.