Skip to content

Importing statements

Budvo reads the statements your bank and card issuers already give you: PDF statements, and CSV or OFX, QFX and QBO downloads. Drop in a year of them at once. Budvo works out which account each one belongs to, skips what's already there, and updates the account from the statement.

Everything happens on your own server. Budvo extracts the text of a PDF itself, with no outside service and no network request, and the original files stay in your encrypted database.

What it reads

StatementPDFNotes
ChaseCards and checking
Capital OneCards and 360 checkingTwo-date layout, "- $" credits
DiscoverCardsMerchant categories move to the memo
American ExpressCardsDescriptions over several lines
SoFiChecking, savings and credit card
CitiCardsStatements that span December and January get the right years
Bank of AmericaChecking and cardsDeposits and withdrawals sections
Wells FargoCheckingSeparate deposit and withdrawal columns
Apple CardCardDaily Cash is left out of the amounts
Affirm, KlarnaMonthly statementsPurchases and payments

Any other bank goes through a general reader that looks for lines with a date, a description and an amount, understands debit and credit columns and running balances, and checks the result against the statement's own opening and closing balances. When the lines don't add up, the preview says so.

CSV files from most banks work too: Budvo guesses the columns and remembers your choice for the next file with the same layout. OFX, QFX and QBO files carry their own ids, so the same download imported twice adds nothing.

Import

  1. Open Activity and choose the import button (the file icon).
  2. Choose one or more files. Each one is read and shown with what Budvo found: the bank, the last four digits, the statement period, and a summary like 12 new, 3 already in Budvo, 1 pays a bill.
  3. Check the account. Budvo matches statements by their last four digits, then by bank, then by name. A card it hasn't seen becomes a new account, already filled in with the statement's balance, due date, minimum, limit and APR.
  4. Choose Import. Everything is imported in one step: if anything fails, nothing is half done.

Open Lines under a statement to see each transaction: what's new, what's already in Budvo, which bill it pays, and anything Budvo couldn't read (those are skipped; add them by hand if they're real).

Already in Budvo

A line counts as already there when the same account has the same amount within three days and a payee that fits, a transfer, a bill Budvo booked, or something you typed in by hand that day. Overlapping statements are handled the same way. Budvo links those transactions to the statement instead of adding them again, and a line that pays a bill on your calendar marks that bill paid.

Updated from your statement

When the statement is newer than what Budvo knows, the account takes its closing balance (as of the statement date), and cards also take the statement balance, due day, minimum, credit limit and APR. Anything you changed yourself after the statement closed is kept, and the preview says which values it keeps. The account page shows what the last statement updated.

Password-protected statements

Some banks lock their PDFs. Budvo asks for the password and reads it on the spot; the password isn't stored. Statements locked only against printing or copying open without asking.

Your statements, kept

Each account has a Statements section with the original files, newest first. Transactions and paid bills show a small From statement link that opens the PDF. Deleting a statement keeps its transactions.

The files live inside your encrypted database, so your backups and the full server export carry them. Household exports leave them out.

Findings

With more of your history in Budvo, Subscriptions, Findings points out what's worth a look:

  • Charged twice: the same merchant and amount within a few days, with no refund. Budvo writes the message to send, with the merchant, dates, amount and card.
  • Fees and interest this year, per account, and a script to ask for a late or overdraft fee back.
  • Trials that turned paid, yearly charges that aren't bills yet, and price increases.
  • Card payments that didn't arrive: money that left checking for a card, with no payment on the card side within five days.

A double charge also shows as one line on Today.

Scanned statements

A scanned statement is a picture of text, with nothing to read. Budvo can read them with the optional OCR container, budvo-ocr, which runs next to Budvo on your own machine and never sends anything anywhere. Without it, Budvo says it can't read text from a scanned statement.

Add it to your compose file and point Budvo at it:

docker-compose.yml
services:budvo:  # ... your existing settings ...  environment:    BUDVO_OCR_URL: http://ocr:8080ocr:  image: git.ronniie.com/nulldaily/budvo-ocr:latest  restart: unless-stopped  # Default bridge network, no ports: only Budvo talks to it.

Then restart:

terminal
docker compose up -d

Budvo only sends it statements with no text of their own, never regular PDFs, CSV or OFX files. Lines read this way are marked Read by OCR, check it in the preview, and more strongly when a page was hard to read.

Limits

  • Up to 25 MB per file and 100 files per import.
  • Uploads you don't import are deleted after a day.
  • Budvo reads statement text; it doesn't rebuild buy now pay later plans from Affirm or Klarna statements (add the plan on its account).