Xero CSV Import Errors: Complete Troubleshooting Guide

Published
Updated
Reading Time
23 min
Author
David
Topics:
Accounting Software IntegrationXeroCSV Data ImportData Formatting Troubleshooting
Xero CSV Import Errors: Complete Troubleshooting Guide

Article Summary

Diagnose and fix Xero CSV import errors for bank statements and invoices. Error message reference, platform-specific fixes, and a prevention checklist.

The most common Xero CSV import errors trace back to five predictable causes: date formatting that doesn't match your Xero region setting, hidden characters or empty rows lingering at the end of the file, amount fields polluted with currency symbols or commas, wrong file encoding exported from Mac Excel, and blank rows sitting between your headers and actual data. Before you do anything else, confirm your date format aligns with what Xero expects for your organization's region, delete any trailing empty rows below your last data entry, and strip every currency symbol and thousand-separator comma from your amount columns.

This guide covers both bank statement and invoice/bill CSV imports in a single diagnostic framework, ordered from the most common causes to the least common. Work through the sections in order and stop as soon as your issue is resolved. Most users will find their fix in the diagnostic checklist below.


Quick Diagnostic Checklist: The 5 Most Common Causes

Before working through specific import types or error messages, run through these five checks. They account for the vast majority of Xero CSV import failures.

1. Incorrect date format

Xero requires every date in your CSV to match your organization's regional date setting exactly. If your Xero org is set to DD/MM/YYYY and your file contains 03/15/2026, the import will fail or, worse, silently misinterpret dates where day and month values are both 12 or below. Textual month names like "Jan" or "March" will also be rejected, as will any future-dated entries in bank statement imports.

Fix: Go to Settings > General Settings in Xero and confirm your date format. Then reformat the entire date column in your CSV to match that format precisely. Do not mix formats within the same file.

2. Hidden characters and empty rows at the end of the file

Trailing empty rows or invisible characters (carriage returns, null bytes, non-breaking spaces) lurking below your last data row are a frequent cause of the "file does not contain valid statement data" error. Spreadsheet applications often add these silently, and they are invisible in Excel or Google Sheets.

Fix: Open the CSV in a plain text editor (Notepad on Windows, TextEdit in plain text mode on Mac, or VS Code). Scroll to the bottom, delete everything below the last row of actual data, and save. Do not re-open in Excel before importing.

3. Currency symbols or commas in amount fields

Xero expects raw numeric values in amount columns. A value like "$1,500.00" contains two problems: the dollar sign and the thousands comma. European and Australian users who format decimals with commas ("1.500,00") face the same issue in reverse. Any non-numeric character in an amount field will cause the import to fail or produce incorrect values.

Fix: Strip all currency symbols and thousand separators from amount columns. Use a period as the decimal separator (e.g., 1500.00). If you are working with a locale that uses comma decimals, you will need to convert them to period decimals before import.

4. Wrong file encoding (especially from Mac Excel)

Mac Excel is a particularly common source of encoding problems. It can insert a BOM (Byte Order Mark) at the start of the file and use non-standard line endings that Xero cannot parse. The result is often a vague error or a file that appears correct when opened but fails on upload.

Fix: Save as "CSV UTF-8 (Comma delimited)" format rather than plain "CSV." Alternatively, open the file in Google Sheets and re-export as CSV, which strips encoding artifacts reliably.

5. Blank rows between headers and data

Any empty row between your header row and the first data row will cause the import to fail. This commonly happens when users delete rows from the middle of a spreadsheet and leave gaps, or when a title row sits above the actual column headers.

Fix: Ensure the header row is in row 1 (or the row Xero expects) and that data begins immediately in the next row. Remove any blank rows, title rows, or summary rows above or between your data.

If none of these five fixes resolve your error, keep reading. The sections below cover specific error messages, import-type-specific issues, and platform-related problems.


Xero CSV Error Messages and What They Mean

Xero's CSV import error messages rarely point to the actual cause. The table below maps each message to what is likely wrong and how to fix it.

Error MessageLikely CauseFix
"There was a problem importing the file"This is Xero's most generic error. It typically means wrong file encoding (especially files exported from Mac Excel without UTF-8), a corrupted CSV, or the file is still open or locked by another application.Close the file in all applications. Re-save as CSV UTF-8 from a clean source (Google Sheets or a fresh Excel session). On Mac, select "CSV UTF-8 (Comma delimited)" specifically.
"The file does not contain valid statement data"Appears during bank statement imports. Usually caused by trailing empty rows at the bottom of the file, a column structure that does not match Xero's expected layout, or missing required columns (Date, Amount).Open the CSV and verify column headers match Xero's required format exactly. Scroll to the bottom of the file and delete any blank rows below your last data entry.
"The date [value] is not valid"The date format in your CSV does not match your Xero organization's regional settings. Also triggered by textual month names ("January" instead of "01") or impossible date values like 31/02/2026.Check your date format under Settings > Organisation Settings. Reformat every date in the CSV to match that exact format (e.g., DD/MM/YYYY or MM/DD/YYYY).
"Duplicate invoice number"An invoice with this number already exists in Xero. This applies even if the original invoice was voided or deleted. Xero retains the number internally.Search your Xero invoice list for the existing entry. Either use a unique invoice number in your CSV or resolve the duplicate in Xero first.
"The account code [value] is not valid"The account code referenced in your CSV does not match any entry in your chart of accounts. This includes typos, leading zeros that were stripped, and archived accounts.Go to Settings > Chart of Accounts and verify the exact code. Copy it directly from Xero into your CSV to avoid mismatches.
"The tax rate [value] does not exist"The tax rate name in your CSV must be an exact, case-sensitive match to a tax rate configured in your Xero organization. Even a trailing space will cause this error.Navigate to Settings > Tax Rates and copy the exact tax rate name into your CSV. Watch for invisible trailing spaces or slight naming variations.
No error message (silent failure)The import fails silently, returns you to the import screen, or shows a generic "import failed" notification. This often points to encoding issues, a locked file, or structural problems the parser cannot categorize.Work through the diagnostic checklist above. Start with file encoding (re-save as CSV UTF-8), then check for trailing empty rows and column header mismatches.

The error messages above apply across both bank statement and invoice/bill imports. The next two sections cover targeted troubleshooting for each import type.


Invoice and Bill CSV Import Troubleshooting

Xero's invoice and bill CSV import has its own set of formatting requirements that differ significantly from bank statement imports. Most failures here are field-specific, and a single misformatted column can reject an entire file. For reference on the baseline import process, our step-by-step guide to importing invoices into Xero covers the correct workflow.

Multi-Line Invoices Require Repeated Invoice Numbers

Every line item row in your CSV must include the same invoice number for items that belong to the same invoice. Xero uses this field to group rows together. If you leave the invoice number blank on subsequent line items (assuming Xero will inherit it from the row above), each row will be created as a separate invoice. Double-check that every row for a given invoice carries an identical, consistently formatted invoice number.

Account Codes Must Be Formatted as Text

The Account Code column must be formatted as text, not number. Excel and Google Sheets will silently strip leading zeros from numeric cells. An account code of "0200" becomes "200," which will not match anything in your Xero chart of accounts. The fix: select the entire Account Code column, set the cell format to "Text," and re-enter any values that have already lost their leading zeros.

Export Format Is Not the Same as Import Format

This catches almost everyone at least once. Xero's CSV export format is not the same as its CSV import template format. You cannot export invoices from Xero, edit them in a spreadsheet, and re-import the file. The column headers, field order, and required fields differ between export and import. Always start from Xero's official import template, and map your data into that structure from scratch.

Tax Code and Calculation Mismatches

Tax codes in your CSV must exactly match the tax rate names configured in your Xero organization, including capitalization and spacing. A code of "GST on income" will fail if Xero expects "GST on Income."

Beyond naming, tax calculation errors are common with certain line configurations. Tax-inclusive invoices that contain 100% discount lines can cause Xero to reverse or miscalculate tax values during import. If the combination of your tax-inclusive flag, line amounts, and tax amounts is internally inconsistent, Xero will either reject the row or import incorrect figures. Verify your tax arithmetic manually on any discounted or zero-value lines before importing.

Duplicate Invoice Numbers Are Rejected

Xero enforces unique invoice numbers across your organization's history. Even if an invoice was voided or deleted, its number may still be reserved in the system. The import will reject any row that carries a number already in use. Before importing, check your Xero invoice register (including voided and deleted records) for conflicts, and renumber your CSV rows accordingly.

Import Behavior Limitations

Several constraints apply to what CSV import can and cannot do:

  • Draft status only: Bills imported via CSV arrive as "Drafts." Each one must be approved individually within Xero after import.
  • No payment marking: There is no way to mark invoices as "paid" during CSV import. Payment status must be applied manually after the invoices are imported.
  • No foreign currency support: CSV import does not support multi-currency transactions. If you need to import invoices in foreign currencies, you will need to use the Xero API, which does support this.

Row Limits Per File

Xero caps CSV imports at 3,000 rows per file for invoices and bills. Inventory item imports have a lower cap of 1,000 rows. If your dataset exceeds these limits, split the file into smaller batches before uploading. Ensure that all line items for a single multi-line invoice remain together in the same file when splitting.

Bank statement CSV imports have a different set of requirements, covered next.


Bank Statement CSV Import Troubleshooting

Xero's bank statement CSV import enforces strict format requirements for column names, date formats, and amount sign conventions. Unlike invoice imports, where Xero provides some flexibility, bank statement imports follow a rigid parsing logic that rejects files over minor formatting inconsistencies. If you have already reviewed how to import bank statements into Xero and are still hitting errors, the issues below are the most likely causes.

Date Format Mismatches

Bank statement dates must match your Xero organization's regional date format exactly. For most organizations, this means DD/MM/YYYY. A file exported from a US-based banking portal will typically use MM/DD/YYYY, which causes transactions to land on the wrong dates or fail outright.

Watch for these specific traps:

  • Textual month names like "25 Jan 2026" or "Jan-25-2026" are not accepted. Use numeric dates only.
  • Two-digit years (25/01/26) can be misinterpreted or rejected. Always use four-digit years.
  • Future dates are rejected entirely. If your date columns are formatted incorrectly and Xero interprets a value as a future date, the entire row fails.

Check your organization's date setting under Settings > General Settings > Date Format and reformat every date in your CSV to match before importing.

Amount Sign Conventions

This is one of the most common and least obvious bank statement import failures. Spends (payments out) must be entered as negative numbers. Xero does not clearly document this requirement, and the result of getting it wrong is not an error message. Instead, every outgoing payment imports as an incoming deposit, corrupting your reconciliation.

Before importing, open your CSV and verify:

  • Debits, withdrawals, and payments carry a negative sign (e.g., -150.00)
  • Credits and deposits are positive (e.g., 250.00)

If your bank exports all amounts as positive values with a separate "Debit/Credit" column, you need to manually apply negative signs to the debit amounts before import.

Column Structure Requirements

Xero expects three minimum columns with specific headers: Date, Amount, and Description. If your bank's CSV export uses different column names, such as "Transaction Date," "Value," or "Memo," the import may fail silently or produce a generic "file does not contain valid statement data" error.

Rename your CSV column headers to match Xero's expected names exactly. Capitalization matters. Do not add extra spaces before or after column names. A correctly formatted bank statement CSV looks like this:

Date,Amount,Description 25/02/2026,-150.00,Office supplies payment 25/02/2026,3200.00,Client payment received

Note the negative amount for the outgoing payment and the four-digit year in DD/MM/YYYY format.

Empty Rows and Trailing Data

Empty rows anywhere in the file, particularly at the end, trigger the "file does not contain valid statement data" error. This is especially common when exporting from Excel, where hidden rows below your visible data range persist in the saved CSV.

To fix this:

  • Open the CSV in a text editor (not Excel) and delete any blank lines at the bottom of the file
  • In Excel, select all rows below your last data row, right-click, and choose Delete (not just Clear Contents)
  • Check for empty rows between transactions as well, since these can split the file into segments that Xero cannot parse

Amount Formatting

The amount column must contain raw numbers only. Any non-numeric characters cause failures:

  • Currency symbols ($, £, €) must be removed
  • Thousand separators (1,500.00) should be stripped so only the decimal point remains (1500.00)
  • Comma as decimal separator (common in EU and AU locales where 1.500,00 means one thousand five hundred) must be converted to period-based decimals (1500.00) before import

Format the entire amount column as plain numbers with a period decimal separator, regardless of your local conventions.

File Size Limits

Xero recommends keeping bank statement CSVs under 500 rows per file. Larger files may timeout during processing or produce unpredictable errors that do not point to a specific row. If your bank export covers a long date range, split it into monthly or quarterly files and import them sequentially.

Many of these formatting issues stem from how different spreadsheet applications handle CSV export rather than from user error.


Platform-Specific CSV Issues: Mac, Windows, and Google Sheets

Different spreadsheet applications encode CSV files differently, and this single fact causes a disproportionate number of Xero import failures. A file that imports perfectly when saved from Windows Excel may throw errors when saved from Mac Excel using identical data. If your CSV content looks correct but Xero still rejects it, the problem is likely how your application saved the file, not what is in it.

Mac Excel

Mac Excel introduces two issues that are invisible when you open the file but cause problems during Xero import.

First, Mac Excel inserts a UTF-8 BOM (Byte Order Mark) at the very beginning of the file. This is a hidden three-byte sequence that Xero may interpret as part of your first column header. When this happens, Xero cannot match the header name to its expected field, and the import fails with a column mapping error even though the header looks correct on screen.

Second, Mac Excel uses LF (line feed) line endings rather than CRLF (carriage return + line feed). Some Xero import parsers expect CRLF, and LF-only files can cause rows to be misread or concatenated.

Mac Excel may also insert encoding artifacts or special characters that do not display in the spreadsheet view but corrupt the CSV output.

Fix: When saving from Mac Excel, select "CSV UTF-8 (Comma delimited)" as the file format rather than the default CSV option. If errors persist, open the file in a text editor such as TextEdit (switched to plain text mode) or VS Code, then re-save with UTF-8 encoding without BOM.

Windows Excel

Windows Excel defaults to Windows-1252 encoding rather than UTF-8. This encoding handles standard English characters without issue, but accented characters or special symbols in vendor names, descriptions, or account references will be corrupted or trigger parsing errors in Xero.

A second common issue: blank rows past the visible data range. Windows Excel sometimes retains formatting or phantom data in rows below your actual content, and Xero attempts to parse these empty rows as records, producing validation errors for missing required fields.

Fix: Save as "CSV UTF-8 (Comma delimited)" instead of the regular "CSV (Comma delimited)" option. Before saving, select all rows below your data and delete them entirely (right-click, Delete Row) to eliminate trailing blank rows.

Google Sheets

Google Sheets exports clean UTF-8 CSV by default, making it the most reliable option for Xero imports. There is no BOM insertion, encoding is consistent, and line endings are standardized.

The one risk with Google Sheets is locale-based auto-formatting. Depending on your Google account's locale settings, Google Sheets may reformat dates (switching from DD/MM/YYYY to MM/DD/YYYY) or change decimal separators (period vs. comma). These silent changes will cause Xero to reject date fields or misparse amounts.

Fix: Format all date and number columns as plain text before exporting. This prevents Google Sheets from applying locale-based transformations to your data.

LibreOffice Calc

LibreOffice Calc provides explicit encoding options in its save dialog, including character set and field separator selection. You can directly choose UTF-8 encoding and confirm the comma separator before saving. This transparency makes it generally reliable for Xero CSV preparation. Verify that the line ending format is set to CRLF if you encounter row-parsing errors.

The Fastest Fix for Persistent Encoding Problems

If a CSV created on one platform repeatedly fails in Xero and you cannot identify the specific encoding issue, use this workflow: open the file in Google Sheets, then download it as CSV. Google Sheets normalizes encoding to UTF-8, standardizes line endings, and strips hidden characters like BOM sequences. This effectively cleans the file regardless of which application originally created it.

If you find yourself repeatedly cleaning up CSV files, particularly when reformatting data extracted from PDFs or other source documents, the next section covers when the CSV workflow itself becomes the bottleneck.


When CSV Is Not the Answer

The troubleshooting steps earlier in this guide will fix most one-off CSV errors. But if you find yourself repeatedly reformatting the same files, correcting the same date fields, and re-importing after every failed attempt, the problem may not be your CSV file. The problem may be the CSV workflow itself.

Consider what happens when your source data lives in PDFs, scanned documents, or photographed invoices. The workflow looks like this: manually read the document, type the data into a spreadsheet, reformat every field to match Xero's CSV template, attempt the import, troubleshoot the errors, fix the formatting, and try again. Each step in that chain introduces a new opportunity for mistakes. And the data shows just how common those mistakes are. According to a Gartner survey of nearly 500 accounting professionals reported by CFO Dive, 59% of accountants make several errors every month, with mistakes commonly arising from manual work, misinterpretation of data, and time-pressured reviews of records. Adding a multi-step CSV formatting process on top of manual transcription only multiplies the risk.

Scenarios Where CSV Falls Short

Some Xero import problems are not formatting mistakes you can fix. They are structural limitations of the CSV workflow:

  • Multi-currency invoices. Xero's CSV import does not support foreign currency fields. If you process invoices in multiple currencies, CSV cannot carry that data into Xero regardless of how perfectly you format the file.
  • High-volume recurring imports. Formatting 50 or 200 invoices into Xero's exact CSV template every week is not sustainable. Manual formatting at that scale guarantees errors and consumes hours that compound month after month.
  • Data from scanned or photographed documents. When your source is a scanned PDF or a phone photo of a receipt, you are not just formatting data into CSV. You are transcribing it first, then formatting it. That means transcription errors layered on top of formatting errors.
  • Round-tripping exported data. Xero's CSV export format does not match its import template. If you need to export records, edit them, and re-import, you will spend significant time reformatting columns, headers, and date fields to match the import requirements.

If any of these describe your situation, no amount of troubleshooting will eliminate the friction. The workflow itself is working against you.

Bypassing the Formatting Chain Entirely

The alternative is to remove the manual formatting steps from the process altogether. Instead of transcribing data from documents into a spreadsheet and then wrestling with Xero's formatting requirements, data extraction tools read your source documents directly and output structured data already formatted to specification.

For users dealing with PDF invoices, scanned receipts, or image-based documents, automated invoice data extraction for Xero eliminates the transcription-to-CSV chain. Purpose-built extraction platforms accept PDFs (both native and scanned), JPGs, and PNGs as inputs, process batches of up to 6,000 documents in a single job, and output the results as Excel (.xlsx) or CSV (.csv) files. Critically, the output formatting is prompt-controlled: you specify date standardization (such as YYYY-MM-DD for Xero), decimal precision, and exact column naming so the resulting file matches Xero's import template without manual reformatting.

This approach works because the structured output is generated to specification rather than manually assembled. There is no transcription step where you misread a vendor name. No reformatting step where a date field silently converts to a serial number. No re-import cycle where you discover that row 47 had an extra comma. The data goes from source document to Xero-ready file in a single pass.

For a detailed walkthrough of this approach, see our guide on converting PDF invoices directly into Xero.

Whether you continue with CSV or move to an extraction-based approach, the checklist below catches the most common formatting errors before they reach Xero's import validator.


CSV Formatting Prevention Checklist

Before you click "Import" in Xero, run through this pre-import verification. Checking each item takes less than two minutes and prevents the majority of CSV errors covered in this guide.

  1. Date format matches your Xero organization's regional setting. Verify under Settings > General Settings. A DD/MM/YYYY file imported into a MM/DD/YYYY organization will silently swap days and months for any date where the day is 12 or below.
  2. No currency symbols, commas (as thousand separators), or text in amount fields. Amount columns should contain only digits, a single decimal point, and an optional negative sign. Remove dollar signs, pound signs, and thousand-separator commas.
  3. Decimal separator is a period, not a comma. Xero expects 1234.56 regardless of your locale. If your spreadsheet application uses comma decimals by default, convert before saving.
  4. No empty rows between the header row and data rows. A single blank row after the header will cause Xero to misinterpret the file structure or skip records entirely.
  5. No trailing empty rows below the last data row. Delete any blank rows after your final record. Spreadsheet applications often add these invisibly.
  6. File saved as "CSV UTF-8 (Comma delimited)" format. In Excel, select this option explicitly from the "Save as type" dropdown. Standard CSV may strip special characters or use the wrong encoding.
  7. For invoice CSVs: invoice number repeated on every line-item row. Each row in a multi-line invoice must carry the same invoice number. Xero uses this field to group line items into a single invoice.
  8. For invoice CSVs: account codes formatted as text with leading zeros preserved. If your account codes start with zero (e.g., 0200), format the column as Text before entering data. Otherwise your spreadsheet will strip the leading zero and the code will not match Xero's chart of accounts.
  9. For invoice CSVs: tax codes match Xero's configured tax rates exactly. Copy tax rate names directly from Settings > Tax Rates. A mismatch of even one character, including capitalization, will trigger an import error.
  10. For bank statement CSVs: payments out entered as negative numbers. Deposits are positive, withdrawals are negative. If your bank exports separate Debit and Credit columns, consolidate them into a single Amount column with the correct sign before importing.
  11. File size within limits. Keep general CSV imports under 3,000 rows, inventory imports under 1,000 rows, and bank statement imports under 500 rows for reliable processing.

Working through a failed import systematically: Start with the five most common causes: date format mismatches, hidden characters, amount formatting errors, encoding problems, and blank rows. If those check out, refer to the error message reference earlier in this guide to match Xero's specific warning to its root cause. From there, investigate issues specific to your import type, whether that is invoice/bill field requirements or bank statement column structure. If the file was created on a different operating system than the one you are importing from, check the platform-specific CSV export behavior covered above, as line endings and encoding defaults vary between Mac, Windows, and Google Sheets.

If you are still hitting errors after running through this checklist, revisit the error message reference and import-type-specific sections above. For users who find the CSV formatting cycle unsustainable, the previous section covered when alternative approaches become more efficient, and you can review Xero data capture alternatives beyond Hubdoc for tools that skip manual file preparation entirely.

Extract invoice data to Excel with natural language prompts

Upload your invoices, describe what you need in plain language, and download clean, structured spreadsheets. No templates, no complex configuration.

Exceptional accuracy on financial documents
1–8 seconds per page with parallel processing
50 free pages every month — no subscription
Any document layout, language, or scan quality
Native Excel types — numbers, dates, currencies
Files encrypted and auto-deleted within 24 hours