dateThe date the money moved, as YYYY-MM-DD, for example 2026-03-01.
2026-03-01Put your transactions in these columns and Let's Save reads them straight away. Fill the template yourself, or ask an AI assistant to turn a bank statement, or your whole history from another app, into it for you.
amountRequiredNegative for money out, positive for money in. A dot for decimals, at most two, and no currency symbol or thousands separator.Any bank, any card, or another app's export. A PDF, a spreadsheet or a CSV all work as a starting point.
Fill the template yourself, or hand the statement and the guide to Claude, ChatGPT or another assistant.
Let's Save recognises the header row and skips the mapping step. Review the rows, then import.
The first row holds the column names, exactly as written here. Any order. Leave out the optional ones you have nothing for.
Every row needs these three.
dateThe date the money moved, as YYYY-MM-DD, for example 2026-03-01.
2026-03-01descriptionThe statement's text for the transaction, up to 200 characters.
Salary MarchamountNegative for money out, positive for money in. A dot for decimals, at most two, and no currency symbol or thousands separator.
3250.00Add any of these when the statement has them.
currencyA three-letter code such as USD or EUR, only when the row was paid in a different currency from its account's.
accountThe account's name from the Accounts sheet, whenever there is more than one account.
EverydaycategoryA category from the Categories sheet or one you already use, or Parent/Child for a subcategory. Empty goes to Other. Never on a transfer.
SalarypayeeThe merchant or person on the other side.
Acme LtdnotesAnything else you want to keep.
Monthly savinglabelsTags separated by semicolons, for example work;travel.
weekly;foodpendingtrue for a transaction that has not cleared yet.
truereferenceThe statement's own transaction number, so importing the same statement twice skips the repeats.
TXN-0001transfer_accountFor money moved between your own accounts: the other account's name.
Savingstransfer_idThe same short id on both rows of one transfer, when your export has a row in each account. It ties them together exactly.
T-1The Excel template has a sheet for each part of a move. Fill them in this order and your accounts, categories, transactions, transfers, schedules and goals all come across in one import you approve once.
Accounts first, then categories, then transactions and transfers, then scheduled payments and goals.
AccountsOne row per account, with today's balance as your old app shows it.
nameRequiredThe account's name. The other sheets use exactly this name.
EverydaytypeRequiredbank, cash, card, investment or loan.
bankcurrencyRequiredThe account's three-letter currency code, such as USD.
USDclosing_balanceRequiredToday's balance as your old app shows it. Negative for a card or loan that owes money.
4492.00closing_dateThe date of that balance, when it is not today.
2026-03-31opening_balanceThe balance before the account's first transaction. With it, the import checks the account adds up.
1500.00last4The last two to four digits of the account number, never more.
4321CategoriesOne row per category your old app used. Ones you already have are reused, the rest are created, and you see which is which first.
nameRequiredThe category's name, as your old app wrote it. Never Transfer.
SalarytypeRequiredincome or expense.
incomeparentFor a subcategory, the name of its parent category.
FoodRecurringPayments your old app had scheduled. Each starts on its next date, so nothing already imported is posted twice.
accountRequiredThe account it is paid from or into.
EverydaytypeRequiredincome, expense or transfer.
expenseamountRequiredA positive amount in the account's currency.
1200.00frequencyRequireddaily, weekly, monthly or yearly.
monthlynext_dateRequiredThe next date it is due, after today.
2027-01-01intervalEvery how many periods. 1 when left empty.
day_of_monthFor a monthly item, the day it falls on, or -1 for the last day.
1descriptionWhat you will see it called.
RentcategoryAs on the Transactions sheet. Not for a transfer.
Renttransfer_accountFor a transfer, the account the money goes to.
Savingsamount_toFor a transfer between two currencies, what arrives.
GoalsSavings goals from your old app.
nameRequiredThe goal's name.
Emergency fundtarget_amountRequiredThe amount to reach, in your main currency.
10000.00target_dateRequiredWhen you want to reach it.
2027-12-31saved_amountHow much is already saved towards it.
5200.00accountThe account it saves in, so its progress follows that account.
Savingsstart_dateWhen saving towards it began.
2026-01-01Paying off a card, moving money to savings, funding a deposit: money moved between your own accounts is a transfer. Give it a transfer_account and no category.
The same six rules an assistant is given. They are worth checking yourself before you import.
One row per transaction. No balances, totals, titles or blank rows.
Money out is negative, whatever the statement prints. On a card, a purchase is negative and a payment to the card is positive.
Every date as YYYY-MM-DD, so there is never a question of day and month order.
Leave a cell empty rather than guess. An empty category is fine.
For every account, the opening balance plus its amounts should equal its closing balance.
Never a full card or account number. The last four digits at most, like Visa 4321.
With the example rows above, for the Everyday account, which opened at 1500.00:
If it does not, a row is missing, doubled or has the wrong sign, or a transfer was written as income and spending.
Claude, ChatGPT and others can read a statement or another app's export and write it in this format. Give them the guide with your files, then check the totals before you import.
Read my attached statement and turn it into a CSV in the Let's Save standard import format described at https://letssave.app/import/standard-format.md. Follow its rules exactly, check that the amounts add up to the statement's closing balance minus its opening balance, and keep at most the last 4 digits of any account number.
Two ways in
Open Import in the app and drop the file in. The mapping step is skipped. You review the accounts, categories, duplicates and transfers, then import everything at once, and you can undo it for 30 days.
If Claude or ChatGPT is connected to your account, it can send a statement, or a whole move from another app, as one request. Nothing is saved until you open it, review it and import it.
The rules on this page, written for an assistant to read. If yours cannot open links, copy the whole file into the chat instead.
1# Let's Save standard import format (version 2)
2
3This page is for people and for AI assistants (Claude, ChatGPT and others) turning a bank statement, a card statement, or a whole history from another money app into something Let's Save can import.
4
5A file in this format imports with no mapping step: Let's Save recognises the header rows and reads every column the same way every time.
6
7- Human-readable guide: https://letssave.app/import-format
8- Excel template: https://letssave.app/import/template.xlsx (one sheet per part of the move; the "Example" sheets show filled-in rows and are never imported)
9- CSV template: https://letssave.app/import/template.csv (the Transactions header only)
10
11There are two jobs this format does:
12
131. **One statement**: a single account's transactions. Use the Transactions sheet alone (or the CSV template).
142. **A move from another app**: every account, category, transaction, transfer, scheduled payment and goal, brought across in one import that the person approves once. Use the whole workbook.
Never keep a full card or account number in the file, only the last four digits. Use an assistant you trust with your statement, and delete the conversation afterwards if you prefer.