What Shopify Analytics actually measures
Open the Analytics tab in your Shopify admin and you get a clean set of numbers: total sales, orders, average order value, sessions, conversion rate, returning customer rate, sales by product, sales by channel. They're accurate. They're useful. They're the right starting point for understanding what's happening on the revenue side of your store.
That phrase — the revenue side — is doing a lot of work in that sentence.
Shopify's "net sales" line is post-discount, post-return, and pre-everything-else. It's the top of your income statement, not the bottom. The platform was built to be a storefront and a checkout, and its analytics layer reflects that: it can tell you everything that happened up to and including the moment money entered your account, and very little about what happened to that money on the way out.
The two columns Shopify can't fill in
There are exactly two reasons Shopify Analytics can't show you net profit. Both are structural, not bugs.
The first is COGS. Shopify lets you enter a cost-per-item on each variant, and if you do, it'll multiply that number by units sold and surface it in the Finance reports. That gives you a gross-margin estimate. But it can't enforce per-shipment shipping math (it assumes one rate per unit, multiplied by quantity), it doesn't track supplier cost variance over time (your AliExpress price moves, the cost-per-item field doesn't), and it doesn't reverse the COGS hit when a damaged item comes back as a return.
The second is ad spend. Shopify can't see the dollars you've spent on Meta, TikTok, Google, Pinterest, or anywhere else, because those platforms don't push spend data into Shopify's pipes. The "Marketing" tab in the admin is a manual entry surface, not a server-side ingest. You can type in your spend totals, but nothing's reconciling them against actual platform spend, and nothing's attributing campaign-level spend back to the orders it generated.
Without those two columns, you have a revenue dashboard. With them, you'd have a profit dashboard. That's the gap, in one sentence.
Where Shopify's "Total cost" reports go wrong
It gets worse than just "missing two columns." Even the cost columns Shopify does populate are quietly off in three specific ways that compound over time.
Refund processing fees stay with the processor. Refund an order through Shopify Payments and the customer gets their money back, but the original 2.9% + 30¢ doesn't come back to you. Shopify's reports show the refund as a clean reversal. The fee is gone, just not labeled.
The same order, two ways
To make this concrete, here's a single order priced two ways: how Shopify Analytics will report it after a refund and a chargeback, vs what actually flowed through your bank.