Your Shopify payout landed this morning and the bank balance looks healthy. You still couldn’t say, with any confidence, what you made on last month’s sales. That gap is the most common thing we see in ecommerce bookkeeping, and it has little to do with bookkeeping skill. Online retail breaks three assumptions normal bookkeeping relies on: revenue arrives net of fees, stock is an asset before it’s a cost, and the cash cycle runs months longer than the sales cycle.
This guide works through the three numbers an online store owner needs and rarely has: the true cost of stock, the real margin per product after every fee, and why a profitable store can still run out of cash. It’s written from the accounting side, but also from experience importing and selling product online, so the examples reflect what actually happens rather than what the software brochure says.
If you sell through Shopify, Amazon, eBay or your own site and you turn over somewhere between $500K and $5M, this is for you.
What makes ecommerce bookkeeping different from a normal business?
Ecommerce bookkeeping is different because sales platforms pay you a net amount, stock has to be tracked as an asset, and every channel needs to be reconciled separately. Treat a Shopify deposit as revenue and your books are wrong in several places at once.
Here’s the payout problem, and it causes more errors than anything else. A Shopify Payments deposit of $9,412.60 lands in the bank. This is what sits behind it:
| Gross sales | $10,250.00 |
| Refunds | ($280.00) |
| Processing fees | ($557.40) |
| Bank deposit | $9,412.60 |
Code the deposit as sales and three things go wrong at once. Revenue is understated by 8%, the $557.40 in fees never appears as an expense, and the refunds vanish. GST goes wrong too, because the 10% is owed on $10,250, not on what hit the bank.
A platform payout is never revenue. It’s revenue minus fees minus refunds, and each piece has to be recorded on its own.
The fix is a clearing account per sales channel in Xero, QuickBooks or MYOB, with a connector such as A2X posting the gross sales, fees and refunds as a summary journal, and the payout then matched to the bank. Done this way the reconciliation takes minutes. Done by hand from the Shopify finance report, it’s an afternoon a month and it drifts.
Inventory is the second difference. When you pay a supplier $40,000 for a container of stock, that’s not a $40,000 expense. It’s an asset on the balance sheet that becomes cost of goods sold only as each unit sells. Book the whole shipment to expenses and your profit swings wildly with the shipping calendar (a $40,000 “loss” in May, a fat margin in July).
The third is multichannel. Shopify, Amazon and eBay each have their own fee structures, payout timing and refund handling. Add a marketplace in New Zealand and you have foreign currency on top. Each channel needs its own clearing account and its own reconciliation. This part is less complicated than it sounds once the structure is in place, but it can’t be skipped.
How do I work out the true cost of stock?
The true cost of stock is the landed cost per unit: what you paid the supplier plus every cost of getting it to your warehouse, divided by the units that arrived. For imported product that means freight, insurance, customs duty and, depending on how you handle it, GST on the import.
Take one SKU. You order 2,000 units of a ceramic dinner set from a supplier in Guangdong.
| Cost component | Amount (AUD) |
|---|---|
| Supplier invoice (2,000 units at $31) | $62,000 |
| Sea freight and local cartage | $6,800 |
| Marine insurance | $310 |
| Customs duty (0% under ChAFTA with certificate of origin) | $0 |
| Customs broker and port charges | $1,150 |
| Landed cost | $70,260 |
| Landed cost per unit | $35.13 |
The supplier price was $31. The real cost is $35.13, a 13% difference. Price the product off $31 and every margin figure downstream is inflated. One note on the duty line: most goods from China enter duty free under the China-Australia Free Trade Agreement, but only if you hold a certificate of origin from the supplier. Plenty of importers never ask for one and pay 5% they didn’t need to, which on this shipment would be another $3,100.
GST on the import is charged at 10% on the customs value plus duty plus freight and insurance, so roughly $6,900 on this shipment. It’s paid to the Australian Border Force at the point of entry and claimed back on your next BAS, so it isn’t part of landed cost. It is a cash cost, though, and a real one on a large order. Businesses that import regularly can apply for the ATO’s deferred GST scheme, which lets you defer the import GST to your monthly BAS instead of paying it at the border. You need to lodge monthly and electronically to qualify. For an importer bringing in a container a quarter, this is usually worth doing. The ATO’s page on GST and imported goods covers the claiming rules.
Cost of goods sold then follows from stock movement: opening stock, plus purchases at landed cost, minus closing stock. Closing stock needs a count. The ATO does let eligible small businesses skip a formal stocktake if you can reasonably estimate that the difference between opening and closing stock is $5,000 or less, but for a store carrying $100,000 or more in inventory that exemption won’t apply, and you should be counting anyway. And if any of that stock was bought on a personal card, it still has to land in the business at landed cost; we covered why in our post on mixing personal and business finances.
The most expensive mistake in ecommerce bookkeeping is booking a shipment to expenses in the month it arrives. It hides your real margin and it hides your real stock.
Not sure what your real margin per product is?
We can rebuild your landed cost and COGS from your last three shipments and show you which SKUs are actually making money. Book a free 30-minute review with Hopkan Partners.
What is a good gross margin for an ecommerce business?
A good gross margin for an ecommerce business is somewhere between 50% and 70%. Benchmark data from more than 5,000 Shopify stores puts the middle of that range as the level that supports paid advertising and still leaves a net profit. Below about 40% gross, most stores that rely on paid acquisition lose money on the first order.
That headline number is only the start, because in online retail the costs between gross margin and net profit are large and they scale with sales. The useful way to read margin is as a ladder.
Gross margin vs contribution margin
Gross margin is selling price less landed cost. Contribution margin is what’s left after the costs that attach to every order: payment processing, outbound shipping (net of what the customer pays), packaging, pick and pack, and an allowance for returns. Only after that do you deduct advertising, and only after advertising do you deduct overhead.
Most owners know their gross margin. Very few know their contribution margin, and it’s the one that decides whether a product deserves ad spend. My view is blunter than most: if you can’t state the contribution margin on a SKU, you have no business buying ads for it.
Worked example: Priya’s homewares store
Priya sells ceramic tableware through Shopify, turning over about $1.6M a year from a warehouse in Sydney’s west. The dinner set from the shipment above sells for $120. Here’s the ladder for one unit.
| Per unit | % of price | |
|---|---|---|
| Selling price | $120.00 | |
| Landed cost | $35.13 | |
| Gross margin | $84.87 | 71% |
| Payment processing (1.75% + 30c) | $2.40 | |
| Shipping subsidy (cost $14, customer pays $9) | $5.00 | |
| Packaging | $3.00 | |
| Pick and pack (3PL) | $4.00 | |
| Returns allowance (8% return rate) | $2.20 | |
| Contribution margin | $68.27 | 57% |
| Advertising (blended, 25% of sales) | $30.00 | |
| Margin after advertising | $38.27 | 32% |
Priya thought she had a 71% margin product. She does, at the gross line. After the costs that every order carries and the advertising it takes to sell it, she has 32% to cover rent, wages, software and her own income. That’s still a good product. Her problem was a second SKU, a serving platter at $45 with a landed cost of $19, where the same shipping and packaging costs took contribution margin to around 26% and advertising took it to almost nothing. She’d been scaling ad spend on it for six months.
Gross margin tells you whether a product is viable. Contribution margin tells you whether it deserves your advertising budget.
You can run the first step of this ladder with our gross profit margin calculator. The rest needs your actual fee and shipping data, which is exactly what proper ecommerce bookkeeping produces.
What is inventory turnover and what should it be for an online store?
Inventory turnover is how many times a year you sell through your average stock holding. The formula is cost of goods sold divided by average inventory. Divide 365 by the result and you get days of inventory, which is the more useful number for an online store.
Priya’s COGS for the year is $680,000. Her average inventory across the year, valued at landed cost, is $210,000. That’s a turnover of 3.2, or about 113 days of stock on hand.
Is that good? For homewares imported by sea with 10-week lead times, it’s within range. For a fast fashion or consumables store it would be slow. There’s no universal benchmark, and anyone giving you one without asking what you sell is guessing. The useful reading is directional: if your turnover is falling while sales are flat, stock is building somewhere, and that stock is cash you can’t spend.
The other thing turnover exposes is the SKU level. A storewide 3.2 can be a few hero products turning eight times and a long tail turning once. The long tail is where discounting, write-downs and dead stock live. Priya’s bookkeeping now produces turnover by product category each quarter, and the serving platters turned out to be sitting at 0.9 (which explains why there were still 400 of them in the warehouse in August).
Why can an ecommerce business be profitable and still run out of cash?
An ecommerce business can be profitable and short of cash because you pay for stock months before you sell it, and the purchase cycle and the sales cycle almost never line up. Profit is recognised when the unit sells. Cash left when the container was ordered.
Follow one order through Priya’s year. She pays a 30% deposit in February. The balance is due when the goods ship in April. The container lands in late May, import GST is paid at the border, and the stock starts selling in June. Shopify pays out within a few business days of each sale, so from June the cash comes back steadily. The full $70,260 plus GST has been out of the business for three to four months before the first dollar returns, and the last unit from that shipment sells in October.
Now layer the pre-Christmas buy on top. Orders for November and December stock are placed in July and August, paid by September, while the winter stock is still selling through. Two shipments’ worth of cash is out at once. Add an ad budget that ramps in October ahead of the sales it will generate, and a profitable store hits its tightest cash month in the year it makes the most money. In ecommerce, the cash low point arrives in the months before your best sales, not after your worst ones.
This is the same mechanism behind several of the cash flow mistakes that drain a business, and the fix is the same: a rolling 13-week cash flow forecast that maps supplier payments, import GST and ad spend against expected payouts. It doesn’t change the cycle. It stops it surprising you.
How do I set up ecommerce bookkeeping properly?
You don’t need new software. You need the right structure in the software you have, and a monthly rhythm that maintains it.
- Connect every sales channel to your accounting file. Use a connector (A2X or equivalent) that posts gross sales, fees and refunds as a summary, not one that dumps every order as an invoice.
- Set up a clearing account per platform. Shopify, Amazon and eBay each get their own. Payouts hit the clearing account and are matched to the bank; the clearing account should reconcile to zero.
- Track inventory as an asset. Purchases go to inventory at landed cost. COGS is recognised as units sell, either through your inventory system or a monthly adjustment from the stock count.
- Capture landed cost per shipment. Freight, duty, insurance and broker fees are allocated to the shipment, not coded to general expenses.
- Gross up every payout. Revenue at gross, fees as an expense, refunds as a reduction of sales. GST calculated on the gross.
- Reconcile platform reports to the books monthly. The Shopify finance summary should tie to what’s in the ledger. If it doesn’t, something is missing.
- Produce a margin report by product or category. At minimum quarterly. Gross and contribution margin, not just gross.
- Get the GST setup right for imports. Import GST claimed on the BAS, deferred GST if you qualify, and correct treatment of any low-value goods where GST was charged at the point of sale.
Two months of this and the numbers become something you can plan from. Hopkan Partners’ bookkeeping service sets this structure up in Xero, QuickBooks or MYOB, reconciles your channels each month, and delivers a margin report you can read in five minutes. Book a free 30-minute review and bring your last Shopify finance summary and your most recent shipment invoices.
This article provides general information only and does not constitute financial, legal, or tax advice. The information is current as at October 2026. For advice specific to your circumstances, please consult a qualified professional.
