CoreviaFlowCOREVIAFLOWDIGITAL PROJECT COMPANY Leave a request
EN UA RU

Shopify ↔ Xero integration

Shopify orders become sales invoices in Xero with the same lines and tax, payouts match the bank feed, and refunds become credit notes

A Shopify store produces a steady stream of orders, each with items, discounts, shipping and tax, and a payout that reaches the bank days later net of processing charges. The bookkeeper in Xero sees only the payout line in the bank feed and has to rebuild which orders it consists of, or posts the whole month as one summary. The Shopify ↔ Xero pair turns each paid order into a sales invoice in Xero with the lines the customer saw, books each payout so it matches the bank feed line, and turns refunds into credit notes linked to the original invoice. Below: what exactly moves, which scenarios we cover and which capabilities of both systems we rely on.

What moves between the systems

  • Shopify → XeroA paid Shopify order becomes a sales invoice in Xero, already marked paid, with the same items, quantities, discounts, shipping and tax lines the customer saw at checkout.
  • Shopify → XeroShopify products are matched to Xero items by SKU, so sales land on the right item and revenue is reported by product, not as one lump sum.
  • Shopify → XeroEach Shopify payout is booked in Xero as a transfer to the bank account with processing charges posted to the account your bookkeeper chose, so it matches the line that arrives through the bank feed.
  • Shopify → XeroA refund or cancellation in Shopify becomes a credit note in Xero linked to the original invoice, with the partial amount if only part of the order was refunded.
  • Shopify ↔ XeroCustomers are matched by e-mail: a new Shopify buyer is created as a Xero contact once, and a returning one is reused, so neither side fills up with duplicates.
  • Xero → ShopifyThe Xero invoice number is written back to the Shopify order, so whoever answers the customer finds the accounting document straight from the order.

What we connect

  • We check with your bookkeeper which Xero organisation and base currency the books are in, and compare it with the store's currency and the countries it sells to.
  • In Shopify the owner creates a custom app for this store through the Shopify developer dashboard, with access only to orders, products, customers and payouts; access can be revoked at any time.
  • On the Xero side a user with the Connected Apps permission connects us through Xero's own app sign-in, with rights only to invoices, contacts, items and bank transactions; we keep the connection active so it does not expire.
  • We subscribe to store events for paid orders, cancellations and refunds, so they reach the exchange right away, and every delivery is checked by its signature before anything is written to Xero.
  • Together with the bookkeeper we choose the Xero accounts for sales, shipping income, tax rates, Shopify processing charges and the clearing account for money before payout, and agree what happens to products without a SKU: create the item, or send the order to a “needs attention” list.
  • We run it on a Shopify development store against a Xero demo organisation, compare the result with the bookkeeper's own reconciliation, then switch to live from an agreed date so old orders are not doubled.

Automation scenarios

01

One summary entry per month

Before the bookkeeper posts a month of Shopify sales as one entry, and nobody can say which product or which day the revenue came from.

After each order is a separate invoice in Xero with its items, so reports break down by product and date.

02

The bank line matches nothing

Before the bank feed shows a Shopify payout that matches no invoice, and the bookkeeper spends an hour working out which orders and charges it consists of.

After the payout is already booked as a transfer with its charges, and the bank line is reconciled in one click.

03

Refunds missing from the books

Before a customer returns half an order in Shopify, the books still show the full sale, and the difference surfaces at quarter end.

After the refund is a credit note on the original invoice in Xero on the day it happens.

04

A busy sale day

Before on a sale day orders pile up, and a copy-paste routine falls days behind.

After orders queue as they arrive and are posted to Xero in batches within its per-minute limit, so none is lost and the books catch up the same day.

How it works technically

For those who want to check: each point links to the official documentation page it comes from.

  • The orders query returns the store's orders with status, customer and line items, and Shopify itself suggests using it to automate fulfillment workflows.

    Source: shopify.dev ↗ checked 2026-09-27
  • An app can subscribe to store events (webhook topics) and receive data about them in near real time, instead of polling the store.

    Source: shopify.dev ↗ checked 2026-09-27
  • The REST Admin API is legacy as of October 1, 2024; from April 1, 2025 all new public apps must use the GraphQL Admin API only.

    Source: shopify.dev ↗ checked 2026-09-27
  • Per connected organisation: up to 5 calls at once, 60 calls a minute and 5,000 calls a day.

    Source: developer.xero.com ↗ checked 2026-09-25
  • Bank accounts connect to Xero so transactions flow into the books automatically.

    Source: www.xero.com ↗ checked 2026-09-25
  • Xero notifies connected apps about some events itself; in 2026 it added notifications for credit notes, prepayments and overpayments.

    Source: developer.xero.com ↗ checked 2026-09-25

Limits

The limits come from both systems. Xero's regional editions and tax features target the UK, Australia, New Zealand and the US; we found no Ukrainian tax edition in Xero's materials, so this pair is for stores whose books are already kept in Xero. Xero allows a limited number of calls per organisation per minute and per day, so orders are posted in batches a few minutes apart, and a store with very many orders a day is posted as one summary invoice per payout, agreed with the bookkeeper. An unused Xero connection expires after 60 days and has to be confirmed again. On the Shopify side, new integrations are built on the current GraphQL interface because the old one is legacy, and request limits depend on the store's plan. Which accounts sales, processing charges and tax go to is an accounting decision we set up the way your bookkeeper says.

How to start

Three steps from a first message to work on your project.

  1. 01

    Leave a request

    Describe the task in the form — in text or by voice. Budget and timing are optional.

  2. 02

    We review and estimate

    A developer studies the brief, asks about anything unclear and sends an estimate.

  3. 03

    We start

    Once scope and price are agreed, the work begins.

or write to info@coreviaflow.space

Questions

Why not a ready-made Shopify–Xero connector?
If a ready connector fits your accounts, tax setup and payout handling, use it, and we will say so after looking. A custom pair is for stores where the ready one posts summaries instead of orders, books payouts so they do not match the bank feed, or misses partial refunds.
What happens to orders placed before the launch?
Nothing, unless you ask. The pair starts from an agreed date so the bookkeeper's earlier entries are not doubled. Older orders can be loaded separately for a chosen period after checking that they are not already in Xero.
What if the connection to Xero drops for a day?
Orders keep arriving from Shopify and wait in the queue. When Xero is reachable again, they are posted in order within Xero's limits, and anything that could not be matched goes to the review list instead of being guessed.

Tell us what needs to be connected

Describe the task in text or a voice message. We look at your setup and reply with a plan.