Free forever · 200 OCR + 50 extraction pages/mo

The bank statement OCR API for transaction extraction.

Convert PDF bank statements, scans, and photos into structured JSON. Extract account metadata, balances, statement periods, and transaction rows with one schema-driven request.

Get started today for free. No credit card required.

Before and after

See a bank statement become transaction rows.

OCRWell reads statement pages and returns the account metadata, balances, and repeating transaction rows your financial workflow expects.

Source document
A scanned UK bank statement with a month of transactions
Extracted output
statement.json
json
{
  "data": {
    "bank_name": "NORTHBROOK BANK",
    "account_holder": "MS. E. WHITMORE",
    "sort_code": "40-12-04",
    "account_number": "****3821",
    "statement_period": "01 Mar 2026 to 31 Mar 2026",
    "closing_balance": "4,091.18",
    "transactions": [
      {
        "date": "03 Mar",
        "description": "DD BRITISH GAS",
        "paid_out": "148.20",
        "paid_in": "",
        "balance": "1,056.46"
      },
      {
        "date": "25 Mar",
        "description": "SALARY NORTHBROOK LTD",
        "paid_out": "",
        "paid_in": "3,842.17",
        "balance": "4,591.18"
      }
    ]
  }
}
Transaction extraction

Turn statement tables into typed JSON.

Send a schema for the statement fields you need. OCRWell returns balances and transaction rows as structured data, ready for reconciliation, onboarding, or lending workflows.

submit-statement.sh
bash
# Extract statement metadata and transactions
$ curl https://api.ocrwell.com/v1/documents \
    -H "X-API-Key: $OCRWELL_KEY" \
    -d '{
      "upload_id":"upl_01H7",
      "mode":"structured",
      "schema":{
        "bank_name":"string",
        "account_holder":"string",
        "account_number_last4":"string",
        "statement_start":"string",
        "statement_end":"string",
        "currency":"string",
        "opening_balance":"string",
        "closing_balance":"string",
        "transactions":[
          {
            "date":"string",
            "description":"string",
            "debit":"string",
            "credit":"string",
            "balance":"string"
          }
        ]
      }
    }'
statement-result.json
json
{
  "job": {
    "id": "019539a6-6c3d-7e5f",
    "status": "completed",
    "mode": "structured",
    "page_count": 4
  },
  "result": {
    "data": {
      "bank_name": "Harbour Mutual Bank",
      "account_holder": "Northbridge Pty Ltd",
      "account_number_last4": "4182",
      "statement_start": "01/04/2026",
      "statement_end": "30/04/2026",
      "currency": "AUD",
      "opening_balance": "58,214.00",
      "closing_balance": "61,589.00",
      "transactions": [
        {
          "date": "03/04/2026",
          "description": "Client transfer ACME",
          "debit": "",
          "credit": "3,250.00",
          "balance": "61,464.00"
        },
        {
          "date": "04/04/2026",
          "description": "Office lease",
          "debit": "2,480.00",
          "credit": "",
          "balance": "58,984.00"
        }
      ]
    }
  }
}
Financial document workflows

Where teams use bank statement OCR.

Applicant-ready

Loan and onboarding flows

Extract account holder, statement period, balances, and transaction rows so your product can pre-fill affordability, income, or proof-of-funds checks.

Rows as JSON

Reconciliation imports

Turn bank PDFs into transaction arrays ready for matching against ledger entries, invoices, payroll, or card processor settlements.

Any upload path

Mixed statement sources

Handle downloaded PDFs, scanned paper statements, and phone photos through one upload flow, with typed output shaped by your schema.

FAQ

Bank statement OCR questions.

Can OCRWell extract transaction rows?

Yes. Describe transactions as an array in the schema and include the fields your app needs, such as date, description, debit, credit, and balance.

Can it handle multi-page statements?

Yes. The job response includes page count metadata, and structured mode can return one transaction array for the statement document.

Does OCRWell store bank statements after processing?

Uploaded files are deleted after processing and job results expire five minutes after first retrieval. Use the security page for the full retention model.

Pricing

Start free. Pay only when you scale.

Free forever
200 OCR + 50 extraction pages every month
  • No credit card required.
  • Hard cap, no overage charges.
  • Paid plans from $20/mo when you grow.

Extract statement data today.

Generate an API key, upload your first bank statement, and get typed JSON back in seconds. Free forever tier covers 200 OCR pages per month.

Get your API key today No credit card required. 200 OCR + 50 extraction pages / month, free forever.