Required Datapoints
- List of Users Who Used the Feature
- Associated Revenue from Those Users
- Usage Window
Feature-Based ARPU measures the average revenue generated per user who actively uses a specific feature. It helps quantify feature value and its impact on monetization.
Feature-Based ARPU is a key indicator of monetization effectiveness and value alignment, reflecting how engagement with specific features influences average revenue per user (ARPU).
The relevance and interpretation of this metric shift depending on the model or product:
A rising Feature-Based ARPU signals strong value perception and revenue leverage, while a low or flat trend suggests low pricing impact or poor upgrade conversion.
By segmenting by feature, plan, or persona, you unlock insights to prioritize high-value features, revisit packaging, and improve monetization alignment.
Feature-Based ARPU informs:
These are the main factors that directly impact the metric. Understanding these lets you know what levers you can pull to improve the outcome
Actionable ideas to optimize this KPI, from fast, low-effort wins to strategic initiatives that drive measurable impact.
Activities commonly tied to improving or operationalizing this KPI.
| Activity | Description |
|---|---|
| Pricing Strategy | Pricing Strategy is an iterative process focused on defining, testing, and optimizing how a product or service is priced, packaged, and positioned to maximize customer adoption, revenue, and market competitiveness. It gives teams a clear plan for where to focus, how to sequence work, and what to measure. Relevant KPIs include Average Contract Value and Average Revenue Per Expansion Account. |
| Monetization Optimization | Monetization Optimization focuses on the continuous analysis, design, and refinement of pricing models, packaging options, and revenue streams to maximize customer lifetime value and drive business growth. It improves performance by removing friction, testing changes, and scaling what works. Relevant KPIs include Feature-Based ARPU. |
| Product Packaging | Product Packaging is a strategic process focused on defining, structuring, and presenting a product or solution to align with target customers and support company go-to-market objectives. It helps teams translate strategy into repeatable execution. Relevant KPIs include Feature-Based ARPU. |
| Customer Segmentation | Customer Segmentation is a systematic process of analyzing and categorizing customers based on shared characteristics, behaviors, needs, or their value to the organization. It gives teams a clear plan for where to focus, how to sequence work, and what to measure. Relevant KPIs include CAC Payback Period and Feature-Based ARPU. |
This KPI is associated with the following stages in the AAARRR (Pirate Metrics) funnel:
This KPI is classified as a lagging Indicator. It reflects the results of past actions or behaviors and is used to validate performance or assess the impact of previous strategies.
This role is directly accountable for the KPI and is expected to drive progress and decisions around it.
These roles contribute directly to performance and typically partner on execution, reporting, or optimization.
These leading indicators influence this KPI and act as early signals that forecast future changes in this KPI.
These lagging indicators confirm, quantify, or amplify this KPI and help explain the broader business impact on this KPI after the fact.
How this KPI is structured in Cube.js, including its key measures, dimensions, and calculation logic for consistent reporting.
cube('Users', { sql: `SELECT * FROM users`,
joins: { FeatureUsage: { relationship: 'hasMany', sql: `${CUBE}.id = ${FeatureUsage}.user_id` }, Revenue: { relationship: 'hasMany', sql: `${CUBE}.id = ${Revenue}.user_id` } },
measures: { count: { type: 'count', sql: 'id', title: 'User Count', description: 'Number of users who used the feature.' } },
dimensions: { id: { sql: 'id', type: 'string', primaryKey: true }, name: { sql: 'name', type: 'string', title: 'User Name' } }})cube('FeatureUsage', { sql: `SELECT * FROM feature_usage`,
measures: { usageCount: { type: 'count', sql: 'id', title: 'Feature Usage Count', description: 'Number of times the feature was used.' } },
dimensions: { id: { sql: 'id', type: 'string', primaryKey: true }, user_id: { sql: 'user_id', type: 'string', title: 'User ID' }, usage_date: { sql: 'usage_date', type: 'time', title: 'Usage Date' } }})cube('Revenue', { sql: `SELECT * FROM revenue`,
measures: { totalRevenue: { type: 'sum', sql: 'amount', title: 'Total Revenue', description: 'Total revenue generated from users who used the feature.' } },
dimensions: { id: { sql: 'id', type: 'string', primaryKey: true }, user_id: { sql: 'user_id', type: 'string', title: 'User ID' }, revenue_date: { sql: 'revenue_date', type: 'time', title: 'Revenue Date' } }})cube('FeatureBasedARPU', { sql: `SELECT * FROM ( SELECT u.id AS user_id, SUM(r.amount) / COUNT(DISTINCT u.id) AS arpu FROM users u JOIN feature_usage fu ON u.id = fu.user_id JOIN revenue r ON u.id = r.user_id GROUP BY u.id )`,
measures: { arpu: { type: 'number', sql: 'arpu', title: 'Feature-Based ARPU', description: 'Average revenue per user who used the feature.' } },
dimensions: { user_id: { sql: 'user_id', type: 'string', title: 'User ID' } }})Note: This is a reference implementation and should be used as a starting point. You’ll need to adapt it to match your own data model and schema