Xero Invoice Import: Complete Guide for Bookkeepers
Everything you need to know about importing bills and invoices into Xero — CSV format requirements, common errors, multi-currency, and how to speed up the process with AI extraction.
Why Xero's CSV Import Matters for Bookkeepers
Xero is one of the most popular accounting platforms for small businesses, and for good reason: it's clean, its bank feed integration is solid, and its multi-currency support is genuinely usable. But entering bills one at a time through the UI is slow when you're managing high invoice volume for clients.
Xero's CSV import feature solves this. Instead of clicking through the bill entry screen for each invoice, you prepare a CSV file with all your bills, upload it in one step, and Xero creates all the draft bills at once. For a bookkeeper processing 50–200 invoices per client per month, this is the difference between a morning of data entry and a 20-minute task.
This guide covers exactly what Xero requires, the errors that trip people up, and how to get from a stack of PDF invoices to a completed Xero import with minimal friction.
Xero Bill Import CSV Format
Xero's bill import uses a specific set of column names. The full column set is:
| Column | Required? | Notes |
|---|---|---|
| ContactName | Yes | Must match an existing Xero contact, or Xero will create a new one |
| EmailAddress | No | Used for new contact creation only |
| POAddressLine1–4 | No | Mailing address for the contact |
| POCity | No | |
| PORegion | No | State/province |
| POPostalCode | No | |
| POCountry | No | |
| InvoiceNumber | Yes | Must be unique per contact |
| Reference | No | Internal reference/PO number |
| InvoiceDate | Yes | Date the invoice was issued |
| DueDate | Yes | Payment due date |
| Description | Yes | Line item description |
| Quantity | Yes | Number of units (use 1 if not applicable) |
| UnitAmount | Yes | Price per unit (not including tax) |
| Discount | No | Percentage discount on the line item |
| AccountCode | Yes | Xero chart of accounts code (e.g., 400, 310) |
| TaxType | Yes | Must match Xero's exact tax type names for your region |
| TrackingName1 | No | Tracking category name |
| TrackingOption1 | No | Tracking category option |
The minimum viable import needs: ContactName, InvoiceNumber, InvoiceDate, DueDate, Description, Quantity, UnitAmount, AccountCode, TaxType.
Step-by-Step Import Process in Xero
1. In Xero, go to Accounts → Purchases → Bills to Pay
2. Click the Import button (top right area of the bills list)
3. Download Xero's sample CSV template if you haven't set yours up yet
4. Prepare your CSV with the columns above — one row per line item
5. Save as CSV (not XLSX)
6. Click Browse, select your file, click Import
7. Xero shows a preview — review for errors before confirming
8. Click Complete Import
9. Bills are created as drafts — review and approve individually or in bulk
Common Import Errors and How to Fix Them
Wrong date format
Xero accepts dates in DD/MM/YYYY or YYYY-MM-DD format. The format it accepts depends on your Xero organization's region settings. If your Xero is set to a US region, it expects MM/DD/YYYY. If set to UK/AU/NZ, it expects DD/MM/YYYY. Dates formatted inconsistently will throw an error on import.
Fix: standardize all dates in your CSV to YYYY-MM-DD (ISO format) — Xero accepts this regardless of region settings.
Missing ContactName
If ContactName is blank, Xero rejects the row entirely. This is the most common import failure. ContactName must be present on every row, even for multi-line-item bills.
Fix: ensure every row has a ContactName. For multi-line bills, repeat the ContactName (and InvoiceNumber, InvoiceDate, DueDate) on each row.
AccountCode not found
If the AccountCode in your CSV doesn't exist in the Xero chart of accounts for that organization, the import fails for those rows. Common mismatches: using the account name instead of the code number, or using an account code that exists in one client's Xero but not another's.
Fix: export the chart of accounts from Xero before preparing your import file. Use only codes from that list.
TaxType mismatch
Xero tax type names are region-specific and must be exact strings. In New Zealand: "GST on Expenses", "GST on Income", "No Tax". In Australia: "GST", "BAS Excluded", "GST Free Expenses". In the UK: "20% (VAT on Expenses)", "Zero Rated Expenses". In the US/Canada: "TAX", "NONE", or the exact name of the tax rate you've configured.
Fix: check your Xero organization's tax rates (Settings → General Settings → Tax Rates) and copy the exact name strings from there.
Duplicate invoice number
If an InvoiceNumber already exists for that ContactName in Xero (even in draft), Xero rejects the row as a duplicate.
Fix: before importing, filter out invoice numbers that already appear in Xero's bills list for those contacts.
Multi-Currency Bills in Xero
Xero supports multi-currency if you have the Multi-Currency add-on enabled (available on Business or higher plans). To import a bill in a foreign currency:
- The ContactName must have that currency assigned in Xero (set in the contact record)
- Xero will use the exchange rate for the InvoiceDate (using Xero's live rates or your manually entered rate)
- You cannot specify the exchange rate in the CSV import — if you need a specific rate, set it manually after import on the bill record
If a contact doesn't have a foreign currency assigned, Xero will import the bill in your home currency regardless of what the invoice says. Always verify currency assignment on the contact before importing foreign-currency bills.
Xero Bill Approval Workflow
Bills imported via CSV land as Draft. The Xero workflow is:
1. Draft → Review and edit. Not yet visible in AP aging.
2. Awaiting Approval → Submitted for internal approval. Visible in reporting.
3. Awaiting Payment → Approved and scheduled. Shows in AP aging and cash flow.
4. Paid → Payment recorded or matched via bank feed.
For bookkeeping practices where the client approves bills: import as draft, notify the client, they approve in Xero (or you approve on their behalf), then schedule payment.
Multi-Line-Item Bills in the CSV
A bill with three line items is represented as three rows in the CSV, with the same ContactName, InvoiceNumber, InvoiceDate, and DueDate on each row, and a different Description, Quantity, UnitAmount, and AccountCode per row.
Example:
ContactName,InvoiceNumber,InvoiceDate,DueDate,Description,Quantity,UnitAmount,AccountCode,TaxType
Acme Supply Co,INV-1042,2026-02-15,2026-03-15,Office Supplies,1,84.00,400,NONE
Acme Supply Co,INV-1042,2026-02-15,2026-03-15,Shipping & Handling,1,12.00,400,NONE
Acme Supply Co,INV-1042,2026-02-15,2026-03-15,Tax,1,9.60,420,NONEXero groups these three rows into one bill with three line items on import.
Tips for High-Volume Imports
Batch by supplier. When importing hundreds of bills, grouping by supplier makes it easier to spot anomalies (one vendor's bills should have consistent AccountCodes and TaxTypes).
Validate before uploading. Run a quick check on your CSV: no blank ContactNames, no blank InvoiceNumbers, dates in the right format, AccountCodes exist in the target Xero org. Catching these before upload saves the round-trip of an import failure.
Use consistent account codes. Build a mapping table: vendor category → Xero account code. Apply it programmatically so you're not making judgment calls on account codes per invoice.
Match contacts by name exactly. Xero's contact matching is case-sensitive and space-sensitive. "Acme Supply" and "Acme Supply Co" create two contacts. Standardize vendor names in your CSV against the Xero contact list before import.
How AI Extraction Speeds Up the Workflow
The bottleneck in Xero CSV import isn't the import itself — it's preparing the CSV. That means reading each PDF invoice, extracting vendor name, invoice number, dates, line items, totals, and mapping to the right account codes.
SkipEntry handles this extraction step. Upload your PDF invoices (individually or in batch), and it produces a Xero-ready CSV: ContactName from the vendor name on the invoice, InvoiceDate and DueDate extracted and formatted as YYYY-MM-DD, line item descriptions, amounts, and quantities in the right columns. You add AccountCode and TaxType based on your client's mapping (which you can set as defaults by vendor), and the file is ready to import.
For a bookkeeper processing 100 invoices for a client, this turns a 3-hour manual entry session into a 20-minute review and import workflow.