BudgetViz Transactions screenshot

What Is CSV Import & Export?

BudgetViz uses a simple CSV (Comma-Separated Values) format for transferring transactions in and out of the app. This is separate from the full backup & restore feature, which saves and restores the entire database.

info

Import is designed for bulk-adding new transactions — for example, converting a bank statement export into the BudgetViz format and importing it all at once. Before anything is saved, BudgetViz checks for overlaps with your existing transactions so you stay in control. Export is designed for getting your transaction data out — into Excel, Google Sheets, or other financial tools.

warning

Not a backup and restore replacement: CSV import/export handles individual transactions only — it does not include accounts, categories, budgets, portfolios, or other app data. For full backups and restore functionality, use the dedicated Backup & Restore feature in the app, which saves and restores your entire database.

The CSV file uses a header row to identify columns. Only Timestamp and Amount are required — all other columns are optional. The importer is flexible: columns can appear in any order, and unrecognized columns are simply ignored.

How to Import Transactions

Prepare your CSV file with the appropriate headers, then import it through the app. BudgetViz will check for duplicates and similar transactions before saving anything, giving you a chance to review everything first.

1

Prepare your CSV file

Create a CSV file with a header row. At minimum, include the Timestamp and Amount columns. Add any other supported columns as needed. Column names are case-insensitive.

2

Transfer the file to your device

Copy the CSV file to your Android device — via cloud storage, email, USB, or any file transfer method you prefer.

3

Pick your CSV file in BudgetViz

Open the app, go to Import & Export, and tap Import. Select your CSV file. BudgetViz reads the file and checks the format — if anything is wrong, you'll see an error message pointing to the exact line that needs fixing.

4

Review and confirm

Once the file is read successfully, BudgetViz opens a review screen where it compares every imported row against your existing transactions. You decide what happens with each one — import it, skip it, or merge it with an existing transaction. Nothing is saved until you confirm. See Reviewing Your Import below for the full details.

lightbulb

Share directly into BudgetViz: You can also share CSV text from another app (such as a text editor or email) directly into BudgetViz using the Android share menu. The same review process applies — you'll always get a chance to check everything before it's saved.

Minimal Example

Here's the simplest valid CSV — only the two required columns:

minimal.csv
Timestamp,Amount
2025-01-15 09:30:00,-45.50
2025-01-16 13:00:00,2500.00
2025-01-17,-12.99

With just these two columns, BudgetViz will automatically infer the transaction type from the amount sign (negative = expense, positive = income) and assign the default category and account.

Full Example

A more complete CSV using all available columns:

full-example.csv
Timestamp,Amount,Type,MainCategory,SubCategory,Description,Tags,Notes,Account,OriginalCurrencyAmount,OriginalCurrencyCode
2025-01-15 09:30:00,-45.50,EXPENSE,Food,Groceries,Weekly shop,household|essentials,Bought organic produce,Checking Account,,
2025-01-16 13:00:00,2500.00,INCOME,Salary,,January salary,work,,Checking Account,,
2025-01-20 18:45:00,-89.00,EXPENSE,Dining,Restaurants,Dinner at Bella Italia,dining|date-night,Anniversary dinner,Credit Card,-9.50,EUR

Reviewing Your Import

Before any imported transactions are saved, BudgetViz compares them against your existing data and opens a review screen. This means you never have to worry about accidentally creating duplicates — you're always in control of what gets added or changed.

How Transactions Are Matched

BudgetViz looks at each row in your CSV and tries to find a match among the transactions you already have. Based on how closely they match, each imported row falls into one of three groups:

content_copy

Exact duplicates

These are rows that are identical to a transaction you already have — same amount, date, description, category, and account. They are set to Skip by default, since you most likely don't want to import them again. You can still choose to import them if needed.

compare_arrows

Possible matches

These are rows that look similar to an existing transaction but aren't identical — for example, the amount and date match but the description is slightly different, or there's a small difference in timing. BudgetViz flags these for your review and shows you the existing transaction it found alongside the imported one, so you can decide what to do.

add_circle

New transactions

These are rows with no plausible match in your existing data. They are set to Import by default. You can also choose to skip any of them if you don't want to add them.

What You Can Do with Each Transaction

For possible matches, you have four choices. Exact duplicates and new transactions offer the same options, though their defaults differ.

block

Skip

Discard the imported row and leave your existing transaction as-is. Nothing changes.

merge

Merge

Update the existing transaction with the data from the CSV, but keep the personal details you've already added — your tags, notes, category, and subcategory are preserved. Only the "bank side" of the transaction (amount, date, description) is updated from the CSV. This is useful when the CSV has more accurate or more recent data from your bank, but you don't want to lose the categorization work you've already done.

swap_horiz

Overwrite

Replace the existing transaction with the CSV data more broadly. The CSV values take priority, but if a field in the CSV is empty, the existing value is kept. Certain protected fields like recurring schedules and transfer links are never overwritten.

add

Import as new

Ignore the match entirely and add the CSV row as a brand-new transaction, even if a similar one already exists. Use this when two transactions genuinely look alike but are separate purchases.

lightbulb

Multiple match candidates: Sometimes an imported row is similar to more than one existing transaction. When that happens, BudgetViz shows you all the candidates ranked by how closely they match. You can switch between them to pick the right one before choosing Merge or Overwrite.

Groups of Similar Transactions

When several imported rows and several existing transactions are all very similar to each other — for example, you buy the same coffee every day and the CSV contains a week's worth — BudgetViz groups them together rather than trying to guess which specific import row matches which specific existing transaction.

For these groups, you can choose to:

playlist_add

Keep existing and import the rest

Leave your existing transactions untouched and only import the ones that appear to be genuinely new. For example, if you already have 3 coffee purchases and the CSV contains 5, BudgetViz imports only the 2 new ones. This is the default.

sync

Replace all

Remove all existing transactions in the group and import all the CSV rows as new transactions. Useful if your bank data is more reliable than what you currently have.

block

Skip all

Discard all the CSV rows in this group and keep your existing transactions unchanged.

open_in_full

Review individually

Break the group apart into individual rows so you can decide what to do with each one separately.

Filtering by Date

If your CSV covers a long time period but you only want to import a portion of it, you can narrow the view to a specific date range. Tap the filter button at the top of the review screen to pick a start and end date. Only the transactions within that range will be shown and processed when you confirm — everything outside the range is left out.

Bulk Actions

When you have a large import, you don't have to go through every row one by one. The overflow menu (three dots) offers shortcuts to apply the same action to entire groups at once — for example, merge all possible matches, skip all possible matches, import all new transactions, or skip all new transactions. You can always adjust individual rows afterwards.

Confirming the Import

A summary bar at the bottom of the review screen keeps a running count of what will happen — how many transactions will be imported, merged, overwritten, or skipped. When you're satisfied, tap Confirm. BudgetViz shows you a final summary of all the changes before applying them. Nothing is saved until you give the final confirmation.

info

Changing categories during review: You can also change the category of any imported transaction right from the review screen — just tap the category to pick a different one. This saves you from having to re-categorize transactions after they're imported.

warning

Conflict protection: BudgetViz prevents two imported rows from targeting the same existing transaction. If you try to merge or overwrite an existing transaction that's already claimed by another import row, you'll see a warning and the action won't be applied. This ensures every existing transaction can only be modified by one import row at a time.

Column Reference

The table below lists every column the importer recognizes. Column names in the header row are case-insensitive (e.g., timestamp, Timestamp, and TIMESTAMP all work). Columns can appear in any order.

Column Required Description Example
Timestamp Required Date and time of the transaction. Many formats are accepted — see Date Formats below. 2025-01-15 09:30:00
Amount Required Transaction amount. Supports various number formats, currency symbols, and locale conventions — see Amount Formats below. Use a negative value for expenses. -45.50
Type Optional Transaction type: INCOME, EXPENSE, or TRANSFER (case-insensitive). If omitted, the type is inferred from the amount sign: negative = expense, zero or positive = income. When provided, the amount sign is enforced to match the type. EXPENSE
MainCategory Optional Name of the main category. Must match an existing category in BudgetViz. If not found or omitted, the default category is used. Food
SubCategory Optional Name of the subcategory (under the matched main category). If not found or omitted, the default subcategory for the resolved main category is used. Groceries
Description Optional Free-text description of the transaction. Weekly grocery shop
Tags Optional One or more tags, separated by the pipe character |. household|essentials
Notes Optional Additional notes or comments about the transaction. Bought organic produce
Account Optional Name of the account. Must match an existing account in BudgetViz. If not found or omitted, the default account is used. Checking Account
OriginalCurrencyAmount Optional If the transaction was made in a different currency, this is the original amount. Both this and OriginalCurrencyCode must be present for the original currency to be recorded. -9.50
OriginalCurrencyCode Optional ISO 4217 currency code for the original currency (e.g., EUR, USD, GBP). Both this and OriginalCurrencyAmount must be present for the original currency to be recorded. EUR
lightbulb

Category & account matching: The importer matches category, subcategory, and account names against what you already have set up in BudgetViz. If a name doesn't match, the importer gracefully falls back to the default. Make sure the names in your CSV match your BudgetViz categories and accounts exactly.

Date & Amount Formats

Date & Time Formats

The Timestamp column accepts many common date and date-time formats. If only a date is provided (without a time component), midnight (00:00:00) is used as the time.

check_circle ISO & Standard

2025-01-15T09:30:00 2025-01-15 09:30:00 2025-01-15 09:30 2025-01-15

check_circle US Format

01/15/2025 13:30:00 01/15/2025 13:30 01/15/2025 01:30:00 PM 01/15/2025 01:30 PM 01/15/2025

check_circle Dot-Separated

2025.01.15 09:30:00 2025.01.15

check_circle Named Month

15-Jan-2025 15-Jan-2025 09:30:00
lightbulb

Recommended format: Use yyyy-MM-dd HH:mm:ss (e.g., 2025-01-15 13:30:00) for maximum clarity and compatibility. This is also the format used when exporting from BudgetViz. Most formats use 24-hour notation. The US date format (MM/dd/yyyy) also accepts 12-hour time with an AM/PM suffix (e.g., 01/15/2025 09:30 PM).

Amount Formats

The Amount column is flexible and handles a wide range of locale-specific number formats, thousand separators, and even currency symbols (which are stripped automatically).

check_circle Standard

1234.56 -1234.56 +1234.56

check_circle US Grouping

1,234.56 1,234,567.89

check_circle European

1.234,56 1.234.567,89 12,99

check_circle Other Separators

1 234.56 1'234.56

check_circle With Currency Symbols

$1,234.56 1.234,56€ 150 kr RM 500

check_circle Trailing Minus

1234.56-

Some bank formats place the minus sign at the end

warning

Ambiguous amounts: A value like 1,234 is interpreted as one thousand two hundred thirty-four (the comma is treated as a thousand separator since it is followed by exactly three digits). A value like 1,23 is interpreted as 1.23 (the comma is treated as a decimal separator). To avoid ambiguity, use the standard decimal point format (e.g., 1234.00).

Exporting Transactions

When you export transactions from BudgetViz, the app writes a standard CSV file containing all the columns listed in the Column Reference above. The exported file uses these conventions:

description

Standard CSV format

The file includes a header row with all column names, followed by one row per transaction. Values are comma-separated and quoted where necessary.

schedule

Timestamps in yyyy-MM-dd HH:mm:ss format

All dates are exported in the unambiguous yyyy-MM-dd HH:mm:ss format, using your device's time zone.

money_off

Amounts as plain numbers

Amounts are exported as plain decimal numbers with no currency symbols or thousand separators (e.g., -45.5).

sell

Tags joined with pipes

Multiple tags are joined with the pipe character | (e.g., household|essentials).

block

Unpaid transactions excluded

Scheduled transactions that haven't been paid yet are excluded from the export. Only realized transactions are included.

label_off

Default subcategories omitted

If a transaction uses the default subcategory, the SubCategory field is left empty in the export to keep the file clean.

The exported CSV is fully compatible with the import format — you can export from one device and import into another, or edit the file in a spreadsheet application and re-import it.

lightbulb

Safe to re-import: If you re-import an exported file on the same device, the review screen will flag the rows as exact duplicates and default to skipping them, so no accidental duplicates will be created. The export/import function is still not meant as a backup and restore replacement — there is a separate dedicated function for that purpose.

Tips for Successful Imports

Converting Bank Statements

Most banks offer CSV or Excel exports of your account statements. These won't match the BudgetViz format directly, but you can transform them with a spreadsheet or a simple script. The key steps are typically: rename or map columns to the BudgetViz column names, ensure the date format is one of the supported formats, and make sure amounts use a recognizable number format.

Handling Errors

If a row in your CSV has invalid data, the importer will report the error with the exact line number before the review screen opens. Common issues include unrecognized date formats, non-numeric amount values, and invalid transaction types. Fix the reported line and re-import. Once the file passes validation, all further decisions happen in the review screen.

info

Type inference: If you leave out the Type column entirely, BudgetViz will automatically classify transactions as expenses (negative amounts) or income (zero or positive amounts). This can simplify your CSV significantly.

Original Currency Fields

The OriginalCurrencyAmount and OriginalCurrencyCode fields are designed for transactions made in a foreign currency. For example, if your account is in SEK but you made a purchase in EUR, set the main Amount to the SEK value and use the original currency fields for the EUR amount. Both fields must be present and valid for the original currency information to be recorded — if either is missing or invalid, the original currency data is simply skipped.

Working with Large Imports

When importing many transactions at once — say, several months of bank statements — the review screen makes it easy to stay in control. Use the date filter to focus on one month at a time, and use the bulk actions in the overflow menu to quickly handle large groups of new transactions or possible matches. You can always fine-tune individual rows afterwards.

Automation

Because the format is simple and well-defined, you can build automation scripts or tools that convert exports from your bank, brokerage, or other financial service into the BudgetViz CSV format. This makes bulk-importing new transactions fast and repeatable.

Smart Category Assignment

BudgetViz can automatically assign categories to imported transactions using a built-in machine-learning model that learns from your existing transaction history. This is especially useful for bulk imports where manually categorizing every transaction would be tedious.

How It Works

When auto-categorization is enabled, the importer checks each incoming transaction. If a transaction would land in the default (uncategorized) category — either because the CSV didn't include a MainCategory column or because the specified category wasn't found — BudgetViz analyzes the transaction's Description field and compares it against patterns it has learned from your previously categorized transactions.

The model uses a technique called Naive Bayes classification with TF-IDF-inspired word scoring. In plain terms: it looks at the words in the description, checks which categories those words have appeared in before, and picks the most likely match. It predicts both a main category and a subcategory independently.

lightbulb

Enabling the feature: Auto-categorization is controlled by a setting in the app. Go to Settings → Auto-assign categories to toggle it on or off. When disabled, imported transactions without a valid category simply use the default category as usual.

Confidence Thresholds

To avoid incorrect assignments, BudgetViz only applies a suggestion when the model is sufficiently confident. A category and a subcategory suggestion must meet certain confidence thresholds. If either threshold isn't met, the transaction keeps the default category or default subcategory respectively.

Advantages

speed

Saves time on bulk imports

When importing dozens or hundreds of transactions from a bank statement, you don't need to manually categorize each one — the model handles the ones it recognizes.

trending_up

Gets smarter over time

The model is trained on your own transaction history. The more categorized transactions you have, the more accurate the predictions become. It learns your spending patterns, not generic ones.

shield

Conservative by design

The confidence thresholds mean the model only assigns a category when it's reasonably sure. Low-confidence guesses are left as uncategorized so you can review them yourself.

lock

Fully on-device

The model runs entirely on your device — no data is sent to external servers. It's built from your local transaction history and stays private.

Limitations

warning

New users & small datasets: If you're just getting started with BudgetViz and have few categorized transactions, the model won't have enough data to make reliable predictions. You'll see the biggest improvement once you have at least 50 or more categorized transactions with descriptions. Until then, expect most imports to land in the default category.

A few other things to keep in mind:

text_fields

Requires a description

The model works by analyzing the Description field. If a transaction has no description (or the description is empty), auto-categorization has nothing to work with and the transaction will use the default category.

translate

Language and word patterns matter

The model tokenizes descriptions into individual words. It works best when your imported descriptions use similar wording to your existing transactions. Mixing languages or using very different description styles may reduce accuracy.

edit

Won't override explicit categories

Auto-categorization only kicks in when a transaction would otherwise be uncategorized. If your CSV includes a valid MainCategory that matches an existing category in the app, that explicit assignment is always respected.

arrow_upward Back to top