Extract Bank Statement Tables to JSON / CSV
Pulls tabular transaction history deterministically from native PDF text layers (zero model read charge for digital PDFs) or via high-precision vision OCR for scans. Returns structured rows, dates, descriptions, debit/credit columns, and validates closing balance reconciliations.
Instant execution
Run this verification workflow directly. For instant zero-auth testing with deterministic fixture data, include the Stp-Sandbox: true header.
curl -X POST "https://www.stipple.sh/v1/extract?options=tables" \
-H "Authorization: Bearer stp_live_your_key_here" \
-F "file=@cba_statement_july2026.pdf"Expected JSON response
The engine returns deterministic findings with evidence traces, confidence bounds, and recommended actions:
{
"document_type": "bank_statement",
"issuing_institution": "Commonwealth Bank of Australia",
"account_holder": "ACME SOURCING PTY LTD",
"account_number": "XXXX-1294",
"statement_period": {
"start_date": "2026-06-01",
"end_date": "2026-06-30"
},
"opening_balance": 14250.80,
"closing_balance": 18920.45,
"tables": [
{
"page": 1,
"source": "native_pdf",
"rows": 48,
"header": ["Date", "Description", "Debit", "Credit", "Balance"],
"json": [
{
"Date": "01 Jun 2026",
"Description": "OPENING BALANCE",
"Debit": null,
"Credit": null,
"Balance": 14250.80
},
{
"Date": "04 Jun 2026",
"Description": "DIRECT DEBIT 48192 OFFICE LEASE",
"Debit": 2200.00,
"Credit": null,
"Balance": 12050.80
},
{
"Date": "12 Jun 2026",
"Description": "CUSTOMER PAYMENT INV-8821",
"Debit": null,
"Credit": 6869.65,
"Balance": 18920.45
}
]
}
]
}AI agent prompt & MCP tool usage
When configuring autonomous agents (Claude Desktop, Cursor, Hermes), use this verified prompt pattern:
You are a financial analyst agent.
1. Call extract_fields(url="...", options="tables")
2. Compute the total deposits and total debits over the 90-day statement period.
3. Flag any gambling transactions or high-frequency payday loan debits.Input parameters & headers
| Field | Type | Required | Description |
|---|---|---|---|
| file | file (multipart) | Required | Multi-page PDF or high-resolution scan. |
| options | string | Optional | Comma-separated features: "tables", "classification", "redaction". |
| flag_below | float (0.0 - 1.0) | Optional | Confidence threshold below which fields are flagged for human triage. |
Diagnostic signals & failed checks
Each check reports exactly what it tested and what evidence it found. High severity signals trigger an escalated risk band:
Running transaction debits and credits do not reconcile with the reported closing balance.
Multi-page table continuation successfully normalized across page boundaries.
Production considerations & edge cases
- Password Protected PDFs: Encrypted PDFs without passwords will return a 422 Unprocessable Entity error.
- Non-standard transaction layouts: In statements where debits/credits share a single signed amount column (+/-), the engine normalizes to explicit debit/credit keys.
Related workflows
Take it to production
The snippets above run against the sandbox with Stp-Sandbox: true — no key, no credits, fixture data. Drop that header and the call is real, which needs a key.
Every key gets a free weekly allowance. Past that, prepaid credit packs cover it, and Errors & limits says what happens when you run out.