Profit

How to calculate profit after refunds and discounts in WooCommerce

To calculate profit after refunds and discounts in WooCommerce, start from net sales in Analytics › Revenue: refunds (Returns) and coupons are already taken out. Then subtract cost of goods for items you sold and didn't get back. Don't subtract refunds or coupons a second time; adjust only the cost side.

The tricky part isn't the revenue, it's the cost. This guide shows where WooCommerce records refunds and discounts, how each one changes your cost of goods, and a worked monthly example.

Where WooCommerce records refunds and discounts

Open Analytics › Revenue, pick a date range, and look at these columns:

Column What it holds
Gross sales Product sales before refunds and coupons
Returns Money refunded in the period
Coupons Discounts from coupon codes
Net sales Gross sales − Returns − Coupons

So net sales is already "after refunds and discounts". The net sales glossary entry and the guide to net sales vs gross sales vs total sales explain the columns in more detail.

Two details matter for profit:

  • Returns are dated on the refund date, not the date of the original order. A refund in November for an October order lowers November's net sales. See returns in WooCommerce Analytics.
  • The Coupons column only counts coupon codes. If you lower a product's price with a sale price, that discount never appears as a coupon. The product just sells for less, and gross sales is lower to begin with.

How refunds change profit

A refund always reduces revenue. What it does to cost depends on what happens to the product.

Situation Revenue Cost of goods Effect on gross profit
Item returned and restocked Lost Recovered (it's back in stock) You lose the margin on that sale
Refund without return (lost parcel, goodwill) Lost Not recovered You lose the price and the product's cost
Item returned damaged, written off Lost Not recovered Same as no return
Partial refund (say 20% for a scuffed box) Partly lost Unchanged Gross profit falls by the refund amount

On top of that, refunds usually cost you shipping twice (out and back if you pay for returns), and many payment processors keep their original fee when you refund. Check your processor's terms; the guide on payment fees covers this.

When you restock a returned item in WooCommerce, the stock level goes back up. If you use WooCommerce's core Cost of Goods Sold feature (10.3 and later), the order screen shows the combined cost of the refunded items, but that cost isn't reported in Analytics.

How discounts change profit

A discount comes off the price but not the cost. That means every dollar of discount is a dollar of gross profit gone, and it hits margin harder than the percentage suggests.

Say a product sells for $50 and costs you $25, a 50% gross margin. A 20% coupon takes $10 off:

Full price With 20% coupon
Price $50 $40
Cost $25 $25
Gross profit $25 $15
Margin 50% 37.5%

A 20% discount removed 40% of the profit on that sale. The deeper look, including how many extra sales a discount needs to break even, is in how discounts eat into WooCommerce margins.

A worked example: one month, start to finish

Say these are your numbers for October from Analytics › Revenue:

Line Amount
Gross sales $20,860
Returns −$1,120
Coupons −$1,340
Net sales $18,400

Now the cost side. Export Analytics › Products for October and multiply each product's items sold by its unit cost. That comes to $7,520.

One detail matters here: when you refund an order and enter the quantity of each item refunded, Analytics takes those units off Items sold. So your $7,520 already assumes every refunded unit came back. That's right for returns you restocked, and wrong for refunds where you never saw the product again.

Of the $1,120 refunded, $700 was for items returned and restocked, and $420 was for refunds without a return (a lost parcel and two goodwill refunds). The products in those no-return refunds cost you $170, so you add that cost back:

Line Amount
Net sales $18,400
Cost of goods (unit cost × items sold) −$7,520
Cost of refunded items you didn't get back −$170
Gross profit after refunds and discounts $10,710 (58%)

Notice you don't subtract the $1,120 or the $1,340 again. They're already inside net sales. The only adjustment is on the cost side, for products that didn't come home.

If you refund an amount without entering item quantities, Analytics doesn't take those units off items sold. In that case the cost is already counted, and you'd instead subtract the cost of any item that was returned and restocked. Entering quantities on every refund keeps this simple.

Two simplifications are fine for most stores:

  • If no-return refunds are rare, skip the adjustment. The difference will be small.
  • If refunds swing a lot month to month, look at a rolling three months instead of one.

Track your refund rate alongside profit

Refunds that creep up eat margin quietly. Divide Returns by gross sales each month to get a refund rate, and compare it with previous months. The guide on calculating your WooCommerce refund rate shows how, and what counts as a refund in Analytics.

WooCommerce doesn't report refund reasons in Analytics. If you want to know why products come back, note the reason in the refund's reason field or an order note and review them monthly.

What Askshelf can and can't tell you

Askshelf can show gross profit for any date range, starting from net sales, so refunds and coupons are already taken out. With WooCommerce's Cost of Goods Sold feature on and costs on your products, it returns cost of goods, gross profit and margin, and can compare with an earlier period. Orders placed before you entered costs have no profit figure.

It can't tell you whether a refunded item was restocked, it doesn't report refund reasons, and its profit figure leaves out shipping costs and payment fees, including fees you paid on refunded orders.

Askshelfexample answer

How did my gross profit change in October compared with September?

Gross profit was $11,040 in October (60% margin on $18,400 net sales), up 7% on September's $10,320 (59% on $17,360). Net sales already have October's refunds and coupons taken out. Shipping and payment fees are not included.Profit, 1–31 October, compared with the previous period
An example on a demo store. In your store, the numbers come from your own orders.

The refund and coupon lines behind that number come from the sales summary:

Askshelfexample answer

How much did I refund and give in coupon discounts in October, compared with September?

In October you refunded $1,120 and gave $1,340 in coupon discounts, against $640 and $910 in September. Net sales were $18,400, up 6% on September's $17,360.Sales summary, 1–31 October, compared with the previous period
An example on a demo store. In your store, the numbers come from your own orders.

You can also ask which coupons were used and how much each discounted. Askshelf is free for 10 questions a month; see the profit reporting use case.

What to do next

  • Find the products behind your refunds. A single product with a high return rate can wipe out its own margin.
  • Limit coupons on low-margin products using the coupon's product and category restrictions.
  • Add shipping and fees to get from gross profit to contribution margin, covered in comparing shipping costs and charges.

For the full method, see the WooCommerce profit reporting guide.

Common questions

Does WooCommerce net sales include refunds?

No. In WooCommerce Analytics, net sales is gross sales minus returns (refunds) minus coupons. It also excludes tax and shipping.

Why did my profit drop in a month with few sales problems?

Refunds are dated on the day you issue them, not the order date. A batch of refunds for last month's orders lowers this month's net sales, so check the Returns column in Analytics › Revenue.

Do I get the cost back when I refund an order?

Only if the item comes back in a state you can sell again. If you refund without a return, or the item is damaged, you lose both the revenue and the cost of the product.

See how Askshelf handles this: Profit reporting for WooCommerce