Bulk Import Bills into Xero from a Spreadsheet

A bill is not an invoice with the sign flipped. Xero treats them differently, and a spreadsheet import should too.

Why bills need their own template, not the invoice one

Sales invoices and supplier bills both end up as multi-line accounting documents in Xero, but they point in opposite directions and use different fields. A bill's document number is the supplier's own invoice number, not one Xero assigns. The contact is a supplier, not a customer. Bills have no branding theme and no free-text "Reference" field, because nothing about a bill is customer-facing. Reusing an invoice template for bills either leaves fields you don't need or is missing ones you do.

What a bill row actually needs

  • Supplier name, matched against the organisation's live contact list, or a new name Xero will create as a contact.
  • The supplier's own invoice number as the bill number, used consecutively across rows to group multi-line bills.
  • Bill date and due date, with due date left blank to fall back to the contact or organisation's default payment terms.
  • Description, quantity, unit amount, and an expense account code per line.
  • A tax rate valid for expense accounts specifically, not a revenue tax rate copied from an invoice sheet.

Building a multi-line bill

A single bill with several expense lines is built the same way a multi-line invoice is: one row per line, with the bill number, supplier name, and dates repeated only on the first row and left blank on the rows that continue it. The lines need to sit in consecutive rows sharing that same bill number. What differs from an invoice is the account codes themselves: bills post to expense accounts, and each account only accepts tax rates flagged for expense use in the organisation's chart of accounts, so a tax rate that's valid on a sales invoice can be rejected outright on a bill.

Validate before anything posts

  1. Resolve every supplier name against the organisation's live contact list, so a typo doesn't quietly create a duplicate supplier.
  2. Check expense account codes exist and are active, not carried over from a different organisation's chart of accounts.
  3. Confirm the tax rate on each line is valid for an expense account, and that line amounts sum to what the bill total should be.
  4. Check whether the bill number already exists in Xero. If it does and the bill is still draft or submitted, the import updates it. If it's already authorised or paid, leave it alone and correct it in Xero directly.

Importing invoices or updating existing bills?

Sales invoices use a similar template with customer, revenue-account, and revenue-tax fields instead. See how to bulk import invoices into Xero from a spreadsheet. Re-running a bill import after a correction? See how to re-import Xero invoices and bills without creating duplicates.

Validate bills against your live Xero organisation

Bulk Importer for Xero uses a dedicated Bills template with supplier, expense-account, and expense-tax-rate validation, and only updates bills that are still draft or submitted. It's built by Cody Labs and is not affiliated with Xero.

See Bulk Importer for Xero