Skip to content
Back to Analytics & Experimentation

Revenue Attribution

Attributing revenue to the products, features, and user actions that generated it —so product decisions are grounded in financial impact, not vanity metrics.

Why

Revenue is not a single number; it is a sum of contributions from different products, plans, features, and user segments, and attributing it correctly is what lets the team prioritize the work that actually moves the business. A feature that 80% of users touch but generates 5% of revenue is a vanity feature; a feature that 15% of users touch but generates 40% of revenue is a priority feature, and without revenue attribution the two look similar in usage analytics. The attribution must handle upgrades (a user on Pro who upgrades to Team because of the multi-seat feature —the incremental $30/month is attributed to that feature), downgrades (a user who downgrades because a feature did not deliver —the lost revenue is attributed to the feature that failed), and churn (a user who cancels because of a missing integration —the lost LTV is attributed to the integration gap). The most common error is attributing all revenue to the plan (Pro revenue = $20 * Pro users) without decomposing by the features that drove the purchase decision. This is why feature flags and self-serve pricing are powerful: they create natural experiments where a feature is gated, and the revenue lift from ungating it is directly attributable. Without this, the team builds features based on usage (which is easy to measure) rather than revenue (which requires attribution), and the product fills with features that are used but do not pay.

When

When prioritizing the product roadmap (revenue impact, not usage, should rank features). When evaluating a feature's ROI. When deciding whether to gate or ungate a feature. Quarterly for product-led growth businesses.

How

1. Decompose revenue by plan, then by feature within each plan: Pro revenue is not $20 * Pro users; it is the sum of (users who bought Pro for feature A * $20) + (users who bought for feature B * $20) + ...
2. Instrument the purchase decision: at checkout/upgrade, ask or infer "which feature drove this purchase" —a required dropdown, a survey, or inferred from the features the user engaged with in the 7 days before upgrade
3. Attribute upgrades to the feature that triggered them: if a user on Pro upgrades to Team within 7 days of first using the multi-seat feature, the incremental $30/month is attributed to multi-seat
4. Attribute downgrades and churn to the feature that failed: exit surveys ("which feature did you need that we lack?") and downgrade surveys ("what changed?") —the lost revenue is attributed to the gap
5. Compute feature-level revenue: for each feature, sum (upgrades attributed to it) - (downgrades/churn attributed to it) —this is the net revenue impact of the feature
6. Compute feature-level ROI: (revenue attributed to feature) / (engineering cost to build and maintain the feature) —rank features by ROI, not by usage
7. Use feature flags to create natural experiments: gate a feature for a cohort, measure the revenue lift from ungating, and the lift is directly attributable to the feature
8. Report a revenue-impact view of the roadmap: each planned feature has an estimated revenue impact (from user research, comparable features, or pre-orders) and the roadmap is ranked by estimated revenue, not by votes or usage
9. Re-attribute quarterly: as features, pricing, and mix change, the attribution changes, and a feature that drove 40% of revenue last quarter may drive 20% this quarter if a new feature cannibalized it

Example

# Revenue attribution: Q3 2026, $147,200 net new revenue
Plan mix: Pro $20/mo (1,840 users), Team $50/mo (340 users)

Feature-level revenue (decomposed from upgrade surveys + behavior):
  multi-seat (Team):     +$8,400  (28 upgrades * $30 delta, 0 churn)
  advanced-deploy:       +$5,200  (26 Pro upgrades * $20, 2 churn -$40)
  custom-domains:        +$4,800  (24 Pro upgrades * $20, 0 churn)
  analytics-dashboard:   +$3,600  (18 Pro upgrades * $20, 0 churn)
  api-access:            +$2,400  (12 Pro upgrades * $20, 0 churn)
  ai-coding:             +$1,800  (9 Pro upgrades * $20, 0 churn)
  snippets:                 $0    (used by 80% but drives 0 upgrades)
  cheatsheets:             -$40    (2 churns citing "not enough depth")

Net new revenue: +$26,360 from features + $120,840 from plan renewals

Feature ROI (revenue / engineering cost):
  multi-seat:      $8,400 / $24k  = 0.35  (1 quarter to build, 1q to ROI)
  advanced-deploy: $5,200 / $12k  = 0.43
  custom-domains:  $4,800 / $ 4k  = 1.20  (cheap to build, high ROI)
  analytics:       $3,600 / $32k  = 0.11  (expensive, low ROI this q)
  api-access:      $2,400 / $ 8k  = 0.30
  ai-coding:       $1,800 / $48k  = 0.04  (expensive, low ROI)
  snippets:           $0 / $16k   = 0.00  (vanity feature —used, no revenue)

Roadmap ranking (by revenue impact, not usage):
  1. custom-domains (ROI 1.20)  <- prioritize
  2. advanced-deploy (ROI 0.43)
  3. multi-seat (ROI 0.35)
  4. api-access (ROI 0.30)
  -- deprioritize --
  5. analytics-dashboard (ROI 0.11, expensive)
  6. ai-coding (ROI 0.04, very expensive)
  7. snippets (ROI 0.00, vanity —do not invest more)

Insight: snippets has 80% usage but 0 revenue impact. Without
  revenue attribution, the team would invest in snippets (high
  usage) instead of custom-domains (low usage, high revenue).

Common Problems

  • ⚠Attributing all revenue to the plan without decomposing by feature —Pro revenue = $20 * Pro users hides that 40% of Pro users bought for custom-domains and 5% for snippets; the team invests in snippets (high usage) instead of custom-domains (high revenue).
  • ⚠Ranking features by usage instead of revenue impact —snippets has 80% usage and 0 revenue impact; custom-domains has 12% usage and 40% revenue impact; usage-based prioritization fills the product with vanity features.
  • ⚠Not attributing downgrades and churn to the failing feature —a user downgrades citing 'not enough depth' and the lost revenue is not attributed to cheatsheets, so the team keeps investing in cheatsheets and the churn continues.
  • ⚠Using feature flags without measuring the revenue lift —gating a feature and ungating it for everyone loses the natural experiment; the revenue lift from ungating is only attributable if a holdout cohort remains gated for comparison.

Best Practices

  • ✓Decompose revenue by the feature that drove the purchase decision, not by the plan —instrument the upgrade with a survey or behavioral inference, so custom-domains (40% of Pro revenue) is distinguishable from snippets (5%).
  • ✓Rank the roadmap by estimated revenue impact (ROI), not by usage or votes —usage measures engagement (a vanity metric for revenue decisions), while revenue impact measures business value, and the two often diverge by 10x.
  • ✓Attribute downgrades and churn to the failing feature via exit surveys —the lost revenue is as important as the gained revenue, and a feature that drives upgrades but also drives 50% as much churn is netting half what it appears to.
  • ✓Use feature flags with a holdout cohort to measure incremental revenue —gate the feature for 10% of users, ungate for 90%, and the revenue difference is directly attributable to the feature, with no survey or inference required.
  • ✓Re-attribute quarterly and watch for cannibalization —a feature that drove 40% of revenue last quarter may drive 20% this quarter if a new feature cannibalized it, and the net revenue (not gross) is what should drive the roadmap.