How to import purchase orders into Xero from a CSV
Updated 17 October 2026
Xero cannot import purchase orders from a CSV or Excel file. It has CSV imports for bills and sales invoices, but a purchase order has to be raised in Xero one at a time or created through the Xero API. To create many at once from a spreadsheet, you need an app that sends them through the API for you.
What Xero has said about purchase order imports
A request for purchase order import and export has been on Xero Product Ideas since November 2013. In May 2022 Xero's community manager replied that Xero did "not have a direct plan to build export and import functionality in Purchase Order any time soon", and the idea is marked "Not in pipeline". A newer request, "Purchase Orders - Import from an Excel file", had 101 votes and the status "Submitted" in October 2026, with users still asking for it in September 2026.
What the Xero API needs to create a purchase order
The Xero Accounting API creates purchase orders through its PurchaseOrders endpoint. Two things are required:
- A contact that already exists in Xero. The endpoint "does not create new contacts", so every supplier has to be set up in Xero first.
- At least one line item, with a description, or a quantity and unit amount, or both.
Everything else is optional, and some of it has a default:
- The date defaults to today, in your organisation's time zone.
- The purchase order number is generated from your organisation's invoice settings if you leave it out.
- Line amounts are treated as excluding tax unless you say otherwise.
- Each line can carry an account code, a tax type, an item code, a discount and up to two tracking categories.
How to lay out the CSV
Put one line item on each row. Rows with the same purchase order number become one purchase order, and its contact, date and delivery date are taken from its first row. These are the columns Purchase Order Importer reads:
| Column | Needed | Example | Notes |
|---|---|---|---|
| Contact Name | Yes | ACME Supplies | Must match the full contact name in Xero |
| PO Number | Yes | PO-001 | Rows sharing a number become one purchase order |
| Invoice Date | Yes | 01/02/2026 | The purchase order date |
| Due Date | Yes | 15/02/2026 | The delivery date |
| Description | No | Office desk - oak | |
| Quantity | Yes | 2 | |
| Unit Amount | Yes | 349.99 | A £ sign, thousands commas or brackets for a negative are fine |
| Account Code | Yes | 300 | A code from your chart of accounts |
| Tax Type | Yes | 20% | A UK VAT rate name or a Xero tax type code |
| TrackingName1 and TrackingOption1 | No | Region, North | A second pair, TrackingName2 and TrackingOption2, is also read |
Column names are flexible: Qty, Amount, Date, Delivery Date and Purchase Order Number are recognised too. Here is a file with two purchase orders, the first with two lines:
Contact Name,PO Number,Invoice Date,Due Date,Description,Quantity,Unit Amount,Account Code,Tax Type,TrackingName1,TrackingOption1
ACME Supplies,PO-001,01/02/2026,15/02/2026,Office desk - oak,2,349.99,300,20%,Region,North
ACME Supplies,PO-001,01/02/2026,15/02/2026,Ergonomic chair - mesh,4,189.50,300,20%,Region,North
XYZ Services,PO-002,01/02/2026,28/02/2026,Consulting hours,10,85.00,400,No VAT,,Four details cause most of the problems:
- Dates must be written
01/02/2026(day first) or2026-02-01. A date without leading zeros, such as1/2/2026, is not read, and Excel sometimes saves dates that way. - Tax rates can be written as UK VAT names.
20%,20% (VAT on Expenses)andStandardbecome Xero's 20% rate on expenses, and5%the 5% rate.0%andZero Ratedbecome zero-rated,No VAT,NoneandNo Taxbecome no VAT, andExemptstays exempt. A Xero tax type code such asINPUT2is passed straight through, which is what an organisation outside the UK should use. A value that is neither a known name nor shaped like a Xero code is set to no VAT with a warning, so read the warnings before you send. - Contact names must match the full contact name in Xero, so "ACME Supplies Ltd" in the file will not find a contact called "ACME Supplies".
- Tracking categories and options must already exist in Xero and be spelled the same. When Xero's API does not recognise a tracking option, it saves the line without it and reports no error.
Create the purchase orders with Purchase Order Importer
Purchase Order Importer is FourFourFive's free Xero app for creating purchase orders in bulk from a CSV.
- Create a free FourFourFive account and connect the Xero organisation the orders belong to.
- Open Purchase Order Importer and choose that organisation.
- Upload your CSV (up to 5MB), or download the template from the upload screen and fill it in. The file is read in your browser.
- Check the preview. Rows are grouped into purchase orders, errors such as a missing column or an unreadable date or amount are listed, and so are warnings, such as an unknown tax rate or a row whose contact differs from the first row of its purchase order.
- Check contacts. Every contact name is looked up in your Xero organisation, and any that are not found are marked so you can create them in Xero first.
- Send. The purchase orders are created in Xero as drafts, 25 to a request, and you see the result for each one, including Xero's own message for any it refused. Failed ones can be retried once with Xero numbering them.
- Review the drafts in Xero and approve them there.
The importer also checks the tracking on every line after Xero saves it, and warns you when Xero has dropped a tracking category or option that did not match.
Sources
- Xero Product Ideas, Purchase Orders - Import / Export function. Posted November 2013; Xero's reply of 17 May 2022; status Not in pipeline
- Xero Product Ideas, Purchase Orders - Import from an Excel file. Posted October 2023; status Submitted
- Xero Developer, Accounting API: Purchase Orders. Required and optional elements, contacts, defaults, tracking
- Xero Central, Import bills and credit notes
- Xero Central, Import customer invoices