A step-by-step guide on measuring ROAS for paid campaigns
We cover the four steps you must take in order to measure Return On Ad Spend (ROAS) of your performance marketing campaigns.
Imagine pouring money into a campaign that brings in a flood of new subscribers, only to realize later they aren't sticking around. That's the limitation of focusing solely on CPAs. Enter ROAS: a way of measuring campaign results that accepts that not every user is worth the same.
This article covers what data sets and views you need to build a ROAS report at your organization.
CPAs vs. ROAS: The Full Picture
CPAs (Cost Per Acquisition) help you measure how much you’re paying for users to perform a specific action, like subscribing to your product. They pinpoint which strategies within your paid campaigns are bringing in the most new subscribers at the lowest cost. However, CPAs don’t tell the whole story.
User behavior post-subscription can vary significantly depending on the acquisition channel. Even within the same channel, the behavior can differ widly. For example, in paid search, we can see the difference between user acquired from brand terms versus intent terms.
CPAs alone miss this context because certain audiences have higher or lower:
User retention
Seats per account
Cancellation rates
Upselling
Without an overview of how much revenue each new account brings (ROAS), you risk misallocating your budget. Strategies with high CAC might also have higher ARPU, making them more cost-effective than other low CAC initiatives.
Here’s a common scenario:
Disclaimer: Measuring ROAS doesn’t mean measuring incrementality isn’t necessary.
Why Conversion Events Are Not Enough for Subscription Products
While CPAs rely on conversion events for measurement, subscription products complicate things with multiple revenue-generating actions. For example, renewals, changing plans, inviting users to your plan, and credit usage can all impact ROAS.
It would be nice if we could set all these user actions as conversion goals in our ad platforms, pass a monetary value for each of them (either predicted or real), and use this to calculate ROAS.
But, alas, attribution gets in the way.
Each of these events could be attributed to a different campaign instead of the original campaign that brought in the new user. For instance, a renewal conversion event might be attributed to “Organic” or a CRM campaign if you’re using UTMs for those, and not your original Google Ads campaign.
The Solution: Measuring Ad Spend, Conversions, and Revenue Separately
The solution is to divide the problem into three data views and later join them to create a ROAS report. We’ll cover the four steps to get this in place.
Step 1: Store Your Ad Platform Spend
A prerequisite to calculating ROAS is storing spend data. Duh. This can be done using an ETL tool (like Fivetran or Funnel) and sending the data to a Data Warehouse. BigQuery has out-of-the-box integrations for Google and Meta ads.
You should be able to create a view where you store spend from all your ad platforms, per day and per campaign:
Disclaimer: In order to simplify this article, we’ll explain how to report on ROAS at the campaign level. However, it’s recommended to go deeper: ad-level (for Social) and ad group and keyword level (for Search).
Step 2: Calculate and Store Revenue Data Per User or Account
Subscription products’ revenue comprises various events, such as the act of subscribing, monthly renewals, adding new seats, and changing plans. These events are typically tracked on your payment infrastructure (such as Stripe) and/or your product analytics tool.
To calculate your ROAS, you need an overview of all revenue an account or user has generated. For simplicity, assume you have a single-user product with no seat-based pricing.
Create a view that sums all revenue from different events throughout each user’s lifetime:
Disclaimer: If you want to have set lookback windows or calculate payback periods, you also need to include Date
in this view.
This data should be stored in the same data warehouse as your ad spend.
Step 3: Track the Initial Conversion Event
The third table to go into your data warehouse is your attributed conversions.
In your product analytics tool of choice (Google Analytics, Amplitude, Mixpanel, Snowplow, etc.), track your key conversion event. Usually, this is the conversion event highest up the funnel.
The tracking of this conversion event must comply with the following requirements:
The conversion event must be attributed to a single campaign.
The conversion event must pass a unique user value also present in your revenue table, such as user_id.
The campaign must be a unique identifier in the form of a non-changeable ID, also present in your ad platform reporting. In this case, we’re using a campaign_id.
Create a view like this:
For a lead event, the unique identifier is usually an email address. This means you need to include the user’s email address in the revenue table.
Step 4: Join and Report on the Data Sets
Once you have all three tables stored in your data warehouse, it’s time to join the data sets. They will be joined on different keys:
Ad Spend: Joined by campaign ID.
Revenue: Joined by user ID.
Conversion Event: Joined by campaign ID and user ID.

Date
and Ad Group ID
.Once you’ve created this holistic view of ad spend, conversions, and revenue, you’ll be able to report on ROAS for your subscription product’s campaigns:
Depending on your naming convention, you can further segment your campaign names into separate columns for “Market,” “Strategy,” “Audience,” etc., to find the most cost-efficient segments to allocate your budget to.
Drive improved results with ROAS
Calculating ROAS involves more than just measuring CPAs; it requires separate views of ad spend, conversions, and revenue. But, by moving beyond CPAs and incorporating ROAS, you ensure that every marketing dollar is spent wisely, optimizing not just acquisition but also long-term profitability.
When I built a ROAS report for VEED.io, we were able to increase overall subscriptions (with a flat CAC), improve impression share, and acquire higher-value users. This was possible thanks to smarter budget allocation.
If you’re interested in calculating ROAS for your paid media initiatives, then head to my website and reach out.
this is really dope and helpful, thank you Barbara 👏