ds@mcpanalytics.aiEmail your data and your question and get an answer about your own data, with the method shown.Email your data and question. Get an answer.

Shopify Profitability Analysis: Products Costing You Money

By MCP Analytics Team | Published , updated

Illustrative example with made-up numbers. Suppose a Shopify store owner opens their dashboard and sees $47,000 in revenue, 15% month-over-month growth, and a climbing conversion rate. Now suppose you ask to see their profit-by-product report, and they don't have one. If you calculated actual profitability across all 23 SKUs and the store had lost $1,800, with the three "bestselling" products generating $28,000 of that revenue and bleeding money after discounts, returns, and shipping costs, the dashboard would have hidden the whole problem.

That is the risk when you only look at revenue. A Shopify profitability analysis at the product level can show negative margins on products that sell in volume. Revenue looks healthy because you're selling a lot; profit tells the real story, and it may show you subsidizing customer acquisition with product losses.

Here's how to find which products are costing you money, why your bestsellers might be your biggest drains, and what to do about it, using data you already have sitting in your Shopify admin.

Worked Example (Simulated): Which Item Earns Money After Costs?

Question: Which of three items earns money after the costs in this example?

Inputs: Simulated data, seed 73. The script makes 20 orders for each of three items, with the price and unit cost shown in the code. Order size (1 to 3 units), discount (0%, 10% or 20%) and returns (a 10% chance per unit, and half of returned units cannot be sold again) are drawn from those rules. Shipping is $5 per order. This example assumes a fee of 2.9% of sales plus $0.30 per order. Check the rate your own processor charges.

Built in: Band set and Yoga mat have a unit cost of 40% of price (a 60% list margin), so they earn by construction. The Roller costs $19 on a $24 price (about a 21% list margin), so it was built to lose money. COGS means cost of goods sold. The script counts it for kept units and for returns that cannot be resold. Refunds are a separate cost.

import numpy as np

# Simulated data, seed 73. Each row is one order for one SKU.
rng = np.random.default_rng(73)
skus = {
    "Band set": {"price": 30.0, "cogs": 12.0},
    "Yoga mat": {"price": 50.0, "cogs": 20.0},
    "Roller": {"price": 24.0, "cogs": 19.0},
}
fee_rate = 0.029
fixed_fee = 0.30
ship_per_order = 5.00

print("Simulated data, seed 73")
print(
    "Inputs: 20 orders per SKU; Band set price $30.00 and COGS $12.00; "
    "Yoga mat price $50.00 and COGS $20.00; Roller price $24.00 and "
    "COGS $19.00; quantities 1-3; discounts 0%, 10%, or 20%; each unit "
    "has a 10% return chance; half of returned units are not "
    "restockable; shipping $5/order; assumed fee 2.9% of post-discount "
    "sales plus $0.30/order (the example's assumption, not a Shopify rate)."
)
print(
    "Profit = post-discount sales - refunds - COGS for kept or "
    "unsellable units - shipping - fees."
)
print(
    "A refund is the returned unit's discounted price. It is separate "
    "from COGS: restockable returned units have no COGS cost in this "
    "calculation; unsellable returns do."
)
print(
    "SKU | orders | units | gross | discounts | refunds | COGS cost | "
    "shipping | fees | profit"
)

for sku, cfg in skus.items():
    orders = 20
    qty = rng.integers(1, 4, size=orders)
    discount_rate = rng.choice([0.0, 0.10, 0.20], size=orders)
    gross = float(np.sum(qty * cfg["price"]))
    discounts = float(np.sum(qty * cfg["price"] * discount_rate))
    returned = rng.binomial(qty, 0.10)
    unsellable = rng.binomial(returned, 0.50)
    refunds = float(np.sum(returned * cfg["price"] * (1 - discount_rate)))
    kept = int(np.sum(qty - returned))
    cogs_units = kept + int(np.sum(unsellable))
    cogs_cost = cogs_units * cfg["cogs"]
    shipping = orders * ship_per_order
    fees = (gross - discounts) * fee_rate + orders * fixed_fee
    profit = gross - discounts - refunds - cogs_cost - shipping - fees
    sign = "-" if profit < 0 else ""
    print(
        f"{sku} | {orders} | {int(np.sum(qty))} | ${gross:.2f} | "
        f"${discounts:.2f} | ${refunds:.2f} | "
        f"${cogs_cost:.2f} ({cogs_units} units) | ${shipping:.2f} | "
        f"${fees:.2f} | {sign}${abs(profit):.2f}"
    )

Printed output:

Simulated data, seed 73
Inputs: 20 orders per SKU; Band set price $30.00 and COGS $12.00; Yoga mat price $50.00 and COGS $20.00; Roller price $24.00 and COGS $19.00; quantities 1-3; discounts 0%, 10%, or 20%; each unit has a 10% return chance; half of returned units are not restockable; shipping $5/order; assumed fee 2.9% of post-discount sales plus $0.30/order (the example's assumption, not a Shopify rate).
Profit = post-discount sales - refunds - COGS for kept or unsellable units - shipping - fees.
A refund is the returned unit's discounted price. It is separate from COGS: restockable returned units have no COGS cost in this calculation; unsellable returns do.
SKU | orders | units | gross | discounts | refunds | COGS cost | shipping | fees | profit
Band set | 20 | 42 | $1260.00 | $105.00 | $138.00 | $468.00 (39 units) | $100.00 | $39.50 | $409.50
Yoga mat | 20 | 37 | $1850.00 | $155.00 | $230.00 | $700.00 (35 units) | $100.00 | $55.16 | $609.85
Roller | 20 | 39 | $936.00 | $76.80 | $40.80 | $722.00 (38 units) | $100.00 | $30.92 | -$34.52

Result: Band set earns $409.50 and Yoga mat earns $609.85. The Roller loses $34.52. Sales less COGS leave $214.00 for the Roller ($936.00 less $722.00). Discounts ($76.80), refunds ($40.80), shipping ($100.00) and fees ($30.92) take $248.52. The Roller was built to lose money, and a different run could land near zero. That Band set and Yoga mat earn follows from their inputs; it is not a finding about a real store.

Limit: The data are simulated, with set shipping and fee costs and only 20 orders per item. The run does not show what any real store earns.

Why Revenue Dashboards Hide Your Profit Problem

A revenue-focused view in your Shopify reports typically centres on sales metrics such as revenue, units sold, average order value, and conversion rate. All useful metrics. None of them tell you if you made money on their own.

The issue is aggregation. When you look at total store revenue, profitable products mask unprofitable ones. A product with 60% margins can subsidize three products operating at -10% margins, and your dashboard will show net positive revenue. You'll think you're growing. You're actually losing ground.

Product-level profit analysis disaggregates this. It calculates contribution margin for each SKU after the product-level costs listed below (discounts, returns, COGS, shipping, payment fees). It leaves out customer acquisition cost and overhead unless you allocate them to the product. This is often where store owners discover the problem: their intuition about which products are profitable is wrong.

The Revenue Mirage (illustrative example with made-up numbers): Suppose a store generating $50,000/month looks successful in aggregate dashboards. Product-level analysis could reveal: 8 products at 40-55% margin = $22,000 profit, 12 products at 5-15% margin = $3,200 profit, 7 products at -5% to -18% margin = -$4,800 loss. Net profit: $20,400, but you'd make $25,200 if you discontinued the loss-makers and reallocated that ad spend.

Check what your Shopify reports and exports include before relying on them for this, because product profit needs several cost data sources connected. An orders export gives you revenue and discounts. Check whether returns, shipping costs and payment processing fees appear in your exports or sit in separate reports or statements. You need to combine five different data sources to get true product profitability.

So the question to put to your own store is this: "Which of my products are profitable after all costs?" Revenue per product is easy to read off a dashboard. Profit per product takes work. The difference determines whether you're building a business or funding a hobby.

The 5 Cost Categories That Kill Product Margins

When you run Shopify margin analysis, five cost categories are the usual margin killers. Many store owners track one or two. Tracking all five at the SKU level shows what each product really earns.

1. Discount Stacking

A customer uses a 15% welcome discount on a product already marked down 20% for a seasonal sale, then triggers free shipping on a $45 order. Total discount: 32% off the list price (1 - 0.80 x 0.85 = 0.32), plus $6.50 in shipping costs. If your base margin was 40% (COGS at 60% of list price), a $45 list-price order is paid at $30.60, costs $27.00, and after $6.50 shipping you are at -$2.90, so you just went negative.

Discount stacking is easy to miss in aggregate reports when "total discounts" is a store-wide number, because you can't see which products absorb the most discount impact. When you break it down by SKU, you can see which products attract the most discount redemptions, and those are the first margin killers to check.

2. Returns That Aren't Restockable

Your return rate might look modest overall. But individual products can return at far higher rates, and some of those returns can't be resold at full price. Apparel is a typical case: customers order multiple sizes, keep one, return the rest. You paid shipping twice, processing fees twice, and now you're selling the returns at 30% off.

The math: Product sells for $60, COGS is $25, base margin is $35 (58%). But with a 25% return rate and 40% of returns unsellable, you lose $11.25 per unit sold in return costs (25% of units refunded x $35 margin = $8.75, plus 10% of units, the unsellable returns, x $25 COGS = $2.50). Margin after returns: $23.75. Formula: retained revenue ($60 x 75% kept = $45.00) minus COGS ($25 x 75% kept = $18.75, plus $25 x 10% unsellable returns = $2.50, so $21.25) = $23.75, which is about 40% of the $60 price and about 53% of the $45.00 retained revenue. If that product also attracts heavy discounting, you're underwater.

3. Shipping Cost on Low-AOV Orders

Free shipping thresholds save you money on high-value orders. They destroy margins on single-item purchases. A customer buys one $28 product, you pay $7.20 to ship it, and suddenly your 45% margin product is at 19%.

This is especially brutal for "impulse buy" products that customers purchase alone rather than adding to basket. If 60% of orders for a specific SKU are single-item orders below your free shipping threshold, that product's effective margin is much lower than your spreadsheet says.

4. Payment Processing Fees

This example assumes a fee of 2.9% of sales plus $0.30 per order. Check the rate your own processor charges. At that assumed fee, a $50 order pays $1.75. If your margin is $8, the processor just took 22% of your profit. Scale that across thousands of transactions, and payment processing becomes a significant cost center.

Most stores apply this as a flat percentage across all products. But high-frequency, low-AOV products pay a higher effective rate because the $0.30 fixed fee hits harder. A $20 product pays 4.4% in fees. A $100 product pays 3.2%. If you're not accounting for this variance at the SKU level, you're overestimating margins on your low-price items.

5. Cost of Goods Sold Drift

Suppose you set your COGS when you launched the product 18 months ago. Since then, your supplier raised prices twice and you switched to higher-quality packaging. Your COGS is now $19, but your spreadsheet still says $14. Your margins are fiction.

COGS drift is insidious because it happens gradually. You don't notice that a product went from 50% margin to 35% margin over two years. You just notice that profit isn't growing as fast as revenue. Auditing actual current COGS against what's in your pricing model shows how far each SKU has drifted.

The Compounding Effect (illustrative example with made-up numbers): Each cost category shaves a few percentage points off margin. But they compound. Suppose a product with 48% base margin loses 12% to discounts, 6% to returns, 8% to shipping on low-AOV orders, 3% to payment processing, and 5% to COGS drift. Real margin: 14%. If you're spending 18% of revenue on customer acquisition, that product is unprofitable.

Worked Example: A Store Losing Money on Bestsellers

Illustrative example with made-up numbers. Suppose a store sells home fitness accessories: resistance bands, yoga mats, foam rollers, massage tools. Suppose monthly revenue is $52,000 and the owner thinks margins are healthy because the top 5 products in the table account for $37,100 of that revenue.

Suppose the top five products by revenue were:

Product Revenue
Resistance Band Set $12,400
Premium Yoga Mat $9,200
Foam Roller Pro $7,800
Massage Ball Set $4,600
Stretching Strap $3,100

In this made-up scenario, suppose the bestseller, the Resistance Band Set, turns out to be the biggest drain once all costs are counted. Suppose the reasons are:

Suppose the owner spends $2,800/month on ads to drive traffic to this product because it has the highest conversion rate.

The pattern to watch for: a high-revenue product can become unprofitable because it is too successful at attracting discount-seekers and low-commitment buyers. You optimize for conversion and revenue, and margin collapses.

How to Calculate Product Contribution Profit: The Formula

Before you can fix unprofitable products, you need to measure profitability correctly. Here's the formula that accounts for five product-level cost categories. It excludes customer acquisition cost (ad spend) and overhead; subtract ad spend attributable to the product as well if you want a profit view after marketing:

Product Contribution Profit =
  (Units Sold × Price)
  - Total Discounts
  - Refunds paid for returned units
  - COGS for kept units and for returns that cannot be resold
  - Shipping Costs
  - Payment Processing Fees

Per-Unit Margin = Product Contribution Profit / Units Sold
Margin % = (Per-Unit Margin / Average Selling Price) × 100

Let's apply this to an illustrative example with made-up numbers:

Product: Yoga mat priced at $68
Units sold: 150
COGS: $22 per unit
Gross revenue: $10,200

Costs:

Calculation:

Revenue:     $10,200
COGS:        -$3,300
Discounts:   -$1,060
Shipping:    -$453
Fees:        -$341
Refunds:     -$306
-------------------
Profit:      $4,740

Per-unit margin: $4,740 / 150 = $31.60
Margin %: ($31.60 / $68) × 100 = 46.5%

Your spreadsheet probably said this product had 68% margin ($68 - $22 = $46). Actual margin after the costs listed: 46.5%. That gap of about 21 points is where profitability analysis earns its ROI. It shows you the real economics, not the theoretical ones. This hand example leaves out the cost of unsellable returns; the simulated example above shows how to count it.

Critical Insight: Don't calculate profitability on assumed averages. Use actual per-SKU data for discount rates, return rates, and shipping costs. A store-wide return rate means nothing if one product returns at 28% and another at 4%. SKU-level precision is what separates useful analysis from misleading spreadsheets.

Shopify Order Export CSV Columns: What You Actually Need

To run this analysis, you need to export your Shopify order data with specific columns. Most guides tell you to export "all columns." That's 60+ fields, most irrelevant. Here's what matters for shopify product performance profitability analysis:

Required Columns for Profitability Analysis

The Lineitem compare-at price field is often overlooked but essential. It shows your list price before discounts, letting you calculate how much discount impact each SKU absorbed. Without it, you can see total order discount but can't allocate it accurately across multiple line items.

When you export, Shopify gives you options like "Shopify orders export CSV columns" or "Shopify order export CSV columns", both work, but make sure you're selecting the line item level export, not order level. Order-level exports aggregate all products in a multi-item order into one row, making per-product analysis impossible.

How to Export Orders with the Right Columns

  1. In Shopify admin, go to Orders
  2. Click "Export" in the top right
  3. Select "All orders" or your desired date range
  4. Choose "Plain CSV file"
  5. Under export type, select "All line items in orders" (not "Current page" or "Summary")
  6. Click "Export orders"

This gives you a CSV with one row per line item. If an order contained 3 products, you'll get 3 rows. That's exactly what you need for SKU-level profitability analysis.

Common Export Mistake: Exporting order-level data instead of line-item data. Order-level exports show $180 total revenue and $27 total discounts for a 3-product order. You can't tell which of those 3 products absorbed the discount. Line-item exports break it down: Product A got $12 in discounts, Product B got $15, Product C got $0. That precision changes which products you flag as unprofitable.

Upload to MCP Analytics: Automatic Profit-by-Product

Once you have your Shopify orders CSV, you could build a spreadsheet with pivot tables and VLOOKUP formulas to calculate per-product profitability. Or you can upload it to MCP Analytics and get a profit analysis.

Here's what the automated analysis does:

The output is a ranked table: products sorted by total profit contribution. This immediately shows you which products are carrying your store (high revenue, high margin) and which are draining it (high revenue, negative margin).

The analysis also flags why each unprofitable product is losing money. Is it discount-driven? Return-driven? Shipping cost? This tells you whether the problem is fixable (reduce discounting, change packaging to lower shipping costs) or structural (COGS too high for the market price).

The 3 Types of Unprofitable Products (And What to Do With Each)

Not all unprofitable products are bad. Some lose money strategically. Others lose money because you haven't fixed a solvable problem. A few are just bad products. Here's how to classify them:

Type 1: Loss Leaders

Profile: Negative margin, but drives traffic and increases basket size. Customers discover your store through this product, then add higher-margin items.

How to identify: Check average order value for orders containing this product vs. store-wide AOV. If it's 30%+ higher, the product is working as a loss leader. Also check whether this is a frequent first purchase, if 60%+ of buyers are new customers, it's an acquisition tool.

What to do: Keep it, but set a budget. Calculate how much you're willing to lose on this product as a customer acquisition cost. If it's bringing in customers at $18 CAC and your typical CAC is $35, the negative margin is just pre-paid ad spend. But monitor it, if the AOV premium disappears, it's no longer a loss leader, it's just a loss.

Illustrative example with made-up numbers: Suppose a store sells a $24 kettlebell at -$3 margin. Suppose 71% of kettlebell buyers add a $68 yoga mat or $52 resistance band set to their order, so average order value for kettlebell orders is $94 against a store-wide AOV of $61. In that case the kettlebell is a profitable loss leader.

Type 2: High-Potential Fixables

Profile: Currently unprofitable, but the problem is fixable. Usually it's excessive discounting, inefficient shipping, or outdated pricing that doesn't reflect current COGS.

How to identify: Margin would be positive if you removed one cost factor. For example, if the product has -4% margin but 22% of revenue goes to discounts, eliminating discounts would bring it to +18% margin.

What to do: Run an experiment. Pick the biggest cost driver and fix it for 30 days. If it's discount-driven, exclude the product from discount codes. If it's shipping-driven, raise the free shipping threshold or add a small shipping fee for single-item orders. If it's COGS-driven, renegotiate with your supplier or increase price by 8-12%.

Track two metrics: did margin improve (it should), and did conversion rate collapse (it might). If conversion drops 40% when you stop discounting, the product doesn't work at full price, move it to Type 3. If conversion drops 10-15%, that's acceptable friction for restored profitability.

Illustrative example with made-up numbers: Suppose a $38 foam roller has -6% margin, and 64% of sales use discount codes averaging 20% off. Suppose the owner excludes the product from site-wide sales and welcome discounts, conversion rate drops 11%, and margin rises to +22%. Net profit on the SKU would go from -$340/month to +$1,180/month.

Type 3: True Drains

Profile: Unprofitable with no clear fix. COGS is too high relative to competitive pricing, return rates are structural, or the product only sells with heavy discounting that kills margin.

How to identify: You've tested removing discounts, adjusting pricing, optimizing shipping, nothing brings the product to positive margin without destroying conversion. Or the market price ceiling is below your breakeven.

What to do: Discontinue it. But do this as a controlled experiment, not an impulsive cut. Remove the product from your store for 30 days. Measure:

If profit increases and revenue impact is minimal, keep it discontinued. Reallocate the ad spend you were using to promote this product to your high-margin winners.

Illustrative example with made-up numbers: Suppose a store sells a $42 weighted jump rope at -11% margin. COGS is $28, the supplier won't negotiate, and competitors sell equivalent products at $39-$44, so there is no room to raise price. Returns are 26% because the product is fragile. No amount of optimization makes it profitable. If the store discontinues it, revenue drops $1,800/month but profit rises $2,100/month because the drain is gone.

The Discontinuation Test: Run a 30-day removal experiment. Track revenue, profit, and AOV with and without the product. Data beats intuition. If removing a $6,000/month revenue product increases overall profit by $1,400, your intuition was wrong, discontinuing it was the right move.

Worked Example: Cutting Unprofitable SKUs

Illustrative example with made-up numbers. Suppose a health supplements store has flat profit despite 22% revenue growth over 6 months. Revenue is $71,000/month, and profit has been stuck at $14,200-$15,800 for half a year. They are acquiring more customers and selling more units, but making the same amount of money.

Suppose the profitability analysis shows the cause: they added 6 new products in that 6-month period, and four of them are unprofitable. The new products generate $18,400 in incremental revenue but lose $2,740 in aggregate profit.

Suppose the owner then does the following:

  1. Discontinues 2 true drains immediately: Products with -14% and -9% margins that have no clear path to profitability. Cost: $6,100 in monthly revenue. Gain: $1,830 in recovered profit.
  2. Fixes 1 high-potential product: A product with -5% margin driven by heavy discounting. Excludes it from promotional discounts and raises the price 8%. Conversion drops 13%, but margin goes to +18%. Adds $680/month in profit.
  3. Keeps 1 loss leader with a cap: A $22 protein sampler pack with -8% margin, but 68% of buyers add a $54 full-size tub to their order. Sets a budget of up to $1,000/month on this SKU as customer acquisition and monitors AOV monthly to confirm it stays an effective loss leader.

Suppose the results after 60 days are:

Suppose the owner also reallocates the $1,200/month in ad spend that had been promoting the discontinued products to their top-margin products, and revenue recovers to $72,800 within 90 days while profit holds at $19,100.

The point of rigorous product profitability analysis is not just finding unprofitable products, but classifying them correctly and taking the right action for each type. Discontinue true drains, fix high-potential products, keep strategic loss leaders under budget constraints.

Common Pitfalls in Shopify Profitability Analysis

Before we wrap up, let's address the mistakes that undermine profitability analyses:

Using Store-Wide Averages Instead of SKU-Level Data

Applying one store-wide return rate to all products gives you a fiction. Suppose Product A returns at 4% and Product B at 28%. Using one rate for both makes Product A look less profitable than it is and hides how badly Product B is performing. Always use per-SKU metrics.

Ignoring Discount Allocation

A customer uses a 20% off code on a $120 order containing a $80 item and a $40 item. The $24 discount isn't split evenly ($12 each). It's allocated proportionally: $16 off the $80 item, $8 off the $40 item. If you don't allocate correctly, you'll miscalculate which product absorbed the margin hit.

Forgetting Payment Processing Fees

A fee such as 2.9% + $0.30 per order (the assumption in the example above) sounds small until you multiply it across thousands of orders. Forgetting it makes every product look more profitable than it actually is.

Not Updating COGS

Your profitability analysis is only as good as your COGS data. If you're using COGS from 18 months ago and your supplier raised prices twice, your margins are fantasy. Update COGS quarterly at minimum, monthly if you have high supplier volatility.

Failing to Test Removal Impact

You identify 5 unprofitable products and discontinue all of them immediately without testing. Two of them were driving basket size increases. Their removal causes AOV to drop 14%. You removed $11,000 in revenue and only recovered $2,800 in profit because you killed two hidden loss leaders. Always test removal on one product at a time, measure impact, then scale.

The Sample Size Trap: Don't make profitability decisions on products with few transactions. A product that sold 12 units with a 33% return rate might just be noise. You had 4 returns. Wait until you have enough data to calculate meaningful return rates, discount rates, and margins. Low-volume SKUs need more time to show their true economics.

Your 5-Step Shopify Profitability Analysis Action Plan

Here's how to implement this in your store starting today:

  1. Export your Shopify orders CSV with line-item detail. Make sure you include Lineitem compare-at price, shipping, discounts, and returns. Export the last 90 days minimum, 12 months ideally.
  2. Update your COGS spreadsheet. Verify current supplier costs for every SKU. Don't use outdated numbers. Email suppliers if needed to confirm pricing.
  3. Run the profitability analysis. Upload to MCP Analytics or build your own spreadsheet using the formula above. Calculate contribution profit per SKU after the product-level costs.
  4. Classify your unprofitable products. Separate loss leaders, high-potential fixables, and true drains. Each category requires a different response.
  5. Run controlled experiments. Fix one product at a time. Remove discounts, adjust pricing, or discontinue entirely. Measure impact on conversion, revenue, and profit for 30 days before scaling.

Start with your highest-revenue products. These have the biggest impact on overall profitability. If your #1 bestseller is operating at -6% margin, fixing that one SKU can add more profit than optimizing 10 low-volume products.

Profitability analysis isn't a one-time project. Run it quarterly. Your costs change, your product mix changes, customer behavior changes. What was profitable 6 months ago might be a drain today. Regular analysis keeps you ahead of margin erosion.

Your turn

Bring your own data and the question you actually need answered.

MCP AnalyticsData science by email Send us your data and your question, and we will reply. ds@mcpanalytics.ai

Frequently Asked Questions

What columns do I need when I export Shopify orders to CSV for profitability analysis?

For complete profitability analysis, export these columns: Lineitem name, Lineitem quantity, Lineitem price, Lineitem compare-at price, Lineitem sku, Shipping, Discount amount, Discount code, Refunded amount, Returns, Paid at. The "Lineitem compare-at price" field is critical. It shows your list price before discounts, letting you calculate true discount impact on margins.

Why do high-revenue products sometimes have negative profit margins?

High-revenue products often become unprofitable through discount stacking (coupon + sale price + free shipping), elevated return rates, incremental shipping costs on low-AOV orders, and payment processing fees eating into thin margins. For example, a product generating $15,000/month can still lose money if these costs aren't tracked at the SKU level.

How do I calculate product-level profit including the main hidden costs?

Product Contribution Profit = (Units Sold × Price) - Total Discounts - Refunds paid for returned units - COGS for kept units and for returns that cannot be resold - Shipping Costs - Payment Processing Fees. Then divide by units sold to get per-unit margin. This accounts for all five hidden cost categories that a revenue-only view can miss.

What's the fastest way to identify which Shopify products are losing money?

Export your Shopify orders CSV with all cost columns (shipping, discounts, refunds), upload to MCP Analytics, and run a Product Profitability Report. The analysis calculates per-SKU margins, flags negative-margin products, and shows which cost category is hurting each product's profitability.

Should I discontinue products with negative margins immediately?

Not always. First, classify the product: Loss Leaders drive traffic and may boost basket size (test by tracking removal impact). High-Potential products have fixable issues like excessive discounting. True Drains have unfixable economics and should be discontinued. Run a controlled experiment: remove the product for 30 days and measure impact on overall store profit, not just that SKU's revenue.

To test whether a promo code is worth the margin it costs, see discount effectiveness.

Explore more: Shopify Analytics: all tools, tutorials, and guides →