DEV Community

Tanod Labs
Tanod Labs

Posted on Originally published at tanod.dev

Convert a bank statement PDF to CSV with every row checked against the balance

POST https://tanod.dev/v1/pdf/bank-statement reads a bank statement PDF and returns its transactions: date, description, signed amount and balance, plus the opening and closing balance, totals in and out, and the currency when it is printed. Send a public url or file_base64; choose format json (default), csv, xlsx, ofx or qif. USD 0.02 per statement in USDC through x402, no account; also the convert_bank_statement tool in the documents MCP server.

Every row is checked

Each transaction is reconciled against the running balance: previous balance plus the amount must equal the printed balance to the cent. Rows that do not reconcile are flagged with row_ok: false, and the reply carries a confidence score from 0 to 1, so you know whether to trust the output before it goes into your books. Our own test statement came back with 6 transactions, opening and closing balances, currency EUR and confidence 0.99.

Layouts and languages

  • One signed amount column, separate debit and credit columns, or an amount with CR/DR markers; multi-line descriptions; headers repeated on every page; carried-forward lines.
  • Column headers in English, German, Spanish, French, Hindi, Indonesian, Italian, Polish, Portuguese, Russian, Turkish and Vietnamese.
  • Dates in day-first or month-first order, worked out from the whole statement; amounts with decimal commas or points, thousands separators, trailing minus or brackets.

Example

curl -s -X POST https://tanod.dev/v1/pdf/bank-statement \
  -H "Content-Type: application/json" \
  -d '{"url": "https://tanod.dev/samples/statement-sample.pdf", "format": "csv"}'
Enter fullscreen mode Exit fullscreen mode

Limits and privacy

  • Text PDFs only: a scanned statement gets 422 no_text_layer (not charged); run PDF OCR first. Up to 200 pages per call.
  • OFX and QIF need a year in every date. Credit-card statements without a balance column get a lower confidence.
  • Statements are processed in a sandboxed worker and never logged or stored. CSV cells that could act as spreadsheet formulas are escaped.

Related

Kept current at https://tanod.dev/learn/bank-statement-pdf-to-csv-api.html

Top comments (1)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.