New: connect Claude or ChatGPT to your Let's Save data with our MCP connector.See how it works ->
Same columns, every time!
$
Import format / v2

One spreadsheet layout, no mapping.

Put 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.

march-statement.csv
Format version 2
C1
amountRequiredNegative for money out, positive for money in. A dot for decimals, at most two, and no currency symbol or thousands separator.
ABCDEFGHIJKLM
1
22026-03-01Salary March3250.00EverydaySalaryAcme LtdTXN-0001
32026-03-02Groceries-54.20EverydayFood/GroceriesGreen Marketweekly;foodTXN-0002
42026-03-03Coffee-3.80EverydayCorner CafetrueTXN-0003
52026-03-05Move to savings-200.00EverydayMonthly savingTXN-0004SavingsT-1
62026-03-05From Everyday200.00SavingsEverydayT-1
72026-03-12Cinema-45.00VisaFunCity Cinema
Click a column to see what goes in itRequiredOptional

From statement to ledger in three steps

  1. 01

    Get your statement

    Any bank, any card, or another app's export. A PDF, a spreadsheet or a CSV all work as a starting point.

  2. 02

    Put it in the format

    Fill the template yourself, or hand the statement and the guide to Claude, ChatGPT or another assistant.

  3. 03

    Import it

    Let's Save recognises the header row and skips the mapping step. Review the rows, then import.

The columns

The first row holds the column names, exactly as written here. Any order. Leave out the optional ones you have nothing for.

  • An Excel workbook, with a sheet for each part of a move, or one CSV file of transactions in UTF-8 with commas.
  • The first row of each sheet holds the column names, lower case, in any order.
  • One row per transaction. No titles, totals or blank rows.

Required

Every row needs these three.

date

The date the money moved, as YYYY-MM-DD, for example 2026-03-01.

Example2026-03-01
description

The statement's text for the transaction, up to 200 characters.

ExampleSalary March
amount

Negative for money out, positive for money in. A dot for decimals, at most two, and no currency symbol or thousands separator.

Example3250.00

Optional

Add any of these when the statement has them.

currency

A three-letter code such as USD or EUR, only when the row was paid in a different currency from its account's.

account

The account's name from the Accounts sheet, whenever there is more than one account.

ExampleEveryday
category

A category from the Categories sheet or one you already use, or Parent/Child for a subcategory. Empty goes to Other. Never on a transfer.

ExampleSalary
payee

The merchant or person on the other side.

ExampleAcme Ltd
notes

Anything else you want to keep.

ExampleMonthly saving
labels

Tags separated by semicolons, for example work;travel.

Exampleweekly;food
pending

true for a transaction that has not cleared yet.

Exampletrue
reference

The statement's own transaction number, so importing the same statement twice skips the repeats.

ExampleTXN-0001
transfer_account

For money moved between your own accounts: the other account's name.

ExampleSavings
transfer_id

The same short id on both rows of one transfer, when your export has a row in each account. It ties them together exactly.

ExampleT-1

Moving from another app

The 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.

Accounts

Accounts

One row per account, with today's balance as your old app shows it.

nameRequired

The account's name. The other sheets use exactly this name.

Everyday
typeRequired

bank, cash, card, investment or loan.

bank
currencyRequired

The account's three-letter currency code, such as USD.

USD
closing_balanceRequired

Today's balance as your old app shows it. Negative for a card or loan that owes money.

4492.00
closing_date

The date of that balance, when it is not today.

2026-03-31
opening_balance

The balance before the account's first transaction. With it, the import checks the account adds up.

1500.00
last4

The last two to four digits of the account number, never more.

4321

Categories

Categories

One row per category your old app used. Ones you already have are reused, the rest are created, and you see which is which first.

nameRequired

The category's name, as your old app wrote it. Never Transfer.

Salary
typeRequired

income or expense.

income
parent

For a subcategory, the name of its parent category.

Food

Recurring

Recurring

Payments your old app had scheduled. Each starts on its next date, so nothing already imported is posted twice.

accountRequired

The account it is paid from or into.

Everyday
typeRequired

income, expense or transfer.

expense
amountRequired

A positive amount in the account's currency.

1200.00
frequencyRequired

daily, weekly, monthly or yearly.

monthly
next_dateRequired

The next date it is due, after today.

2027-01-01
interval

Every how many periods. 1 when left empty.

day_of_month

For a monthly item, the day it falls on, or -1 for the last day.

1
description

What you will see it called.

Rent
category

As on the Transactions sheet. Not for a transfer.

Rent
transfer_account

For a transfer, the account the money goes to.

Savings
amount_to

For a transfer between two currencies, what arrives.

Goals

Goals

Savings goals from your old app.

nameRequired

The goal's name.

Emergency fund
target_amountRequired

The amount to reach, in your main currency.

10000.00
target_dateRequired

When you want to reach it.

2027-12-31
saved_amount

How much is already saved towards it.

5200.00
account

The account it saves in, so its progress follows that account.

Savings
start_date

When saving towards it began.

2026-01-01

Transfers are not income or spending

Paying 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.

  • Your export has a row in each account: keep both and give them the same transfer_id.
  • It has one row per transfer: write it once, on the account the money left.

Rules that keep an import clean

The same six rules an assistant is given. They are worth checking yourself before you import.

  1. 1

    One row per transaction. No balances, totals, titles or blank rows.

  2. 2

    Money out is negative, whatever the statement prints. On a card, a purchase is negative and a payment to the card is positive.

  3. 3

    Every date as YYYY-MM-DD, so there is never a question of day and month order.

  4. 4

    Leave a cell empty rather than guess. An empty category is fine.

  5. 5

    For every account, the opening balance plus its amounts should equal its closing balance.

  6. 6

    Never a full card or account number. The last four digits at most, like Visa 4321.

The check that catches mistakes

With the example rows above, for the Everyday account, which opened at 1500.00:

Opening balance1500.00
Sum of its amounts+2992.00
Closing balance4492.00
It adds up

If it does not, a row is missing, doubled or has the wrong sign, or a transfer was written as income and spending.

Using an AI assistant

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.

A prompt to paste

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

Upload the file

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.

Let a connected assistant send it

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 guide, as Markdown

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.
View Markdown

Keep it private

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.

Open Import in the app