Skip to content
Adapters

Shopify Xero integration that reconciles payouts to sales

The Shopify Xero integration from Adapters posts Shopify orders into Xero as invoices or sales, books Shopify Payments fees as a separate expense, and records sales tax to the right account, so each Shopify payout reconciles against the deposit in your Xero bank feed.

The live demo needs no card, and Starter is $49 a month.

Field mapping auto-plugged · tap a port to rewire

5 sample records ready

What running Shopify to Xero by hand costs you

  • Shopify pays out net of fees, so the Xero bank feed deposit never equals the order total.
  • Booking gross sales without splitting the payment fee overstates revenue in Xero every day.
  • Sales tax collected at checkout has to reach a liability account, not the sales account.

The field mapping, out of the box

All 6 of these Shopify to Xero fields arrive mapped. Rewire any of them, or add your own, in the same visual data mapping tool you use for every adapter.

Input / SHOPIFY

order.name
Invoice.InvoiceNumber
order.total_price
Invoice.Total
customer.email
Contact.EmailAddress
total_tax
Invoice.TaxAmount
transaction.fee
BankTransaction.Fee
order.created_at
Invoice.Date

Transforms included

Shopify money strings cast to Xero decimal amounts, the Shopify Payments fee posts to the expense account you choose, sales tax lands in your tax liability account, and order dates convert to your Xero organization timezone so revenue falls in the right period.

Shopify to Xero in depth

This route fails in two places, and they are at opposite ends. Shopify meters GraphQL in cost points per second rather than requests, and Xero allows only 5,000 calls per day per organization. Get either wrong and the sync stalls. Read from shopify.dev and Xero developer documentation, current as of 30 August 2026.

Shopify meters query cost, not request count

The GraphQL Admin API charges calculated query cost in points per second: 100 on Standard, 200 on Advanced Shopify, 1,000 on Shopify Plus and 2,000 on Enterprise. Rate limiting a Shopify integration by requests per second is therefore measuring the wrong thing entirely. Every response carries requestedQueryCost, actualQueryCost and a throttleStatus object with currentlyAvailable and restoreRate. Pace against those fields and you will never see a THROTTLED response.

A single query above 1,000 points is rejected, not throttled

This is the one that defeats retry logic. A query whose calculated cost exceeds 1,000 points is rejected outright rather than queued, so exponential backoff retries it forever and it fails identically every time. The fix is never patience, it is a flatter query: fewer nested connections, smaller page sizes, or the work split across several requests. Teams lose days to this because every other rate limit in their stack is fixed by waiting.

Shopify money is a decimal, and Stripe money is not

A MoneyV2.amount arrives as a Decimal such as 12.99, with the currency in a separate currencyCode field. This is the opposite of Stripe, which reports integers in the smallest currency unit. A shared money helper that divides by 100 for both will book Shopify revenue at one hundredth of its value, in a ledger, with no error raised anywhere. If your codebase touches both platforms, branch on the source before any conversion runs.

The Xero end is the real bottleneck

Xero allows 5 concurrent calls, 60 per minute and 5,000 per day per connected organization. An integration writing an invoice, a payment and a fee for every Shopify order consumes three calls per order and exhausts the daily allocation at roughly 1,600 orders. Any store above that volume must post summarized daily journals rather than a document per order. That is not a workaround, it is what an accountant would ask for anyway, because nobody wants ten thousand individual invoices in the ledger.

Payouts are not sales, and the gap is where reconciliation breaks

Shopify Payments settles on its own cadence, so a payout covers several days of orders and can straddle a month boundary. Booking revenue from payouts puts sales in the wrong period. Book revenue from orders, book the settlement against a clearing account, and let the payout clear that account. The fees then land as their own expense line instead of quietly reducing revenue, which is what makes the Xero bank reconciliation actually tie out.

REST is legacy, and new public apps cannot use it

The REST Admin API has been legacy since 1 October 2024, and since 1 April 2025 all new public apps must be built exclusively on the GraphQL Admin API. If you are specifying an integration now, specifying REST is specifying a rewrite. Note also that a request to an inaccessible API version falls forward to the oldest accessible stable version rather than failing, so an unpinned client can silently drift onto different behavior after a quarterly release.

Counts are only accurate to 25,000

Shopify caps pagination at 25,000 objects and its counts are accurate only up to that ceiling. Never validate a load by comparing a Shopify count to a row count in your ledger or database above that volume, because the Shopify side stops being a fact. Reconcile on financial totals within a bounded date window instead, which is the comparison that matters and the one that stays correct at any size.

Where this sits in a wider stack

If the goal is analysis rather than bookkeeping, sending Shopify to a warehouse avoids the Xero daily ceiling entirely, and the loading rules are on our Shopify integration tools page. For the accounting side in general, the platform limits and reconciliation shapes are compared on QuickBooks integration tools.

How it goes live

Moving Shopify data into Xero on flat data integration pricing from $49 a month.

STEP 01

Pick the pair

Authorize a read scope on Shopify and a write scope on Xero, nothing wider.

STEP 02

Confirm the mapping

Check that order.name lands in Invoice.InvoiceNumber and order.created_at in Invoice.Date on a sample record.

STEP 03

Schedule the sync

Turn on the SHOPIFY → XERO schedule; failed records retry and every run is logged.

Try it in the live demo Preloads SHOPIFY → XERO with sample records

Shopify to Xero sync common questions

Does Shopify integrate with Xero?

Not natively as a full accounting sync. Shopify does not post orders, fees and payouts into Xero on its own, so you either use a connector, an app like A2X, or manual journals. A connector maps Shopify orders to Xero invoices or sales receipts, splits out Shopify Payments fees, and posts sales tax to the right liability account.

How do I sync Shopify sales to Xero?

Decide first whether you want order level detail or daily summaries. Order level gives you a Xero invoice per Shopify order and matching customer records. Daily summary posts one journal per day per payout, which keeps the Xero ledger small on high volume stores. Either way, the Shopify Payments fee needs its own expense account or the bank deposit will never reconcile.

Why does my Shopify payout not match Xero?

Because Shopify reports gross sales while your bank receives net payouts. The gap is Shopify Payments processing fees, refunds, chargebacks and any shipping adjustments inside the payout period. Post the fee to an expense account and group the sales against the payout so the deposit in Xero matches the bank line exactly.

How is Shopify sales tax handled in Xero?

Shopify calculates tax at checkout and reports it per order line. That amount should land in a Xero tax liability account, not in revenue. If the connector folds tax into the sale total, your Xero revenue is overstated by the tax collected and every filing after that has to be corrected by hand.

How does the Shopify to Xero sync work?

The Shopify Xero integration from Adapters posts Shopify orders into Xero as invoices or sales, books Shopify Payments fees as a separate expense, and records sales tax to the right account, so each Shopify payout reconciles against the deposit in your Xero bank feed.

How much does the Shopify Xero integration cost?

The Shopify to Xero pair is included on every plan: Starter $49, Growth $149, Scale $399 a month. You pay per plan, not per row or task, so a busier month costs the same.

Do I need to write code to connect Shopify and Xero?

No. Fields are auto-mapped the moment you pick the pair, and you can rewire any mapping visually before the first sync. Shopify money strings cast to Xero decimal amounts, the Shopify Payments fee posts to the expense account you choose, sales tax lands in your tax liability account, and order dates convert to your Xero organization timezone so revenue falls in the right period.

Shopify and Xero, finally in agreement

Map the 6 Shopify fields once, starting with order.name into Invoice.InvoiceNumber, and the sync into Xero runs on schedule. Flat price from $49 a month, no per-task fees.

The live demo needs no card, and Starter is $49 a month.

Get started