WooCommerce Profit by Product Report: Find Your Winners and Losers
Why Revenue Reports Lie
WooCommerce's default product reports show revenue per product. This tells you what sells the most, not what earns the most. A product that sells 500 units at $20 each generates $10,000 in revenue. Impressive? Only if it doesn't cost you $18 per unit after supplier, shipping, and fees — leaving $1,000 in profit on 500 transactions.
Meanwhile, a product that sells 50 units at $80 each with $20 in costs generates $4,000 in revenue but $3,000 in profit. Three times the profit from one-tenth the volume.
Without a profit-by-product report, you'd be pouring your marketing budget into the $20 product (it sells more!) while neglecting the $80 product (it earns more!). This mistake is astonishingly common.
Method 1: COGS Plugin Reports (Easiest)
WPFactory Cost of Goods — Pro Version ($49.99/year)
WPFactory's Pro plugin includes a "Profit by Product" report directly in your WooCommerce admin. Once you've entered cost prices for your products, navigate to WooCommerce → Reports → Profit and select the "By Product" tab.
The report shows:
- Product name and SKU
- Units sold in the selected date range
- Total revenue
- Total cost (units × cost per unit)
- Gross profit
- Gross margin percentage
You can sort by any column — sort by margin percentage to find your most and least efficient products. Sort by total profit to find your biggest profit contributors.
Limitations: The report doesn't include payment processing fees or shipping costs unless you've manually added those to each product's cost field. It's a gross profit report, not a true net profit report.
Jeev COGS ($79/year)
Jeev's plugin offers similar product-level profit reports with the added benefit of automatic payment fee deduction. This means the profit numbers are closer to true net profit, though they still don't account for outbound shipping costs unless you configure them.
Method 2: Spreadsheet Analysis (Most Accurate)
For the most accurate profit-by-product analysis, export your data and crunch the numbers in a spreadsheet. This takes more effort but gives you full control over which costs to include.
Step 1: Export Order Data
Use WooCommerce's built-in export (WooCommerce → Reports → Export) or a plugin like WP All Export to get a CSV with: order ID, product name, product SKU, quantity, line total, shipping charged, payment method.
Step 2: Add Cost Data
Create a product cost lookup table in a separate sheet: SKU, supplier cost per unit, packaging cost per unit, inbound shipping cost per unit. Use VLOOKUP or INDEX/MATCH to pull costs into your order data.
Step 3: Calculate Per-Line Costs
For each order line item, calculate:
- Product cost: Quantity × cost per unit
- Payment fee: Line total × 0.029 + $0.30 (for Stripe — adjust for your processor)
- Outbound shipping: Allocate the order's shipping cost proportionally across line items (by weight or by value)
- Total cost: Product cost + payment fee + shipping allocation
- Profit: Line total - total cost
- Margin: Profit ÷ line total × 100
Step 4: Pivot by Product
Create a pivot table grouping by product name/SKU. Sum the profit column to get total profit per product. Calculate average margin per product. Sort by total profit descending.
Method 3: SQL Query (For Developers)
If you have COGS data stored in product meta (which all COGS plugins do), you can query the WooCommerce database directly for a profit-by-product report. This is fast, accurate, and can be automated.
SELECT
p.post_title AS product_name,
SUM(oim_qty.meta_value) AS units_sold,
SUM(oim_total.meta_value) AS total_revenue,
SUM(oim_qty.meta_value * pm_cost.meta_value) AS total_cost,
SUM(oim_total.meta_value) - SUM(oim_qty.meta_value * pm_cost.meta_value) AS gross_profit,
ROUND(
(SUM(oim_total.meta_value) - SUM(oim_qty.meta_value * pm_cost.meta_value))
/ SUM(oim_total.meta_value) * 100, 1
) AS margin_pct
FROM wp_woocommerce_order_items oi
JOIN wp_woocommerce_order_itemmeta oim_pid ON oi.order_item_id = oim_pid.order_item_id
AND oim_pid.meta_key = '_product_id'
JOIN wp_woocommerce_order_itemmeta oim_qty ON oi.order_item_id = oim_qty.order_item_id
AND oim_qty.meta_key = '_qty'
JOIN wp_woocommerce_order_itemmeta oim_total ON oi.order_item_id = oim_total.order_item_id
AND oim_total.meta_key = '_line_total'
JOIN wp_posts p ON oim_pid.meta_value = p.ID
JOIN wp_postmeta pm_cost ON p.ID = pm_cost.post_id
AND pm_cost.meta_key = '_alg_wc_cog_cost'
JOIN wp_posts o ON oi.order_id = o.ID AND o.post_status IN ('wc-completed', 'wc-processing')
WHERE oi.order_item_type = 'line_item'
GROUP BY p.ID, p.post_title
ORDER BY gross_profit DESC;
Note: The meta key _alg_wc_cog_cost is specific to WPFactory's COGS plugin. Other plugins use different meta keys. Check your database or plugin documentation.
This query runs in seconds even on stores with 100,000+ orders. Save it as a cron-triggered script that emails you a weekly profit report.
What to Do With the Data
Action Plan for Low-Margin Products
- Check if the cost data is accurate. Verify supplier invoices against what's in WooCommerce. Stale cost data is the #1 cause of misleading reports.
- Calculate the price increase needed to reach your target margin. Would a 10% price increase bring it in line? Test it.
- Look for cost reduction opportunities. Alternative suppliers, bulk ordering, cheaper packaging.
- Evaluate strategic value. Does this product drive traffic? Generate repeat purchases of higher-margin items? If so, the low margin might be intentional.
- Consider discontinuing if there's no strategic justification and the margin can't be improved.
Action Plan for High-Margin Products
- Increase marketing spend. These products are your profit engines — get more eyeballs on them.
- Feature them prominently. Homepage, category pages, email campaigns. Make them easy to find.
- Create bundles. Pair high-margin products with complementary items to increase AOV.
- Test cross-sell and upsell. If someone buys Product A (high margin), suggest Product B (also high margin).
- Protect the margin. Don't discount these products heavily. They don't need discounts — they need visibility.
Combining with Other Reports
A profit-by-product report is most powerful when combined with other data:
- Profit by product + traffic source: Which marketing channels drive the most profitable sales? (Requires Google Analytics integration)
- Profit by product + customer segment: Do returning customers buy higher-margin products? (Requires customer segmentation)
- Profit by product + time period: Are margins seasonal? Do holiday sales sacrifice margin for volume? (Use date range comparison)
For understanding margin calculation formulas in depth, see our WooCommerce profit margin calculator guide. And for choosing the right COGS plugin to power your reports, read our WooCommerce COGS plugin comparison.
Keep reading
Related guides you might find useful
How to Track Stripe Fees in WooCommerce (And Why You Should)
Stripe takes 2.9% + $0.30 per transaction. Here's how to track those fees inside WooCommerce so you can see real profit, not just revenue.
Read guideProfit TrackingWooCommerce Payment Gateway Fees Compared: Stripe vs PayPal vs Square (2026)
Every payment gateway eats into your margins. Here's a detailed fee comparison for WooCommerce stores — including the hidden costs nobody tells you about.
Read guideProfit TrackingWooCommerce Cash Flow Management: See Where Your Money Actually Goes
Revenue comes in, fees go out, refunds happen. Here's how to get a clear cash flow picture for your WooCommerce store without a spreadsheet.
Read guideLevel up your WooCommerce store
Join the WPBundle waitlist and get beta access to our plugin suite completely free.
Join the Waitlist