Skip to content
adapters.io

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.

No credit card required.

Field mapping auto-plugged · tap a port to rewire

5 sample records ready

Last updated September 2026

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

These cables are pre-wired when you pick the pair. 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

Three steps, minutes end to end, covered by flat data integration pricing from $49 a month.

STEP 01

Pick the pair

Connect Shopify and Xero with scoped credentials. About a minute each.

STEP 02

Confirm the mapping

The cables above are pre-wired. Adjust any field, preview the transform on sample records, done.

STEP 03

Schedule the sync

Hourly down to every minute, with retries, alerting, and a full log on every run.

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.

Is there a prebuilt Shopify connector for Xero?

Yes. This Shopify to Xero connector ships prebuilt: the field mapping is wired the moment you pick the pair, transforms are included, and you can try it against sample records in the live demo. No code or engineering sprint required.

How much does the Shopify Xero integration cost?

Pricing is flat and monthly: Starter at $49, Growth at $149, Scale at $399. Every plan includes this pair, visual field mapping, and per-record logs. There are no per-task or per-row fees, so the bill stays the same as volume grows.

How often can Adapters sync Shopify to Xero?

Hourly on Starter, every 5 minutes on Growth, and down to every minute on Scale. Failed records retry automatically with backoff, and alerting plus a full per-record log come standard on every run.

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.

More pairs from the API connector library

stripe quickbooks integration shopify netsuite integration salesforce hubspot integration airtable google sheets sync postgres to snowflake sync shopify quickbooks integration salesforce netsuite integration paypal quickbooks integration square quickbooks integration stripe netsuite integration hubspot quickbooks integration quickbooks to xero migration salesforce to snowflake integration square netsuite integration hubspot xero integration salesforce to bigquery integration postgres to bigquery netsuite to snowflake integration quickbooks to bigquery integration stripe to snowflake integration shopify to snowflake integration quickbooks to snowflake integration hubspot to snowflake integration netsuite to bigquery integration stripe to bigquery integration shopify to bigquery integration paypal to snowflake integration square to snowflake integration square to bigquery integration netsuite to postgres integration salesforce to postgres integration xero to snowflake integration hubspot to bigquery integration xero to bigquery integration paypal to bigquery integration stripe to postgres integration snowflake to bigquery migration shopify to postgres integration hubspot to postgres integration bigquery to snowflake migration quickbooks to postgres integration xero to postgres integration square to postgres integration paypal to postgres integration snowflake to postgres mysql to postgres migration mysql to snowflake redshift to snowflake migration mysql to bigquery sql server to snowflake sql server to postgresql migration

Browse the full api connector library, or request a pair you do not see.

Shopify and Xero, finally in agreement

Map the pair once and let it sync on schedule. Flat price from $49 a month, no per-task fees.

Try the live demo

No credit card required.