CSV import is the fastest way to backfill history. Most banks and credit cards let you download a CSV of your transactions; copy the rows into BudgetLabs and they're added in one batch.
It's a paste flow, not a file upload — you open the export and copy from it rather than handing over the file. There's no column-mapping screen either; BudgetLabs reads the file and works out which column is which.
Before you start
- Export the CSV from your bank or card portal. Date range is up to you — a single month is fine for a first pass.
- Open the file in a spreadsheet or a plain text editor to confirm it has columns for date, amount, and description. (Almost every export does.) You'll be copying from whatever you open it in.
Run the import
- Go to Transactions.
- Tap Import Transactions and choose Paste CSV.
- Select the rows in your spreadsheet or text editor, copy them, and paste into the box.
- Review the preview. BudgetLabs flags likely duplicates against transactions you've already logged.
- Apply your auto-categorization rules (see the rules article) if you have any.
- Confirm and import.
The transactions land on the Transactions list and the Dashboard updates immediately.
How your columns are read
There's no mapping screen because BudgetLabs identifies the columns from the content of the file, not from their position or their headings.
- The date column is whichever column parses as a date in the most rows.
- The amount column is whichever column most often looks like money — a minus
sign or parentheses, a
$,€or£, or a decimal fraction. This is what keeps a store number or a reference code from being read as the amount. When two columns qualify equally often — an amount and a running balance both carry a figure on every row — the leftmost wins, so the balance never displaces the amount it sits beside. - Everything left over becomes the description, joined in the order it
appears — including columns you might not want. A row like
883120,2026-08-01,ICA MAXI,card 4321,-295.50,12480.25imports with the right date and amount, but its description reads883120 ICA MAXI card 4321 12480.25— reference number and running balance included. A tidy three-column export gives you a clean merchant name instead. Either way you can edit any description in the preview, and auto-categorization rules will rename them for you on every future import. - A header row is skipped if the first line has no date in it. Only the first line — a summary or balance row further down is reported rather than ignored.
Because it reads content rather than headings, the column order doesn't matter and the headings can say anything (or be missing). What matters is that each row has a date and an amount somewhere in it.
Tips
- Sign convention. If your bank exports debits as positive numbers and credits as negative (or vice versa), check the preview before confirming. The amount sign should match BudgetLabs's expectation: positive for income, positive for expense (the type tells the app the direction).
- Refunds and reimbursements are negative expenses. A refund belongs in the category the original purchase came out of, entered as a negative amount — that credits the money back and lowers what you've spent there. Negative amounts show in green in the preview. Put it in an income category only if it isn't offsetting a purchase you already logged.
- The "Refund" tag. A negative amount in an expense category shows a quiet grey Refund tag. It's a label, not an error — the row is already correct, so there's nothing to do. Tap it only when your bank's sign convention leaked through and the row is actually spending. Negative income, by contrast, gets an amber Flip sign? warning with an explanation, because income is always stored positive and that one does need fixing.
- Date format.
YYYY-MM-DD,MM/DD/YYYY,DD/MM/YYYY, andDD.MM.YYYYare all read correctly — see "Number and date formats outside the US" below for how day-first files are detected. - Copy only the columns you want. Because you're pasting rather than handing over a file, you can select just the date, description, and amount columns in your spreadsheet and leave the reference numbers and running balance behind. It's the quickest way to get clean merchant names, and it's the one thing an upload flow wouldn't let you do.
- One account at a time. If you have multiple accounts, import them one CSV at a time so duplicates are easier to spot.
- Remaining balances update as you go. On desktop each category option shows what's left for that row's month —
Groceries — $113 left. The figures account for the rows you've already assigned in this preview, not just what's saved, so you can see which categories still have room while you work down the list. The row you're assigning doesn't count against itself: its figures show the headroom available for that transaction. - Cleaner merchant names. Mobile-wallet and POS clutter (
Aplpay Meijer Store,Tst* Deckers,Sq *Boulevard Lounge) is stripped automatically in the preview, so you see Meijer Store, Deckers, Boulevard Lounge. The raw text stays on the "Original:" line and is kept for deduplication.
Number and date formats outside the US
BudgetLabs reads the format from the file itself rather than assuming US conventions, so a European bank export works without editing it first.
- Decimal commas and grouped thousands.
-295,50,-1 250,00(including a non-breaking space),-1.234,56, and1,234.56all parse to the right amount. Currency markers —kr,€,£,$,SEK— are ignored. - Semicolon and tab delimiters. Semicolon-delimited exports (the norm across much of Europe, because the comma is already the decimal point) are detected automatically, as are tab-separated pastes straight out of a spreadsheet.
- Quoted fields. Standard quoted CSV —
"2026-08-01","NETFLIX","-15.99"— is read properly, including commas inside a quoted description. - Day-first dates. A file is read as day-first as soon as any date settles it
(a day past the 12th, or dotted
02.08.2026). When every date in the file could be read either way —02/08/2026and11/08/2026are both legal in either order — BudgetLabs falls back to your device's regional settings rather than guessing. Check the parsed dates in the preview if your file is short.
Nothing is dropped in silence. If a row can't be read — a running-balance line, a summary row, a line missing a date or amount — you get a notice saying how many rows were skipped and where the first one is, instead of a preview that quietly holds fewer transactions than the file did.
Spreading a charge across months
A big annual or semi-annual charge — insurance, a membership, a tax bill — can be spread at import instead of after. Tap the calendar icon on the row, set the number of months (2–60), and the preview shows the per-month share. On import the charge is split across that many budget months starting from the row's budget month, exactly as amortizing from the transaction detail would.
Rows being split across categories can't also be amortized — pick one.
Refresh with rules
Rules you add or delete mid-session don't reach a preview that's already loaded — matching happens when the rows are parsed. Refresh with rules re-applies your current rules to everything on screen.
It rebuilds each row from its original bank description first, which is what lets a deleted rule's rename fall away. That also means anything you renamed or categorized by hand in this preview gets reset, so it asks first. Splits, duplicates, and ignored rows are left untouched.
Duplicate detection
The import compares each row against existing transactions on date + amount + description. Likely duplicates are excluded from the batch by default. You can override individual exclusions in the preview.
Splitting a transaction at import
If an imported row spans multiple categories, click the Split icon (the branching-arrow icon next to the Ignore button) in the preview to split it before saving. Type an amount into the first sub-row; the second auto-fills as the remainder. See the AI bank statement import article for the full step-by-step.
When CSV isn't the right tool
Both modes take pasted text, so the question isn't paste vs upload — it's whether your rows are delimited.
- Statement text that isn't in columns — a PDF copy-paste, a screen scrape, a wall of text where the date, merchant, and amount aren't separated by anything consistent. Use Smart Import; it's looser about format.
- A PDF, screenshot, or an email you'd rather not retype — Smart Import
is also the only mode with a file drop zone. It accepts PDF, PNG, JPEG, WebP,
and dragged-in
.emlmessages. (It does not accept.csvfiles — for those, open the file and paste the rows.) - Receipts — use the Receipt scanning flow.
Paste CSV has no daily limit, so when your export is properly delimited it's the cheaper choice as well as the faster one.
Free vs Pro limits
CSV import itself is unlimited on both Free and Pro. The limit applies to Smart Import (the AI-powered parser) — Free includes 1 import per day; Pro lifts the cap.