The recognition export gives finance teams a single CSV of the line-level schedule behind your monthly Revenue Recognition totals: one row for each order in each month, with the cash received, the revenue recognized, and the coverage period that payment relates to.
🎬 Video: the export is shown in the Revenue Recognition video.
Where to find it
- Open WooCommerce → Analytics → Subscription Report and switch to the Revenue Recognition tab.
- Set the date range to the period you want to export.
- Click Export Recognition CSV at the top-right of the Monthly Recognition table.
- Check the range shown in the Export recognition rows? pop-up and click Export.
The button shows progress while the rows are collected, and the file downloads as revenue-recognition-START_to_END.csv. The export covers whole months: the start and end dates are taken from the first day of the first and last month in your range.
What is in the CSV
Each row is one order’s recognition entry for one month. There are nine columns:
| Column | Contents |
|---|---|
month | The month the entry belongs to, as the first day of that month. |
order_id | The WooCommerce order ID. On stores using a custom order-numbering plugin this is not the same as the order number shown to customers. |
subscription_id | The subscription the order belongs to. |
type | signup, renewal, switch or refund. |
recognized_amount | Revenue recognized from this order in that month. Negative on refund rows. |
cash_amount | Cash received from this order in that month — non-zero only in the month the order was actually paid, and negative on refund rows. |
period_start | The first day of the coverage window this payment relates to. On a refund row, this is the refund date. |
period_end | The last day of that coverage window. On a refund row, this is also the refund date. |
currency | The order’s currency code. |
Because every row carries the coverage dates and both amounts, an accountant can rebuild the schedule for any single order without access to WordPress. Customer details are not included — use the order_id to look them up, or read them in the Orders in this Range table on the tab.
What the CSV does not contain
| Not included | What to do instead |
|---|---|
| Tax — amounts include it, with no separate column | Take the tax figures from WooCommerce’s own tax reports for the same period and reconcile outside this file. |
| Shipping — also included in the amounts, not separated | As above. |
| A net vs gross indicator | Every amount is the order total after discounts, including tax and shipping. There is no other basis in the file. |
| A deferred balance column | The per-order deferred balance is shown on screen in the Orders in this Range table, as Remaining Deferred. See the caution below before deriving it yourself. |
total cash_amount − total recognized_amount is the remaining deferred balance only if your export range covers every month that order touches. Export a single month of an annual subscription and you get one partial row — the subtraction then produces a meaningless number. Either export a range wide enough to include the order’s whole coverage period, or read Remaining Deferred from the on-screen Orders table, which is always calculated over full history.Reading the file
- The file is comma-separated and UTF-8 encoded, with a header row.
- Dates are
YYYY-MM-DD. Excel may reformat these on open — import the file as text rather than double-clicking it if you need the dates preserved exactly. - Amounts are plain decimal numbers with a dot separator and no currency symbol or thousands separator, so they are safe to sum directly.
- Refund rows carry negative amounts, so a straight
SUMover a column already nets refunds off.
currency column and total each currency separately.Using the export for accounting
- Month-end close — set the date range to the closing month, export, and use the CSV as the line-level backup for that month’s recognized revenue.
- Tie back to the monthly table — summing recognized_amount and cash_amount by month reproduces the Recognized Revenue and Cash Received figures in the Monthly Recognition table exactly.
- Posting entries — post the monthly recognized_amount totals as income and the difference against your deferred-revenue liability account, after separating tax using your tax reports.
Frequently asked questions
Can I export only some orders?
No. The export always covers every recognition row in the selected date range. To narrow it, change the date range before exporting, or filter the CSV in your spreadsheet.
Why does an order show a row with zero cash?
Cash is recorded once, in the month the order was paid. Every other month of that order’s coverage period carries recognized revenue with cash_amount of 0. Exporting a range that excludes the payment month is the usual reason a total looks short.
What if a subscription was cancelled mid-period?
The order keeps its original period_start and period_end, but recognition stops at the cancel date: months after it have no rows, and the cancel month is prorated to the days actually delivered.
How large can the export get?
The export reads the pre-aggregated recognition table in batches, so the row count is not usually the constraint — the spreadsheet is. As a rough guide, expect roughly one row per order per month of its coverage, so a year of annual subscriptions produces about twelve rows per subscription. If Excel or Google Sheets struggles, export a narrower range.
Troubleshooting
| Problem | What to check |
|---|---|
| The CSV is empty | Either the range contains no paid subscription orders, or the historical import has not been run. See Importing Historical Data. |
| Totals do not match the Monthly Recognition table | Confirm you exported the same range, and that you are summing every row including negative refund rows. On a multi-currency store the on-screen total is an unconverted mix, so it will not match a per-currency total from the CSV. |
| Excel has mangled the dates or dropped leading zeros | Import the file as text instead of opening it directly, and set the date columns to text on import. |
| A deferred balance derived from the file looks wrong | Almost always a clipped range — see the caution above. Use the on-screen Remaining Deferred column instead. |
| The export times out on a very long range | Export year by year, or month by month, and combine the files in your spreadsheet. |
order_id does not match the order number I see | Stores using a custom order-numbering plugin display a different number from the underlying ID. Search by ID in the admin, or match on the subscription instead. |