Some banks export usable CSVs. Some don't. AI bank statement import (sometimes called Smart Import) is the fallback for everything else — paste a block of statement text, drop in a PDF, or upload a screenshot, and the AI extracts a clean list of transactions you can review before saving.
When to use it
- Your bank's CSV is malformed or missing key columns.
- All you have is a PDF statement.
- You took a screenshot of a transaction list.
- You copied text out of a banking site that doesn't offer downloads.
If you have a clean CSV, CSV import is faster and more deterministic — use that instead.
Run an AI import
- Go to Transactions.
- Tap Import Transactions and choose AI mode (Smart Import).
- Paste the text or upload the PDF / image.
- Wait for the AI to parse — it returns a list of transactions with date, amount, description, and a suggested category.
- Review every row. Adjust amounts, fix descriptions, override categories where needed.
- Apply your auto-categorization rules if you want them to run.
- Confirm and import.
Email drop
If the receipt is sitting in your inbox, you don't have to copy-paste anything. Drag the email from your mail client (Outlook, Apple Mail, Gmail web — anything that lets you drag an email out) directly onto the Smart Import drop zone. We pull the body text, plus any image attachments through vision and any PDF attachments through text extraction. Counts as one Smart Import use, no matter how many attachments came along for the ride.
A few clients drop the email as an HTML payload instead of a file (Outlook on the web, Gmail web). That works too — same path, same result.
By default the source email is attached as the receipt for every transaction it produces — uncheck "Attach source as receipt to all imported transactions" in the preview if you'd rather not. The same auto-attach applies when you upload a PDF or image via Smart Import.
What gets extracted
For each row the AI returns:
- Date — usually the post date.
- Amount — positive number, with the sign inferred from context.
- Description — the cleaned merchant or counterparty.
- Suggested category — best guess based on the description; you decide whether to keep it.
Confidence scores are shown when the AI isn't certain — anything under "high" deserves a quick second look in the preview.
On desktop, the category dropdown for each row shows how much budget is left for that category in the row's month — e.g. Groceries — $150 left, or Lunch — over by $12 — so you can file each transaction against the right category without leaving the preview. If you create a new category from the dropdown ("Create New Category"), it becomes immediately selectable for that row's month.
Cleaner merchant names (Apple Pay, Square, Toast)
Mobile-wallet and point-of-sale charges arrive cluttered — Aplpay Meijer Store, Tst* Deckers, Sq *Boulevard Lounge, Aplpay Bp#3686458Sp. The merchant name is already in there; the Aplpay / Tst* / Sq* prefix and the trailing store number are just noise. BudgetLabs strips that automatically in the import preview, so you see Meijer Store, Deckers, Boulevard Lounge, and BP. The raw bank text is never thrown away — it appears on the small "Original:" line under the cleaned name and is stored with the transaction, so deduplication and your rename rules still match against it.
This is cosmetic cleanup of what the merchant already sent. It can't recover what you bought from an aggregator like Amazon.com or Apple.com/Bill — that item-level detail isn't in the bank feed at all.
How uploads work
When you upload a file, BudgetLabs picks the right path automatically:
- Digital PDFs (anything you downloaded from your bank's website) — text is extracted in the browser and only the cleaned text is sent to the AI. Cheap, fast, and works for the vast majority of bank statements.
- Scanned PDFs and images (photos, screenshots, paper statements you scanned) — each page is rendered as an image and sent to the vision-capable AI. Slower and counts the same against your daily limit, but handles everything text extraction can't.
Limits:
- 8 MB max per file.
- 10 pages max for the vision fallback. If a scanned PDF is longer, only the first 10 pages are processed.
- PDF, PNG, JPG, and WebP are supported.
Tips for clean results
- One statement per import. Mixing accounts confuses the parser.
- Crop screenshots tightly — extra UI chrome can be misread as transactions.
- For PDF statements, the searchable text version (not a scan) parses much more accurately.
Limits and pricing
Smart Import is one of the things Pro actually unlocks. Free users get 1 Smart Import per day — enough to try it. Pro lifts that cap. See Plans & billing for current pricing.
Privacy
The text or image you upload is sent to BudgetLabs's AI provider (xAI's Grok) for parsing. The provider does not retain it, and BudgetLabs doesn't store the source — only the structured transactions you confirm. Don't paste anything more than you need: account numbers and addresses don't help the parser.
Splitting a transaction at import
If one imported row spans multiple categories — say a $237.31 phone bill that's part business and part personal — you can split it right in the preview without saving it first:
- In the preview table, click the Split icon (the branching-arrow icon next to the Ignore button) on the row.
- Two sub-rows appear below the parent. Pick a category for each.
- Type a dollar amount into the first sub-row (e.g.
70). The second sub-row auto-fills as the remainder (e.g.167.31) so the splits always sum to the original amount. - Click + Add split to add a third (or more) category.
- Click Import and Close as usual. Each parent saves as a single transaction with per-category allocations — any attached receipt lands on the parent.
To split a transaction after import, open it in the Transactions list and use the split flow there — both routes produce the same end result.
How import deduplication works
BudgetLabs checks every row in the import preview against your existing transactions using both the raw bank description and any description you've manually edited. This means if you renamed "AMZN Mktp US*2X4B9" to "Amazon" last month, a new import of the same bank string still shows up as a possible duplicate — the dual-key check catches it even after a rename.
If the importer flags a row as a possible duplicate and you disagree, you can override it in the preview and import anyway.
Confirming a duplicate (and helping the matcher learn)
When a row is flagged as a "Possible Dup", you have two options:
- Import it anyway (default): leave the row in the preview and confirm as usual. BudgetLabs records this as implicit feedback that the suggestion was wrong.
- Confirm the duplicate: tap the green ✓ (checkmark) button on the badge. The badge changes to "Confirmed Duplicate" and the row is removed from the import count — it won't be saved when you confirm. BudgetLabs records your confirmation and uses it to tune the matcher over time.
A small accuracy line appears below the filter pills (for example, "Matcher accuracy: 87% (42 samples)") once you have at least 10 feedback samples. It reflects how often the duplicate detector's suggestions have matched your decisions.
Your confirmations and the incoming row's date, description, and amount are stored encrypted at rest. They are used only to improve duplicate detection — never shared with third parties. See the Privacy policy for details.
Adjust an amount before importing
Banks post the pre-tip charge — the table amount, not what you actually paid. If you need to correct a figure before it lands in your budget, click the amount cell directly in the preview table:
- A small popover opens. Enter the corrected amount (e.g.
55.00for a $45 charge with a $10 cash tip). - Optionally add a brief reason (e.g. "added $10 cash tip") so you know why the figure was changed.
- Click outside or press Escape to close, then import as usual.
BudgetLabs stores the original bank-reported amount in the background, so if you import the same statement again later the row is still detected as a duplicate — the dedup check uses the bank figure, not your edit. A +$X.XX · reason badge appears on the transaction row in the Dashboard and Transactions list after import.
You can also adjust the amount on any existing transaction from the Transactions list — see Transactions → Adjust the amount on a transaction for the full flow.
Auto-applied rename rules
If you've previously renamed a transaction, BudgetLabs saves a rule that applies your preferred name to future imports automatically. You only have to rename once — every subsequent import of the same merchant arrives already cleaned up. You can view and manage these rules in Settings → Rules.
Related
- CSV import — faster when your bank exports clean CSVs.
- Auto-categorization rules — apply during the AI import preview.
- Receipt scanning — for single-receipt OCR.