If you issue invoices outside your accounting software, whether from a billing tool, a spreadsheet or a practice-management system, at some point they need to get into the books. Retyping them is slow and error-prone. Both QuickBooks Online and Xero can import sales invoices from a CSV file, as long as the file is laid out the way they expect.
This guide goes through both layouts column by column. They're the same layouts Branded Invoices exports, so you can compare against its demo file. Software changes, so check the current template in your own file before a big import.
How invoice imports work
- One row per invoice line. An invoice with three lines is three rows. Rows with the same invoice number are combined into one invoice.
- Invoice-level fields repeat on every row: customer, invoice number, dates.
- Amounts are before tax. You supply the price and a tax code, and the software calculates or checks the tax.
- Codes must already exist in the file. Tax codes, account codes, and in QuickBooks the products and services, need to match what's set up in the company you're importing into.
The Xero layout
Xero's sales invoice template uses these columns, in this order. Columns marked with an asterisk are required.
| Column | What goes in it |
|---|---|
| *ContactName | The customer, spelled exactly as the existing contact. A new spelling creates a new contact. |
| EmailAddress | Optional. Used if a new contact is created. |
| POAddressLine1–4, POCity, PORegion, POPostalCode, POCountry | Optional postal address for new contacts. Leave blank for existing ones. |
| *InvoiceNumber | The same on every line of one invoice. |
| Reference | Optional: a PO number or period, shown on the invoice. |
| *InvoiceDate, *DueDate | In the date format of your file. Watch for day/month order. |
| InventoryItemCode | Optional item code, if you use Xero items. |
| *Description | The line description. |
| *Quantity | Hours, units or 1 for a fixed fee. |
| *UnitAmount | Price per unit, before tax. |
| Discount | Optional line discount. |
| *AccountCode | The revenue account, e.g. 200, which is the sales account in many Xero charts. Check yours. |
| *TaxType | The tax rate's name in your file, e.g. "HST on Sales" in a Canadian file. |
| TrackingName1, TrackingOption1, TrackingName2, TrackingOption2 | Optional tracking categories, such as department or region. |
| Currency | For multi-currency files, e.g. CAD. |
| BrandingTheme | Optional: which invoice template to use. |
During the import, Xero asks whether the amounts are tax exclusive or tax inclusive. For a file like the one above, choose tax exclusive.
The QuickBooks Online layout
QuickBooks Online's invoice import maps your columns to its fields during the import. A file with these headings maps cleanly:
| Column | What goes in it |
|---|---|
| InvoiceNo | The same on every line of one invoice. |
| Customer | The customer's display name, exactly as in QuickBooks. |
| InvoiceDate, DueDate | In your file's date format. |
| Terms | A term that exists in QuickBooks, e.g. Net 30. |
| Memo | Optional message on the invoice. |
| Item(Product/Service) | A product or service name that exists in QuickBooks. |
| ItemDescription | The line description. |
| ItemQuantity, ItemRate | Quantity and price per unit, before tax. |
| ItemAmount | Quantity × rate, before tax. |
| ItemTaxCode | The tax code's name in your file, e.g. "HST ON" in a Canadian file. |
| ItemTaxAmount | The tax on the line. |
If you want QuickBooks to keep your own invoice numbers, check that custom transaction numbers are turned on in its sales settings before importing.
A worked example
A fictional consultancy, Fernhill Advisory, has one invoice to import: INV-1042 to Larch Street Bakery Ltd., two lines, Ontario HST at 13%, issued October 31 and due November 30. In Xero, the two rows look like this (blank optional columns left out):
| *ContactName | *InvoiceNumber | Reference | *InvoiceDate | *DueDate | *Description | *Quantity | *UnitAmount | *AccountCode | *TaxType | Currency |
|---|---|---|---|---|---|---|---|---|---|---|
| Larch Street Bakery Ltd. | INV-1042 | PO 4471 | 10/31/2026 | 11/30/2026 | Pricing strategy workshop, Oct 8 | 1 | 2400.00 | 200 | HST on Sales | CAD |
| Larch Street Bakery Ltd. | INV-1042 | PO 4471 | 10/31/2026 | 11/30/2026 | Follow-up advisory, Oct 9–31 | 6 | 175.00 | 200 | HST on Sales | CAD |
And in QuickBooks Online:
| InvoiceNo | Customer | InvoiceDate | DueDate | Terms | Item(Product/Service) | ItemDescription | ItemQuantity | ItemRate | ItemAmount | ItemTaxCode | ItemTaxAmount |
|---|---|---|---|---|---|---|---|---|---|---|---|
| INV-1042 | Larch Street Bakery Ltd. | 10/31/2026 | 11/30/2026 | Net 30 | Workshop | Pricing strategy workshop, Oct 8 | 1 | 2400.00 | 2400.00 | HST ON | 312.00 |
| INV-1042 | Larch Street Bakery Ltd. | 10/31/2026 | 11/30/2026 | Net 30 | Advisory hours | Follow-up advisory, Oct 9–31 | 6 | 175.00 | 1050.00 | HST ON | 136.50 |
Either way, the result is one invoice with a subtotal of $3,450.00, HST of $448.50 and a total of $3,898.50. The tax codes "HST on Sales" and "HST ON" and the account code 200 are examples from Canadian files. Yours may be named differently, and a UK or Australian file will use different codes again.
Before you import
- Match every customer name to an existing contact or customer, character for character.
- Copy tax codes from the file itself, not from a template or another client's file.
- Check the revenue account codes (Xero) or products and services (QuickBooks) exist.
- Check the date format. 03/11/2026 is March 11 in one file and November 3 in another.
- Use plain numbers: no currency symbols or thousands separators in amount columns.
- Save as CSV in UTF-8, so accented names come through.
After you import
- Compare totals: number of invoices, subtotal, tax and total against your source.
- Open one invoice of each type and check the lines, tax and account.
- Look for duplicate contacts created by a name that didn't match.
- Check the status. Imported invoices may arrive as drafts that need approving before they count.
- Lock the source. Once a batch is imported, don't edit those invoices in the source system; issue a credit note instead, so the two never disagree.
Common mistakes
- Tax-inclusive amounts in a tax-exclusive import. Every invoice comes out too high.
- A tax code from a different region or file. The import fails, or worse, succeeds with the wrong tax.
- Different invoice-level fields on different rows. If two rows of one invoice have different dates or customers, the import rejects or splits it.
- Importing the whole month first. Test with two or three invoices before importing fifty.
Getting the invoice right in the first place matters too. See What to put on a professional services invoice.
Frequently asked questions
Can you import invoices into QuickBooks Online from a CSV?
Yes. QuickBooks Online has an invoice import in its Import data tool. Each row is one invoice line, with columns for the invoice number, customer, dates, terms, product or service, description, quantity, rate, amount, tax code and tax amount. Rows sharing an invoice number become a single invoice.
How do I import invoices into Xero?
Use the sales invoice import in Xero's Invoices area and upload a CSV in Xero's template layout. Required columns are marked with an asterisk, including contact name, invoice number, invoice date, due date, description, quantity, unit amount, account code and tax type. Each row is one line of an invoice.
Why does my invoice import fail on tax codes?
Because tax codes are specific to each company file and region. A Canadian Xero file might use 'HST on Sales', a UK one '20% (VAT on Income)'; QuickBooks Online codes differ again. The value in the CSV must match a tax code that exists in the file you're importing into, spelled exactly the same way.
Should invoice CSV amounts include tax?
Usually not. Give the price before tax and the tax code, and let the accounting software calculate the tax. Xero asks during import whether amounts are tax exclusive or inclusive, so make sure the setting matches your file.