Connect your Xero organization to SKULabs and your sales orders become Xero invoices, and your purchase orders become Xero purchase orders and bills — automatically, on a recurring schedule.
This guide covers what the integration does, how to connect it, every setting on the page, how to control exactly which records sync, and how to read the sync reports when something does not look right.
How it works in one minute
SKULabs is the system of record. Xero is the accounting book.
SKULabs pushes records to Xero on a recurring schedule — roughly every 10 minutes. Importing orders and items from Xero is optional and is turned on separately, per store.
In SKULabs | Becomes in Xero |
Order | Invoice (Accounts Receivable, |
Purchase order | Purchase Order |
Purchase order that closes | Bill (Accounts Payable, |
Product | Item, matched by SKU and created if missing |
Customer | Contact |
Supplier (distributor) | Contact |
You can connect more than one Xero organization to a single SKULabs account. Each one gets its own settings panel, its own sync reports, and its own sync state — so an order can sync to one organization, several, or none, depending on the rules you set.
Before you start
You need:
A Xero organization you can authorize, with the standard or adviser role.
An income account in Xero — order sync will not run without one selected.
A purchases or cost-of-goods-sold account if you plan to sync purchase orders.
SKUs on your products. Line items are matched to Xero items by SKU. Products without a linked SKU cause the order to be skipped.
Tip: Try this against Xero's Demo Company first. Once you turn sync on, records start flowing into real books on the next scheduled run.
Connecting your Xero organization
Go to Settings → Accounting → Xero and click Connect Xero, or go to Settings → Stores → Add a Sales Channel and pick Xero.
Name — how this organization will appear in SKULabs. If you plan to connect more than one Xero organization, give each a name you will recognize (for example
Xero — USandXero — UK).Initial stock take — choose Manual (Do not automatically import) unless you actually want SKULabs to build stock levels from Xero.
Click Connect to Xero, sign in, and choose the organization to authorize.
You are returned to SKULabs and the organization appears as a store of type xero.
Reconnecting is safe. If you authorize an organization that is already connected, SKULabs recognizes the same Xero tenant, refreshes the stored credentials, and reactivates the existing store rather than creating a duplicate. The same Xero organization cannot be connected twice.
What SKULabs asks permission for
The connection requests these Xero scopes: contacts, settings, invoices, payments, bank transactions, and manual journals — plus offline access so the sync can keep running without you signing in again.
The Xero settings page
Everything that controls what gets pushed lives in Settings → Accounting → Xero. One panel appears per connected organization, with two collapsible sections: Order invoices and Purchase orders.
Click Save after any change.
If the account and tax dropdowns are empty, they are read live from that organization's Xero chart of accounts and tax rates — so a blank list usually means the connection needs reauthorizing. Reconnect the organization and they will populate.
Order invoices
Which orders sync: orders placed in the last 30 days, from your active non-Xero stores. Split parents and combined children are excluded. An order syncs once; with Keep invoices up to date on, it is pushed again whenever it changes afterward.
Setting | What it does |
Sync orders as invoices | The master switch for order sync. Requires an Income account. |
Keep invoices up to date when orders change | When an order changes after it synced — a refund, a removed item, an edit — push the new lines and totals to the existing Xero invoice. See What Xero will refuse to change. |
Void the invoice when the order is cancelled | Voids the Xero invoice once the order is cancelled on the sales channel. Requires Keep invoices up to date. Invoices with a payment applied are left alone. |
Include shipping and billing addresses on invoices | Adds the order's addresses to the Xero contact. |
Sync currency code | Sends the order currency. Requires multi-currency on your Xero organization. |
Use Xero auto increment for Invoices # | Let Xero own the numbering. SKULabs sends no invoice number, so Xero assigns the next one from your Organisation Invoice Settings, and the order number moves to the invoice Reference. |
Use store internal order number prefix for invoice numbers | Use each store's internal order number prefix instead of the default |
Income account | Required. The account invoice lines post to. |
Cost of goods sold account | Used when creating items in Xero. |
Inventory asset account | Optional. When set, products are created as tracked inventory items in Xero. Leave blank for untracked items. |
Sales tax rate | The tax rate applied per invoice line. |
Payment account | Optional but important — see below. |
Paid vs. unpaid invoices
This is the setting most often misunderstood:
Payment account selected → a paid order becomes a paid invoice, with a payment applied against that account.
Payment account blank → every invoice lands in Accounts Receivable as awaiting payment, no matter how the order was paid.
Partially refunded and partially paid orders pay only the amount actually due, not the full total.
Purchase orders and bills
Which POs sync: closed purchase orders from the last 30 days. Turn on Sync open purchase orders too to also push POs that are still open.
Setting | What it does |
Sync purchase orders | The master switch for PO sync. |
Sync open purchase orders too | Also create the Xero Purchase Order while the PO is still open. Otherwise the Purchase Order (and its Bill) are created together only when the PO closes. |
Keep purchase orders and bills up to date when a PO changes | Push edits to the Xero Purchase Order and its Bill. Requires Sync purchase orders. |
Create a Bill when a purchase order closes | Also post a Bill (Accounts Payable) referencing the PO number. Leave off to record the Purchase Order only. |
Use Xero auto increment for PO # | Xero assigns the purchase order number and the SKULabs PO number moves to the Reference. Bills keep the SKULabs PO number — Xero has no separate bill sequence. |
Purchases account | Account for PO and bill lines. Falls back to your cost-of-goods-sold account when blank. |
Purchases tax rate | Tax rate for PO and bill lines. Falls back to your sales tax rate when blank. |
The supplier must exist. The Xero supplier comes from the purchase order's distributor in SKULabs. A PO with no distributor is skipped with "Supplier (distributor) not found".
Using the Bill to adjust inventory in Xero
If you keep tracked inventory in Xero, the Bill is the document that moves your quantities. The Xero Purchase Order never does — a Xero purchase order is a non-posting document, so whatever its status, it leaves both your accounts and your inventory quantities untouched.
To have a closed SKULabs purchase order add stock in Xero:
In Settings → Accounting → Xero, select an Inventory asset account. Only accounts of type Inventory in your Xero chart of accounts appear in the list.
Turn on Create a Bill when a purchase order closes.
Click Save, then close the purchase order in SKULabs.
On the next run SKULabs creates the Bill as authorized, and Xero increases the item's quantity on hand and carries the cost on your inventory asset account until the item sells.
Not every line moves stock:
What is on the bill line | What Xero does |
A product whose Xero item is tracked as inventory | Quantity on hand increases by the line quantity. |
A product whose Xero item is untracked | No quantity change. The cost posts to your Purchases account, or your cost-of-goods-sold account when that is blank. |
A custom line item | No quantity change. Custom lines have no SKU, so they are never matched to a Xero item. |
Only items SKULabs creates are set up as tracked. When a SKU already exists in Xero, SKULabs matches it and leaves its settings alone — so an item that is untracked in Xero stays untracked, even after you select an inventory asset account. Change tracking on those items in Xero, or create the item in Xero the way you want it before its first sync.
The Bill carries the quantity ordered, not the quantity received. Order 100, receive 80, and close the purchase order, and the Bill still shows 100 — so Xero adds 100 to quantity on hand and bills the full ordered value. If you want Xero to match what actually arrived, edit the purchase order down to the received quantity before closing it. With Keep purchase orders and bills up to date on, later edits are pushed to the Bill as well, as long as Xero still allows the change.
Tracked inventory cuts both ways. With tracked items, the invoices SKULabs pushes also reduce quantity on hand — and Xero does not allow a tracked item to go negative. If Xero's quantity on hand is behind your real stock, Xero can refuse the invoice and the order shows as Failed in the sync report. SKULabs remains the system of record for warehouse quantities and never pushes stock levels or adjustments, so Xero's numbers move only from the documents it receives. If you do not need inventory valuation in Xero, leave Inventory asset account blank and keep your items untracked.
Choosing exactly which orders and POs sync
By default, every eligible record syncs to every connected Xero organization. That is usually what you want with a single organization.
To be selective — or to route different records to different organizations — use Settings → Shipping → Rules.
Add a rule with one of these actions, found in the — Xero — section at the bottom of the action list:
Create Xero Order for
<organization>— routes orders.Create Xero Purchase Order for
<organization>— routes purchase orders.
One option is generated per connected organization, so the action you pick is also the destination.
This is a switch, not just a filter. As soon as any rule with a Xero order action exists, broadcasting stops: only orders matching a rule will sync. The same applies independently to purchase orders. If records suddenly stop syncing after you add your first rule, this is why.
Purchase orders can be matched on created date, warehouse, supplier, and tag.
Importing from Xero (optional)
The push described above is the main use of the integration. SKULabs can also pull from Xero, and that is configured per store, not on the accounting page.
Go to Settings → Stores, open the Xero store, and expand Access credentials & integration settings.
Setting | What it does |
Import non-inventory products | Also import products Xero does not track quantities for. |
Include unpaid invoices | Import authorized-but-unpaid invoices, not just paid ones. |
Maximum order age (days) | How far back to look. Defaults to 365. |
Internal order number prefix | Prefix for the SKULabs internal order number. |
Turn the import itself on with Enable orders sync at the top of the store page.
No sync loops. Every invoice SKULabs creates is stamped Synced by SKULabs in its reference, and the importer skips those. Your own pushes never come back as new orders.
SKULabs can also push price and cost updates to matching Xero items by SKU.
Re-syncing a single order
You do not have to wait for the schedule. Open the order and choose Menu → Re-sync to Xero.
This pushes that one order to every connected organization it qualifies for, and reports the result per organization. It is the fastest way to confirm a settings change did what you expected.
A synced order also shows:
a green Synced to Xero tag, and
a note recording the invoice number, for example
Xero (Xero) Invoice Number: SL1664.
Orders that fail carry a red Failed Xero Create Invoice tag; failed purchase orders carry Failed Xero PO Sync. Both are ordinary tags, so you can filter and save views on them.
The sync schedule and what happens after a failure
The sync runs about every 10 minutes.
When a record fails, SKULabs does not retry it immediately or give up on it. It backs off on a growing delay and keeps trying:
Failure | Next attempt after |
1st | ~30 minutes |
2nd | ~1 hour |
3rd | ~2 hours |
4th and beyond | ~4 hours |
In the meantime the record shows in the report as "Recently failed 3x (reason); retry after 2h" — that is the backoff working, not a new error each run.
If Xero returns a rate limit, SKULabs slows itself down and honors the wait Xero asks for.
If your authorization is revoked or expires, sync for that organization pauses rather than failing every record, and the store is deactivated so you are prompted to reconnect.
Reading the sync reports
Settings → Advanced → Sync reports is where every run is recorded. Filter the type to Xero Invoice or Xero Purchase Order.
Click the magnifier on any row for the per-record detail.
Each record lands in one of these states:
Status | Meaning |
Synced | Created in Xero. The invoice or PO number is shown. |
Updated | An existing Xero document was changed to match. |
Skipped | Deliberately not sent — see the reasons below. This is normal and usually not a problem. |
Blocked | Xero refused the change on its own document rules. See the next section. |
Failed | Something went wrong. This one retries on the backoff schedule. |
Common "Skipped" reasons, and what to do
Reason | What it means |
Already up to date in Xero | Nothing changed since the last push. The most common line in any report — expected. |
No linked products or empty order | No line item resolves to a SKULabs product. Link the products. |
Order has unlinked line items | Some lines are not linked to products. Link them, then re-sync. |
Supplier (distributor) not found | The purchase order has no distributor set. |
Order is cancelled; nothing was sent to Xero | The order was cancelled before it ever synced, so there is no invoice to create. |
No income account configured | Select an Income account in the settings panel. |
Order does not match this organization's rules | Expected when you are routing with shipping rules. |
Recently failed Nx; retry after … | The backoff described above. Wait, or fix the underlying reason and re-sync. |
What Xero will refuse to change
Keeping invoices up to date is limited by Xero's own accounting rules, not by SKULabs. These are the cases where an update is reported as Blocked and the Xero document is deliberately left alone:
Invoices
The invoice is voided or deleted in Xero.
The invoice falls on or before your Xero lock date (period lock or end-of-year lock).
A credit note has been applied.
A prepayment or overpayment is allocated.
A payment against it has been reconciled.
Purchase orders and bills
The Xero purchase order is already marked billed or deleted.
The bill is in a locked period, or has a reconciled payment or a credit note.
About payments. Xero only allows amounts to change while nothing is paid against an invoice. So when SKULabs updates a paid invoice, it removes the payment it applied, makes the change, and re-applies it. Reconciled payments cannot be removed, which is why a reconciled invoice is left alone entirely.
Other Xero behavior worth knowing before you file a bug:
SKULabs never creates credit notes. A fully refunded order is not automatically credited in Xero.
An order cancelled after its invoice was paid is not voided.
Disconnecting
Open the Xero store under Settings → Stores and click Disconnect in Access credentials & integration settings.
This revokes the token with Xero and deactivates the store in SKULabs. Records already in Xero stay exactly as they are — nothing is deleted or reversed. Your settings are preserved, so reconnecting the same organization picks up where you left off.
FAQ
How soon after an order appears will it reach Xero?
Within about 10 minutes, on the next scheduled run. Use Re-sync to Xero on the order if you need it immediately.
Can I connect two Xero organizations?
Yes. Each gets its own settings panel and its own sync reports. Use shipping rules to route records, or leave rules empty to send everything to all of them.
Why is my invoice sitting as awaiting payment when the order was paid?
No Payment account is selected. Select one and re-sync.
Will old orders sync when I turn this on?
Only orders from the last 30 days are eligible, and closed purchase orders from the last 30 days.
Will SKULabs change my Xero invoice numbering?
Only if you want it to. By default invoice numbers are built from the order number with an SL prefix. Turn on Use Xero auto increment for Invoices # to keep your own Xero sequence — the order number then appears in the invoice Reference.
Can I control which accounts a specific product posts to?
Yes. SKULabs creates a Xero item only when nothing matches the SKU, using the accounts configured above. To control them yourself, create the item in Xero first with the accounts you want — SKULabs matches it by SKU and leaves its settings alone.
Does the integration push inventory levels to Xero?
No — SKULabs never sends stock levels or inventory adjustments, and prices and costs are the only item values it pushes. If you set an Inventory asset account, your products are created as tracked inventory items and Xero then moves its own quantities from the bills and invoices it receives. See Using the Bill to adjust inventory in Xero.
An order is tagged Failed Xero Create Invoice. What now?
Open Settings → Advanced → Sync reports, filter to Xero Invoice, and read the reason on that order. Fix the cause, then use Menu → Re-sync to Xero rather than waiting for the backoff.
Related articles
Still stuck? Contact us at support@skulabs.com with the order or PO number and the date of the sync run, and we can pull the matching report.










