Bank Statement PDF to Categorized Transactions avatar

Bank Statement PDF to Categorized Transactions

Pricing

$15.00 / 1,000 statement pages

Go to Apify Store
Bank Statement PDF to Categorized Transactions

Bank Statement PDF to Categorized Transactions

Bank statement PDF to categorized transactions and CSV, reconciled to the cent against the printed balances. Any bank, digital or scanned. Pay per page.

Pricing

$15.00 / 1,000 statement pages

Rating

0.0

(0)

Developer

Stan Lookoff

Stan Lookoff

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Share

Bank Statement PDF to Categorized Transactions (with Balance Reconciliation)

Turn a bank statement PDF — digital or scanned, any bank — into a clean, categorized transaction list, with proof that no row was missed: every row is checked against the printed running balance, and opening balance + credits − debits is checked against the closing balance, to the cent.

Built for accountants, bookkeepers, lending analysts and FP&A teams who need statement data in a spreadsheet or ledger.

What you can do

  • Extract every transaction: date, description, counterparty, signed amount, debit/credit and running balance — one dataset row each.
  • Categorize automatically: use the default list (salary, groceries, rent, utilities, software, fees, transfers and more) or pass your own chart of accounts (up to 60 names).
  • Reconcile to the cent: each row gets a balance check (ok, mismatch or unchecked), each page a status, and the statement reconciled: true/false. When a row is missing or misread, the summary says where — for example "expected 6,236.92, printed 6,230.17". A gap at a page break shows up as a brought-forward balance that does not match the previous page.
  • Get a summary: bank, last 4 digits of the account, currency, statement period, opening/closing balance, total credits and debits, issues found and totals per category.
  • Import anywhere: transactions.csv is ready for Excel, Google Sheets, QuickBooks or Xero.
  • Newest-first statements are detected and returned oldest-first.

How to use

  1. Paste a public link to one statement PDF into Statement PDF URL (max 50 MB). A data:application/pdf;base64,... URL also works. The form is prefilled with a 2-page fictional sample statement ("Maple Ridge Savings Bank — fictional sample data") so you can try it right away.
  2. Optionally set Max pages (caps the price), your own Categories, and the Date format if your statement uses ambiguous dates like 03/04.
  3. Start the run. Transactions and the summary row appear in the Output tab; the CSV is linked there and in the summary as csvUrl.
FieldRequiredDescription
pdfUrlyesPublic link to one statement PDF (max 50 MB), or a data:application/pdf;base64,... URL.
maxPagesnoProcess at most this many pages, starting from page 1. Default 20, max 100.
categoriesnoYour own category list or chart of accounts (up to 60 names). Other is always added.
dateOrdernoauto (default), day-first or month-first.

Pricing

You pay per statement page processed. Pages that could not be read are free, and a run that fails is free.

EventPrice
Statement page$0.015
ExampleCost
2-page sample statement$0.03
Typical 6-page monthly statement$0.09
12 monthly statements × 6 pages (one year)$1.08
100-page statement (maximum per run)$1.50

Before reading anything, the Actor works out the price from the page count (capped by maxPages). If the run's maximum cost is lower than that, it stops without charging and tells you the amount to set.

Available on paid Apify plans.

Input example

{
"pdfUrl": "https://example.com/statements/2026-09.pdf",
"maxPages": 20,
"categories": ["Revenue", "Payroll", "Rent", "Software", "Travel", "Bank Fees", "Owner Draw"]
}

Output example

From the fictional sample statement. One row per transaction:

{
"type": "transaction",
"page": 1,
"index": 3,
"date": "2026-09-03",
"description": "POS FRESHMART GROCERY #112",
"counterparty": "FreshMart Grocery",
"amount": -87.43,
"direction": "debit",
"balance": 6333.12,
"category": "Groceries",
"balanceCheck": "ok",
"expectedBalance": null
}

And one summary row at the end:

{
"type": "summary",
"bank": "Maple Ridge Savings Bank (fictional sample)",
"accountLast4": "4821",
"currency": "USD",
"periodStart": "2026-09-01",
"periodEnd": "2026-09-30",
"pagesProcessed": 2,
"transactionCount": 25,
"openingBalance": 4250,
"totalCredits": 8172.46,
"totalDebits": 3549.94,
"computedClosingBalance": 8872.52,
"closingBalance": 8872.52,
"reconciled": true,
"pages": [{ "page": 1, "status": "ok", "transactions": 13 }, { "page": 2, "status": "ok", "transactions": 12 }],
"categoryTotals": { "Groceries": { "count": 2, "debits": -199.51, "credits": 0 } },
"csvUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/transactions.csv?signature=...",
"priceUsd": 0.03
}

Limits

  • One PDF per run, up to 50 MB and 100 pages (maxPages, default 20). Longer statements: raise maxPages or split the file.
  • Up to about 14,000 characters of text per page — well over 100 transaction rows. A page above that is cut, and the summary flags it.
  • Up to 60 categories, 60 characters each.
  • Balance checks need a running-balance column or printed opening/closing balances. Without them, rows come back unchecked and reconciled is null.
  • Password-protected PDFs are not supported.

Good to know

  • Amounts are read as printed and never "fixed": a misread shows up as a balance mismatch, so check pages that are not ok.
  • Categories are assigned by an AI model from the description and counterparty; review them before filing taxes or books.
  • The CSV and dataset stay available while your run's storage is kept. Download them to keep a copy.
  • Questions or a missing feature? Open an issue on the Actor page.