Turn any bank statement PDF into clean, typed JSON. Every transaction is its own object - date, description, amount, running balance - ready for reconciliation, lending decisions, or your accounting pipeline. Works with scans and digital statements from any bank.
Send the statement and a schema. Each line comes back as a structured row with a running balance, so you can validate the math, not just read the text.
curl -X POST \
https://api-parse.conversiontools.io/v1/extract \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@statement.pdf" \
-F 'schema={
"account_holder": "string",
"account_number": "string",
"bank_name": "string",
"statement_period": { "start": "date", "end": "date" },
"opening_balance": "number",
"closing_balance": "number",
"currency": "string",
"transactions": [{
"date": "date",
"description": "string",
"amount": "number",
"type": "string",
"balance": "number",
"category": "string"
}]
}'{
"status": "completed",
"pages": 3,
"data": {
"account_holder": "Jane Doe",
"account_number": "****6739",
"bank_name": "First National",
"statement_period": { "start": "2026-03-01", "end": "2026-03-31" },
"opening_balance": 4120.55,
"closing_balance": 3127.04,
"currency": "USD",
"transactions": [
{
"date": "2026-03-04",
"description": "Whole Foods Market",
"amount": -84.52,
"type": "debit",
"balance": 4036.03,
"category": "Groceries"
},
{
"date": "2026-03-15",
"description": "Payroll ACME Corp",
"amount": 3200.00,
"type": "credit",
"balance": 7236.03,
"category": "Income"
}
]
}
}A statement is not just a wall of text - it is a ledger. The schema captures it as one.
Each line returns as a structured object with a typed amount and a debit or credit marker, so you can sum, filter, and reconcile without parsing strings.
Opening and closing balances plus a per-line running balance come back too, so you can validate the math end to end, not just the rows.
Reads varied statement layouts from any bank, scanned or digital, with OCR applied automatically. No template per institution.
Yes. Add a category field to your schema and the model infers a category per line (groceries, payroll, transfer, fees, and so on). You can also constrain it to your own category list.
Yes. A multi-page statement is processed in a single call and transactions that span pages come back as one array. For multi-account statements, model the accounts as an array in your schema.
Yes. OCR is applied automatically to scanned and image-based PDFs, so the JSON output is the same whether the statement was downloaded or photographed.
However you declare it. Use a signed amount (negative for debits) or a separate type field set to debit or credit - the schema is the contract and the response matches it.
Uploaded statements are automatically deleted within 24 hours. Extracted data is encrypted in transit and at rest and is never used to train models.
The same schema-driven API works across every document type. Define a schema once, extract from thousands of files.
Extract structured JSON from any document with custom schemas.
Parse any PDF into structured JSON, scanned or digital.
Vendor, line items, totals, tax, and dates from invoices.
Store, items, totals, and payment method from receipts.
PO number, vendor, buyer, and SKU-level line items.
Box-level data from W-2, 1099, and other tax forms.
Parties, dates, governing law, and key clauses.
Carrier, parties, ports, containers, and cargo.
Free tier covers your first 100 pages a month. No credit card to start.