Docs Analytics for WooCommerce Subscriptions Revenue Recognition and Deferred Revenue

Revenue Recognition and Deferred Revenue

The Revenue Recognition tab spreads each subscription payment across the period it actually covers, instead of counting it all on the day it was collected. It also shows the Deferred Revenue balance — the part of prepaid subscription money you have taken but not yet earned.

It is built to save your finance team from exporting raw orders and rebuilding the schedule by hand. Read What the figures include below before using it for a filing — in particular, the amounts are order totals and include tax.

What the report shows

Open WooCommerce → Analytics → Subscription Report and switch to the Revenue Recognition tab. You will see a date range picker, three summary cards, the Monthly Recognition table and the Orders in this Range table.

CardWhat it means
Cash ReceivedTotal money collected from subscription orders in the selected date range. This is cash, not recognized revenue.
Revenue RecognizedThe revenue earned in the selected range, amortized over the billing period of each subscription order.
Deferred Balance (EOP)The un-earned portion of prepaid subscription money still owed to customers as of the end of the selected period.

Monthly Recognition

The Monthly Recognition table lists each month in the selected range with:

  • Cash Received and Recognized Revenue for the month.
  • Δ Deferred — how much the deferred balance moved. An increase is shown in orange with a plus sign; a decrease in green. The colour carries no meaning beyond the direction of the change.
  • Deferred Balance (EOM) — the deferred balance at the end of that month.

A totals line under the table sums cash received, recognized revenue and the change in deferred revenue for the whole range. Click Export Recognition CSV at the top-right of the table, confirm the range in the pop-up, and click Export — see Per-Order Deferred Revenue Export for the columns.

Orders in this Range

Below the monthly table, Orders in this Range lists every paid subscription order contributing to the selected range, with the order count in the heading. Each row shows Payment Date, Order, Customer, Type (Signup, Renewal, Switch or Refund), the linked Subscription, the coverage Period, the amount Paid, and then Recognized in Range, Total Recognized and Remaining Deferred for that order.

Use the Show: filter to switch between All orders in range and Only with deferred balance, the menu to choose which columns are shown, and the pagination controls at the bottom to page through the results. Columns cannot be sorted.

How recognition is calculated

Every paid subscription order is treated as prepaid money and amortized on a straight-line daily basis across the days between the period start and period end it covers. Each day in the period earns the same share of the order total, and the daily amounts are then summed into calendar months.

  • An annual $120 subscription paid on 1 January recognizes roughly $10 in each month of that year, carrying the rest as deferred revenue.
  • A monthly $30 subscription paid on the 15th recognizes about half in the current month and half in the next.
  • Rounding is reconciled so the monthly rows for an order always add up to the order total exactly.
  • Cash is recorded in the month the order was actually paid, which is not always the first month of recognition.

Months are bounded by your store’s local time zone, set under Settings → General.

What the figures include

The amortized amount is the full order total — tax and shipping included. The report does not separate them, and the export has no tax or shipping column. If you need revenue net of tax, you must back the tax out yourself from your WooCommerce tax reports. Treat these figures as a view of when money is earned, not as a filing-ready revenue figure.
ItemHow it is treated
TaxIncluded in the amortized amount. Not separated.
ShippingIncluded in the amortized amount. Not separated.
Discounts and couponsAlready deducted — the order total is the amount after discounts.
Sign-up feesNot separated. A sign-up fee is part of the first order’s total, so it is spread across the first billing period like everything else, rather than being recognized on day one.
Free trialsA trial order with a zero total creates no recognition rows at all. Where a trial ends part-way into a paid period, recognition starts at the trial end date — the trial days earn nothing.
Multiple currenciesNot converted. See the warning below.
Multi-currency stores: the summary cards and the Monthly Recognition table add currencies together without converting them. A month with 100 USD and 100 EUR of recognition shows 200, labelled with your store’s base currency. If your store takes more than one currency, use the per-order export instead — every row there carries its own currency code — and total each currency separately.

Cancellations, refunds and status changes

EventWhat happens to the schedule
Subscription cancelled or expired mid-periodMonths after the cancellation are removed, and the cancellation month is prorated down to the days actually delivered.
Subscription put on hold mid-periodTreated the same way — future months are pruned from the cancel/hold date. The deferred balance moves as a result.
Partial refundA negative entry equal to the refunded amount is booked in the month the refund was issued. The original schedule is not re-amortized.
Order moves to refunded, cancelled, failed, pending or on-holdThe order leaves the paid set and its recognition rows are removed.
Order becomes paid (completed or processing)The schedule is built, or rebuilt, automatically.
A refund is booked in full in the month it was issued, not spread back over the period. Refunding an annual order in its first month therefore books the whole negative amount into that month, while only about one twelfth had been recognized — so a single month can show negative recognized revenue. That is expected behaviour, not a fault, and it nets out correctly over the life of the subscription.

First-time setup — import historical data

This tab shows zeros until you run the importer. The recognition schedule is built from your order history and does not exist until it has been imported once.

Go to WooCommerce → Settings → Subscription Analytics and run the importer, choosing a date range or All. The plugin replays every paid subscription order and builds the month-by-month schedule in the background using WooCommerce’s Action Scheduler. See Importing Historical Data.

You only need to do this once. After the initial import, the plugin keeps the schedule in sync automatically as orders are paid, refunded, or their subscriptions cancelled.

Frequently asked questions

Why does Cash Received not equal Revenue Recognized?

That is the point of the report. Cash is what you have collected; recognized revenue is what you have earned. The gap between the two is your Deferred Revenue — money owed in service until the coverage period is delivered.

Which order statuses count as paid?

Completed and Processing only. This list is fixed and cannot currently be changed by a filter or setting. On-hold orders are excluded because payment is not confirmed.

Do refunds rewrite closed months?

No. A refund is added as a new negative entry in the month it was issued, so previously closed months keep the figures they had. Note that a cancellation behaves differently: it prunes the months after the cancel date, which does change the deferred balance going forward.

Can I use this for my accounts?

It gives you the timing — which periods your subscription income belongs to, and what remains deferred — which is the hard part to work out by hand. It does not give you a tax-separated revenue figure, because the amounts include tax and shipping. Give your accountant the per-order export and your tax reports together, and let them make the split.

Troubleshooting

ProblemWhat to check
Everything is zero after installingThe historical import has not been run, or has not finished. See Importing Historical Data.
Totals do not match WooCommerce’s own revenue reportExpected. WooCommerce counts cash when collected; this counts revenue when earned. They converge only over the full life of a subscription. Tax is included in both.
The import never completesThe import runs on Action Scheduler. If WP-Cron is disabled or the scheduler is not processing, batches stall. Check WooCommerce → Status → Scheduled Actions for pending actions in the zorem-subscription-import group.
A month shows negative recognized revenueUsually a refund booked in full in that month. See the refund note above. It can also happen when historical orders were imported with a paid date later than the period they cover.
The deferred balance looks too highCheck whether your store takes more than one currency — amounts are not converted.
A subscription’s future months disappearedThe subscription was cancelled, expired or put on hold; future months are pruned from that date.
Works with both HPOS (High-Performance Order Storage) and legacy post-based order storage. Available from version 1.1.8 onward. For every other metric in the report, see Metric Definitions.