Skip to main content
YNAB → Beancount

YNAB CSV to Beancount

Convert a YNAB register export — the transaction CSV from Export Plan or from Export Transactions — into balanced double-entry Beancount transactions, with the Outflow and Inflow columns already mapped.

Column mapping verified against a real YNAB export

How to export your YNAB transactions

  1. 1

    Export from the YNAB web app at app.ynab.com. The iOS and Android apps cannot export a plan.

  2. 2

    Click the account you want in the left sidebar rather than All Accounts. One account per file is what keeps the ledger honest: this converter posts every row to the single account you name below, and “Export Plan” hands you every account at once.

  3. 3

    Narrow the list with the search box or the View date filter if you need to, then tick the checkbox in the table header — that selects everything currently showing.

  4. 4

    Click More in the Action Bar, then “Export # Transactions”. The download is named “Selected Transactions for [plan name]…”.

  5. 5

    Open it in a text editor, copy everything including the header row, and paste it below.

Two amount columns, and one export can hold every account

YNAB has no signed amount column: Outflow is money out, Inflow is money in, and the unused side is written “$0.00” rather than left blank — so a naive “take whichever column has a value” import gets it wrong. The preset maps both, and strips the currency symbol YNAB stamps on every figure ($84.23, C$210.45, 84,23€). A row where both columns are $0.00 — the zero starting balance is the usual one — is reported as an unrecognised amount and skipped, rather than silently posted with a guessed sign. And because a whole-plan export covers every account, use the per-account export above, or split the file on its Account column before pasting.

Beancount output

Your transactions will appear here as soon as you paste a CSV.

YNAB export questions

Does this work with an export from YNAB 4?

No. The retired desktop app writes a different file — thirteen columns including Check Number and a trailing Running Balance, no currency symbols, and Cleared as C, U or R — and its Date column sits in a different position, so this preset would read the wrong fields. Delete the extra columns until the header matches the web register's, or map the columns by hand on the generic converter.

My export is tab-separated, not comma-separated. Is it broken?

No. YNAB writes TSV instead of CSV for plans whose currency uses a comma as the decimal separator, so the commas inside amounts cannot split the columns. The converter detects the tab delimiter and reads “84,23€” correctly — paste the file unchanged. Those plans also write dates day-first (01.08.2026), which the converter picks up from the dots.

How do transfers between my own accounts come out?

As an ordinary transaction whose payee is the string YNAB exports — “Transfer : Savings” — with the three category columns left empty. The converter only ever sees one side of it, so the balancing posting lands in the category account; point that posting at the real account (Assets:Savings) and the transfer is complete. If you exported both accounts, delete the mirrored row instead of converting it twice.

Converting an export from another bank or app?

Keep the ledger you just converted

Beancount.io hosts your plain-text ledger, imports future statements for you, and keeps every number auditable.

Start Free