Free tool

CSV Column Mapper — bank CSV to QuickBooks, Xero or Sage schema

Drop a CSV or PDF bank statement. We auto-guess which column is the date, which is the description, which is the amount (or the debit / credit split). Adjust anything in the mapping wizard, then download a file with the exact schema QuickBooks, Xero or Sage expects.

or paste rows

The mapping wizard runs entirely in your browser. Your CSV stays on your device.

Runs in your browser
No upload, no signup. Your file never leaves your device.
Free and unmetered
Use it as often as you need. No daily quota, no credit card.
EU-built, GDPR-first
Hosted in Frankfurt. Built by a small EU team that takes privacy seriously.

Why every bank CSV needs remapping

Bank CSV exports are inconsistent by design. HSBC calls the amount column Value. Barclays splits it into Money Out and Money In. Sparkasse uses German locale numbers and a header row buried under six rows of account metadata. Chase gives you Posting Date, Description, Amount, Type, Balance — five columns, none of which match what QuickBooks Online expects.

The importers on the other side (QuickBooks, Xero, Sage, FreshBooks, Wave) each have their own strict schema. QuickBooks Online wants three columns: Date, Description, Amount. Xero wants five: *Date, *Amount, Payee, Description, Reference, with dates in DD/MM/YYYY. Sage 50 wants a Type column with R/Pcodes for receipts and payments. Getting from the bank's shape to the accounting tool's shape is a fifteen-minute Excel job every month, per account, per client.

This tool does it in one screen. Drop the CSV, glance at the auto-detected mapping, override anything that looks wrong (a dropdown per column), pick the target schema, download.

What the mapping wizard handles automatically

  • Metadata rows above the header.Most bank CSVs have 1-7 rows of account name, statement period, and opening balance before the actual headers. We scan the first 15 rows for a plausible header row and skip everything above it — but show you what was skipped in a toggle, so it's never a black box.
  • Delimiter detection. Comma, semicolon and tab-separated files all work. European banks default to semicolons because their locale uses commas as the decimal separator.
  • Column role guessing. Combines the header name (matches date, posted, value date, narration, debit, money out, etc.) with the value shape (how many rows parse as dates? as numbers? does the sign vary?). Every guess is overridable via a dropdown per column.
  • Amount vs Debit/Credit. If your bank uses two positive-only columns, we map them to Debit and Credit and merge them into a single signed amount in the output. Debits become negative, credits stay positive.
  • Locale-aware amount parsing. 1,234.56 (US), 1.234,56 (EU), (45.30) (parens negatives), and trailing DR/CR markers are all normalised.
  • Date normalisation. ISO (2026-04-15), 15/04/2026, 15.04.2026, and 15 Mar 2026 all get rewritten to the format the target accounting tool expects.
  • Duplicate roles.A given column role (Date, Amount, Balance…) can only be assigned once. If you pick a role that's already taken, the previous holder is cleared automatically — no silent conflicts.

Supported output schemas

TargetColumns emittedDate formatAmount
Xero (worldwide)*Date, *Amount, Payee, Description, ReferenceDD/MM/YYYYSingle signed
QuickBooks Online (3-col)Date, Description, AmountMM/DD/YYYYSingle signed
Sage 50Date, Type, Reference, Details, AmountDD/MM/YYYYPositive, sign in Type (R/P)
Generic clean CSVDate, Description, Payee, Reference, Amount, BalanceISO (YYYY-MM-DD)Single signed

Also accepts PDF statements

Most banks in the UK, EU and India only give you PDF statements — not CSV. If you drop a PDF, we run it through our main converter (counting against your 7 free pages a day) and feed the reconciled transactions into the same mapping wizard. That way even PDF-only banks reach a QuickBooks-ready file in a single flow, without you copy-pasting between tools.

If your PDF is password-protected, unlock it first with our PDF password remover — that also runs entirely in your browser.

What's different about our approach

The naive way to build this — a static column-picker that only handles one bank's layout — helps nobody. Real bank exports vary widely and change over time. So we combine two signals to guess each column's role:

  1. Header name matching.Regex-based scoring for each candidate role. "Posted Date" scores 100 for Date. "Money Out" scores 90 for Debit. "Merchant" scores 90 for Payee.
  2. Value shape analysis.We scan the first 50 data rows and count how many parse as dates, how many parse as numbers, whether the sign varies, average text length. A column that's 80% numeric with signs on both sides is almost certainly the Amount column even if the header just says Value.

Then we take the highest combined score for each role, greedy-assign, and never let two columns hold the same role. If our guess is wrong, every column has a dropdown — override in one click.

When to skip this tool

If you're starting from a PDF and need the file straight into QuickBooks or Xero, our main converter does PDF → reconciled QuickBooks / Xero / Sage in one pass with the balance-reconciliation check that catches extraction errors before they land in your books. Use this column-mapper when you already have a CSV in hand and just need to change its shape.

For occasional column-mapping tasks, this tool is free forever. For ongoing bookkeeping across many clients or accounts, paid plans start at €19/month with QuickBooks / Xero / Sage export built in.

FAQ

Is this really free?
Yes. The parsing, column detection, mapping wizard and CSV generation all run entirely in your browser. There's no signup, no daily quota. Uploading a PDF (rather than a CSV) counts against your free 7-pages-a-day on our main converter.
What if the tool guesses the wrong column?
Every column has a dropdown next to it — pick the correct role and the preview updates immediately. The tool prevents assigning the same role twice, so if you set 'Amount' on a column that was previously 'Balance', we automatically clear the balance mapping.
My bank splits money in and out into two columns — will that work?
Yes. Map one column to 'Debit (money out)' and one to 'Credit (money in)'. The output will merge them into a single signed Amount column (debits negative, credits positive). If your bank calls them 'Money Out' / 'Money In' or 'Withdrawal' / 'Deposit', we usually detect that automatically.
Does it handle European (comma-decimal) CSVs?
Yes. The amount parser recognises both '1,234.56' (US) and '1.234,56' (EU), plus parens-negatives '(4.50)' and trailing DR/CR markers. The CSV parser accepts comma, semicolon and tab delimiters — European bank exports often use semicolons because the locale uses commas for decimals.
What date formats does it accept?
ISO (2026-04-15), DD/MM/YYYY, DD-MM-YYYY, DD.MM.YYYY, MM/DD/YYYY when unambiguous, and '15 Mar 2026'. The output date format matches the target accounting tool — DD/MM/YYYY for Xero and Sage, MM/DD/YYYY for QuickBooks Online, ISO for the generic clean CSV.
Can I drop a PDF statement instead of a CSV?
Yes. PDF drops run through our main converter and land in the mapping wizard as if they were a normal CSV. That counts against your 7 free pages a day. If you already have a CSV, use that — it's instant and doesn't touch your quota.
Does the QuickBooks Online CSV work in QuickBooks Desktop too?
QuickBooks Desktop doesn't accept CSV — it needs a .qbo (OFX 1.0.2) file. Use our free CSV to QBO Converter for that. The three-column CSV this tool produces is specifically for QuickBooks Online's 'Upload from file' flow.
Will accents and special characters survive the round-trip?
Yes. We emit the CSV as UTF-8 with a byte-order mark (BOM), which is what QuickBooks, Xero and Sage all expect for non-ASCII text. Café, Müller, Søren all import cleanly.

Related tools and guides