✓ Real-Time Data
Lemon Squeezy Alternative
Table of Contents
- Why Freemius Developers Need a WordPress Analytics Dashboard
- Core Dashboard Metrics Explained
- How MRR Is Calculated from Freemius Subscription Data
- Gross Revenue vs Net Revenue: Refund Tracking
- Average Order Value: The Pricing Health Signal
- Plugin-by-Plugin Breakdown Table
- Sandbox Transaction Filtering
- Vs. the Freemius Native Dashboard
- Vs. Lemon Squeezy & Paddle Analytics
- API Architecture: How Data Is Fetched
- FAQ
For independent WordPress plugin and theme developers, understanding the financial health of your business requires checking at least four separate data points: total revenue (to understand overall traction), MRR (to understand recurring revenue momentum), average order value (to evaluate pricing effectiveness), and per-product performance (to identify which plugins deserve more investment). In Freemius’ native developer dashboard, these data points are spread across multiple pages and require manual aggregation if you have more than one product.
The Sales Analytics Dashboard in Freemius Checkout for WooCommerce consolidates all four data points — plus refund tracking, purchase counts, and per-plugin comparative analysis — into a single React-powered screen inside your WordPress admin. The data is fetched live from the Freemius PHP SDK on every dashboard load, ensuring you always see current numbers without stale cache artifacts.
Why Freemius Developers Need a WordPress Analytics Dashboard
If you run your plugin marketing site on WordPress — as most independent developers do — your workflow lives in the WordPress admin. Switching to freemius.com to check revenue numbers, then back to WordPress to write a blog post, then back to freemius.com to create a coupon for a promotion, creates constant context-switching overhead that interrupts creative and business work.
More practically: having revenue metrics visible inside WordPress encourages more frequent monitoring. Developers who check their numbers daily in the same environment where they manage content and marketing make faster, better-informed decisions about pricing adjustments, promotion timing, and product prioritization.
Key advantage over freemius.com: The WordPress dashboard aggregates data across all your products simultaneously in a single view. The native Freemius dashboard shows analytics per-product — you have to navigate to each plugin separately to see its numbers, then manually sum them for a total business view.
Core Dashboard Metrics Explained
Gross Revenue
Total lifetime gross sales across all products before deducting refunds. Calculated by summing all non-sandbox, non-refund payment gross amounts.
Monthly Recurring Revenue
Normalized MRR from all active subscriptions — monthly subs at face value, annual subs divided by 12. The clearest indicator of recurring business momentum.
Net Revenue
Gross Revenue minus total refunds. The “real” revenue figure — what you actually retained after honoring refund requests.
Total Purchases
Count of unique new purchases (initial orders only — auto-renewals excluded). The actual customer acquisition count.
Average Order Value
Gross Revenue ÷ Total Purchases. A direct readout of whether your pricing tiers are achieving the revenue per customer you’ve targeted.
Total Refunds
Total refunded amounts across all products. High refund rates signal product-market fit problems, misleading marketing, or support issues.
How MRR Is Calculated from Freemius Subscription Data
MRR calculation requires careful handling of mixed billing cycles. The plugin fetches all subscriptions via /plugins/{id}/subscriptions.json and applies this normalization logic:
// For each active, non-cancelled subscription:
if (billing_cycle == 1) // Monthly subscription
mrr += amount_per_cycle;
if (billing_cycle == 12) // Annual subscription
mrr += (amount_per_cycle / 12);
Only subscriptions meeting all three criteria are included in MRR:
- Not cancelled (
canceled_atfield is empty) - Not expired (
is_expiredis false) - Not in sandbox/test mode (
environmentfield is 0) - Both
amount_per_cycleandrenewal_amountare greater than zero (subscriptions with $0 renewal amounts are excluded)
This produces a conservative, accurate MRR figure that reflects only currently active, paying subscriptions — not trial users, not cancelled subscribers still within their paid period, and not test accounts. The resulting MRR is the “live” recurring revenue number you’d use when evaluating business health or discussing your business with investors or acquirers.
Gross Revenue vs Net Revenue: Refund Tracking
Freemius payment records include both positive gross amounts (sales) and negative gross amounts (refunds). The analytics engine handles both:
- Positive gross amounts: Added to plugin gross revenue and purchase count (renewal payments are excluded from purchase count to avoid inflating the orders metric)
- Negative gross amounts or payments of type ‘refund’: Added to the refunds total and excluded from gross revenue
- Net Revenue = Gross − Refunds: The “real” revenue figure after honoring refund obligations
Displaying refund data separately (rather than just showing net revenue) is a deliberate design choice — it allows you to see your refund rate clearly and act on it. A rising refund trend that’s invisible in a net revenue-only view could indicate a product quality issue or misleading feature claims that warrant immediate attention.
Average Order Value: The Pricing Health Signal
Average Order Value (AOV) is calculated as Gross Revenue ÷ Total New Purchases. It is one of the most actionable metrics for a WordPress plugin developer because it directly reflects your pricing architecture’s effectiveness:
High AOV Signal
Customers are primarily buying your highest-tier plans or lifetime deals. May indicate your lower tiers are undervalued or that your audience has high buying intent.
Low AOV Signal
Most purchases are at your entry-level tier. May indicate price-sensitive buyers, unclear differentiation between tiers, or insufficient upsell to higher plans.
The per-plugin AOV in the Plugin Breakdown Table is particularly useful — comparing AOV across products tells you which products have pricing architectures that successfully guide customers to higher tiers vs. which are leaving revenue on the table at the entry-level.
Plugin-by-Plugin Breakdown Table
Below the aggregate metric cards, the dashboard renders a detailed Plugin Breakdown Table that shows every product in your Freemius developer account with its individual financial metrics side-by-side. Columns displayed for each product:
| Product | Gross | MRR | Refunds | Net | Purchases | AOV |
|---|---|---|---|---|---|---|
| Plugin A | $8,421 | $612 | $84 | $8,337 | 103 | $81.75 |
| Plugin B | $3,204 | $289 | $120 | $3,084 | 52 | $61.62 |
| Total | $11,625 | $901 | $204 | $11,421 | 155 | $75.00 |
This comparative view is the most actionable analytical output for multi-product plugin developers. It immediately answers the question: “Which product should I focus my next marketing effort on?” — usually the one with the highest MRR (most traction to build on) or the one with the highest purchase count but lowest AOV (pricing optimization opportunity).
Sandbox Transaction Filtering
During plugin development and testing, Freemius allows sandbox/test transactions that generate payment records in the API but don’t represent real revenue. Including these in analytics produces misleadingly inflated numbers.
The analytics engine explicitly checks the environment field on each payment and subscription record and skips any record where environment !== 0. Environment 0 indicates a live production transaction. Environment 1 indicates a sandbox test transaction. This filtering happens at the data ingestion layer before any metric calculation — ensuring that your dashboard always reflects only real customer revenue, regardless of how much test purchasing you’ve done during development.
WordPress Plugin Dashboard vs. Freemius Native Dashboard
| Capability | Freemius.com Dashboard | WordPress Plugin |
|---|---|---|
| All-products aggregate view | ✗ | ✔ |
| MRR across all products | Per-product | Aggregated |
| Lives inside WordPress admin | ✗ | ✔ |
| Plugin-by-plugin AOV comparison | Manual calculation | Automatic |
| Checkout button management | ✗ | ✔ |
| Refund tracking alongside gross | Separate view | Unified dashboard |
Vs. Lemon Squeezy & Paddle: Why WordPress-Native Analytics Wins
Both Lemon Squeezy and Paddle are increasingly considered as freemius alternatives for WordPress plugin monetization. One genuine advantage both have over Freemius is a more modern analytics dashboard on their own platforms — Lemon Squeezy in particular has excellent revenue charting and subscription metrics in its dashboard.
However, neither Lemon Squeezy nor Paddle offers a WordPress plugin that brings their analytics into the WordPress admin. For WordPress developers who spend most of their working hours inside WordPress, having your revenue data in the same environment where you write content, manage plugins, and build marketing pages is a significant productivity advantage that no external dashboard can replicate.
Additionally, Freemius’ deeper WordPress integration — native update API, in-plugin freemium flows, per-site license enforcement — gives it structural advantages over both Lemon Squeezy and Paddle for WordPress-specific products that this analytics dashboard builds upon rather than replaces.
API Architecture: How Data Is Fetched
The analytics data flow works as follows:
- The React dashboard makes a GET request to the WordPress REST API endpoint:
/wp-json/freemius-checkout/v1/stats - The REST handler instantiates
Freemius_API_Serviceusing the stored credentials - The service calls
get_stats()which fetches/plugins.jsonto get all products - For each product, it calls
/plugins/{id}/payments.json?count=100(payments) and/plugins/{id}/subscriptions.json?count=100(for MRR) - Metrics are calculated server-side in PHP and returned as a structured JSON response
- The React dashboard renders the metric cards and breakdown table from the JSON response
The current implementation fetches up to 100 payments and subscriptions per product per API call. For high-volume products with very large transaction histories, this represents the most recent 100 records. Future versions may implement pagination or date range filtering for larger catalogues.
Frequently Asked Questions
Is the analytics data real-time or cached?
The data is fetched live from the Freemius API on every dashboard load — there is no caching layer in the current implementation. This ensures you always see current numbers. The trade-off is that the initial dashboard load takes a few seconds while multiple API calls complete.
Does it work if I have only one Freemius product?
Yes. The Plugin Breakdown Table will show a single product row, and the aggregate metrics will equal that product’s metrics. The dashboard is designed to be as useful for single-product developers as for multi-product developers.
Are renewals counted as purchases?
No. The plugin checks the is_renewal flag on each payment record. Renewal payments contribute to gross revenue but are excluded from the purchase count — ensuring that the Purchases metric represents unique new customer acquisitions rather than a combined new+renewal figure.
Can I filter analytics by date range?
Date range filtering is not in the current v1.1.0 implementation — the dashboard shows cumulative lifetime metrics based on the most recent 100 API records per product. Date range analytics filtering is a logical next feature for a future version.
See Your Freemius Revenue in WordPress
Real-time MRR, gross revenue, AOV & plugin-by-plugin breakdown — without leaving your WordPress admin.