Evidence · first-party tested/Best AI Tools for Extracting Structured Data from PDFs and Business Documents
The extractor keeps transaction rows as separate records, and the report says it captured all 51 transactions without merging adjacent rows.
What was measured
Table & Record Completeness
Are all tabular rows (transactions, line items) extracted without merging, duplication, omission, or phantom records?
decisive for this rankingtransformation
For document data extraction, missing, merged, duplicated, or phantom rows directly corrupt the structured dataset and break downstream querying. (3 of 3 judges)
What was given, what came back
Test input: Bank Statement PDF · pdf · group: financial-document-extraction
Input — what we sent
A 4-page bank statement PDF with 51 transactions, balances, rewards, and disclaimer text, used to test schema-driven extraction of dense financial tables and multi-page continuity.
Why this input is hard
- · Table extraction across 50+ transaction rows
- · Multi-page continuity with BALANCE FORWARD bridges
- · Structured metadata vs. free-text transaction descriptions
- · Numerical accuracy for balances, deposits, withdrawals, and summaries
- · Nested schema population for account, branch, balances, rewards, and disclaimers
Output — unretouched

Also checked on this input — same tool, 5 other criteria
Extraction Accuracy⚠ StruggledIts bank summary aggregation is off: the report says `summary.total_transactions` is 49, while the expected count is 40 after excluding Balance Forward, tax, and charge entries.Schema Adherence✓ WorkedThe bank output is rebuilt as nested JSON rather than raw OCR, with branch, account, rewards, balances, summary, and metadata objects populated under the requested statement root.Semantic Field Enrichment✗ FailedIt leaves derived `transaction_id` values as `null` even when reference identifiers are present in the description, so identifier extraction does not generalize.Semantic Field Enrichment✓ WorkedIt classifies bank transactions into derived `transaction_type` values such as Withdrawal or Deposit from the description text.Structural Clean Output✗ FailedIt does not preserve the authored top-level schema sequence, so consumers expecting the original field order need a transformation step.
Provenance
- Observation
- 3b66a1fa-5d29-4130-8e37-0c4cdc033160
- 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: "extend-ai",
scenario: "financial-document-extraction"
})MCP · mcp.aidemos.com/api/mcp
Free with attribution.
Same input, same check — 7 other tools
measured on Table & Record Completeness
Datalab✗ FailedCan attach a transaction to the wrong date when rows are merged, with an 18 Jun 19 withdrawal appearing under a 19 Jun 19 record in the extracted output.Landing AI✓ WorkedPreserves the full transaction table as 51 separate statement records, without merging rows or dropping entries.LlamaParse✗ FailedOver-segments the bank-statement transaction table, outputting 54 transaction rows for a statement the report says contains 51 transactions and leaving the summary at 44 total_transactions, so row counts are not self-consistent.Nanonets✗ FailedIt undercounts the transaction table, extracting 47 transactions when the statement actually contains 51, so 4 records are missing.Reducto✗ FailedDoes not preserve the repeating transaction table faithfully, returning 53 transaction records for a statement that contains 51 transactions.Retab◐ MixedOvercounts the transaction table summary: total_transactions is 43, while the report says the expected count is 40 after excluding Balance Forward, tax, and charge entries.Unstract✓ WorkedKeeps the transaction table intact across all four pages, with the full 51-row record set present and no merged or dropped rows.
This evidence is published in
Real inputs and real outputs, no retouching · every cell queryable via API & MCP · aidemos.com