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 the expense and income counts, then import.
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. 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, oryyyy-MM-dd'T'HH:mm:ssZformat. If parsing fails, the date defaults to the current time. -
Category(String)
Matching is case-insensitive. If not found, Expenses falls back toNo Categorywhen available; otherwise it uses the first category for the flow type. Positive prices are matched against income categories. Negative prices and zero are matched against expense categories. -
Price(Double)
-: expense,+: income. If empty or invalid, it is treated as0(expense). If you need to use,as a decimal separator, 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 ifCurrencymatches 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 useMerchant Nameas 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 useMefor 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.
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: useRateif provided; otherwise auto-refresh.Rate Type = default: useRateif provided; otherwise use the sheet reference rate.Rate Typeempty: useRateif provided; otherwise use the sheet reference rate.
Example:
Date,Category,Price,Currency,Rate,Rate Type,Notes,Merchant,Paid By
2024-03-31,Groceries,-1000.0,JPY,,default,Weekly shopping,Supermarket,Alice
2024-03-30,Salary,2500.0,USD,1.08,custom,Monthly salary,Company,
2024-03-29,Transport,-300.0,,,,,Metro,Me
...
┏━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━┓
┃ ┃ Date ┃ Category ┃ Price ┃ Currency ┃ Rate Type ┃ Notes ┃ Merchant ┃ Paid By ┃
┡━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━┩
│ │ 2024-03-31 │ Groceries │ -1,000.0 │ JPY │ default │ Weekly shopping │ Supermarket │ Alice │
│ │ 2024-03-30 │ Salary │ 2,500.0 │ USD │ custom │ Monthly salary │ Company │ │
│ │ 2024-03-29 │ Transport │ -300.0 │ │ │ │ Metro │ Me │
...
If you still have questions, we're here to help. Please get in touch and we'll respond shortly.