Evidence · first-party tested/Best AI Tools for Extracting Structured Data from PDFs and Business Documents
Populates the requested invoice hierarchy into dedicated sections for invoice_metadata, advertiser, station, account_details, billing_address, remit_address, flight_dates, line_items, and summary.
What was measured
Schema Adherence
Does the output follow the supplied JSON schema hierarchy exactly, with correct nesting, field names, and data types?
decisive for this rankingtransformation
If the output does not match the requested JSON schema exactly, the extracted data cannot be reliably consumed or queried, so this is core to the task. (3 of 3 judges)
What was given, what came back
Test input: Invoice PDF · pdf · group: financial-document-extraction
Input — what we sent

Input not captured
This run recorded no prompt or input file for the test, so we cannot show you what produced the result below. Capture gaps are tracked, not hidden.
A 2-page broadcast advertising invoice PDF with 8 line items, complex time/day fields, large dollar amounts, and compliance text, used to test hierarchical line-item extraction and financial validation.
Why this input is hard
- · Nested line-item hierarchy extraction
- · Multi-page line-item continuity across a page break
- · Large dollar amount precision and total validation
- · Parsing time slots, day patterns, and air dates
- · Extraction of alphanumeric ad IDs and reference codes
- · Structured metadata mapping for advertiser, station, billing, and remit sections
- · Political advertising and FCC compliance text recognition
Also checked on this input — same tool, 5 other criteria
Extraction Accuracy✓ WorkedMatches the printed financial summary exactly, including 8 aired spots, $29,750.00 gross, $4,462.50 agency commission, $25,287.50 net due, and 30-day payment terms.Extraction Accuracy⚠ StruggledIntroduces a stray OCR-style space into every Ad-ID, so the identifier text is not preserved exactly as printed.Semantic Field Enrichment⚠ StruggledMisreads fixed-width schedule masks in day_of_week, truncating or garbling the broadcast-day pattern instead of reproducing the full source mask.Semantic Field Enrichment✓ WorkedExtracts the compact days_pattern field correctly as the actual single broadcast-day letter.Table & Record Completeness✓ WorkedCarries a line item cleanly across the page break without duplicating or losing the row, showing page-break continuity in the line_items array.
Provenance
- Observation
- 15ef12f7-5460-42d4-99d5-9ee4785c8552
- Evidence run
- ec4d736d-95f9-4c88-884c-e280435f7b7b
- Study
- Extract and query structured data from documents using natural language
- Research task
- 86b9y25e5
- Tested at
- not recorded
- Source
- first-party
- Evidence state
- verified
- Proof shown
- input + output shown
- Cost / latency
- not captured
- Repeat run
- not captured
- Tester
- not captured
The last three rows are honest blanks, not placeholders — our capture has no field for them yet.
Query this
get_evidence({
tool: "unstract",
scenario: "financial-document-extraction"
})MCP · mcp.aidemos.com/api/mcp
Free with attribution.
Same input, same check — 7 other tools
measured on Schema Adherence
Datalab✓ WorkedReconstructs the invoice into nested JSON objects and arrays that follow the supplied schema, including invoice_metadata and line_items rather than returning generic OCR text.Extend AI✓ WorkedThe invoice output is reconstructed as nested JSON sections — invoice_metadata, advertiser, station, addresses, flight_dates, line_items, and summary — instead of raw OCR.Landing AI✓ WorkedReconstructs the requested invoice hierarchy in structured JSON, filling invoice_metadata, advertiser, station, line_items, and summary objects instead of returning a flat extraction.LlamaParse✓ WorkedKeeps the invoice hierarchy intact, emitting invoice_metadata, advertiser, station, line_items, and summary objects rather than flat OCR text.Nanonets✓ WorkedIt preserves the invoice hierarchy exactly as requested, filling dedicated objects for invoice_metadata, advertiser, station, account_details, billing_address, remit_address, flight_dates, line_items, and summary.Reducto✓ WorkedReconstructs the invoice into the requested nested JSON hierarchy, populating invoice_metadata, advertiser, station, account_details, billing_address, remit_address, flight_dates, line_items, and summary sections.Retab✓ WorkedBuilds the requested invoice hierarchy with separate invoice_metadata, advertiser, station, account_details, billing_address, remit_address, flight_dates, line_items, and summary objects instead of a flat OCR dump.
This evidence is published in
Real inputs and real outputs, no retouching · every cell queryable via API & MCP · aidemos.com