Profit · complete guide
WooCommerce profit reporting: what you need and how to do it
WooCommerce doesn't have a profit report. Analytics › Revenue gives you net sales, refunds, coupons, shipping and taxes, but no costs. To see profit, you add a cost for each product (in WooCommerce 10.3+ or a spreadsheet), subtract cost of goods from net sales, then take off shipping you paid and payment fees.
This guide walks through the whole picture: which numbers WooCommerce already gives you, which you have to bring yourself, the formulas that turn them into gross profit and contribution margin, and a monthly routine that fits a small store. Each section links to a deeper guide.
What does WooCommerce report out of the box?
Everything in WooCommerce Analytics is about the selling side. Open Analytics › Revenue, pick a date range, and the table gives you:
| Column | What it means for profit |
|---|---|
| Gross sales | What customers paid for products before refunds and coupons |
| Returns | Money refunded in the period, dated on the refund date |
| Coupons | Discounts given through coupon codes |
| Net sales | Gross sales minus returns minus coupons. Excludes tax and shipping. This is your revenue line. |
| Taxes | Tax collected. You pass this on, so it isn't income. |
| Shipping | Shipping charged to customers, not what you paid the carrier |
| Total sales | Net sales plus taxes plus shipping |
Net sales is the number to build profit on. It already has refunds and coupon discounts taken out, and it leaves out tax and shipping, which have their own lines. If the difference between the sales columns is fuzzy, net sales vs gross sales vs total sales explains each one.
Analytics › Products gives net sales and items sold per product, and Analytics › Coupons shows how much each coupon discounted. Every report has a Download button for a CSV.
What's missing is the other half: what those sales cost you. WooCommerce Analytics has no cost, profit or margin column, even when you've entered product costs. The WooCommerce Analytics glossary entry covers what the reports do include.
The profit formula for an online store
Most store owners find it useful to work in three layers. Each layer subtracts another kind of cost.
- Gross profit = net sales − cost of goods sold. Cost of goods is what you paid for the products you sold (or what it cost to make them), counted only for units actually sold.
- Contribution margin = gross profit − variable selling costs. Variable costs are the ones that rise with each order: shipping you paid minus shipping you charged, payment processing fees, packaging, and marketplace or app fees charged per order. See contribution margin.
- Net profit = contribution margin − fixed costs. Fixed costs don't change with order volume: hosting, plugins, software subscriptions, wages, rent.
As percentages, divide by net sales. Gross margin is gross profit ÷ net sales.
Here's a worked example. Say your store had this October:
| Line | Amount |
|---|---|
| Net sales (Analytics › Revenue) | $18,400 |
| Cost of goods sold (your costs × units sold) | $7,360 |
| Gross profit | $11,040 (60%) |
| Shipping paid to carriers | $2,150 |
| Shipping charged to customers (Analytics › Revenue) | $1,480 |
| Shipping shortfall | $670 |
| Payment processing fees | $610 |
| Packaging | $290 |
| Contribution margin | $9,470 (51%) |
| Fixed costs (hosting, apps, part-time help) | $3,900 |
| Net profit | $5,570 (30%) |
Three of these lines come straight from WooCommerce: net sales, shipping charged and, inside net sales, the refunds and coupons. Everything else you bring from supplier invoices, carrier bills and your payment processor.
Step 1: add product costs
Profit starts with knowing what each product cost you. There are three ways to record it.
Core Cost of Goods Sold (WooCommerce 10.3 and later). WooCommerce 10.3, released in October 2025, moved Cost of Goods Sold into core. It's off by default. Per the WooCommerce COGS documentation, as checked in November 2026:
- You turn it on under WooCommerce › Settings › Advanced › Features by ticking Cost of Goods Sold and saving.
- Each product gets a Cost of goods field on the General tab of the product editor.
- Variable products use the parent's cost as a default for every variation, and you can set a different cost on any variation.
- The order edit screen gains a Cost column for each line item and a Cost Total next to the order total.
- The cost is saved on the order when it's placed, so changing a product's cost later doesn't rewrite past orders.
- The core product CSV importer and exporter support the cost field, which is the fastest way to fill in a large catalog.
- It doesn't feed WooCommerce Analytics. There's no cost or profit column in the reports.
A cost-of-goods plugin. Third-party plugins such as Cost of Goods for WooCommerce also exist, and some add profit reports. If you run one alongside the core feature, WooCommerce's documentation warns you'll see two cost totals on orders.
A spreadsheet. A simple sheet with SKU, product name and unit cost works fine for many stores, and it's what you'll need anyway to calculate profit from exported reports.
The full walkthrough, including what happens to orders placed before you turn the feature on, is in how to add cost of goods to WooCommerce.
Step 2: work out gross margin by product
Store-wide margin hides a lot. One product at 70% margin and another at 15% can average out to something that looks healthy, while the second one quietly loses money once shipping and fees come off.
To see margin by product:
- Go to Analytics › Products, pick last month, and click Download.
- In a spreadsheet, add your unit cost next to each product (a lookup by SKU or product name).
- Add columns for cost of goods (unit cost × items sold), gross profit (net sales − cost of goods) and gross margin (gross profit ÷ net sales).
- Sort by gross profit, not by margin. A 70% margin on $200 of sales matters less than a 40% margin on $6,000.
Variable products need care, because sizes and colors often cost different amounts. Use Analytics › Variations if your variations have different costs. The step-by-step version, with a template layout, is in how to calculate gross margin by product.
Step 3: account for refunds and discounts
Net sales already has refunds and coupons subtracted, so you don't take them off twice. But both affect profit in ways the sales figure doesn't show.
Refunds. When you refund an order, net sales drops by the refunded amount. What happens to the cost depends on what came back. If the customer returned the item and you can sell it again, you've recovered the cost too. If you refunded without a return, or the item came back damaged, you've lost the revenue and the cost. Shipping you paid on both legs is usually lost either way.
Refunds also land on the date you issue them, not the order date. A big refund this month for a sale last month makes this month look worse than it was.
Discounts. A coupon comes straight off revenue but leaves the cost of the product unchanged, so every dollar of discount is a dollar of gross profit gone. A 20% discount on a product with a 50% margin removes 40% of the profit on that sale.
Both are covered in profit after refunds and discounts, and discounts get their own guide: how discounts eat into WooCommerce margins.
Step 4: compare shipping costs with shipping charges
The Shipping column in Analytics › Revenue is what customers paid you for shipping. It isn't what you paid. If you offer free shipping over a threshold, flat rates that don't match carrier rates, or ship heavy items cheaply, the gap can be large.
To find it, add up last month's carrier invoices or label purchases and subtract the Shipping figure from Analytics for the same dates. A negative number is money you spent to ship that your product margin has to cover.
Don't forget the less visible costs: boxes, tape, inserts, return labels you paid for, and any insurance. The guide on comparing shipping costs and charges in WooCommerce shows how to do this by month and how to spot which orders lose money on shipping.
Step 5: subtract payment processing fees
Every card or wallet payment costs you a fee, usually a percentage of the amount charged plus a fixed amount per transaction. The fee is normally charged on the whole amount the customer pays, including tax and shipping, so it's based on total sales rather than net sales.
WooCommerce Analytics doesn't record processor fees. You get them from your payment processor's dashboard or payout reports. Rates differ by processor, country, card type and plan, so use your own statement rather than a published headline rate.
Small orders are hit hardest by the fixed part of the fee. The guide on how payment fees affect WooCommerce profit explains how to find your effective rate and where fees on refunds catch people out.
Doing it monthly in a spreadsheet
You don't need a complex system. A one-tab spreadsheet updated once a month covers most stores:
- Analytics › Revenue for last month: copy net sales, returns, coupons, shipping and total sales.
- Analytics › Products for last month: download the CSV and paste it into a "products" tab with your unit costs alongside. Sum cost of goods.
- Carrier invoices: total shipping paid.
- Payment processor: total fees for the month.
- Other variable costs: packaging, per-order app fees.
- Fixed costs: the same list every month.
Then the formulas from the table above give you gross profit, contribution margin and net profit. Keep each month in its own row, and in a few months you'll see whether margin is improving or slipping.
Two tips keep the numbers honest:
- Use the same date settings every time. Analytics can date orders by when they were created, paid or completed (Analytics › Settings › Date type). Pick one and leave it.
- Check which statuses are counted. Orders with an excluded status are left out of every report. See why WooCommerce Analytics numbers don't match your orders if the totals look off.
Common profit reporting mistakes
- Using total sales as revenue. Total sales includes tax you owe and shipping you charged. Building profit on it overstates income.
- Taking refunds off twice. Net sales already has them removed. Only adjust cost of goods for items you didn't get back.
- Using today's cost for last year's sales. If supplier prices went up, last year's margin calculated with today's cost looks worse than it was. Keep a dated cost history, or use the cost saved on each order by the core feature.
- Leaving out free shipping. It's a real cost even when the customer sees $0.
- Judging products by margin alone. A low-margin best seller can earn more profit dollars than a high-margin product nobody buys. Sort by gross profit.
- Forgetting the fixed part of payment fees. On small orders it can be a bigger share than the percentage.
What Askshelf can and can't tell you
Askshelf can now answer the gross profit part of this guide. Turn on WooCommerce's Cost of Goods Sold feature, enter a cost on each product, and ask for profit over any date range. You get net sales, cost of goods, gross profit and margin, in total and per product, and you can compare with an earlier period.
Two limits matter. Askshelf uses the cost recorded on each order when it was placed, so orders from before you entered costs have no profit figure. And it stops at gross profit: it doesn't know your shipping costs, payment processor fees, ad spend or packaging. Contribution margin and net profit still need your carrier bills, processor statements and fixed costs.
What was my gross profit in October, and which products made the most?
For the revenue side, the sales summary still gives net sales, refunds, coupon discounts, shipping charged and taxes in one answer, and you can ask for coupon results by code. Paste those next to your shipping bills and fees, and the formulas above finish the job.
Askshelf also shows a free store snapshot at the top of its page, with gross profit when costs are on, and can email it every Monday. Askshelf is free for 10 questions a month and reads your store without changing anything. The profit reporting page shows how it fits a monthly routine.
Where to go next
Work through the profit guides in order, or jump to the one you need:
- How to add cost of goods to WooCommerce: the core feature, plugins and spreadsheets.
- How to calculate gross margin by product: find which products actually make money.
- Profit after refunds and discounts: what refunds and coupons really cost.
- Comparing shipping costs and charges: find out if shipping loses you money.
- How discounts eat into margins: the math behind a sale.
- How payment fees affect profit: find your effective fee rate.
For the sales side of the picture, start with the WooCommerce sales reports guide.
Common questions
Does WooCommerce have a profit report?
No. WooCommerce Analytics reports sales, refunds, coupons, taxes and shipping, but not profit or margin. Core WooCommerce can store a cost for each product since version 10.3, and its documentation says that cost data doesn't feed into Analytics yet.
What is the simplest way to see profit in WooCommerce?
Export net sales by product from Analytics › Products, add a unit cost for each product in a spreadsheet, and subtract cost times units sold. Then take off shipping costs, payment fees and other variable costs for the month to get contribution margin.
Should I use the core Cost of Goods Sold feature or a plugin?
The core feature stores costs on products and orders and shows a cost total on each order, which covers many small stores. If you need profit reports inside WordPress, you'll still need a plugin or a spreadsheet, because core Analytics doesn't report on cost yet.
Can Askshelf show gross profit for my WooCommerce store?
Yes, once Cost of Goods Sold is on and your products have costs. It reports net sales, cost of goods, gross profit and margin, in total and per product. It doesn't include shipping costs, payment fees or ad spend.
Is profit the same as net sales minus cost of goods?
That's gross profit. Real profit also takes off shipping you paid, payment processing fees, packaging, ad spend and fixed costs like software and rent.
See how Askshelf handles this: Profit reporting for WooCommerce