This feature is in closed beta.Interested in this feature? Get in touch with your Customer Success Manager.
When to Use It
Use Lab Report Parsing when you already have a completed lab report file and need to make it usable in your application. Common use cases include:- Patient uploads of lab reports from outside providers
- Historical data imports from PDFs or scanned records
- Multi-lab result aggregation using LOINC as a normalization layer
- Backfilling structured results before a user starts ordering through Junction
Workflow
The parsing workflow is asynchronous:- Upload one or more report files to create a parsing job.
- Junction queues the job and extracts report metadata and lab results.
- Junction attempts to match extracted results to LOINC codes.
- Your application receives a webhook or polls the job endpoint.
- When the job is
completed, thedataobject contains parsed metadata and results.
Uploading Reports
Create a parsing job with the Create Lab Report Parser Job endpoint. The request ismultipart/form-data and requires:
Supported file formats and upload limits:
When you upload multiple image files, Junction merges them into a single PDF before sending the report to the parser. Multi-file uploads cannot include PDFs. Junction validates both the declared
Content-Type and the file’s magic bytes, so spoofed or corrupted files are rejected before parsing starts.
cURL
data is null because parsing has not completed.
Response
Job Statuses
Thestatus field describes the state of the parsing job.
failure_reason can include:
Parser status and failure reason enums are non-exhaustive. Store unknown values safely and avoid hard-failing if Junction adds a new value.
Human Review
Setneeds_human_review to true when you want Junction to manually review extracted results before the job is finalized. Human review is useful for high-impact workflows, low-quality scans, complex multi-page reports, or reports where your application needs a higher-confidence extraction path.
Human review is not enabled for every team by default. Contact your account manager before depending on it in production.
If your team is not enabled for human review, creating a job with needs_human_review=true returns a 400 response:
Error
Parsed Output
Whenstatus is completed, data contains:
Example completed response:
Response
Metadata
metadata is extracted from the document header and surrounding report content when present.
Not every report contains every metadata field. Treat metadata fields as nullable.
Result Fields
Eachdata.results[] item contains the extracted value and associated context.
Value and Type
data.results[].value is always returned as a string. Do not assume it can always be parsed as a number.
For type: "numeric", value should be a number encoded as a string, such as "5" or "5.0". For other result types, value can contain comparators, text, boolean-like values, durations, percentages, or ratios. Use type before deciding how to parse or display the value.
The parser-specific
type values are related to, but not identical to, the order result ResultType values documented in Result Formats. Parser results currently include numeric, range, comment, boolean, duration, percentage, and ratio.
When type is not supplied by extraction, Junction infers it from value. For example, "<50", "≥2000", and "10-20" are inferred as range; "20%" is inferred as percentage; "97/100" is inferred as ratio; and unrecognized text is inferred as comment.
Reference Ranges and Interpretation
The parser may extractmin_reference_range and max_reference_range as numeric bounds when the report includes a parseable reference range. It may also return:
interpretation:normal,abnormal,critical, orunknownis_above_max_range: whether the result is above the extracted maximumis_below_min_range: whether the result is below the extracted minimum
">2000" with a max reference range of 1100 is above range, but ">500" with the same max is inconclusive.
If a value is conclusively outside the extracted bounds, interpretation is abnormal. Numeric values without an out-of-range flag are interpreted as normal. Non-numeric and inconclusive range values are interpreted as unknown unless the parser extracted a more specific interpretation.
If you need custom boundary logic, read the result value, type, units, and reference range fields together. For general order-result reference range guidance, see Reference Range.
LOINC Matching
Junction attempts to match extracted results to LOINC codes so you can compare markers across different labs and report formats. Eachloinc_matches[] item includes:
confidence_score is a matching score for the candidate LOINC code. It is not an accuracy score for the extracted lab result, patient metadata, units, reference ranges, or interpretation. A high score means Junction’s LOINC matcher found a stronger candidate for that result row than lower-scored candidates; it does not prove that the source document was parsed correctly.
In most integrations, use loinc_match_status for workflow decisions instead of building your own thresholds on confidence_score. Store the score for debugging, audit, or support workflows, but avoid using it as a clinical-confidence or result-accuracy signal.
Use loinc_match_status to decide how much review your workflow needs:
Webhooks
Subscribe to parser events to avoid polling.
Webhook payloads include the user, team, and parsing job:
Webhook payload
Sandbox Limits
Sandbox lab report parsing has a team-level report limit. The error response includes the configured limit for your team. For example, a team limited to 150 reports receives:Error
Integration Guidance
Build your parser integration defensively:- Keep the original report file or a pointer to it in your system for audit and reprocessing workflows.
- Store
data.results[].valueas a string, even whentypeisnumeric. - Treat parser enums as non-exhaustive and log unknown
status,type,failure_reason,sample_type,measurement_kind, andloinc_match_statusvalues. - Do not require LOINC matches to be present before displaying the extracted result to users.
- Review low-confidence or
needs_reviewLOINC matches before using them for clinical decisioning, cohort logic, or automated recommendations. - Expect null metadata and null reference range fields when the source report does not include parseable values.
- Use webhooks for normal processing and keep polling as a fallback for missed events or manual support flows.