Know who's subscribed. Track growth and churn. Trust the history.
Quick start · Features · Settings · API · Roadmap · Development
When a store owner asks "how many active subscribers did we have last March?", most reporting tools answer with today's numbers — subscriptions that were cancelled since are silently dropped, so the past keeps getting rewritten every time a status changes.
Woo Subscription Snapshot counts subscriptions by their activity window (start date → next payment / end date), so a month that has already happened reflects what was actually live then — not what survived to now. Closed months are frozen into an immutable table, growth and churn are computed in a single pass, and the whole thing lands in your inbox on a schedule.
Works on any WooCommerce Subscriptions store out of the box. WooCommerce Memberships is optional — if it isn't installed, the membership column is simply hidden.
- Trend charts rendered as inline SVG — no external assets, no CDN, no tracking
- Month-over-month detail table with per-month active, pending cancel, new, cancelled, net change, churn % and estimated MRR
- Month-over-month deltas on the active count, and Start Date / End Date filtering for any window you care about
- New subscriptions, cancellations, and net change per month
- Churn rate %, calculated against the prior month's active base
- Estimated MRR, normalised from each subscription's recurring total (day / week / month / year billing periods supported)
- Once a month closes, its numbers are written to a custom table so later status changes can't rewrite history
- Reports render instantly from stored snapshots instead of recomputing the past every time
- Backfill Monthly Snapshots button records closed months on demand; a daily cron records each month once it closes
- Weekly or monthly cadence, multiple recipients
- HTML summary in the body plus a CSV attachment
- "Send Test Email Now" button to verify delivery before you rely on it
- The CSV is written to the system temp directory and deleted right after sending — nothing is left in the public uploads folder
- REST API (
GET /wp-json/wss/v1/report) for external dashboards and Google Sheets pulls - WP-CLI (
wp wss report) for scripted exports intable,csv, orjson - CSV export from the admin page — nonce-protected and formula-injection safe
- Admin-only access via the
manage_woocommercecapability, with CSRF nonces on every action - Single-pass queries with a 1-hour report cache — no per-subscription object loading
- HPOS (High-Performance Order Storage) compatible; degrades gracefully when Subscriptions isn't active
- Upload the plugin folder to
/wp-content/plugins/(or install the ZIP from the WordPress admin). - Activate Woo Subscription Snapshot from the Plugins screen.
- Open Subscription Reports in the WP admin and set your recipient email(s) and cadence.
- (Optional) If you use WooCommerce Memberships, pick a plan and column label.
- Click Backfill Monthly Snapshots to freeze historical months immediately — then let the weekly/monthly email do the rest.
Found on the Subscription Reports admin page:
| Setting | Default | Description |
|---|---|---|
| Report Recipient Email(s) | — | Where the report is sent (comma-separated for multiple) |
| Email Cadence | Monthly | Weekly or monthly |
| Membership plan | Disabled | Optional WooCommerce Memberships plan to count; only shown when Memberships is active |
| Column label | Members |
Display name for the membership column |
| Exclude members who also hold a live subscription | On | Don't double-count subscribers in the membership column |
Both are gated behind the manage_woocommerce capability.
# REST — external dashboards, Google Sheets, scripted pulls
GET /wp-json/wss/v1/report?start=2026-01-01&end=2026-07-31
# WP-CLI — table (default), csv, or json
wp wss report --start=2026-01-01 --end=2026-07-31 --format=table- WordPress 5.8+, PHP 7.2+
- WooCommerce Subscriptions (active) — required
- WooCommerce Memberships — optional, only for the membership column
- WP Cron enabled
- Mail configuration (e.g. via SMTP) for the scheduled email
- Per-product / per-plan breakdowns in the report
- Configurable MRR currency formatting and multi-currency stores
- Cohort retention view alongside the churn metric
- Downloadable PDF summary as an email attachment option
Everything routes through a single source of truth — WSS_Report_Data — which owns the queries, month bucketing, and growth/churn/MRR math. The admin page, CSV exporter, email report, and API all render the same rows, so numbers never diverge between surfaces. Closed months are served from immutable snapshots; only the current (open) month is computed live.
woo-sub-snapshot.php Bootstrap: hooks, cron interval, HPOS compat, dependency guard
includes/
class-wss-report-data.php Queries, month bucketing, growth/churn/MRR (single source of truth)
class-wss-snapshots.php Immutable monthly snapshots (custom table + recorder cron)
class-wss-chart.php Inline SVG line-chart renderer
class-wss-admin-page.php Menu, settings, charts, report table
class-wss-csv-exporter.php Shared CSV writer + export handler
class-wss-email-report.php Scheduled email (weekly/monthly, multi-recipient, test send)
class-wss-api.php REST endpoint + WP-CLI command
uninstall.php Removes options, cron events, snapshots table, and caches
- "Pending Cancel" reflects the current subscription status, so historical months show subscriptions that are pending cancellation today.
- Churn % is measured against the previous month's active base (the first month in a range falls back to its own active count).
- MRR is estimated from each subscription's recurring total normalised to a monthly figure (day/week/month/year billing periods supported).
- Deactivating the plugin clears scheduled events; uninstalling removes all stored options, the snapshots table, and caches.
- The report cache is a 1-hour transient keyed on the date range, membership plan, and exclusion flag — status changes surface on the next cache expiry or a manual backfill.
GPL-2.0-or-later.
Built and maintained by Costin Botez — Nomad Developer · @costinbotez
WordPress & WooCommerce development for agencies and small businesses.