Skip to main content
Citi → Beancount

Citi CSV to Beancount

Convert a Citi credit-card export into balanced double-entry Beancount transactions — its split Debit and Credit columns are read by role, so Citi's unusual signing cannot flip a refund the wrong way.

Column mapping verified against a real Citi export

How to export your Citi transactions

  1. 1

    Log in to Citi Online and open the card's Account Details page.

  2. 2

    Scroll down to Transactions and use the “Activity Since Last Statement” drop-down to choose a statement period or a custom date range.

  3. 3

    Select Export — it sits to the right of the Transactions tab, next to Print Screen — and choose CSV.

  4. 4

    Open the download — Citi saves it with an uppercase .CSV extension — then copy the header line together with the rows and paste them below.

Citi signs its Credit column and leaves Debit unsigned

Nearly every bank that splits money out from money in writes two positive magnitudes side by side. Citi writes a purchase as 126.44 under Debit and a payment or refund as -41.00 under Credit, mixing a plain magnitude and a signed value in the same file. A spreadsheet formula that simply negates one column gets every refund backwards. This preset instead reads the two columns by what they mean, so purchases post negative and payments positive whether or not the value arrived with a minus in front of it. Exactly one of the two columns is filled on any given row.

Beancount output

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

Citi export questions

My export has a Member Name column and my other Citi card's doesn't.

Both are normal. Citi appends Member Name on cards with named cardmembers, and the same person can hold one card that has it and one that does not — we saw exactly that in two exports taken in the same month. Date, Description, Debit and Credit sit at identical positions in the five- and six-column layouts, so the mapping below fits either file without a change.

A row was skipped with “unrecognized amount”. What was it?

Almost certainly a 0.00 line — Citi writes those for things like a waived annual fee. Nothing moved, so the converter reports the line and carries on instead of emitting a zero-amount transaction that would sit in your ledger meaning nothing. Every other row in the file converts as normal, so one reported line here is not a reason to re-export.

How do I get more than one statement period out of Citi?

By repeating the export. The period drop-down offers a statement, year to date, a prior year or a custom range, and Citi's own tutorial puts the ceiling at 1,000 transactions per download, so a busy card needs several passes. Convert each file here and append the outputs to the same ledger file — nothing has to be merged or re-sorted first.

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