Integration

Shopify to
Xero

Shopify sales, posted the way you would post them yourself. One consolidated sales invoice per period and per currency, with line-level account coding, tax split by the rate actually charged and no duplicates.

1invoice
Per period, per currency
Daily or weekly
Statement period
99.9%
Uptime SLA
Supply Lens live flow monitor Live
Statement period closed Tue 8 Sep · 142 orders · 3 refunds · GBP and EUR PERIOD END
Tax analysed line by line 20%: £9,412.50 · 5%: £312.00 · zero rated: £884.20 ANALYSING
Lines coded and grouped Sales, shipping, discounts, refunds → account codes PROCESSING
Xero invoice INV-2609-GBP posted Contact: Shopify Sales · net £10,214.30 · ref SL-ST-260908 POSTED
EUR invoice posted separately INV-2609-EUR · €1,180.00 · period reconciles to net revenue RECONCILED
For accountants and bookkeepers

Fewer documents. Cleaner coding.
A ledger you can actually review.

Most Shopify connectors flood the ledger with one invoice per order and one contact per customer. Supply Lens takes the approach you would take manually: a periodic summary invoice raised against a single sales contact, structured exactly how you want the P&L to read.

  • One consolidated sales invoice per statement period, per currency
  • Raised against a single sales contact rather than one per customer
  • Summary lines you define: gross sales, shipping, discounts, refunds
  • Each line mapped to its own Xero account code
  • Lines sub-grouped by tax rate, sales channel or any tag you configure
  • Refunds and adjustments netted into the same invoice as negative lines
  • Tax analysed per line and mapped to your Xero tax types by rate rule
  • Every invoice carries a statement reference back to the source orders
What lands in Xero
Sales invoice · Shopify Sales
Period Tue 8 Sep 2026 · GBP · ref SL-ST-260908-GBP
AWAITING PAYMENT
Gross sales200 · Sales£10,608.70
20% VAT on Income£9,412.50
5% VAT on Income£312.00
Zero Rated Income£884.20
Shipping charged210 · Shipping income£486.00
Discounts given201 · Discounts−£612.40
Refunds in period200 · Sales−£268.00
Net revenue for period£10,214.30
Built for audit confidence

Exactly one statement per order.
Not two, and not zero.

The thing accountants worry about with any automated posting is whether they can trust it at year end. This one is built so the answer is yes.

Deterministic period boundaries

Every period has a fixed start and end, so every order lands on exactly one statement. An order cannot fall between two periods or be picked up by both.

Idempotent posting

Posting to Xero is built so a retried sync cannot create a duplicate invoice. If a run is interrupted and re-run, Xero ends up with the same single document.

Traceable references

Each invoice carries a Supply Lens statement reference. From any figure in Xero you can get back to the exact set of Shopify orders that produced it.

Configurable handling

Tax treated properly, not approximately.

The core flow is the consolidated invoice. These are the areas where the detail matters and where you choose how it is handled.

Tax split by actual rate

Order tax is analysed line by line and split by the rate charged, including mixed-rate and partially zero-rated orders, then mapped to your Xero tax types through rate rules you set.

Inclusive or exclusive

Tax-inclusive and tax-exclusive Shopify stores both supported. On the Xero side you choose whether line amounts post as exclusive, inclusive or no tax.

Multi-currency done right

Each currency produces its own invoice in that currency, using either shop amounts or presentment amounts. Your choice, set once.

Refunds netted in

Refunds and order adjustments in the period appear as negative lines on the same invoice, so the total reconciles to true net revenue for the period rather than needing a separate credit note.

Channel and tag grouping

Sub-group invoice lines by sales channel, POS versus online, or any Shopify tag you configure, so the P&L can be read by channel without extra journals.

Re-run a period

Re-post a statement period by hand when a rule changes or during setup. Because posting is idempotent, a re-run corrects rather than duplicates.

Configuration

You define the invoice structure.

Break each period's activity into the summary lines you choose, each mapped to its own account code. The structure is yours, and it is set once.

1

Statement period

Daily or weekly. Boundaries are fixed in your store's timezone, so an order at 23:58 is in the day it was placed and not the day after.

2

Invoice lines and account codes

Choose the summary lines you need (gross sales, shipping, discounts, refunds and any others) and map each to the Xero account it should hit.

3

Tax rate rules

Each rate charged in Shopify mapped to a Xero tax type, with a rule for what happens when a rate appears that has not been mapped yet.

4

Currency and contact

Shop or presentment amounts, one invoice per currency and the name of the single sales contact the invoices are raised against.

Invoice lineXero account
Gross sales200 · Sales
Shipping charged210 · Shipping income
Discounts given201 · Discounts
Refunds200 · Sales (negative)
Shopify tax rateXero tax type
20%20% (VAT on Income)
5%5% (VAT on Income)
0%Zero Rated Income
Unmapped rateException queue
Statement period
Daily, store timezone
ON
Multi-currency
One invoice per currency
ON
Refunds
Netted into period invoice
ON
Tax split
By actual rate
ON
Channel grouping
Not enabled
OFF
Line amounts
Tax exclusive
CONFIG
Edge cases handled

The things that go wrong at year end.

Accounting integrations fail quietly and get found by the accountant months later. These are the four we hear about most, in the words customers use.

"Our old connector put four thousand invoices and three thousand contacts into Xero in a year."

One invoice per period, per currency, against one sales contact. A year of daily statements is a few hundred documents, each of which a person can open and read.

"A sync retried overnight and Tuesday's sales were in Xero twice."

Posting is idempotent. A retried run finds the statement already exists and leaves it alone, so the same period cannot be posted twice however many times it is attempted.

"Mixed-rate orders all went through at 20% and the VAT return was wrong."

Tax is analysed per line, not per order. A basket with standard, reduced and zero-rated items splits into three tax lines on the invoice, each at the rate actually charged.

"We sell in three currencies and everything arrived in Xero as GBP."

Each currency gets its own invoice in that currency, using shop or presentment amounts as you choose. Xero's own currency handling then does the rest.

What you'll need

Ready in days, not months.

Supply Lens handles the connection and the posting. You provide access to both systems and confirm how the invoice should be structured. Most of the time goes on agreeing account codes with whoever owns the chart of accounts.

  • Shopify store API access
  • Xero organisation and connection authorisation
  • Account codes for sales, shipping, discounts and refunds
  • Tax rates in use and the Xero tax type each maps to
  • Statement period preference: daily or weekly
  • Currency preference: shop or presentment amounts
  • Name of the sales contact to raise invoices against
  • One period of historical orders to reconcile the first run against
How we get you live
1
Scope
Account codes, tax rules, period and currency preferences agreed with your accountant.
2
Configure
Invoice structure and mappings built against a Xero demo organisation.
3
Test
A real historical period posted and reconciled line by line to Shopify.
Go live
First live period posted with someone watching, then it runs on schedule.
Common questions

What accountants ask first.

Does it create one invoice per order?

No. One consolidated invoice per statement period and per currency, against a single sales contact, with summary lines coded to their own accounts. That is what you would do posting manually and it keeps the ledger reviewable.

Does it reconcile to Shopify payouts?

It groups by time period rather than by payout batch, so the invoice total reconciles to net revenue for the period, not to a bank deposit. If payout-level reconciliation is your priority, that is a different kind of tool and we will say so on the call.

Can a retried sync post the same sales twice?

No. Period boundaries are deterministic and posting is idempotent, so every order lands on exactly one statement and a retry cannot create a duplicate. Each invoice carries a statement reference back to the source orders.

Can we post monthly?

Statement periods are daily or weekly. Weekly is the longest single period, which keeps each invoice to a size a person can review and keeps the tax analysis close to the orders it came from.

Ready to connect Shopify and Xero?

Tell us how you want the P&L to read and which tax rates you charge. Twenty minutes with whoever owns the chart of accounts is usually enough.