Import CSV Data

You can import data from a CSV file into a selected writable sheet. Choose the sheet in the import screen, select the CSV file, review any categories that need your attention, check the expense and income counts, then import.

If you are importing an Expenses export, unzip the archive first and select the CSV file. For an export with multiple sheets, import each CSV separately into the sheet you want to use.

Expenses resolves categories, merchants, paid-by values, currencies, and exchange rate settings for each row before creating the imported items. If you import many rows at once, each row keeps the category and other values matched from that row.

The CSV must include a header row and use commas or semicolons as separators. Column names can use spaces, hyphens, or underscores, and matching is case-insensitive.

The CSV file should have the following columns:

Required columns:

  • Date (String)
    yyyy-MM-dd, yyyy-MM-dd HH:mm, yyyy-MM-dd HH:mm:ss, yyyy-MM-dd HH:mm:ssZ, or yyyy-MM-dd'T'HH:mm:ssZ format. If parsing fails, the date defaults to the current time.

  • Category (String)
    Names are trimmed and matched case-insensitively against existing, non-deleted categories. Positive amounts are matched against income categories. Negative amounts and zero are matched against expense categories. An empty value uses No Category for that transaction type when available. Unknown names, duplicate matching names, and names that only match the opposite transaction type need review before you can import. See Review Categories below.

  • Amount (Number)

Negative values are expenses; positive values are income. If empty or invalid, it is treated as 0 (expense). Older files can use Price instead. If both columns exist, Expenses uses Amount. If you need to use , as a decimal separator in a comma-separated file, wrap the value with double quotes like "-12,34".

  • Notes (String)
    The value can be empty, but the column must exist.

Optional columns:

  • Currency (String)
    If missing or empty, it uses the sheet currency. Values are uppercased.

  • Rate (Double)
    Fixed exchange rate. Only positive values are used. Ignored if Currency matches the sheet currency.

  • Rate Type (String)
    Case-insensitive; spaces or hyphens are treated like underscores. Allowed values: auto_refresh, custom, default.

  • Merchant (String)
    Useful for tracking where a transaction happened. The value is trimmed before importing. Existing merchant names are matched case-insensitively so Expenses can reuse their saved casing. You can also use Merchant Name as the column header.

  • Paid By (String)
    Useful for shared sheets. The value is matched against sheet participants by name or record ID. You can also use Me for the current user. If the column is missing, the value is empty, or it doesn’t match a participant, the imported item is left unassigned. In non-shared sheets, this column is ignored.

  • Time Zone (String) An IANA time zone identifier such as America/Los_Angeles, Asia/Tokyo, or Europe/London. Expenses parses local date values in this time zone and saves it with the imported item. If the column is missing, empty, or invalid, Expenses uses the device’s current time zone.

  • Created at and Last edited at (String)

ISO 8601 timestamps with a time zone, with or without fractional seconds, such as 2026-09-29T01:23:45.678Z or 2026-09-29T01:23:45Z. Expenses preserves these as the record’s creation and last edit times. They are separate from Date, which is the transaction date. If Created at is missing or empty, Expenses uses the import time. If Last edited at is missing or empty, it uses Created at when supplied, otherwise the import time. An invalid, non-empty timestamp prevents the file from importing; correct it or leave the value empty and select the file again.

The selected sheet controls the default currency, exchange rate defaults, available participants, and merchant matching for the imported rows.

Exchange rate behavior (when Currency differs from the sheet currency):

  • Rate Type = auto_refresh: always use auto-refresh.
  • Rate Type = custom: use Rate if provided; otherwise auto-refresh.
  • Rate Type = default: use Rate if provided; otherwise use the sheet reference rate.
  • Rate Type empty: use Rate if provided; otherwise use the sheet reference rate.

Review Categories

If Expenses shows Review Categories, open it and resolve each listed category. You can choose an existing category or create a new one for an unknown, non-empty name. When the name matches a category of the opposite transaction type, you can choose that category to correct the transaction type for the affected rows.

Your choice applies to all unresolved rows with the same category name and transaction type. Import becomes available once every row has a category and a destination sheet is selected.

What CSV Imports Restore

Imports add new transactions to the selected sheet. They do not update or merge existing transactions, so importing the same file again creates duplicates.

CSV imports do not restore attached images from the Image column or an exported Images folder. They also do not restore repeating schedules or pending status. Imported transactions are saved as non-pending items.

Example

Date,Category,Amount,Currency,Rate,Rate Type,Notes,Merchant,Paid By,Time Zone,Created at,Last edited at
2026-09-29 09:00,Groceries,-1000.0,JPY,,default,Weekly shopping,Supermarket,Alice,Asia/Tokyo,2026-09-29T00:05:00.000Z,2026-09-29T00:10:00.000Z
2026-09-28 17:00,Salary,2500.0,USD,1.08,custom,Monthly salary,Company,,America/Los_Angeles,,
2026-09-27 08:30,Transport,-300.0,,,,,Metro,Me,Europe/London,,

Category names in this example need to match your existing categories or be resolved during category review.

If you still have questions, we're here to help. Please get in touch and we'll respond shortly.