If you're a wholesaler or distributor selling to trade customers and also online, and your web store, your stock system and Xero or MYOB never quite agree, the problem usually isn't any one of those systems. It's the gaps between them. Orders come in from the website, a marketplace, reps and email; stock is held in Cin7, Unleashed or something similar; and the money arrives in the bank as a net payout after fees and refunds. Each system is right about its own piece. Nobody has agreed which system owns stock, orders, prices and payments, so the three drift apart and your team spends its time chasing the differences.
It's Monday morning. The warehouse is picking weekend web orders when one picker comes back empty-handed: the store said there were six in stock, but the last four went to a trade customer on Friday afternoon. Customer service emails an apology and a refund. Meanwhile someone in accounts is trying to match last week's Shopify payout to the bank, and the figure doesn't line up with the sales in Xero because three refunds and a chargeback came out of it. Nobody did anything wrong, and the week has already started with two problems.
Be honest first: when this is a simpler problem
Not every online store needs anything more than a good app. If you sell mainly online, carry a modest range and don't run a separate stock system, the hard part is usually just the accounting: turning each payout into the right sales, fees, refunds and GST in Xero or MYOB. Payout-reconciliation apps from the Xero and MYOB app marketplaces are built for exactly that, and for a simple store they usually solve it. We'd tell you to start there.
This article is about the harder version: the three-way problem. Your business sells B2B on account as well as online. You have a separate stock system because the accounting package can't handle your locations, batches, units of measure or price levels. And the store, the stock system and the accounts all need to agree on the same orders, the same stock and the same money.
Signs you have this problem
- You oversell online because a trade order, a counter sale or a transfer between warehouses didn't reach the store in time.
- The stock on hand on the website, in the stock system and on the shelf are three different numbers, and the warehouse trusts none of them.
- Web or marketplace orders arrive late, twice, with blank lines, or not at all.
- Orders stay "open" after they've shipped, and someone closes them one at a time.
- Shopify, PayPal or marketplace payouts can't be matched to the bank without a spreadsheet, because they're net of fees, refunds, chargebacks and currency conversion.
- GST on web sales, freight charged, discounts and the platform's own fees don't land on the right tax codes in Xero or MYOB.
- Trade customers see retail prices, or retail customers see trade prices, because price levels live in one system and the store reads from another.
- Returns are refunded online but never booked back into stock, or booked back into stock as saleable when they're damaged.
Why it happens
The store is built to take orders and payments fast. It holds its own copy of products, prices and stock, and knows nothing about trade accounts or back orders.
The stock system holds the real detail: locations, batches, purchase orders, receipts, picks and despatches, and often the trade price lists. It pulls orders in from the store and pushes stock levels back out, on a schedule. If that schedule runs every 15 minutes, or the connection quietly drops, the store is selling stock that has already gone.
The accounts see a summary: invoices, credit notes, cost of goods and payments. The money from online sales doesn't arrive per order. It arrives as one payout covering many orders, less fees and refunds, sometimes days later. Unless something splits that payout back into its parts, the bank reconciliation becomes guesswork. If the stock system's numbers also differ from the ledger, you have the separate problem we cover in why your Cin7 or Unleashed stock value doesn't match Xero or MYOB.
So the same sale exists three times: as an order in the store, a sales order and despatch in the stock system, and an invoice plus part of a payout in the accounts. Every time one of those copies is edited, cancelled, refunded or partly shipped, the other two need to hear about it. Standard connectors handle the common case and struggle with the rest: part shipments, edited orders, returns, POS and international orders, and marketplace adjustments.
That's why buying another app rarely fixes it alone. A new connector moves data faster between two of the three systems, but it doesn't decide which system owns the stock figure, where trade pricing lives, or what happens to a refund. It's the same pattern behind most cases where your systems give different numbers.
What it costs you
- Time. Fixing stuck orders, matching payouts and correcting stock by hand, usually by your most experienced people.
- Customers. Every oversold order is a cancelled sale, a refund and an apology, and marketplaces can penalise sellers who cancel too often.
- Cash and stock. If you don't trust the stock figure, you buy safety stock to cover it, or you hold back stock from the website "just in case". Both tie up cash.
- Margin you can't see. When platform fees, freight, discounts and refunds aren't recorded against the order or channel, you can't tell whether online sales actually make money compared with trade sales. We look at the wider version of this in why you can't see margin by customer in a wholesale business.
- GST and month-end risk. For example, if fees, refunds and freight are coded differently every month, your BAS figures depend on whoever did the reconciliation, and your accountant spends time untangling it.
- Key-person dependence. If one person understands the sync settings and the workarounds, the business stalls when they're on leave.
What fixing it generally involves
Start with the simplest fixes. Some of these are settings, not projects.
- Agree who owns what. Write down which system is the master for each kind of data: products, stock on hand, trade prices, retail prices, customers, orders, payments. For most wholesalers the stock system owns stock and trade pricing, the store owns online orders and payments, and the accounts own the financial record.
- Check the settings you already have. How often does stock sync to the store? Is there a buffer, so the website stops selling before the shelf is empty? Are orders from every channel coming into the stock system, including POS and marketplaces? Are tax codes and accounts mapped for fees, freight, discounts and refunds?
- Make payouts reconcile on their own. Each payout should break down into sales, refunds, fees and adjustments, posted to a clearing account so the bank deposit matches exactly. For the accounting side, a standard payout-reconciliation app is often enough, even in a bigger business.
- Decide how the awkward cases flow. Map what happens to a return, a part shipment, an edited order, a cancelled order and a bundle, step by step, through all three systems.
- Keep trade and retail pricing in one place. Hold price levels in the system that owns pricing and publish them out, rather than maintaining them separately in the store and the stock system.
- Watch the connections. Check sync errors and failed orders daily, not at month-end.
- Report from one place. Once the data agrees, sales, margin and stock by channel can come from one report instead of three exports.
If the standard connectors can't handle the way your business really works, such as trade and online orders sharing stock across several locations, or marketplaces with their own rules, that's when a custom connection or a change in process is worth it. See our Shopify inventory integration page, the inventory, wholesale and manufacturing systems guide and our wholesale and distribution page.
Frequently asked questions
Why is my Shopify stock wrong when I use Cin7 or Unleashed?
Usually because stock syncs to the store on a schedule, and sales from other channels (trade orders, counter sales, transfers or another marketplace) land in the stock system between syncs. A dropped connection or an unmapped location can also stop updates silently. Check the sync frequency, the locations sent to the store and the error log.
Why doesn't my Shopify payout match the sales in Xero or MYOB?
A payout is net of platform fees, refunds, chargebacks and sometimes currency conversion, and it often covers orders from several days. Xero or MYOB records each sale at its full value. To match them, the payout needs splitting into its parts and posting through a clearing account. For a simple store, a payout-reconciliation app usually handles this.
Should my online store or my stock system be the master for stock levels?
For a wholesaler with trade customers, warehouses or purchasing, it's normally the stock system, with the store receiving stock levels from it. The store should be the master for what customers ordered and paid online. Whatever you choose, write it down and set every connection to match.
Do we need to replace our stock system to fix this?
Usually not. Most businesses fix it by agreeing who owns which data, tidying settings and mappings, and connecting the awkward cases properly. Replacement is worth considering only when the stock system genuinely can't do what the business needs.
If your store, stock system and accounts are out of step, book a free initial chat and we'll talk through where your orders, stock and payments go and where they're getting lost.