Daten importieren
Importing from a file
Diesen Artikel gibt es noch nicht in Ihrer Sprache, deshalb lesen Sie ihn in einer anderen.
Diese Übersetzung wurde automatisch erstellt und ist noch nicht geprüft.
Transfer your transaction history to ExtMoney from exports of other services — Mint, YNAB, Monarch, Wallet (BudgetBakers), Copilot, Quicken Simplifi, Finanzguru, Spendee and any bank that provides CSV.
Available only in the web version. Team members with the editor role or higher can upload files. Nothing is recorded until you confirm the preview.
How it works:
-
File Upload. Open “Import · Export” in the left menu and select a CSV file. You can choose a ready-made template (“Mint”, “YNAB register”, “Monarch”, “Wallet”) or manually map the file columns to the fields: date, amount (or income/expense), description, payee, category, account, currency. Your mapping can be saved as a template (“Save template”) — it will appear in the list of ready-made ones next time.
If income and expense are in different columns (many banks export this way), switch the “Amount columns” to “Income / Expense” mode — then two fields “Amount” will appear instead of one, and you can specify both columns.
If the file has no header row and the first row is already a transaction, switch “First row” to “Already a transaction”. ExtMoney usually detects this automatically when you select a file; in the column list, they will be named “column_1”, “column_2”, and so on, and next to each one, the value from the first row is shown — this indicates which is which. Without this, the first transaction would be lost: it would be read as column names.
-
Preview. The server parses the file and shows a summary: how many new rows, how many duplicates, how many with errors (unparseable date/amount), the date range, currencies, and a checksum. Nothing is saved yet.
“With errors” and “Intentionally skipped” are different things. The first means the row could not be read. The second means ExtMoney decided not to import it, and the explanation is always next to it: for example, payments to a credit card to pay it off are not imported from its statement because they are already in the account from which they were paid (otherwise the money would be counted twice).
Below the summary is an expandable block “Rows that will not be imported” — it lists the actual rows, not just their count. Each shows the description, date, amount, and reason, and if a specific cell could not be read (e.g., date
31/02/2026), it is shown verbatim — making it clear what to correct in the file. Duplicates are not included here: they are counted separately, above, and you don't need to do anything with them. -
Categories (optional). In the preview, below the summary, a list of categories from the file appears — assign each one your tag and click “Save and rebuild” to update the preview. Unmatched transactions will be imported without a tag; mappings are saved and applied to future imports.
-
Confirmation. The confirmation button adds only new rows to your Accounts. The uploaded file is deleted after a successful import.
What's important to know:
- Duplicates are not duplicated. Re-uploading the same or overlapping files does not create duplicate transactions — matching rows are marked as duplicates and skipped.
- Accounts. If the file includes an account column, ExtMoney will find an existing account by name or create a new cash account (you will see it in the preview).
- Currency. Taken from the currency column, otherwise it’s the currency of your first account. A transaction in a currency different from the account’s currency is marked as an error and not imported (no automatic conversion during import).
- Transfers between accounts are imported as regular income/expense in this version (paired transfers will be available later).
- Plan. The free plan allows 1 import per month up to 1000 rows; paid plans have no limits.
Import History and Undo
Below the import form (and immediately after a successful import), “Import History” is displayed — a list of your past uploads: file name, date, and how many transactions were added.
Any import can be undone: click “Undo” next to the desired entry and confirm. Undoing removes everything that the import added — regular transactions and paired transfers (accounts and tags created during import remain, as they may be used by other transactions). After undoing, the same file can be uploaded again — it will no longer be considered a duplicate.
Undo works the same way on the website and in the mobile app. Note: undo only removes what the import added — it does not restore data erased by the “Erase all data before import” option (see below).
Clearing History. The list shows all completed uploads, including interrupted and failed ones, and each row can be removed with the trash can icon on the right. The “Clear” button at the top of the list removes all canceled, interrupted, and failed entries at once — it does not affect successful imports.
A successful import can also be removed from history. The transactions remain in place, and re-uploading the same file will still not create duplicates. Only the record itself is removed — and with it, the ability to undo this import with a single click. Therefore, the confirmation for such a row states this.
Erase all data before import (replace mode)
If you need to completely replace the contents of your space with data from a
file (rather than supplementing it), check the “Erase all data before
import” box before uploading. A confirmation field will appear — enter the
exact phrase ERASE ALL DATA, and only then will the upload button become
active.
⚠️ This irreversibly deletes all your Accounts, transactions, tags, plans, and Goals, and then imports the file into an empty space. This cannot be undone (undo is not available for this type of import). If you have doubts, first create a backup (see “Backups” section) or export your data.
Category suggestions via AI
If your file contains categories not yet mapped to your tags, a button “Suggest via AI” appears in the preview below the category list (if the feature is enabled in your plan). AI will suggest the most suitable of your existing tags for each unmapped category — it does not create new tags and does not save anything itself: suggestions are simply placed in the fields, you check and edit them if necessary, and then click “Save and rebuild”.
- The feature requires your consent for AI analytics (see “Privacy and AI” section). Without consent, the button will prompt you to enable it.
- A separate monthly quota of suggestions is consumed (depends on the plan); it does not affect the regular import limit.
- If AI is unavailable, no worries — categories will simply remain unmapped, and you can set them manually.
Reconciliation after import
After confirming the import, the success screen shows a summary by account: how many transactions were added to each account and its final balance. This is useful for reconciling the balance with your bank statement — if the total matches, the import was successful.
If you re-upload a file that has already been imported, the preview will show a warning that most of the rows are already in the database (duplicates will still not be duplicated — this is just a hint so you don’t upload the same thing twice).
Bank Statements (OFX/QFX, CAMT.053, MT940)
In addition to CSV, ExtMoney understands standard bank statement formats — OFX/QFX (Quicken and many US banks), CAMT.053 (ISO 20022, European bank statements), and MT940 (classic banking format, incl. Germany; MoneyMoney can export all three).
They are uploaded on the same “Import · Export” page. Such files do not need to be mapped by columns — as soon as you select the file, ExtMoney recognizes the format and displays the “Statement recognized: …” banner; the column mapping step is skipped because the format itself carries the date, amount with sign, currency, account, and payment description. Then follows the usual preview and confirmation. The transaction date and value date are saved (the latter goes into the description if different), and re-uploading the same statement also does not duplicate transactions.
Statement import is enabled by the
IMPORT_BANK_FORMATSflag on the server side. If it is disabled, selecting such a file will display an explanation, and the upload button will be unavailable.
If the bank offers to choose a program instead of a format. The export page often has a list like “Quicken (.qfx)”, “QuickBooks (.qbo)”, “Microsoft Money (.ofx)”, “Simply Accounting (.aso)” — this is the same file under four extensions, any of which is suitable. ExtMoney identifies the format by its content, not by its extension.
Such a file is better than a CSV from the same bank: it carries the currency, account number, and its own identifier for each transaction — meaning the account will be created correctly right away, and re-uploading will reliably avoid duplication.
Bank Statements in PDF (Alfa-Bank, Ozon Bank, Sberbank, CIBC, TD)
Many banks do not provide OFX or CSV — only a PDF statement. ExtMoney parses it the same way as any self-describing format: columns do not need to be mapped, the bank is determined automatically. Supported banks include:
- Alfa-Bank — “Account Statement”;
- Ozon Bank — “Statement of Funds Movement”;
- Sberbank — “Payment Account Statement” (from SberBank Online);
- CIBC — credit card, checking, and savings accounts;
- TD — credit card.
The import page warns in advance that PDF statements are recognized automatically; the application informs you which specific bank it is after you upload the file — along with the account mask and period. If the statement layout is not supported, you will be informed immediately upon upload: nothing is guessed.
For Russian statements, the transaction description is normalized to a readable format: a purchase by card from Alfa-Bank will show the store name, and the MCC code will be transferred to the transaction category — you can map it once to your own category, and it will happen automatically thereafter. Sberbank prints the category in words (“Other expenses”, “SBP transfer”), and it is also picked up.
A statement without a single transaction (account remained idle for a month) is still worth uploading: it will not add any transactions, but the account will be created with the correct balance, and subsequent statements for the same account will link to it automatically.
Parsing is completely offline — no text recognition and no AI. The file is not sent anywhere, and for a scan (image without a text layer), a password-protected PDF, or a statement from an unfamiliar bank, you will receive a clear message explaining the reason, not a silently incorrect result.
What the preview shows. In addition to the usual summary, a statement block appears:
- Bank and last 4 digits of the account/card, statement period;
- Initial and final balance according to the statement and balance after import — so you can immediately see if the account balances;
- Account to import into. By default, it is suggested to create a new one — and it is created not from scratch, but with the initial balance from the statement, otherwise it would differ from it by the entire history up to the file. You can select an existing account: your choice always takes precedence over the program’s guess. The choice is remembered, and the next statement for the same account will link automatically.
Credit card payments are not imported — and this is not a loss: the same payment already exists as an expense in the statement of the account from which you paid the card, and importing it as income would duplicate the money. The preview shows such rows by count and amount, and the difference between the “balance after import” and the statement balance is exactly equal to them. Returns from stores and bonus accruals are not considered payments and are imported normally. In the checking account statement, conversely: a payment to a card is a regular expense for that account, and it is imported.
Transfers between your own accounts. A statement covers one account, so a transfer from a checking to a savings account will appear in two different statements. If the counter-entry has already been imported, the preview will notify you: “N transactions look like the second half of a transfer.” They are still imported as regular expense and income — this does not affect the total Net worth, but in income/expense amounts and category Reports, such a pair looks redundant. If you want to see it as a single movement — convert the transaction into a transfer (regular transaction editing).
PDF statement import is enabled by the
IMPORT_PDF_STATEMENTSflag on the server side. Available only in the web version.
Migrating from YNAB (with transfers between accounts)
ExtMoney can import YNAB Budgets (JSON — YNAB API export
GET /budgets/{id}). Unlike flat CSV, the structure is preserved here: Accounts,
categories, and most importantly — transfers between accounts. A transfer in
YNAB (two linked records) is imported as one transfer in ExtMoney (debit/credit pair
in a single Exchange object), not as two independent transactions. Duplicates are
not duplicated: re-uploading the same budget does not create duplicate transactions
and transfers (YNAB identifiers are stable).
Uploaded on the same “Import · Export” page in two ways:
- By file — select a JSON file (YNAB API export
GET /budgets/{id}). ExtMoney recognizes it as a YNAB budget, the “Format recognized: …” banner confirms this, the column mapping step is skipped. - Directly from YNAB — switch “Source” → “Load from YNAB”. Paste your YNAB personal access token (created in YNAB: Account Settings → Developer Settings → New Token), optionally click “Load my budgets” and select the desired one, then click “Load from YNAB”. The token is used only for a one-time budget download and is not saved anywhere.
In both cases, proceed with the usual preview and confirmation.
Enabled by the
IMPORT_NATIVE_APPSflag on the server side. Current version limitation: transaction splits are transferred as one general row; import of Actual Budget and direct connection to YNAB via token will be available later.
Manually assemble JSON for import (custom file)
If you keep your records elsewhere (in a spreadsheet, a custom script) and want
to transfer data to ExtMoney, you do not need a separate “custom” format:
ExtMoney only reads the YNAB budget JSON structure from a file, and it’s easy
to assemble by hand. Simply create a minimal JSON following the example below,
save it with a .json extension (UTF-8 encoding), and upload it on the
“Import · Export” page like a regular file — it will be recognized as a YNAB
budget, the column mapping step will be skipped, followed by the usual preview
and confirmation.
Minimal example (expense, income, and transfer between accounts):
{
"currency_format": { "iso_code": "USD" },
"accounts": [
{ "id": "acc-cash", "name": "Cash" },
{ "id": "acc-checking", "name": "Main Account" }
],
"transactions": [
{
"id": "tx-0001",
"date": "2026-06-30",
"amount": -12340,
"account_id": "acc-checking",
"payee_name": "Coffee Shop",
"memo": "latte",
"category_name": "Cafes & Restaurants"
},
{
"id": "tx-0002",
"date": "2026-07-01",
"amount": 5000000,
"account_id": "acc-checking",
"payee_name": "Salary",
"category_name": "Income"
},
{
"id": "tx-0003",
"date": "2026-07-02",
"amount": -100000,
"account_id": "acc-checking",
"transfer_account_id": "acc-cash",
"transfer_transaction_id": "tx-0003b"
}
]
}
This file creates an expense of 12.34, an income of 5000.00, and a transfer of 100.00 from “Main Account” to “Cash”.
File Fields
Top level:
| Key | Required | Description |
|---|---|---|
currency_format.iso_code | yes | Currency of the entire file (ISO code: USD, RUB, EUR…). |
| One per file — YNAB budgets are single-currency. This key also identifies the file as a JSON budget. | ||
accounts[] | desirable | Your Accounts: id (any unique string) + name (how the account will be named in ExtMoney). |
If an account is not in this list, its name is taken from the operation’s account_name, or from its account_id. | ||
transactions[] | yes | Array of transactions (see below). |
Each transaction in transactions:
| Key | Required | Description |
|---|---|---|
id | yes | Unique transaction identifier (any string). This is used for duplicate protection: re-uploading the same file will not duplicate transactions. Each transaction must have its own unique id. |
date | yes | Date in YYYY-MM-DD format. |
amount | yes | Amount in milli-units — i.e., value × 1000, as an integer. Minus = expense, plus = income. Zero is not allowed. Examples: expense 12.34 → -12340; income 5000.00 → 5000000. |
account_id | yes | Reference to id from accounts. |
account_name | no | Account name — as a fallback if you don’t describe the accounts block. |
payee_name | no | Payee / location. Goes into the transaction description. |
memo | no | Comment. Concatenated with payee_name using “ — ”. |
category_name | no | Category. Mapped to existing categories in your team (import does not create new tags). Empty → transaction without a category. |
transfer_account_id | no | For transfers only — id of the recipient account (see below). |
transfer_transaction_id | no | For transfers only — any unique string (needed for duplicate protection). |
deleted | no | true — skip the transaction. By default, the transaction is active. |
Transfers between your own accounts. Add one transaction from the debit side:
negative amount, account_id — source account, transfer_account_id —
id of the recipient account, transfer_transaction_id — any unique string.
Do not add the second (mirror) entry — the debit/credit pair is created from
a single line as a single transfer (Exchange).
Limitations. One currency for the entire file (both sides of a transfer are
in the same currency); splits of a single transaction into multiple categories
are not supported (one line = one transaction). As with YNAB import, this upload
is enabled by the IMPORT_NATIVE_APPS flag on the server side.
No import in the mobile app
Importing history from a file (CSV, bank statements OFX/QFX/CAMT.053/MT940, YNAB exports) is available only in the web version of ExtMoney. In the mobile app, the Menu → Import section will remind you to open the web version.
To import data, open ExtMoney in a browser (on a computer or mobile browser) and go to the Import section — there you will find file uploading, preview before recording, CSV format mapping, import history and undo, as well as data replacement mode. All imported transactions will immediately appear in the mobile app as well.

