Back to blog
· 11 min read

How to convert a bank statement to Xero CSV (2026)

Turn PDF or CSV bank statements into the exact CSV layout Xero's bank reconciliation tool expects, with the column rules and categorization step most converters skip.

Xero accepts bank transactions through a live bank feed or a manually uploaded CSV. When the feed is unavailable, or the bank you use is not supported in your region, the CSV path is the only way to keep the ledger current. The tricky part is that Xero is strict about the CSV layout it will import, and even small mistakes in date format, sign, or column order cause the whole file to be rejected. This guide walks through the exact CSV Xero expects, how to build one from a PDF or CSV bank statement, and how to categorize the transactions before the upload so bank reconciliation inside Xero takes minutes instead of hours.

The Xero CSV format, in one paragraph

Xero's bank statement CSV needs six columns in a specific order: Date, Amount, Payee, Description, Reference, and Cheque Number. The header row is required. Dates must be in a single consistent format that matches the region setting on the Xero organisation (commonly DD/MM/YYYY for UK, AU, and NZ organisations, MM/DD/YYYY for US). The amount column uses a signed number: positive for money in, negative for money out. Only Date and Amount are strictly required; the other four columns can be empty, but the header row must still list them so Xero maps the file correctly.

The four common ways to produce a Xero CSV

1. Direct CSV export from your bank

If your bank offers a CSV export, start there. You will almost always need to reshape the file: banks emit columns like "Debit", "Credit", "Balance", "Type", and "Transaction date / value date", none of which map one-to-one to Xero's schema. Common fixes: merge separate Debit and Credit columns into a single signed Amount column, drop the running Balance column, pick one date column and format it consistently, and rename the description field to Description.

2. Convert a PDF statement to CSV manually

The hard case. You extract transactions from the PDF, then reshape them into Xero's six-column layout. Manual extraction breaks in the usual places: wrapped descriptions turn into extra rows, column boundaries drift between pages, running balance columns get confused with amounts, and scanned statements need OCR before the extraction can even begin. Expect to spend real time cleaning the result.

3. Use a dedicated PDF-to-CSV converter

Generic converters handle the extraction, but the output rarely matches Xero's schema out of the box. You still need to rename columns, pick a date format, sign the amount column, and confirm that wrapped descriptions were reassembled into a single row per transaction. Budget time to review every file before it hits Xero.

4. Extract, categorize, then export with Karchu

The workflow Karchu is built around: parse the statement (PDF, CSV, or Excel), apply your categorization rules deterministically, then export a Xero-ready CSV with the correct column order, signed amounts, and normalized dates. Because categorization happens before the upload, the Payee and Description fields carry the strings Xero's bank rules match on, so reconciliation inside Xero drops most transactions into the right account automatically instead of leaving them stacked in the review queue.

The columns Xero cares about, in detail

  • Date. One consistent format across the file, matching the organisation's regional setting. Mix formats in a single file and Xero rejects the import.
  • Amount. Signed number, no currency symbol, no thousands separator. Positive is money in, negative is money out. If your source file uses two columns (Debit and Credit), combine them into one signed column.
  • Payee. The merchant or counterparty. Xero's bank rules match against this field, so keep it clean and consistent across statements (spelling one merchant three different ways defeats rules).
  • Description. Full memo text from the bank. Bank rules can match on this too, and the reconciliation UI shows it prominently.
  • Reference. Optional. Useful for invoice numbers, cheque numbers on non-cheque transactions, or transaction IDs that help matching against invoices already in Xero.
  • Cheque Number. Optional. Populate only for cheque payments; leave empty otherwise.

Why categorize before you upload, not after

Xero's reconciliation screen is one of its best features, but it still expects you to confirm the account for every unmatched transaction. On a busy month that can be several hundred clicks. If you categorize upstream (in Karchu, with a rule engine you can inspect and edit), the Payee and Description fields Xero receives already carry the strings your Xero bank rules match against. The result: most transactions fall through the rules automatically, and reconciliation shrinks to a handful of new merchants or edge cases instead of every single row. The same rule set applies to next month's statement without any extra work, so the workflow accelerates over time instead of resetting.

Common Xero CSV import errors and how to fix them

"The date format is not valid." Xero couldn't parse one or more dates against the organisation's regional format. Fix: open the file, pick a single date format (DD/MM/YYYY for UK/AU/NZ, MM/DD/YYYY for US), and reformat every row before reuploading.

"Amount is not a valid number." A row has a currency symbol, a thousands separator, or blank amount. Xero expects plain signed decimals. Strip symbols and separators; drop rows with no amount.

Transactions imported with the sign flipped. Your source file listed expenses as positive numbers and Xero interpreted them as money in. Rebuild the Amount column with debits as negative values.

Duplicate transactions after import. Xero's dedupe is looser than QuickBooks': same date, same amount, same description usually deduplicates, but small differences (a stray space in Description, a different date format between two files) can slip past. Karchu deduplicates across queued files before export so overlapping periods do not reach Xero.

"Statement was imported, but bank reconciliation is empty." The file imported but Xero mapped every row to the wrong bank account. Fix: delete the imported statement, reselect the target account in the Import Statement flow, and re-upload.

A concrete workflow: PDF statement to Xero reconciliation

  1. Upload the PDF statement to Karchu. Digital and scanned PDFs are handled in one pipeline, no separate OCR step required.
  2. Review the extracted transactions in the workspace. Dates are normalized to ISO 8601 and amounts are already signed correctly.
  3. Let the rule engine categorize the transactions. Add or adjust rules for merchants specific to your business; the rules apply retroactively to the current file and forward to every future statement.
  4. Export the categorized transactions as a Xero-ready CSV. Karchu emits the six columns in the correct order, with the date format that matches your Xero organisation.
  5. In Xero, open the bank account, click Manage account, choose Import a statement, drop the CSV in, confirm the column mapping, and complete the import.
  6. Reconcile. Because the transactions arrive with Payee and Description already normalized, Xero's bank rules match most rows on the first pass.

Xero bank rules vs. rules in Karchu

Xero's bank rules fire during reconciliation, matching on Payee, Description, and Amount. They are effective but scoped to a single organisation and account, and there is no built-in audit trail for which rule matched a specific transaction. Karchu's rule engine sits upstream: rules are shared across every statement in the workspace, ordering is explicit, and every categorization is traceable to the rule that produced it. The two engines cooperate cleanly. Karchu handles the deterministic majority so Xero receives clean data; Xero rules handle the last-mile mapping to specific chart-of-accounts entries and contact records that only Xero knows about.

Handling multi-currency and foreign statements

Xero supports multi-currency on its higher plans. If your statement is in a currency other than the organisation's base currency, upload the CSV to the matching foreign-currency bank account. Do not convert the amounts to base currency in the CSV; let Xero apply the exchange rate at reconciliation. Karchu preserves the original currency and amounts in the export, so no manual conversion is needed.

Frequently asked

Does Xero accept OFX or QIF instead of CSV? Yes. Xero supports OFX, QIF, and QBO alongside CSV. CSV is usually the easiest to produce cleanly from a PDF source, which is why most PDF-to-Xero workflows land there.

Can I import a scanned PDF directly? Only if the tool doing the conversion runs OCR. Karchu's pipeline handles scanned PDFs end-to-end; most generic converters fail on scans.

How many rows can a single CSV contain? Xero's practical limit is around 1,000 rows per import. Split larger files by month or by statement period.

Will re-importing the same month create duplicates? Xero attempts to deduplicate, but the match is loose. Categorize and dedupe upstream in Karchu so overlapping ranges never reach Xero.

Bottom line

The cleanest Xero import is the one where categorization already happened before the CSV leaves your desk. If your bank feed works, use it. If it does not, do the categorization upstream where the rules are yours to keep and audit, export a Xero-shaped CSV, and let Xero focus on being the ledger of record. Try Karchu free for 30 days and turn Xero reconciliation from a monthly chore into a routine review.

Try Karchu on your own statement

Free 30-day trial. Upload a CSV, Excel, or PDF statement and see categorized transactions in under two minutes.

Start free →