We underwrite small-business loans on PDFs. Ocrolus was 96%, DocParse is 99.3% — that 3-point difference is hundreds of approvals a month.
Every transaction.Reconciled in real time.
Account holder, period, opening and closing balance, every transaction with description, amount, and balance — from any bank, in any format.
{
"account_no_last4": "4892",
"holder": "Northwind Logistics LLC",
"period_start": "2026-03-01",
"period_end": "2026-03-31",
"opening_balance": 84231.04,
"closing_balance": 128610.88,
"transactions": [ 47 entries ]
}Three reasons teams switch to us
Every bank, every layout
4,200+ banks tested. Personal, business, brokerage, foreign-currency. Multi-page statements stitched automatically.
Transactions with categories
Each transaction returned with merchant, MCC code, and category. Maps to your chart of accounts or to a global taxonomy.
Lender-grade output
Used by 30+ lenders for underwriting. Returns cash-flow summaries, NSF flags, and average daily balance ready for risk models.
From raw bank statements
to structured data, in four steps.
Starter schema for bank statements.
Tweakable in seconds.
The bank statements template comes with a 10-field starter schema based on the most common fields teams pull from bank statements. Add your own fields, mark which are required, and change types in the dashboard or via the REST API.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Bankstatements",
"type": "object",
"required": [
"bank",
"account_no_last4",
"holder",
"period_start",
"period_end",
"opening_balance",
"closing_balance",
"transactions"
],
"properties": {
"bank": {
"type": "string"
},
"account_no_last4": {
"type": "string"
},
"holder": {
"type": "string"
},
"period_start": {
"type": "string"
},
"period_end": {
"type": "string"
},
"opening_balance": {
"type": "number"
},
"closing_balance": {
"type": "number"
},
"transactions": {
"type": "array"
},
"avg_daily_balance": {
"type": "number"
},
"nsf_count": {
"type": "integer"
}
}
}Field-level accuracy per field.
Multi-modal models do the reading, and accuracy depends on document quality. The numbers below are illustrative ranges we've seen on bank statements — run your own documents and compare against a small ground-truth set before you scale.
accuracy ceiling
One endpoint.
Every output you need.
# Extract with one POST
curl -X POST "https://api.docparse.io/v1/statements" \
-H "Authorization: Bearer $DOCPARSE_KEY" \
-F file=@"chase-march-2026.pdf" \
-F schema="bank-statement" \
-F webhook="https://api.acme.co/incoming"
# Returns:
{
"status": "complete",
"confidence": 0.987,
"latency_ms": 2412,
"data": { ... }
}Plain HTTP, no SDK lock-in
Bearer-token auth with revocable, SHA-256-hashed API keys. Call it from any language that can hit a REST endpoint — we publish docs and copy-pasteable snippets, not opinionated wrappers.
Signed webhooks for async
Register an endpoint, set the events, and we POST signed deliveries (HMAC-SHA256, Standard Webhooks spec) as extractions finish. Every attempt is logged in the dashboard with response code, body, and timing.
Why teams switch from regex.
A look at how DocParse compares to the three things you've probably already tried.
Reach the tools you already run.
DocParse ships two integration surfaces directly — REST API and signed webhooks — plus a native Zapier app that opens up everything else.
How teams use DocParse for bank statements.
Illustrative scenarios drawn from teams piloting DocParse — names and figures are examples, not customer quotes.
Statements from credit unions used to crash our pipeline. DocParse parses every regional bank we throw at it. Coverage is the killer feature.
The cash-flow summary fields meant our risk models worked on day one. We didn't need to derive anything ourselves.
The questions teams ask before they sign up.
Bank statements as a structured feed.
Every transaction, every bank, with categorization and lender-grade summaries.