Skip to main content

Xero CSV Import Errors: Bank Statements, Invoices, and Contacts

9 min readPipeSheets Team

Xero supports three main CSV import flows: bank statement imports, invoice (sales or bills) imports, and contact imports. Each has its own required columns, format quirks, and error messages. A CSV that works for one type fails for another, and Xero's error reports are terse enough that you often can't tell what went wrong from the message alone. Here's a per-type guide to getting your import past Xero's validation on the first try.

Locale and Date Format: The Hidden Configuration

Xero's expected date format depends on your organization's region setting. UK, AU, NZ organizations: DD/MM/YYYY. US organizations: MM/DD/YYYY. There's no single "Xero date format" — what works for one organization fails for another. Check your organization's settings (Settings > Organization Settings > Country) before formatting any CSV.

ISO format (YYYY-MM-DD) works in most Xero imports regardless of locale and is the safest choice when you don't control the target organization's settings.

Bank Statement Imports

Bank statement imports populate transactions for reconciliation. Xero matches imported transactions against bank rules and existing Xero data, then suggests matches for the bookkeeper to confirm. Bad imports create a mess of unmatched transactions that take longer to clean up than to import correctly in the first place.

Required columns

Minimum Xero bank statement columns:

  • Date — locale-appropriate format or ISO
  • Amount — single signed column (positive for deposits, negative for withdrawals)
  • Payee — short description of the transaction

Optional columns

Helpful additional columns:

  • Description — longer free-text description
  • Reference — check number, transaction reference
  • Cheque Number — for cheque payments specifically
  • Particulars — used by NZ users for additional reference info

Error: "Date in unexpected format"

Your date column doesn't match the organization's date locale. UK org with US-format dates (MM/DD/YYYY) is the most common case. Either reformat the dates to DD/MM/YYYY or use ISO format (YYYY-MM-DD), which always works.

Error: "Amount column contains invalid values"

Currency symbols, parentheses for negatives, or split debit/credit columns. Xero wants a single signed Amount column with plain decimal numbers. Strip $, £, € symbols. Convert (50.00) to -50.00. If your source has separate Debit and Credit columns, combine them: Credit - Debit, with empty cells treated as 0.

Error: "Duplicate transactions"

Xero detects duplicates based on Date + Amount + Payee. If you re-import a file that overlaps with a previous import, the overlapping rows are flagged. The fix: trim your CSV to non-overlapping date ranges before importing, or accept the duplicates and reconcile manually.

Invoice Imports (Sales and Bills)

Invoice imports populate Sales Invoices (money in) or Bills (money out). The same CSV format works for both — the import wizard asks which type to create. Invoices have a more complex structure than bank statements: each invoice can have multiple line items, requiring multiple rows in the CSV linked by Invoice Number.

Required columns

Minimum Xero invoice columns:

  • ContactName — must exactly match an existing contact in Xero or will create new
  • InvoiceNumber — unique invoice identifier; rows with the same number become line items of the same invoice
  • InvoiceDate — locale-formatted date
  • DueDate — locale-formatted date
  • Description — line item description
  • Quantity — number, decimal allowed
  • UnitAmount — price per unit, decimal allowed
  • AccountCode — must match a Chart of Accounts code in Xero

Error: "Account code does not exist"

The AccountCode in your CSV doesn't match any code in Xero's Chart of Accounts. Pull the current Chart of Accounts (Settings > Chart of Accounts > Export) and compare to your CSV. Codes are case-sensitive and exact-match. Common cause: source system uses descriptive names ("Sales") while Xero uses codes ("200").

Error: "Tax type does not exist"

If you include a TaxType column, the value must match one of Xero's tax type codes (which vary by region: NONE, OUTPUT, OUTPUT2, INPUT, INPUT2, ZERORATED, etc. for AU; different codes for UK and US orgs). Pull the tax type list from Xero Settings > Tax Rates. Leaving TaxType blank uses the default for the account code.

Error: "Invoice number already exists"

Xero requires unique invoice numbers within each type (Sales separate from Bills). If your CSV reuses an invoice number that already exists in Xero, the import fails. Either re-number your import or set Xero to allow duplicate invoice numbers in Settings > Invoice Settings.

Multi-line invoices

Each row in the CSV is one line item. To create an invoice with multiple line items, repeat the InvoiceNumber across multiple rows. Xero groups rows by InvoiceNumber and creates a single invoice per group. The header fields (ContactName, InvoiceDate, DueDate) should be identical on every row in the group — variations cause unpredictable behavior.

Multi-line invoice CSV:
ContactName,InvoiceNumber,InvoiceDate,DueDate,Description,Quantity,UnitAmount,AccountCode
Acme Corp,INV-001,05/15/2026,06/15/2026,Setup fee,1,500.00,200
Acme Corp,INV-001,05/15/2026,06/15/2026,Monthly subscription,1,99.00,200
Acme Corp,INV-001,05/15/2026,06/15/2026,Support hours,5,150.00,210

→ Creates ONE invoice (INV-001) with three line items totaling $1,349.

Contact Imports

Xero contacts include customers and suppliers (Xero stores them together with a flag for which type). Contact imports are the simplest of the three types: one row per contact, mostly free-text fields.

Required columns

Minimum Xero contact columns:

  • ContactName — must be unique within Xero
  • EmailAddress — optional but recommended; must be valid email format
  • AccountNumber — optional unique contact reference (useful for matching to source system IDs)

Error: "Contact name already exists"

Xero treats contact names as unique. If you're importing a contact that already exists, the import fails on the new row. Either de-duplicate your CSV against the existing contact list (Reports > Contacts > Export to compare), or rename to make unique ("Acme Corp" → "Acme Corp (Imported 2026-05)").

Error: "Email address is invalid"

Standard email syntax check. Strip whitespace, fix typos. If a contact has no email, leave the column blank — don't put "none" or "N/A."

Decimal Places and Number Formatting

Xero stores currency to 2 decimal places (4 for some specialized fields). Numbers with more decimal places are rounded silently. UnitAmount of 19.999 becomes 20.00 after import. If your source system stores prices at higher precision (engineering, scientific use cases), you'll lose precision on import — work around it by storing precise values in a custom field or note rather than the canonical amount.

Thousand separators

Xero rejects thousand separators in numeric fields. "1,234.56" fails — should be "1234.56." Strip all thousand separators from Amount, Quantity, UnitAmount, and any other numeric column.

European number format

If your source data uses European-format numbers (1.234,56 instead of 1,234.56), Xero will reject or mis-parse them depending on the import type. Always convert to canonical 1234.56 (no thousands separator, period decimal) before import.

For deeper coverage of European number conversion, see our guide on converting European number formats to US format. Same logic applies to Xero imports.

Step-by-Step: Cleaning Your Xero CSV

Step 1: Check organization locale

Verify the date format (DD/MM/YYYY vs MM/DD/YYYY) and currency format expected by the target organization. When in doubt, use ISO date format (YYYY-MM-DD).

Step 2: Use the right template

Xero provides downloadable templates for each import type. Use the template — don't construct your own column structure. The templates include the exact column names Xero expects, and using them eliminates one entire class of error.

Step 3: Strip currency symbols and thousand separators

All numeric columns: just decimal numbers, no symbols, no separators. "1234.56" not "$1,234.56."

Step 4: Validate account codes and tax types

For invoice imports, pull the Chart of Accounts and Tax Types from Xero and verify every code in your CSV exists.

Step 5: Test on 5 rows

Always import a small subset first. Xero gives you a preview before committing — use it.

PipeSheets has presets for Xero bank-statement and contact cleanup, plus general-purpose pipelines for invoice imports. Build a cleanup pipeline once per source system you import from, and Xero stops being the bottleneck.

Common Errors Across All Import Types

"File could not be parsed"

Usually a BOM (byte order mark) at the start of the file, or non-UTF-8 encoding. Re-save as UTF-8 without BOM.

"Too many rows"

Xero limits each import to 500 rows for invoices, 1,000 for bank statements, and 5,000 for contacts. Split larger files into batches.

"Encoding error in row X"

A row contains non-UTF-8 bytes — usually a character that was pasted from a Word document or older system. Open the file in a text editor, find the row, and replace any smart quotes, em-dashes, or special characters.

Prevention: Use Xero's Bank Feeds

Xero supports direct bank feeds for most major banks in the UK, AU, NZ, US, and other markets. If your bank is supported, set up the feed and skip CSV imports entirely. CSV bank imports are for the cases where direct feeds aren't available (smaller banks, business sub-accounts) or for backfilling historical data before the feed was set up.

Try the automated solution

PipeSheets can fix these issues automatically. Clean your first file free.

Clean Your CSV