{"observation":{"id":"db96ee62-b038-4189-9112-9ff53de816f8","tool":"nanonets","tool_name":"Nanonets","criterion":"semantic-field-enrichment","criterion_name":"Semantic Field Enrichment","criterion_definition":"Are derived fields — transaction_type, transaction_id, cheque_number, day patterns, ad codes — correctly classified or extracted beyond raw OCR?","criterion_evidence_type":"transformation","criterion_rank_role":"decisive","criterion_rank_role_reason":"This ranking is not just about copying OCR text; it also depends on whether the tool can correctly infer or classify document-specific fields needed for useful structured output. (3 of 3 judges)","scenario":"bank-statement-pdf","scenario_name":"Bank Statement PDF","group_tag":"financial-document-extraction","scenario_description":"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.","modality":"pdf","input_text":null,"input_artifact_refs":[{"alt":null,"url":"https://d3epheqghktydj.cloudfront.net/extract-and-query-structured-data-from-d-bank-statement-pdf-25ec532be6e1.pdf","role":"input","filename":"Bank Statement PDF.pdf"}],"stresses":["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"],"verdict":"failed","score":null,"score_total":null,"note":"It does not populate the derived transaction_type field, leaving it null across the statement instead of classifying deposits and withdrawals.","evidence_state":"verified","source":null,"artifacts":[{"url":"https://d3epheqghktydj.cloudfront.net/research-media-bank-statement-2-jul-a511cf7bd0d6.png","role":"input","alt":"Research media bank statement 2 jul.png"},{"url":"https://d3epheqghktydj.cloudfront.net/research-media-docstrange-nanonets-bank-statement-outpu-e65996ec6ef1.json","role":"output","alt":null}],"run_id":"ec4d736d-95f9-4c88-884c-e280435f7b7b","study_title":"Extract and query structured data from documents using natural language","study_kind":"generation","research_task":"86b9y25e5","tested_at":null,"completeness":"input-and-output","input":{"state":"files","text":null,"files":[{"url":"https://d3epheqghktydj.cloudfront.net/extract-and-query-structured-data-from-d-bank-statement-pdf-25ec532be6e1.pdf","filename":"Bank Statement PDF.pdf","alt":"Bank Statement PDF","role":"input"}],"modality":"pdf","stresses":["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"]},"tool_page_slug":"nanonets","tool_url":"https://aidemos.com/tools/nanonets","permalink":"https://aidemos.com/evidence/db96ee62-b038-4189-9112-9ff53de816f8","api_url":"https://ai.aidemos.com/v1/observations/db96ee62-b038-4189-9112-9ff53de816f8"},"peers":[{"id":"6028e5fa-9c96-4f9c-ad9d-5cc900225ace","tool":"datalab","tool_name":"Datalab","verdict":"failed","score":null,"score_total":null,"note":"Does not populate schema-derived transaction identifiers at all: the 18 Jun withdrawal keeps transaction_id = null even though the identifier is visible in the source row.","artifact_count":4,"thumbnail":"https://cdn.futuresmart.ai/public/aidemos/80135a758c5a4d2aa2187e8af3f050e8.png?v=1","evidence_url":"https://aidemos.com/evidence/6028e5fa-9c96-4f9c-ad9d-5cc900225ace"},{"id":"414af8f0-b7ac-40ed-914e-051d339dfa2b","tool":"extend-ai","tool_name":"Extend AI","verdict":"failed","score":null,"score_total":null,"note":"It leaves derived `transaction_id` values as `null` even when reference identifiers are present in the description, so identifier extraction does not generalize.","artifact_count":1,"thumbnail":"https://d3epheqghktydj.cloudfront.net/research-media-extend-ai-extracted-transaction-id-fc2e1cc3385b.png","evidence_url":"https://aidemos.com/evidence/414af8f0-b7ac-40ed-914e-051d339dfa2b"},{"id":"a2a1f6f5-e278-415c-afcd-a43a2ec3e91b","tool":"landing-ai","tool_name":"Landing AI","verdict":"worked","score":null,"score_total":null,"note":"Adds meaningful transaction_type labels to extracted rows, classifying the sample 18 Jun records as Withdrawal, Withdrawal, and Deposit instead of leaving the field as raw OCR text.","artifact_count":1,"thumbnail":"https://d3epheqghktydj.cloudfront.net/research-media-landing-ai-bank-statement-18-jun-extract-321aa2936cc6.png","evidence_url":"https://aidemos.com/evidence/a2a1f6f5-e278-415c-afcd-a43a2ec3e91b"},{"id":"e10bbd24-0b50-44a1-8902-eb59e2fbaf4f","tool":"llamaparse","tool_name":"LlamaParse","verdict":"failed","score":null,"score_total":null,"note":"Fails to derive transaction-level fields, leaving transaction_id and transaction_type empty even for descriptions that encode ATM, UPI, and CRADJ cues.","artifact_count":2,"thumbnail":"https://d3epheqghktydj.cloudfront.net/research-media-llamaparse-bank-statement-transaction-id-c01a0d30b3be.png","evidence_url":"https://aidemos.com/evidence/e10bbd24-0b50-44a1-8902-eb59e2fbaf4f"},{"id":"e2f47c60-3f78-4b14-aa96-2e76d8e2483a","tool":"reducto","tool_name":"Reducto","verdict":"failed","score":null,"score_total":null,"note":"Leaves derived transaction metadata incomplete, with transaction_type and transaction_id missing across transaction rows.","artifact_count":3,"thumbnail":"https://d3epheqghktydj.cloudfront.net/research-media-bank-statement-schema-transactions-00d0c871c403.png","evidence_url":"https://aidemos.com/evidence/e2f47c60-3f78-4b14-aa96-2e76d8e2483a"},{"id":"0067b41d-0138-4fc0-80b1-151bb93e2539","tool":"retab","tool_name":"Retab","verdict":"worked","score":null,"score_total":null,"note":"Derives transaction_type and transaction_id on transaction rows, classifying one record as UPI with transaction_id 917615251879 and cheque_number left empty.","artifact_count":2,"thumbnail":"https://d3epheqghktydj.cloudfront.net/research-media-bank-statement-2-jul-a511cf7bd0d6.png","evidence_url":"https://aidemos.com/evidence/0067b41d-0138-4fc0-80b1-151bb93e2539"},{"id":"9c65076c-303b-4d4c-a3f7-619f2667c82e","tool":"unstract","tool_name":"Unstract","verdict":"worked","score":null,"score_total":null,"note":"Classifies transaction_type correctly across the transaction array, using Deposit and Withdrawal labels rather than raw OCR text.","artifact_count":2,"thumbnail":"https://cdn.futuresmart.ai/public/aidemos/6d9450b3c58b477ea0066e52ceb2f6ca.png?v=1","evidence_url":"https://aidemos.com/evidence/9c65076c-303b-4d4c-a3f7-619f2667c82e"}],"other_criteria":[{"id":"7221fe8c-c484-4e4c-939e-f3570f436861","criterion":"extraction-accuracy","criterion_name":"Extraction Accuracy","rank_role":"decisive","verdict":"worked","score":null,"score_total":null,"note":"It accurately fills core statement metadata and balances, including account number 42710540422, opening balance 114453.65, and closing balance 116149.46.","artifact_count":3,"evidence_url":"https://aidemos.com/evidence/7221fe8c-c484-4e4c-939e-f3570f436861"},{"id":"842f9614-818a-491f-91d0-1ca3ff89419e","criterion":"extraction-accuracy","criterion_name":"Extraction Accuracy","rank_role":"decisive","verdict":"mixed","score":null,"score_total":null,"note":"It leaves date and value_date blank on multiple transactions even when the source row contains them; the report says 15+ transactions are affected.","artifact_count":2,"evidence_url":"https://aidemos.com/evidence/842f9614-818a-491f-91d0-1ca3ff89419e"},{"id":"4b039231-2d8c-4c73-8ccb-1d789b555f37","criterion":"extraction-accuracy","criterion_name":"Extraction Accuracy","rank_role":"decisive","verdict":"failed","score":null,"score_total":null,"note":"It leaves summary.total_transactions null even though the statement has 51 transactions, so the summary count is not extracted as a usable value.","artifact_count":1,"evidence_url":"https://aidemos.com/evidence/4b039231-2d8c-4c73-8ccb-1d789b555f37"},{"id":"86ec5538-27d3-490e-88ab-a30bbd4479e8","criterion":"schema-adherence","criterion_name":"Schema Adherence","rank_role":"decisive","verdict":"worked","score":null,"score_total":null,"note":"It preserves the requested nested schema directly in the output, populating structured objects such as statement, account, balances, transactions, summary, rewards, and disclaimers instead of flattening the document into OCR text.","artifact_count":3,"evidence_url":"https://aidemos.com/evidence/86ec5538-27d3-490e-88ab-a30bbd4479e8"},{"id":"aabe6c7c-96c6-45f9-8357-03560e885eb4","criterion":"table-and-record-completeness","criterion_name":"Table & Record Completeness","rank_role":"decisive","verdict":"failed","score":null,"score_total":null,"note":"It merges adjacent bank-statement rows into a single record description, so one extracted transaction can absorb neighboring content rather than staying row-bounded.","artifact_count":1,"evidence_url":"https://aidemos.com/evidence/aabe6c7c-96c6-45f9-8357-03560e885eb4"},{"id":"4ecae670-4417-4bc0-98d5-6f6fe27654e0","criterion":"table-and-record-completeness","criterion_name":"Table & Record Completeness","rank_role":"decisive","verdict":"failed","score":null,"score_total":null,"note":"It undercounts the transaction table, extracting 47 transactions when the statement actually contains 51, so 4 records are missing.","artifact_count":2,"evidence_url":"https://aidemos.com/evidence/4ecae670-4417-4bc0-98d5-6f6fe27654e0"}],"appears_in":[{"page_type":"ranking","slug":"document-extraction","title":"Best AI Tools for Extracting Structured Data from PDFs and Business Documents","url":"https://aidemos.com/best/document-extraction","binding":"run"},{"page_type":"tool","slug":"unstract","title":null,"url":"https://aidemos.com/tools/unstract","binding":"run"}],"same_scenario":[{"id":"6028e5fa-9c96-4f9c-ad9d-5cc900225ace","tool":"datalab","tool_name":"Datalab","verdict":"failed","score":null,"score_total":null,"note":"Does not populate schema-derived transaction identifiers at all: the 18 Jun withdrawal keeps transaction_id = null even though the identifier is visible in the source row."},{"id":"414af8f0-b7ac-40ed-914e-051d339dfa2b","tool":"extend-ai","tool_name":"Extend AI","verdict":"failed","score":null,"score_total":null,"note":"It leaves derived `transaction_id` values as `null` even when reference identifiers are present in the description, so identifier extraction does not generalize."},{"id":"a2a1f6f5-e278-415c-afcd-a43a2ec3e91b","tool":"landing-ai","tool_name":"Landing AI","verdict":"worked","score":null,"score_total":null,"note":"Adds meaningful transaction_type labels to extracted rows, classifying the sample 18 Jun records as Withdrawal, Withdrawal, and Deposit instead of leaving the field as raw OCR text."},{"id":"e10bbd24-0b50-44a1-8902-eb59e2fbaf4f","tool":"llamaparse","tool_name":"LlamaParse","verdict":"failed","score":null,"score_total":null,"note":"Fails to derive transaction-level fields, leaving transaction_id and transaction_type empty even for descriptions that encode ATM, UPI, and CRADJ cues."},{"id":"e2f47c60-3f78-4b14-aa96-2e76d8e2483a","tool":"reducto","tool_name":"Reducto","verdict":"failed","score":null,"score_total":null,"note":"Leaves derived transaction metadata incomplete, with transaction_type and transaction_id missing across transaction rows."},{"id":"0067b41d-0138-4fc0-80b1-151bb93e2539","tool":"retab","tool_name":"Retab","verdict":"worked","score":null,"score_total":null,"note":"Derives transaction_type and transaction_id on transaction rows, classifying one record as UPI with transaction_id 917615251879 and cheque_number left empty."},{"id":"9c65076c-303b-4d4c-a3f7-619f2667c82e","tool":"unstract","tool_name":"Unstract","verdict":"worked","score":null,"score_total":null,"note":"Classifies transaction_type correctly across the transaction array, using Deposit and Withdrawal labels rather than raw OCR text."}]}