Bank Statement Parser API for Your Own Workflow
Send bank and credit card statements to StatementsConverter from your own system and get back structured transactions, a balance check result and ready export files, without anyone opening the web app.
One REST API, the same engine as the web app
The API uses the same reader, the same extraction and the same balance check as the browser interface. A statement uploaded through the API appears in the account like any other upload, so a colleague can open it in the table editor if a check fails.
The API and webhooks are part of the Business plan at 249 USD a month billed yearly (2,988 USD a year) or 499 USD on monthly billing.
Authentication
Each request carries an API key in a request header. Keys are created and revoked by account administrators in the settings, every key is tied to one account, and key use is recorded in the audit log. Requests are accepted over HTTPS only.
Endpoints
The flow has three parts: upload the statement, wait until processing finishes, then read the transactions or download an export. Uploading returns a statement id straight away; status, transactions and exports are all addressed by that id.
| Method and path | Purpose |
|---|---|
| POST /v1/statements | Upload a PDF, scanned PDF, JPG or PNG statement |
| GET /v1/statements/{id} | Processing status and statement header fields |
| GET /v1/statements/{id}/transactions | Extracted transactions as JSON |
| GET /v1/statements/{id}/export?format=qbo | Export file, also xlsx, csv, qif, ofx or xero |
Uploads can carry a client workspace reference so API traffic is filed under the right client, just as batches in the web app are.
Webhooks instead of polling
Register a URL and the account calls it when a statement finishes. Two events are sent.
- statement.completed, when extraction is done, with the statement id and the balance check status
- statement.failed, when the file cannot be read, with the statement id and a reason such as an unreadable or password protected file
Webhook payloads are signed so your endpoint can confirm they come from your account. Polling the status endpoint works too, but webhooks keep your queue moving without wasted requests.
Fields in the transaction response
Each transaction object includes:
- date, normalized to ISO format
- description, with wrapped lines joined
- amount, signed, negative for money leaving the account
- balance, the running balance after the row when the statement prints one
- check_number, when present
The statement object carries the account ending digits, period start and end, opening and closing balance, and balance_check status: passed, or failed with the page and row range where the totals stop matching.
A shortened response for a statement that passed looks like this.
{
"id": "stm_8f2c41",
"period_start": "2026-08-01",
"period_end": "2026-08-31",
"opening_balance": 4120.55,
"closing_balance": 3871.30,
"balance_check": {"status": "passed"},
"transactions": [
{"date": "2026-08-03", "description": "ACH DEPOSIT PAYROLL", "amount": 2150.00, "balance": 6270.55, "check_number": null},
{"date": "2026-08-05", "description": "CHECK 1042", "amount": -899.25, "balance": 5371.30, "check_number": "1042"}
]
}
Rate limits and page usage
Requests are rate limited per account to keep processing fair for every team, and responses include headers showing how much of the current window is left. Large backlogs are best sent as a steady stream with webhooks rather than in one burst.
Pages processed through the API count against the same monthly allowance as uploads in the browser: 5,000 pages a month on Business and 12,000 on Business Plus. Deleting a statement afterwards does not return its pages. Usage for the current period is shown in the account and in the status response.
Built for lending and underwriting pipelines
Lenders and brokers use the parser to read three to twelve months of applicant statements inside a loan origination workflow. The balance check matters here for a different reason than in bookkeeping: a statement whose totals do not reconcile can point to a missing page or an altered document, so the failed status is a useful signal to route a file to manual review. More on that use on the bank statement analysis software page.
Prefer files to code
If your team only needs spreadsheets, the web app does everything the API does with a few clicks, described in how to convert bank statement to Excel. The full list of capabilities by plan is on the bank statement to Excel software page.
Which plan includes the API?
Business and Business Plus. Starter and Professional use the web app only.
Can the API return QuickBooks files?
Yes. The export endpoint returns QBO, as well as XLSX, CSV, QIF, OFX and Xero CSV.
Are API uploads kept longer than browser uploads?
No. The same retention applies: files are deleted automatically after 24 hours by default, and Business accounts can adjust the period.
Does the API handle scanned statements?
Yes. Scans and phone photos are read the same way as in the web app, with the balance check flagging any row that does not agree.
Connect your system to the parser
Choose Business, create an API key and send your first statement.