{"id":30,"date":"2026-10-19T09:00:00","date_gmt":"2026-10-19T09:00:00","guid":{"rendered":"https:\/\/roasit.com\/blog\/?p=30"},"modified":"2026-10-19T09:00:00","modified_gmt":"2026-10-19T09:00:00","slug":"net-app-revenue-roas","status":"publish","type":"post","link":"https:\/\/roasit.com\/blog\/net-app-revenue-roas\/","title":{"rendered":"Gross vs Net App Revenue: What Belongs in Cohort ROAS?"},"content":{"rendered":"<p>Net app revenue is the number that should sit above ad spend when a team wants cohort ROAS to reflect cash that remains after the deductions it has chosen to count. Gross sales still matter, but mixing them with net proceeds produces a ratio that can make a campaign look stronger than its contribution.<\/p>\n<p>The right choice depends on the decision. Use gross sales to watch customer demand and store-level conversion. Use net app revenue to decide whether a paid cohort can repay its acquisition cost after store charges, tax treatment, and refunds.<\/p>\n<nav>\n<p>In this article:<\/p>\n<ul>\n<li><a href=\"#two-revenue-views\">Gross sales and net app revenue<\/a><\/li>\n<li><a href=\"#sample\">A sample cohort comparison<\/a><\/li>\n<li><a href=\"#roas\">Which number belongs in ROAS<\/a><\/li>\n<li><a href=\"#workflow\">A reporting workflow that stays consistent<\/a><\/li>\n<\/ul>\n<\/nav>\n<h2 id=\"two-revenue-views\">Gross sales and net app revenue answer different questions<\/h2>\n<p>Gross sales starts with the amount paid by customers before deductions. It is a useful demand signal. A subscription app can compare gross sales by country, product, paywall, or acquisition cohort to see what customers bought.<\/p>\n<p>Net app revenue starts with the same transactions, then applies the deductions defined by the finance and growth teams. At a minimum, the definition should state how the report treats store charges, taxes, refunds, chargebacks, and currency conversion. A team can call this proceeds, contribution revenue, or net revenue. The name matters less than keeping the calculation stable.<\/p>\n<p>Store proceeds are not a universal percentage. <a href=\"https:\/\/developer.apple.com\/help\/app-store-connect\/manage-app-pricing\/set-a-price\/\" target=\"_blank\" rel=\"noopener\">Apple&#8217;s pricing guidance<\/a> explains that automatically generated storefront prices can account for tax and foreign exchange changes. <a href=\"https:\/\/support.google.com\/googleplay\/android-developer\/answer\/112622?hl=en\" target=\"_blank\" rel=\"noopener\">Google Play&#8217;s service-fee guidance<\/a> also shows that the applicable charge can depend on the product, program, market, and install status. That makes a flat deduction across every transaction a rough planning shortcut, not a reporting definition.<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" width=\"2400\" height=\"1792\" class=\"wp-image-29\" src=\"https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-filter.jpeg\" alt=\"net app revenue filtered from a mobile subscription payment\" srcset=\"https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-filter.jpeg 2400w, https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-filter-300x224.jpeg 300w, https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-filter-1024x765.jpeg 1024w, https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-filter-768x573.jpeg 768w, https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-filter-1536x1147.jpeg 1536w, https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-filter-2048x1529.jpeg 2048w\" sizes=\"auto, (max-width: 2400px) 100vw, 2400px\" \/><figcaption>A payment flow shown as a filter before revenue enters the reporting total.<\/figcaption><\/figure>\n<h2 id=\"sample\">Compare gross sales and net app revenue on one sample cohort<\/h2>\n<p>Consider a sample subscription app, made for this article. It acquired a small week-one cohort through a paid campaign. Twelve subscribers each paid $10 during the measurement window. The team uses $18 as a sample store-charge deduction, $10 for tax treatment, and $12 in refunds. These are illustration inputs, not platform rates.<\/p>\n<div class=\"rb-table-scroll\"><table>\n<thead>\n<tr>\n<th>Sample cohort calculation<\/th>\n<th class=\"num\">Amount<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Customer payments, gross sales<\/td>\n<td class=\"num\">$120<\/td>\n<\/tr>\n<tr>\n<td>Less sample store-charge deduction<\/td>\n<td class=\"num\">$18<\/td>\n<\/tr>\n<tr>\n<td>Less sample tax treatment<\/td>\n<td class=\"num\">$10<\/td>\n<\/tr>\n<tr>\n<td>Less refunds<\/td>\n<td class=\"num\">$12<\/td>\n<\/tr>\n<tr>\n<td>Net app revenue<\/td>\n<td class=\"num\">$80<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<p>The gross number is $120. The net app revenue number is $80. Neither is wrong. Each tells a different story. Gross sales says customers made $120 in payments. Net app revenue says the reporting definition leaves $80 after the deductions included in this sample.<\/p>\n<p>Now add $100 in acquisition spend. Gross ROAS is $120 divided by $100, or 1.20. Net app revenue ROAS is $80 divided by $100, or 0.80. A campaign that appears to have returned more than its cost on gross sales has not yet recovered its cost under the net definition.<\/p>\n<div class=\"rb-table-scroll\"><table>\n<thead>\n<tr>\n<th>Same cohort, two ratios<\/th>\n<th class=\"num\">Revenue used<\/th>\n<th class=\"num\">Ad spend<\/th>\n<th class=\"num\">ROAS<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Gross sales ROAS<\/td>\n<td class=\"num\">$120<\/td>\n<td class=\"num\">$100<\/td>\n<td class=\"num\">1.20<\/td>\n<\/tr>\n<tr>\n<td>Net app revenue ROAS<\/td>\n<td class=\"num\">$80<\/td>\n<td class=\"num\">$100<\/td>\n<td class=\"num\">0.80<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<p>Both calculations use the same cohort and the same spend. Only the numerator changes. That is why a dashboard should name the revenue basis beside each ROAS value.<\/p>\n<h2 id=\"roas\">Use net app revenue when ROAS drives budget decisions<\/h2>\n<p>Budget decisions usually need net app revenue. The practical question is not only whether a campaign caused purchases. It is whether the cohort generated enough retained value to support more spend. A gross-sales-only number can hide the gap created by deductions and refunds.<\/p>\n<p>Gross sales still earns a place in the dashboard. It helps isolate changes in customer behavior before finance adjustments arrive. If gross sales falls while net app revenue stays flat, the team can inspect pricing, refund timing, product mix, or a reporting delay. If gross sales stays flat while net app revenue falls, the deduction layer deserves attention.<\/p>\n<p>For cohort analysis, hold the revenue definition constant at every age. A D1 net app revenue ROAS and a D30 gross-sales ROAS cannot show payback. Use the same numerator from the first read through the latest cohort age, then compare it with the campaign&#8217;s cumulative cost. The worked calculation in <a href=\"https:\/\/roasit.com\/blog\/cohort-roas-example\/\">this cohort ROAS example<\/a> shows why the cohort boundary matters as much as the formula.<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" width=\"2400\" height=\"1792\" class=\"wp-image-27\" src=\"https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-returns.jpeg\" alt=\"mobile revenue comparison after fees and refunds\" srcset=\"https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-returns.jpeg 2400w, https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-returns-300x224.jpeg 300w, https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-returns-1024x765.jpeg 1024w, https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-returns-768x573.jpeg 768w, https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-returns-1536x1147.jpeg 1536w, https:\/\/roasit.com\/blog\/wp-content\/uploads\/2026\/10\/net-app-revenue-returns-2048x1529.jpeg 2048w\" sizes=\"auto, (max-width: 2400px) 100vw, 2400px\" \/><figcaption>Two revenue views can share the same customer payments while applying different deductions.<\/figcaption><\/figure>\n<h2>Keep one net app revenue definition across reports<\/h2>\n<p>A useful definition fits in one sentence: net app revenue equals recognized customer payments for the cohort, less the deductions included by the business. Put the exact fields below that sentence in the reporting specification. Do not leave it implied by a chart label.<\/p>\n<ol>\n<li>Choose the transaction event that creates gross sales. For subscriptions, this may be a successful initial purchase or renewal.<\/li>\n<li>Set the revenue date. A cohort report needs one consistent rule for purchase, renewal, and refund timing.<\/li>\n<li>List every deduction included in net app revenue. Store charges, tax treatment, refunds, chargebacks, and conversion costs may each need a separate field.<\/li>\n<li>Keep gross sales available beside the net figure. It is a diagnostic view, not a replacement.<\/li>\n<li>Calculate cohort ROAS with the same net definition at D1, D7, D30, and later ages.<\/li>\n<\/ol>\n<p>The process becomes more important when an app sells in several storefronts. Apple notes that storefront pricing can change with tax and exchange-rate adjustments. Google Play describes fee rules that vary by market and transaction circumstances. A single spreadsheet multiplier can drift away from the actual proceeds data over time.<\/p>\n<h2 id=\"workflow\">A simple reporting workflow for mobile teams<\/h2>\n<p>Start with raw purchase and refund events, then group them by install cohort, campaign, country, and platform. Keep the gross amount, deduction amounts, and resulting net app revenue as separate fields. This preserves the ability to change a view without rebuilding the underlying cohort.<\/p>\n<p>Next, join the cohort&#8217;s attributed spend. A campaign report should compare spend with revenue from the installs that campaign brought in, rather than with all app revenue earned that day. That distinction avoids giving today&#8217;s ad cost credit for an older cohort&#8217;s renewal revenue. The same discipline helps with <a href=\"https:\/\/roasit.com\/blog\/mobile-game-payback\/\">payback-period analysis<\/a>, where timing changes the answer.<\/p>\n<p>Finally, publish two labeled columns: gross sales ROAS and net app revenue ROAS. Make the budget rule explicit. A growth team might watch gross sales for a fast signal, while using net app revenue ROAS for scale or cut decisions. The <a href=\"https:\/\/roasit.com\/blog\/category\/app-revenue\/\">App Revenue category<\/a> collects related reporting topics for teams building that view.<\/p>\n<p>Gross sales shows what customers paid. Net app revenue shows what the chosen accounting rule leaves behind. For a cohort ROAS decision, use the latter and document every deduction that produced it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn when to use gross sales or net app revenue in cohort ROAS, with a worked mobile subscription example.<\/p>\n","protected":false},"author":2,"featured_media":28,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[18,20,19],"class_list":["post-30","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-app-revenue","tag-app-revenue","tag-app-store","tag-subscriptions"],"_links":{"self":[{"href":"https:\/\/roasit.com\/blog\/wp-json\/wp\/v2\/posts\/30","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/roasit.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/roasit.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/roasit.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/roasit.com\/blog\/wp-json\/wp\/v2\/comments?post=30"}],"version-history":[{"count":1,"href":"https:\/\/roasit.com\/blog\/wp-json\/wp\/v2\/posts\/30\/revisions"}],"predecessor-version":[{"id":31,"href":"https:\/\/roasit.com\/blog\/wp-json\/wp\/v2\/posts\/30\/revisions\/31"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/roasit.com\/blog\/wp-json\/wp\/v2\/media\/28"}],"wp:attachment":[{"href":"https:\/\/roasit.com\/blog\/wp-json\/wp\/v2\/media?parent=30"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/roasit.com\/blog\/wp-json\/wp\/v2\/categories?post=30"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/roasit.com\/blog\/wp-json\/wp\/v2\/tags?post=30"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}