# Why WooCommerce revenue does not match your bank payout

WooCommerce says the month was $44,636. Stripe paid out $41,900. Both are right. The gap is five things WooCommerce never shows in one place — and here…

Source: https://webkodingtheme.com/blog/woocommerce-revenue-does-not-match-payout/

---

Operations and admin

# Why WooCommerce revenue does not match your bank payout

AÖ Arif Özelci , developer of WooFinance · Published 16 Sept 2026 · 6 min read
WooCommerce says the month was $44,636. Stripe paid out $41,900. Both are right. The gap is five things WooCommerce never shows in one place — and here is how to reconcile them.
The same month as one table: revenue at the top, what actually reached the bank at the bottom.

## WooCommerce has three numbers it calls sales

Open Analytics → Revenue and there are separate columns for gross sales, net sales and total sales. Gross sales is the product lines before anything is taken off. Net sales is gross minus refunds and coupons. Total sales adds tax and shipping back on top. Three columns, three different totals, and whichever one somebody quotes to you as “revenue” decides how big the gap looks before you have started.
The number the bank cares about is closest to total sales, because tax and shipping were charged to the card too. The number the accountant cares about is closer to net sales, because tax is not yours and shipping is a cost you passed through. Agree which column you are talking about before comparing anything.

## Which orders are in the report at all

Analytics has a setting for which order statuses count as sales (Analytics → Settings → Excluded statuses). By default pending, failed and cancelled are left out, but on-hold and processing are in. A bank transfer order sitting on-hold for a week is revenue in the report and nothing in the bank. A processing order paid by card is in both, but the report booked it on the order date and the gateway will pay it out days later.
If somebody has changed that setting — a bookkeeper who wanted only completed orders, say — the report and the gateway are counting different populations of orders, and no amount of staring at totals will reconcile them.

## Refunds are booked on the day they happen

A refund appears in Analytics as a negative amount on the day the refund was issued, not on the day of the original order. So a June order refunded in July makes June look better than it was and July worse. The gateway does the same thing from its side, but its payout for the refund might fall in a different week again, because a refund is deducted from whichever payout batch it lands in.
Partial refunds are where this bites hardest. A refunded shipping fee, a refunded single line on a three-line order — each one is a small negative on some later date, and a month with fifty of them has a revenue figure that quietly drifts every time somebody processes a return.

## Gateway fees never appear anywhere in WooCommerce

This is the one people forget because there is nothing to forget: WooCommerce does not have a field for it. Stripe’s 2.9% plus 30 cents, PayPal’s fee, a currency conversion charge — none of it is stored on the order, so it cannot appear in any report. On $44,000 of card sales that is somewhere around $1,300 that left before the payout, and the only record of it is inside the gateway’s own dashboard.
Some gateway plugins write the fee into order meta, and some do not. Even when they do, Analytics ignores it. If you have two gateways, you have two fee schedules, two dashboards and two export formats, and reconciling them by hand is a spreadsheet job that most shops do once, badly, at year end.

## Payouts are batches, not orders

A gateway pays out on a rolling schedule — every day, every two days, weekly — and each payout is a bundle of orders, refunds, fees, disputes and sometimes a reserve held back. An order placed on the last day of the month is in that month’s WooCommerce revenue and in next month’s bank statement. That is not an error, but it means the report and the statement can only ever agree over a window long enough for the batches to settle, and never for a single day.
Chargebacks are the ugliest version. A disputed order stays completed in WooCommerce unless somebody edits it, so the report still counts it. The gateway has already taken the amount back, plus a dispute fee. Nothing in the shop moved.

## How to actually reconcile a month

Start from the gateway’s payout report, not from WooCommerce, because the payout is the thing that is true. Then work upwards:
- Export the payouts for the month and total gross charges, refunds, fees and disputes separately. That gives you four numbers, not one.
- In WooCommerce, take total sales for the same date range with the same statuses the gateway would have charged — paid orders only, no on-hold.
- Subtract the gateway’s refunds and fees from its gross charges. The result should be the payout total; if it is not, the difference is reserves or a payout that spilled into next month.
- Compare the gateway’s gross charges to WooCommerce total sales for paid orders. What is left is orders paid through something else — bank transfer, cash on delivery, a second gateway — plus anything edited by hand.
Done once, this tells you whether your gap is timing, fees, or a real discrepancy. Done every month by hand it is two hours nobody has, which is why most shops stop doing it and go back to quoting whichever number sounds best.

WooFinance records the fee on the order and keeps the month honest $ 59 once. Gateway fees per order, refunds and cost of goods against the period they belong to, and a profit figure that starts from what reached the bank rather than what was typed into the cart. Open the demo →

## The number you actually wanted

Nobody reconciles for its own sake. The reason to know what really reached the bank is that it is the top line of the only figure that matters — profit — and revenue by any of WooCommerce’s three definitions overstates it. Once fees, refunds and cost of goods are recorded against each order, the question “did we make money this month” has a single answer, and the report and the bank statement stop being two versions of it.

AÖ
Arif Özelci Builds the WebKoding plugins. Answers support himself.
Share on X LinkedIn Copy link
In this article WooCommerce has three numbers it calls sales Which orders are in the report at all Refunds are booked on the day they happen Gateway fees never appear anywhere in WooCommerce Payouts are batches, not orders How to actually reconcile a month The number you actually wanted
Related WooCommerce shows you revenue. Revenue is not the number you need. Your WooCommerce webhook is not firing. Here is the order to check things in.
The product this is about: WooFinance , $ 59 . Live demo, no signup.
