Skip to content

Integrations

Ecommerce accounting integrations: Shopify and WooCommerce to Xero or MYOB without spreadsheets

Andrew Roper · · 8 min read

Quick answer: Connecting Shopify or WooCommerce to Xero or MYOB is the integration most Australian ecommerce businesses build twice — once with an off-the-shelf connector that mostly works, and again as a custom build when the gaps start costing real money. The gaps are predictable: GST on international orders, multi-currency settlements, partial refunds, inventory valuation, and the “why does the bank deposit not match the daily summary” problem that haunts every store doing over $50k a month.

If you’re running an Australian ecommerce business at any meaningful volume, the most-trafficked piece of integration plumbing is the one between your store (Shopify or WooCommerce, in most cases) and your accounting system (Xero or MYOB). Done well, it’s invisible — orders land in the books accurately, GST is treated correctly, bank deposits match daily summaries, and the bookkeeper doesn’t spend hours every fortnight reconciling.

Done with a generic connector, it works for the first six months and then the gaps start showing up. They’re always the same gaps. This piece is about what those gaps are, what the custom integration pattern looks like, and when paying for it makes sense.

The four-stage ecommerce-to-accounting flow and the three gaps generic connectors usually miss: FX, settlement reserves, and GST treatment. Store Shopify / WooCommerce order placed Payment Stripe / Shopify Payments gross less fees Bank netted deposit T+1 or T+2 Accounting Xero / MYOB per-order invoice FX / multi-currency settlement reserves GST treatment
Four stages — and the three gaps where the generic connectors usually quietly lose data.

Why the generic connectors mostly work and then mostly don’t

The big-name connectors (A2X, Link My Books, Synder, the official Shopify-Xero integration) all do approximately the same thing: they pull sales data from the store, aggregate it into a journal-style summary, and post it to the accounting system. For a store doing AU-only orders, GST-inclusive, with no inventory complexity, that approach works fine.

What breaks the pattern:

  • International orders — GST has to be excluded for export sales, but only when the export is properly evidenced. The generic connector applies GST to everything or excludes it from everything; the correct answer is per-order.
  • Multi-currency — Shopify Payments and Stripe settle in AUD but the customer paid in USD or NZD. The FX gap between sale and settlement is real money that has to land somewhere correctly.
  • Refunds and partial refunds — a full refund is straightforward; a partial refund on an order that included shipping, discount and multiple line items requires the accounting entry to apportion correctly across each.
  • Inventory and COGS — the generic connectors don’t move cost-of-goods data, which is fine if you don’t track inventory in your accounting system, and a major hole if you do.
  • Settlement reconciliation — the bank deposit from Stripe / Shopify Payments is a netted figure (sales minus fees minus refunds minus reserves), not a clean daily total. Matching it to the day’s sales without a reconciliation pass is impossible.
  • Multiple sales channels — if the store also sells via Amazon, eBay, or a marketplace, the connector has to handle each channel’s fee structure and settlement timing separately.

Each of those issues, individually, is workable with manual journals. The problem is they happen continuously, and the manual journals accumulate into a part-time bookkeeping job.

Pattern 1 — The order-to-invoice flow that handles real GST

The first job of the integration: each order on the store should become an entry in Xero/MYOB that’s correct for GST purposes from the start.

What that requires:

  • The customer’s shipping address evaluated against the GST rules — AU customer = GST applies, overseas customer = no GST (with export evidence), low-value imported goods rules where they apply
  • Line-item-level GST application, because a single order can contain GST-applicable and GST-free items (food, certain health products)
  • Shipping treated separately, with GST applied or not based on the destination
  • Discount codes apportioned across the order’s line items in a way that preserves correct GST calculation
  • A clean per-order invoice in the accounting system that an auditor could trace to the customer order if they had to

The pattern that works: one invoice in the accounting system per order, not a daily aggregate. Daily aggregates feel cleaner until the day someone asks you to prove a specific transaction.

Pattern 2 — Settlement reconciliation that actually settles

The bank deposit from Stripe or Shopify Payments arrives a day or two after the orders that produced it. It’s never the gross sales figure; it’s gross sales minus payment fees minus refunds minus held reserves, plus or minus FX adjustments.

Reconciliation requires:

  • Settlement statements from the payment provider, broken down by order
  • A daily journal that records the gross sales, the fees as a separate expense line, refunds as a separate reversal, and the net amount expected in the bank
  • Bank feed matching that ties the actual deposit to the expected net, with the variance assigned to a clearing account that’s investigated promptly when it grows
  • Reserve adjustments tracked separately so cash flow forecasting reflects what’s actually available

It’s the same reconciliation discipline anywhere two systems handling money need to stay coherent. The difference in ecommerce is the volume — this has to work for hundreds or thousands of transactions a day, not dozens.

Pattern 3 — Inventory and cost-of-goods that’s actually useful

If you track inventory in Xero/MYOB (and most ecommerce businesses should, above a certain volume), the integration has to push COGS information per sale, not just revenue:

  • Each line item sold reduces inventory on hand and creates a COGS journal entry
  • Returns reverse both the inventory and the COGS
  • Stock takes and reconciliations done periodically post to a separate variance account so the auditor can see what’s shrinkage and what’s administrative
  • Average cost or FIFO valuation applied correctly — the wrong method here produces materially wrong financial statements

This is the pattern most stores discover they need when the accountant looks at the gross-margin number and asks where the COGS line came from. The right answer is “from the integration, calculated per order, against the cost of goods that were in stock when the order shipped.” The wrong answer is a quarterly inventory count plugged in as a single journal.

Pattern 4 — Refunds, chargebacks, and the “what actually happened” trail

Refunds are easy in concept and complex in execution. A clean refund flow:

  • Customer requests refund in Shopify / WooCommerce
  • Refund processed via the payment platform
  • Refund mirrored to the accounting system, reversing the original invoice line items in their correct GST treatment
  • Inventory returned to stock (if applicable) and COGS reversed
  • Bank feed showing the refund deposit (negative) matches the accounting entry

Chargebacks are messier. The payment dispute, the held reserve, the eventual outcome (refunded or returned), and the dispute fee all need to land correctly. The pattern is: a chargeback in progress sits in a clearing account; the final outcome (won or lost) settles to either reversed sales or final loss.

Pattern 5 — Multi-channel sales without three different reconciliation processes

If the business sells through more than one channel — the main Shopify store, plus Amazon, plus eBay, plus a wholesale Shopify store — each channel has its own fee structure, settlement timing, and accounting treatment. The integration job is to normalise this into one chart-of-accounts view.

The pattern:

  • Each channel feeds into the accounting system independently, with channel-specific tracking categories
  • Settlement reconciliation runs per-channel
  • Cross-channel revenue and margin reports built in the reporting layer
  • Customers de-duplicated across channels when the same email appears, with the channel-of-acquisition recorded for marketing attribution

This is where the generic connectors fall down hard — most are built for one store, one channel. Custom integration handles the channel matrix coherently.

What custom doesn’t buy you

Three cases where the off-the-shelf connector is still the right answer:

  • Stores under ~$30k/month, AU-only, no inventory tracking. The generic connector is fine; build nothing custom.
  • Stores in their first six months. The shape of the business is still emerging; build against patterns that will change is wasted effort.
  • Stores that are about to migrate platforms (Shopify to Shopify Plus, WooCommerce to Shopify, etc). Don’t build integrations for the platform you’re leaving.

The threshold where custom integration pays back is usually $50-100k/month in revenue, multiple sales channels or international orders, and a bookkeeper or finance team who can already articulate where the manual reconciliation work is going.

How we approach ecommerce accounting integration work

Most ecommerce accounting integration projects we take on start the same way: an audit of where the current connector is producing wrong or incomplete data, ranked by the cost in bookkeeper hours and the risk of GST or audit consequence. The replacement plan stages the GST-correct order flow first (highest compliance risk), then settlement reconciliation (highest cash-flow visibility value), then inventory/COGS (highest reporting value), then multi-channel as the business grows into it.

If you’re running an Australian ecommerce operation on Shopify or WooCommerce and pushing into Xero or MYOB, and recognising any of the gaps above, that’s usually the prompt to talk about replacing the parts that aren’t holding.

Let’s build something

The right system,
built once, properly.

If your business is ready to scale beyond what off-the-shelf tools can support — we should talk.