Unstract icon
business-marketing

Unstract

Prompt-driven schema extraction for invoices and bank statements, with strong row-level capture and a few derived-field caveats.

Visit Unstract
Bank statementsInvoicesPrompt StudioJSON export
TL;DR — our verdictUpdated August 2026 · 11 test artifacts

Strong extraction, but check derived fields.

Where it wins
  • you need prompt-driven extraction into a custom JSON schema
  • you work with invoices or bank statements and care about row-level data
  • you can spot-check derived summary or formatting fields before downstream use
Main limitation
  • you need fully trusted summary calculations without spot checks
Pricing (verified plans)
Starter $499/moGrowth $2,249/moEnterprise Custom
Strongest test artifacts

Our take

Unstract handled the two business PDFs well at the schema and row level: it filled the requested nested fields, preserved the full 51-row bank transaction array, and extracted the invoice totals and cross-page line items cleanly. The weak spots were a wrong bank-statement transaction count summary and an unreliable invoice day-of-week mask, so downstream users should verify calculated and fixed-width fields before relying on them.

Screen recording of Unstract’s web app, showing the dashboard plus bank-statement and invoice extraction demos with PDF viewer, parsed output, Export, and Deploy as API options.

In-Depth Review

Our detailed analysis of Unstract — features, performance, and real-world testing.

AD
AI Demos Team
Expert Reviewer
Verified Review

Feature-by-Feature Breakdown

Custom Schema Population
Strong
Test Summary
Feature tested: Custom Schema Population
Result: Partial — Strong

Feature tested: Custom Schema Population

Result: Partial

Verdict: Strong

Expected behavior: Populates user-defined nested JSON schemas from uploaded PDFs, including bank-statement metadata, account holder details, balances, transaction summaries, and invoice metadata such as station and account details. The evidence on cards 0 and 2 shows the tool filling structured fields from bank statements and invoices into schema-shaped outputs.

Test case: PDF document → Text/code file

Input type: PDF document

Input used: Input artifact (PDF document): Bank Statement PDF — Bank Statement PDF.pdf

Observed output: Output artifact (Text/code file): Returned all 51 transaction rows with correct deposit/withdrawal classification and running balances; the summary.total_transactions value was 43 instead of 51. — unstract_bank_statement_output.json

Input artifact: Input artifact (PDF document): Bank Statement PDF — Bank Statement PDF.pdf

Output artifact: Output artifact (Text/code file): Returned all 51 transaction rows with correct deposit/withdrawal classification and running balances; the summary.total_transactions value was 43 instead of 51. — unstract_bank_statement_output.json

What changed: PDF document transformed into Text/code file

Test case: PDF document → Text/code file

Input type: PDF document

Input used: Input artifact (PDF document): Invoice PDF — Invoice PDF.pdf

Observed output: Output artifact (Text/code file): Captured line 8 across the page break without duplication and matched the invoice totals exactly; the day_of_week field was not reproduced reliably. — unstract_invoice_output.json

Input artifact: Input artifact (PDF document): Invoice PDF — Invoice PDF.pdf

Output artifact: Output artifact (Text/code file): Captured line 8 across the page break without duplication and matched the invoice totals exactly; the day_of_week field was not reproduced reliably. — unstract_invoice_output.json

What changed: PDF document transformed into Text/code file

Why it matters / Conclusion: Strong at populating nested document schemas; check derived summary or mask-style fields before downstream use.

Populates user-defined nested JSON schemas from uploaded PDFs, including bank-statement metadata, account holder details, balances, transaction summaries, and invoice metadata such as station and account details. The evidence on cards 0 and 2 shows the tool filling structured fields from bank statements and invoices into schema-shaped outputs.

file
Bank Statement PDF.pdf
file
unstract_bank_statement_output.json
Loading file...
Returned all 51 transaction rows with correct deposit/withdrawal classification and running balances; the summary.total_transactions value was 43 instead of 51.
file
Invoice PDF.pdf
file
unstract_invoice_output.json
Loading file...
Captured line 8 across the page break without duplication and matched the invoice totals exactly; the day_of_week field was not reproduced reliably.
Bottom Line
Strong at populating nested document schemas; check derived summary or mask-style fields before downstream use.
From our researchExtract and query structured data from documents using natural languageearlier research
Multi-Page Table and Line-Item Extraction
Strong with caveats
Test Summary
Feature tested: Multi-Page Table and Line-Item Extraction
Result: Partial — Strong with caveats

Feature tested: Multi-Page Table and Line-Item Extraction

Result: Partial

Verdict: Strong with caveats

Expected behavior: Preserves repeating table rows and invoice line items across long documents and page breaks, including statement transactions with running balances and invoice line items that continue onto the next page. The evidence on card 1 focuses on continuity of row-level data rather than schema population.

Test case: PDF document → Text/code file

Input type: PDF document

Input used: Input artifact (PDF document): Input — Bank Statement PDF.pdf

Observed output: Output artifact (Text/code file): The transaction array preserves all 51 rows from the 4-page statement, with correct deposit/withdrawal classification and running balances. — unstract_bank_statement_output.json

Input artifact: Input artifact (PDF document): Input — Bank Statement PDF.pdf

Output artifact: Output artifact (Text/code file): The transaction array preserves all 51 rows from the 4-page statement, with correct deposit/withdrawal classification and running balances. — unstract_bank_statement_output.json

What changed: PDF document transformed into Text/code file

Test case: PDF document → Text/code file

Input type: PDF document

Input used: Input artifact (PDF document): Input — Invoice PDF.pdf

Observed output: Output artifact (Text/code file): Line 8 was captured once across the page break without duplication or data loss, while the financial totals remained correct. — unstract_invoice_output.json

Input artifact: Input artifact (PDF document): Input — Invoice PDF.pdf

Output artifact: Output artifact (Text/code file): Line 8 was captured once across the page break without duplication or data loss, while the financial totals remained correct. — unstract_invoice_output.json

What changed: PDF document transformed into Text/code file

Why it matters / Conclusion: Reliable for row-level capture and page-break continuity; the main issues were summary counts and text-formatting noise, not missing rows.

Preserves repeating table rows and invoice line items across long documents and page breaks, including statement transactions with running balances and invoice line items that continue onto the next page. The evidence on card 1 focuses on continuity of row-level data rather than schema population.

INPUT
Bank Statement PDF.pdf
OUTPUT
unstract_bank_statement_output.json
Loading file...
The transaction array preserves all 51 rows from the 4-page statement, with correct deposit/withdrawal classification and running balances.
INPUT
Invoice PDF.pdf
OUTPUT
unstract_invoice_output.json
Loading file...
Line 8 was captured once across the page break without duplication or data loss, while the financial totals remained correct.
Bottom Line
Reliable for row-level capture and page-break continuity; the main issues were summary counts and text-formatting noise, not missing rows.
From our researchExtract and query structured data from documents using natural language
Field-Level Accuracy vs. Source Document
Works Well
Test Summary
Feature tested: Field-Level Accuracy vs. Source Document
Result: Passed — Works Well

Feature tested: Field-Level Accuracy vs. Source Document

Result: Passed

Verdict: Works Well

Expected behavior: Every extracted value was manually cross-checked against the original bank statement and invoice PDFs — entity data, balances, individual transactions, and the invoice's financial summary — verified line-by-line rather than trusting the tool's output at face value.

Test case: PDF document → Image

Input type: PDF document

Input used: Input artifact (PDF document): Input — Bank Statement PDF.pdf

Observed output: Output artifact (Image): Bank name, account holder name, and account number extracted correctly, matching the source header exactly. — bank_statement_ss1_metadata_account.png

Input artifact: Input artifact (PDF document): Input — Bank Statement PDF.pdf

Output artifact: Output artifact (Image): Bank name, account holder name, and account number extracted correctly, matching the source header exactly. — bank_statement_ss1_metadata_account.png

What changed: PDF document transformed into Image

Test case: PDF document → Image

Input type: PDF document

Input used: Input artifact (PDF document): Input — Bank Statement PDF.pdf

Observed output: Output artifact (Image): Opening balance (16 Jun) and closing balance (16 Jul) match the source PDF's BALANCE FORWARD and TOTAL rows exactly. — bank_statement_ss2_opening_closing_balance.png

Input artifact: Input artifact (PDF document): Input — Bank Statement PDF.pdf

Output artifact: Output artifact (Image): Opening balance (16 Jun) and closing balance (16 Jul) match the source PDF's BALANCE FORWARD and TOTAL rows exactly. — bank_statement_ss2_opening_closing_balance.png

What changed: PDF document transformed into Image

Test case: PDF document → Image

Input type: PDF document

Input used: Input artifact (PDF document): Input — Bank Statement PDF.pdf

Observed output: Output artifact (Image): The large NEFT deposit (₹67,148) is correctly classified and its running balance matches the source. — bank_statement_ss3_neft_transaction.png

Input artifact: Input artifact (PDF document): Input — Bank Statement PDF.pdf

Output artifact: Output artifact (Image): The large NEFT deposit (₹67,148) is correctly classified and its running balance matches the source. — bank_statement_ss3_neft_transaction.png

What changed: PDF document transformed into Image

Test case: PDF document → Image

Input type: PDF document

Input used: Input artifact (PDF document): Input — Bank Statement PDF.pdf

Observed output: Output artifact (Image): The summary's total_transactions field reports 43, but the array actually contains all 51 transactions — manually counted against the source PDF across all 4 pages. — bank_statement_ss4_total_transactions_discrepancy.png

Input artifact: Input artifact (PDF document): Input — Bank Statement PDF.pdf

Output artifact: Output artifact (Image): The summary's total_transactions field reports 43, but the array actually contains all 51 transactions — manually counted against the source PDF across all 4 pages. — bank_statement_ss4_total_transactions_discrepancy.png

What changed: PDF document transformed into Image

Test case: PDF document → Image

Input type: PDF document

Input used: Input artifact (PDF document): Input — Invoice.pdf

Observed output: Output artifact (Image): Invoice number and station (KMSP) details extracted correctly from the header tables. — invoice_ss1_metadata_station.png

Input artifact: Input artifact (PDF document): Input — Invoice.pdf

Output artifact: Output artifact (Image): Invoice number and station (KMSP) details extracted correctly from the header tables. — invoice_ss1_metadata_station.png

What changed: PDF document transformed into Image

Test case: PDF document → Image

Input type: PDF document

Input used: Input artifact (PDF document): Input — Invoice.pdf

Observed output: Output artifact (Image): Line 8, the NFL broadcast spanning the page break, was captured in full with the correct $8,500.00 rate. — invoice_ss2_line8_rate.png

Input artifact: Input artifact (PDF document): Input — Invoice.pdf

Output artifact: Output artifact (Image): Line 8, the NFL broadcast spanning the page break, was captured in full with the correct $8,500.00 rate. — invoice_ss2_line8_rate.png

What changed: PDF document transformed into Image

Test case: PDF document → Image

Input type: PDF document

Input used: Input artifact (PDF document): Input — Invoice.pdf

Observed output: Output artifact (Image): Gross total, agency commission, and net amount due all match the invoice's printed totals exactly. — invoice_ss3_summary.png

Input artifact: Input artifact (PDF document): Input — Invoice.pdf

Output artifact: Output artifact (Image): Gross total, agency commission, and net amount due all match the invoice's printed totals exactly. — invoice_ss3_summary.png

What changed: PDF document transformed into Image

Why it matters / Conclusion: Manual verification against the source PDFs confirmed core financial figures reconcile exactly on both documents, but surfaced two real discrepancies: the bank statement's summary total_transactions field (43) undercounts the actual 51 rows present in the array, and the invoice's day_of_week field doesn't reliably reproduce the source's 7-character scheduling mask.

Every extracted value was manually cross-checked against the original bank statement and invoice PDFs — entity data, balances, individual transactions, and the invoice's financial summary — verified line-by-line rather than trusting the tool's output at face value.

text
Bank Statement PDF.pdf
text
Output artifact for "Field-Level Accuracy vs. Source Document" test: Bank name, account holder name, and account number extracted correctly, matching the source header exactly., bank_statement_ss1_metadata_account.png
Bank name, account holder name, and account number extracted correctly, matching the source header exactly.
text
Bank Statement PDF.pdf
text
Output artifact for "Field-Level Accuracy vs. Source Document" test: Opening balance (16 Jun) and closing balance (16 Jul) match the source PDF's BALANCE FORWARD and TOTAL rows exactly., bank_statement_ss2_opening_closing_balance.png
Opening balance (16 Jun) and closing balance (16 Jul) match the source PDF's BALANCE FORWARD and TOTAL rows exactly.
text
Bank Statement PDF.pdf
text
Output artifact for "Field-Level Accuracy vs. Source Document" test: The large NEFT deposit (₹67,148) is correctly classified and its running balance matches the source., bank_statement_ss3_neft_transaction.png
The large NEFT deposit (₹67,148) is correctly classified and its running balance matches the source.
text
Bank Statement PDF.pdf
text
Output artifact for "Field-Level Accuracy vs. Source Document" test: The summary's total_transactions field reports 43, but the array actually contains all 51 transactions — manually counted against the source PDF across all 4 pages., bank_statement_ss4_total_transactions_discrepancy.png
The summary's total_transactions field reports 43, but the array actually contains all 51 transactions — manually counted against the source PDF across all 4 pages.
text
Invoice.pdf
text
Output artifact for "Field-Level Accuracy vs. Source Document" test: Invoice number and station (KMSP) details extracted correctly from the header tables., invoice_ss1_metadata_station.png
Invoice number and station (KMSP) details extracted correctly from the header tables.
text
Invoice.pdf
text
Output artifact for "Field-Level Accuracy vs. Source Document" test: Line 8, the NFL broadcast spanning the page break, was captured in full with the correct $8,500.00 rate., invoice_ss2_line8_rate.png
Line 8, the NFL broadcast spanning the page break, was captured in full with the correct $8,500.00 rate.
text
Invoice.pdf
text
Output artifact for "Field-Level Accuracy vs. Source Document" test: Gross total, agency commission, and net amount due all match the invoice's printed totals exactly., invoice_ss3_summary.png
Gross total, agency commission, and net amount due all match the invoice's printed totals exactly.
Bottom Line
Manual verification against the source PDFs confirmed core financial figures reconcile exactly on both documents, but surfaced two real discrepancies: the bank statement's summary total_transactions field (43) undercounts the actual 51 rows present in the array, and the invoice's day_of_week field doesn't reliably reproduce the source's 7-character scheduling mask.

Pricing

Starter
$499/mo ($416/mo annual)
5,000 pages/mo, $0.10/page overage, Prompt Studio + API, 14-day free trial
Growth
$2,249/mo ($1,874/mo annual)
25,000 pages/mo, $0.09/page overage
Enterprise
Custom
Cloud or on-prem, SOC 2/GDPR/HIPAA/ISO 27001, dedicated success manager
✓ Use This If
you need prompt-driven extraction into a custom JSON schema
you work with invoices or bank statements and care about row-level data
you can spot-check derived summary or formatting fields before downstream use
✕ Skip This If
you need fully trusted summary calculations without spot checks
you need exact fixed-width day-of-week masks
you need proven natural-language querying in this specific workflow
business-marketingpdf-toolstextOther
Yes. The tested bank statement was 4 pages long and Unstract processed all 51 transactions in one run.
The transaction-level data looked strong: deposits and withdrawals were classified correctly, and running balances were preserved. The main miss was a derived summary field, where total_transactions reported 43 instead of the 51 rows found in the PDF.
Yes. Line 8 was extracted once across the page break without duplication or data loss.
Yes. The report shows gross total $29,750.00, agency commission $4,462.50, net amount due $25,287.50, and payment terms of 30 Days.
The bank-statement summary.total_transactions value was wrong, the invoice day_of_week mask was unreliable, and the invoice Ad-ID text had a stray space.
Yes. JSON output was confirmed for both document tests.
No. The report says field setup was prompt-driven through Prompt Studio rather than a raw JSON schema upload.

Banner Preview

How the embed badge will look on your site

Unstract featured on AI Demos

Embed HTML

Copy this code to your website source

<a target="_blank" href="https://aidemos.com/tools/unstract?utm_source=unstract_embed" style="width: 250px; height: 80px; border-radius:4px;" width="250" height="80"> <img src="https://aidemos-website-images.s3.amazonaws.com/featured.png" alt="Unstract | Featured on AI Demos" style="width: 250px; height: 80px; border-radius:4px;" width="250" height="80"> </a>

Quick Integration Guide

  • 1Copy the HTML code block above.
  • 2Paste it into your site's HTML or CMS editor.
  • 3Banner appears instantly on your page.
  • 4Links back to your tool profile here.
Similar Tools

Similar Tools

Discover more AI tools like Unstract to enhance your workflow.

Comments (0)

Please Log in to join the discussion.

Built by FutureSmart AI — the team behind AI Demos

Need a custom AI solution for this use case?

If you are looking to build a custom invoice extraction, bank statement parsing, or document extraction system for your business or internal workflow, email us at contact@futuresmart.ai.

Get a custom build

Found something inaccurate or missing? We try to keep our AI research accurate and useful. If you found outdated information, an issue, or have a suggestion, email us at collaborate@aidemos.com.

Back to Top