Cash flow
Seven reasons your accountant's number is not Shopify's
Your bookkeeper asks why the gross margin in the accounts is lower than the one on the Shopify dashboard. There is an answer, it has about seven parts, and nobody writes it down in one place.

The two numbers come from different costs, struck on different dates, over a different set of units. Shopify's profit is net sales minus a cost you typed once, which its own documentation tells you to enter excluding shipping. Your accountant's cost includes the inbound freight and gets restruck every time a delivery lands.
Neither side has made a mistake. They answer two different questions, both answers arrive labelled margin, and the conversation usually ends with somebody exporting a CSV instead of an explanation. Here is the explanation.
Why does Shopify's profit report disagree with the accounts?
Seven reasons, and they stack. On a typical importer's file most of the gap is the first two: a cost field that never contained freight and has not moved since the product was created. Every row below is quoted from the source that wrote it, all read on 11 September 2026.
| What differs | What Shopify does | What the accounts do |
|---|---|---|
| What is inside the cost | Cost per item is “the cost to you of the product or variant”, and the one worked example says to enter what you paid the manufacturer, “excluding taxes, shipping, or other costs” | Inbound freight belongs inside it. In Sweden, Skatteverket: “I anskaffningsvärdet för de lagertillgångar du köpt ska du räkna med inköpspris, frakt, tull och liknande kostnader.” |
| Whether the cost moves | It does not. “The Cost per item field contains static data”, so it changes when a person edits it and at no other moment. What that does to a catalogue is its own subject | A weighted average, restruck on every delivery. Årsredovisningslagen 4 kap 11 § permits “vägda genomsnittspriser” and forbids sist-in-först-ut |
| Which cost a sale carries | The one that existed when it sold. “Profit is reported only for products and variants that had cost recorded at the time they were sold” | The average as it stood the day the unit left the shelf. Same instinct, an input months fresher |
| Which revenue it divides by | Two answers, not one. The product page shows “([price − cost] / price) × 100”. Gross profit in the report is “calculated by subtracting the cost from net sales” | Net sales, after discounts and returns. The product-page percentage ignores every discount you ran, so it is the higher of the two |
| Which units get valued | The month-end inventory value report “totals the current amount of Available inventory on products with a cost per item value assigned at the time of sale”. Committed and unavailable units are not Available | Everything you owned on the balance date, counted item by item, whatever state it sat in |
| Products with no cost typed | They vanish rather than showing zero. “If orders are missing from this report, then it's likely that these variants don't have cost information” | An asset with no cost recorded still has to carry a value, so somebody finds one |
| Goods in transit | A state, not a value. “Incoming inventory isn't available to sell until it has been received”, and the value report counts only what is Available | Whether the container on the water is already yours depends on the terms you bought on |
The first two rows are the only ones that make the store's number wrong rather than merely different. The rest are definitional, and a definitional gap closes as soon as you write down which definition you used.
Why does the cost in the accounts move when Shopify's does not?
Because one is a number and the other is a calculation. Shopify stores a figure a person typed. Your accounts hold a weighted average, arithmetic that re-runs every time a delivery lands at a different price. Nothing in the admin ever hints that the field should change.
So the reconciliation lands on the bookkeeper rather than the merchant. The store cannot produce the moving figure, so once a year somebody rebuilds it from supplier invoices, freight invoices and a brokerage bill that arrived six weeks late, for every product bought more than once. The rule and the formula are in stock valuation for your accounts.
Which margin is Shopify actually showing you?
Both of them, in different places, and they are not required to agree. The product page divides by the price on the product. The profit report subtracts cost from net sales, which is after discounts and returns. Same store, same day, two honest percentages that were never the same measurement.
Decide which Shopify figure you are comparing before you put anything next to the accounts. A store that discounts hard can find several points between its own two numbers with no accountant in the room.
Where do goods in transit end up?
In neither report cleanly. Shopify treats incoming stock as a state rather than a value, so a container on the water is worth nothing in the month-end inventory value report and has produced no profit either. On a hundred-day lane that is a serious share of what the business owns.
Whether those units belong on your balance sheet yet is a question about your purchase terms, not about software, and your accountant answers it in a sentence. The purchasing half of the same blind spot is on the replenishment guide: what is already on the water changes what you should order next.
How to reconcile the two in an afternoon
None of this needs an app.
- List the variants with no cost per item. They are silently absent from both the profit report and the inventory value report, so they are the cheapest explanation for a total that comes out too small.
- Rebuild three products from their invoices. Pick ones you have imported at least twice, add each shipment's freight to its supplier invoice, and set the result against what is in the field. That per-unit difference is the first gap, multiplied across the catalogue.
- Compare Shopify's two percentages against each other. Whatever separates them is discounting, not costing, and it belongs in a different conversation.
- Total what was on the water on the balance date and hand it over as its own line. It is the item an accountant most often has to ask for twice.
How we handle it, and the part we do not
Restocio keeps the moving figure so the annual rebuild is not a rebuild. Cost prices go in once, and the app asks what the number means, a supplier price with freight still to add or one already landed, so freight is never counted twice. Each delivery appends its landed cost to a ledger and the average blends forward, so every value traces back to the receipt that produced it, and the result can be written back into Shopify's cost field.
Two reports answer what an accountant asks and Shopify cannot: what the shelf was worth at the end of a chosen day, and cost of goods sold over a period, each unit valued at the cost that applied on its own sale day. Where the inputs cannot carry an average, a missing previous cost or zero and negative stock, no figure is produced at all. A landed cost more than double the last average is treated differently: it is flagged as a large change and still applied, because only you know whether that was the supplier or a typo.
Now the limits, which matter more to a bookkeeper than to anyone else. Duty is not inside our landed cost figure. It is an estimate you set, it does not feed the calculation, and the screens say so rather than hiding it, so anything duty-rated is short by exactly that amount. Packaging is not modelled at all, and neither are payment processing fees. Ad spend has its own page and is not in this number either.
And the obvious one. We build purchasing software, not accounting software, and nothing here is tax advice. The rules quoted above are Swedish and they are not Danish or Norwegian rules, even where the principle looks the same. Which figure belongs in your accounts, in your country, is your accountant's call.
Common questions
Why is my Shopify profit report wrong?
Usually it is not wrong, it is incomplete. Shopify calculates profit by subtracting the cost per item from net sales, and its Help Center tells you to enter that cost excluding taxes, shipping and other costs. For an importer that leaves out inbound freight and duty, so the profit is too high on everything you import. Variants with no cost at all do not appear in the report, which makes the total too small as well.
Why does my accountant use a different cost than Shopify?
Because the accounts use the cost of getting the goods to you, not the price on the supplier's invoice, and because that cost is a weighted average that moves. In Sweden, Skatteverket states that the acquisition value of purchased stock includes inköpspris, frakt, tull och liknande kostnader, and Årsredovisningslagen 4 kap 11 § permits weighted average prices. Shopify's own documentation describes cost per item as static data, so it sits still while the real average keeps moving.
Does Shopify's inventory value report cover everything I own?
No. The month-end inventory value report totals Available inventory on products that have a cost per item assigned. Units that are committed to an unfulfilled order, or set aside as unavailable, are not Available, and anything still incoming is not counted either. A year-end stock figure has to include all of it, which is why the two totals rarely match on the first pass.
Do goods in transit count as my stock?
Shopify says no by construction: incoming inventory is not available to sell until it has been received, so it carries no value in any report. Whether it belongs on your balance sheet depends on the terms you bought on, and that is a question for your accountant rather than for software. Practically, total what was on the water on the balance date and hand it over as its own line.
Should I put my landed cost into Shopify's cost per item field?
If you import, yes, because it is the only cost box Shopify has and everything on the platform is computed from it. The catch is that it then has to be maintained: a delivery at a different freight rate or exchange rate produces a different landed cost, so the field becomes an average that moves rather than a number set once. There is more on what belongs in that figure in the landed cost guide.
Which margin should I quote, the one on the product page or the one in the profit report?
They answer different questions. The product page shows ([price minus cost] divided by price) times 100, which uses the list price and ignores discounts. The profit report subtracts the cost from net sales, which is after discounts and returns. For a conversation with an accountant the profit report figure is the closer of the two, and it is still built on whatever sits in the cost field.
Sources
Every source below was opened and read on the date shown against it. Rules, rates and schedules change, so check the current page before you act on a number that matters. If anything here is out of date or wrong, tell us and we will correct it.
- Shopify Help Center, Product details page (cost per item, and the margin formula) (read 11 September 2026)
- Shopify Help Center, Profit reports (read 11 September 2026)
- Shopify Help Center, Inventory reports (month-end inventory value) (read 11 September 2026)
- Shopify Help Center, Inventory states (on hand, available, incoming) (read 11 September 2026)
- Skatteverket, Varulager (anskaffningsvärde för köpta lagertillgångar). Sweden (read 11 September 2026)
- Årsredovisningslag (1995:1554) 4 kap 11 §, the permitted cost formulas. Sweden (read 11 September 2026)
Marcus co-founded Restocio and works on it daily with a Swedish importer who plans their purchasing in it every working day. Restocio is built in Sweden by two founders, one Swedish and one Danish, and Marcus is the Danish one. Most of the examples on this blog come from that store's real ordering decisions rather than from a textbook. Why we are building it.
Related reading
- How to check your COGS in ten minutes
- The cost price nobody ever updates
- What a unit actually costs you
- Stock valuation for your accounts, and why freight belongs inside it
- What a product really earns, after ad spend
Restocio plans purchasing for Shopify stores that import. It works out what to order, how much, and whether it should travel by sea, rail or air, so you pay air freight only for the units that genuinely cannot wait.