Document extraction built for financial services engineering and operations teams.

Bank statements, pay stubs, tax forms, loan packets, closing disclosures, and every financial doc your pipeline handles. We've seen it all. Every field is validated, typed, and traced to its source.

75+
Bank statement formats prebuilt
JSON
Validated against your schema
Minutes
To configure a new bank format
SOC 2
Type II · audit-ready provenance
bank_statements/chase
chase_statement_sample▾ 100%▾ 1/4
ExtractionValidations 0Errors 0
{ }
Personal Account Statement
C
CHASE
Account Summary
Account holderDaniel R. Okafor
Account number****-****-7821
Statement period03/01/2025 – 03/31/2025
Routing number021000021
Balance Summary
Beginning balance$8,422.15
Total deposits$11,420.88
Total withdrawals$9,108.42
▶ Ending balance$10,734.61
Transactions
Date · DescriptionAmountBalance
03/02 · Direct deposit ACH
PARALLEL DESIGN PAYROLL
+$3,847.25$12,269.40
03/04 · Card purchase
WHOLE FOODS #218 OAKLAND CA
−$162.84$12,106.56
03/09 · ACH debit
RESI MORTGAGE 4419
−$2,238.00$8,868.56
03/15 · Direct deposit ACH
PARALLEL DESIGN PAYROLL
+$3,847.25$12,415.81
1{
2"account_holder": "Daniel R. Okafor",
3"account_number": "****-****-7821",
4"period_start": "2025-03-01",
5"period_end": "2025-03-31",
6"beginning_balance": 8422.15,
7"total_deposits": 11420.88,
8"total_withdrawals": 9108.42,
9"ending_balance": {
10"value": 10734.61,
11"validated": true
12},
13"transactions": [
14{
15"date": "2025-03-02",
16"description": "PARALLEL DESIGN PAYROLL",
17"amount": 3847.25,
18"type": "ACH_credit"
19},
20{
21"date": "2025-03-09",
22"amount": -2238.00,
23"type": "ACH_debit"
24}
25],
26"institution": "JPMorgan Chase",
27"routing_number": "021000021"
28}

Trusted by teams turning documents into production data

The platform

Sensible turns financial documents into your data layer.

An API call sends a bank statement, pay stub, tax form, or closing disclosure to Sensible. A SenseML config (yours, ours, or built together) defines what to extract. The platform returns structured JSON validated against your schema, with source coordinates per field. Engineers ship extraction in days instead of months. Operations teams stop re-keying. Compliance and model risk get a clean trail.

API & SDKs

REST API with Python and Node SDKs, plus webhook support for async processing.

View the docs →

Off-the-shelf configs

get started in minutes using configs our team has already built for the most common doc types

Browse FS configs →

Schema & provenance

Type validation, cross-field reconciliation, and source-coordinate trace per field. Every output is auditable.

Managed services

Don't want to own the configs? Sensible's team builds, tests, and maintains extractions for you.

Learn about managed services →
How it works

From document to structured data, in four steps.

The same pipeline whether you're running a 4-page pay stub or a 60-page loan packet. Sync or async. Same auth, same schema contract.

Step 01

Send the document

POST a PDF, scan, or photo to the extraction endpoint with the SenseML config that matches the bank or provider format.

POST /v0/extract
config: bank-stmt-chase
Step 02

Hybrid pipeline runs

Layout-based rules locate fields. LLM parsing handles ambiguous sections, tables, and prose. SenseML constrains both halves to your schema.

OCR → layout → LLM → type cast
Step 03

Validate every field

Schema enforcement, type checks, cross-field reconciliation, and confidence scoring. Low-confidence fields surface for human review.

schema → types → cross-ref → confidence
Step 04

Deliver to your stack

Validated JSON returns sync or via webhook. Plug into your loan origination system, KYC pipeline, underwriting workbench, or warehouse.

{ fields: {…}, source_coords: {…} }
Partner with us

We build the extraction layer. You ship product.

Plenty of teams would rather not write document parsers, monitor model drift, or maintain configs across format changes. Sensible's services team can handle all of it.

What you give usSample documents · target schema · target throughput
What you get backA working extraction endpoint, configs in your environment, downstream integrations wired up
PricingSame per-document rate as self-serve. No separate build fees.
01

Custom configs

SenseML for any layout your team handles. Bank statements, niche credit-union formats, brokerage statements, payroll-provider stubs, mortgage portfolios. Versioned in your environment.

02

Integration delivery

Webhooks, batch jobs, email-driven intake, downstream mappings into your loan origination system, KYC pipeline, underwriting workbench, or warehouse.

03

Drift & format maintenance

When a bank changes a statement layout or a payroll provider rolls out a new template, we update the configs. Your pipeline keeps shipping. Engineering team stays on product work.

04

White-glove onboarding

High-volume teams get a dedicated solutions engineer through go-live. Schema design, test coverage on real documents, monitoring and alerting.

Customer story

How a point-of-sale lender tackled the messiest document type in financial services.

Bank statement extraction across 75+ institution layouts, with the line-level transaction data their underwriting decisions depend on. Shipped on Sensible without building a parser team in-house.

Read the full story →
75+Bank statement formats supported
JSONValidated against your underwriting schema
MinutesTo configure a new institution format

SOC 2 Type II

Audited annually

HIPAA-ready

Available on Enterprise

Field-level provenance

Every extraction traceable

Per-document pricing

Predictable, no surprises

FAQ

Questions financial services teams ask.

What financial document types does Sensible support?
Bank and brokerage statements from 75+ institutions, pay stubs (ADP, Gusto, Paychex, Intuit, more), tax forms (1040, 1099, W-2, K-1, 1120, 1065), loan applications and packets, mortgage closing disclosures, KYC and identity documents, and verification of income and assets. Each ships as a starter config in the financial services library.
How does Sensible handle different bank and provider formats?
Each institution layout is its own SenseML config. Configs are versioned, testable, and deployable through CI/CD. New bank or payroll provider formats become new configs without changing your API integration.
Why not just prompt an LLM directly?
LLMs with structured outputs return syntactically valid JSON, but they don't enforce that bank statement balances reconcile, that a tax form's totals add up, or that a dollar amount actually appears on a specific page. Sensible runs deterministic validation on top of the model output and traces every field back to its source coordinates, so a downstream system never gets a hallucinated value.
How does this compare to building extraction in-house?
First version of an in-house build usually works. The cost shows up later: model deprecations, statement format drift, prompt regressions, the audit trail you didn't build, the human-review queue you didn't design. Sensible runs that infrastructure so engineering time stays on your product. SenseML is open and MIT-licensed, so the configs are yours to fork if you ever want to take it back in-house.
Does Sensible meet financial services compliance requirements?
SOC 2 Type II certified. Field-level source coordinates per extraction support audits, model risk management, and regulatory review.
How is pricing structured for financial services volumes?
Per-document pricing regardless of page count or complexity. Trials start on the Growth plan for 14 days. View pricing →
Get started

Start extracting financial documents today.

14-day free trial on the Growth plan. Pre-built bank, payroll, tax, and mortgage configs included. No credit card required.