Analytics is a reporting layer that aggregates data from across the plugin and exposes it as KPI cards, trend charts, and exportable datasets. It is read-only — it does not own or modify subscription, renewal, dunning, or cancellation state. Instead, it derives its outputs from those domains and precomputes daily snapshots for fast, consistent reads.
KPI cards
The Analytics page shows four key performance indicators for the selected date range and filters:
| KPI | What it measures |
|---|
| MRR | Monthly-normalized recurring revenue from active subscriptions |
| Churn Rate | Canceled subscriptions in the period divided by the average active base |
| LTV | Derived as MRR / churn_rate — null when either input is unavailable |
| Active Subscriptions | Count of subscriptions currently in active status |
MRR and LTV are currency-aware. If your dataset spans multiple currencies without normalization, both values will be shown as unavailable rather than producing a misleading total. Churn Rate and Active Subscriptions are currency-independent.
Filters
All KPI cards, the trend chart, and exports respond to the same set of filters:
- Date range —
date_from and date_to, both inclusive
- Status — filter by subscription lifecycle status
- Product — filter by product ID
- Frequency — filter by billing cadence (e.g. weekly, monthly, yearly)
- Group by — bucket trend data by
day, week, or month
All date calculations use UTC.
Trend chart
The trend chart visualizes one or more KPI metrics over the selected date range, bucketed by the chosen group_by interval. Each data point represents the aggregate for that specific bucket window.
Export
The Analytics page supports on-demand export of the currently visible reporting slice:
| Format | Behavior |
|---|
CSV | Flat rows matching the active filters and bucket semantics |
JSON | Structured export payload with the same column ordering as the API response |
Export is synchronous — it runs on demand and always reflects the currently active filters.
How snapshots work
Analytics precomputes one snapshot row per subscription per day. These daily snapshots are what power KPI queries, trend charts, and exports — the dashboard does not recompute everything live from operational data on each request.
Snapshots are rebuilt automatically by a daily scheduled job, with a short lookback window to self-heal recent changes. They can also be triggered incrementally after significant domain events such as subscription resumes, cancellation finalizations, or renewal executions that affect revenue data.
If the analytics dashboard shows stale data after a significant operational change, a manual rebuild can be triggered from the Admin. The rebuild covers any date range and produces the same output as the scheduled job.