Why your Shopify profit report is missing costs
Shopify's profit report counts only sales that had a cost recorded at the moment they were sold, so any product whose cost was added later, or never added, is left out of gross profit. Shopify shows the size of that gap in a field called Net sales without cost recorded.
How Shopify builds gross profit
Gross profit is net sales minus cost of goods sold, and gross margin is gross profit divided by net sales. What matters is which sales are counted: in Shopify's sales data, gross margin is based on sales where cost of goods sold is recorded. Our reading of those statements together: the gross profit figure comes only from the costed part of your sales, and the margin is worked out on that same costed part. The net sales half of the formula is on gross vs net sales.
Cost per item is how much the product or variant costs you; for a product you resell, Shopify's example is the price you paid the manufacturer, excluding taxes, shipping or other costs. Shopify calls the field static data, so the data in a profit report is only relevant to a specific point in time.
Three reasons costs go missing
1. The cost was never entered
If orders are missing from the Gross profit by product report, Shopify says it is likely those variants don't have cost information.
2. The cost was entered after the sale
Shopify records cost at the time of sale. Our reasoning from that: adding or fixing a cost today does not go back and fill in earlier sales.
3. The line has nothing to carry a cost
Our reasoning, not a Shopify quote: a custom line item, or a product deleted and created again, has no recorded variant cost from the time of sale, so it lands in the uncosted share.
How to see the gap in your own admin
- Add Net sales without cost recorded next to Net sales with cost recorded in a report.
- Break any report into costed and uncosted sales with the dimension Cost is recorded.
- In the finance reports, the Gross profit breakdown card shows net sales, costs and profit.
- Shopify adds a caution: with-cost plus without-cost equals net sales only for product lines. Lines that are not products can make the two halves add up to something else.
Sources: Shopify Help Center: Profit reports · Shopify Help Center: Cost per item · Shopify Help Center: Finance reports · Shopify Help Center: Analytics data points (fields) reference · Shopify developer docs: ShopifyQL sales data
Reading the margin fairly
A margin with no coverage figure next to it cannot be checked, so write it with the share of sales it rests on. Do not divide costed-only gross profit by total net sales: that mixes two bases and makes the margin look lower than it is. Do not quietly assume a cost for the uncosted share either. Put a number on the gap and name it, the way a defensible number names what it leaves out; why an estimated margin and a traced one are different things is on margin reports vs profit dashboards.
A worked example (HYPOTHETICAL)
| Net sales | $50,000.00 |
| Net sales with cost recorded | $38,000.00 |
| Net sales without cost recorded | $12,000.00 |
| Cost of goods sold, costed sales only | $15,200.00 |
| Gross profit: 38,000 − 15,200 | $22,800.00 |
Invented numbers for one month, not a real store. The fair statement is: "Gross profit $22,800.00 on the $38,000.00 of sales that have a cost; $12,000.00 of sales has no cost recorded." Dividing $22,800 by all $50,000 of sales mixes two bases. Assuming the missing $12,000 cost the same as the costed sales would be an estimate presented as a measurement.
Fixing it going forward
Enter cost per item on every variant before it sells, and re-check new products and imports. Our reasoning from "static data": if you need cost history by date, Shopify's report will not rebuild it for you, so keep a dated cost record of your own and say which costs a period used.
What ProfitRoot does with this
ProfitRoot ties Net Sales to Shopify to the cent before it calculates any margin. It reads the cost per item Shopify holds for each variant, and you can add a product-cost file on Connections: a two-column SKU and unit cost CSV, or your Shopify Products export with Variant SKU and Cost per item. It then names how much of your sales has a cost, and a partial gross margin is never shown as a complete one. One limit to know: a ProfitRoot unit cost has no effective date, so one cost applies to every period. A line that matches no cost is named, never estimated. Free to install; Pro $49 a month; Firm $149 a month; every feature free during the founding period.
Common questions
Why are some orders missing from my Shopify profit report?
Shopify reports profit only for products that had a cost recorded when they sold. If orders are missing from the Gross profit by product report, Shopify says it is likely that those variants have no cost information. Check Net sales without cost recorded to see how much of your sales is affected.
If I add cost per item now, will my past orders update?
Based on Shopify's documentation, no. Shopify records cost at the time of sale and describes cost per item as static data. So a cost added or changed today applies to sales from now on, not to earlier orders.
How do I see how much of my sales has a cost recorded?
Add Net sales with cost recorded and Net sales without cost recorded to a report, or break a report down by the Cost is recorded dimension. The Gross profit breakdown card in the finance reports also shows net sales, costs and profit.
Why does my gross margin look fine but my gross profit looks low?
Shopify bases gross margin on the sales where cost of goods sold is recorded, and gross profit counts only that costed part. If a large share of sales has no cost, the margin can look normal while the dollar figure leaves out every uncosted sale.
Does Shopify's gross profit include shipping or payment fees?
Gross profit is net sales minus cost of goods sold. Shopify's example for resold products is the price paid to the manufacturer, excluding taxes, shipping or other costs. Payment fees are not part of the formula. Shopify's profit margin by order report is different: it also counts shipping costs, duties and import taxes paid by your store.
What this does not tell you
Which costs go into cost of goods sold (landed cost, freight, duties) is an accounting choice your accountant owns. Shopify's profit margin by order report counts more, including shipping costs, duties and import taxes paid by your store, so it can disagree with gross profit on purpose. Where payment fees live is on where to find your Shopify fees.
Reasons 2 and 3 below are our reasoning from Shopify's cost-at-sale rule, not Shopify quotes. The worked example is hypothetical.
Install ProfitRoot and see these steps on your own orders.
Install free from the Shopify App StoreOrders synced from a connected Shopify store are transmitted to and stored on our servers so they can be recomputed on later visits.
Sources last checked 2026-10-30.