Required Datapoints
- Revenue from Ads: Total revenue generated directly from the advertising campaign.
- Advertising Spend: The total cost of the advertising campaign during the same period.
Return on Ad Spend (ROAS) measures the revenue generated for every dollar spent on advertising. It is a critical metric for assessing the profitability and efficiency of advertising campaigns.
Return on Ad Spend (ROAS) is a key indicator of marketing efficiency and campaign profitability, reflecting how much revenue your ads generate relative to their cost.
The relevance and interpretation of this metric shift depending on the model or product:
A rising ROAS means you’re spending efficiently and targeting well, while a low ROAS flags potential issues with creative, audience targeting, or funnel conversion.
By segmenting ROAS by campaign, channel, or audience, you can double down on what works and quickly pivot from what doesn’t.
ROAS 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 |
|---|---|
| Lead and Demand Generation | Lead and Demand Generation involves a series of strategic and tactical actions aimed at attracting, informing, and nurturing potential customers throughout their buying journey. It helps teams translate strategy into repeatable execution. Relevant KPIs include Customer Segmentation and Landing Page Conversion Rate. |
| Content Marketing | Content Marketing focuses on creating, distributing, and optimizing valuable content designed to attract, engage, and convert target audiences at every stage of the buyer journey. It helps teams translate strategy into repeatable execution. Relevant KPIs include Content Engagement and Engagement Metrics. |
| Paid Channel Attribution | Paid Channel Attribution focuses on systematically tracking, analyzing, and assigning credit to various paid marketing channels—such as search ads, social media campaigns, and display ads—for their contributions to customer acquisition, engagement, and revenue generation. It turns signals into decisions, interventions, and measurable follow-up. Relevant KPIs include Return on Ad Spend. |
An e-commerce store spends $5,000 on Google Ads, generating $20,000 in sales. The ROAS is:
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('AdCampaigns', { sql: `SELECT * FROM ad_campaigns`,
measures: { revenueFromAds: { sql: `revenue_from_ads`, type: 'sum', title: 'Revenue from Ads', description: 'Total revenue generated directly from the advertising campaign.' }, advertisingSpend: { sql: `advertising_spend`, type: 'sum', title: 'Advertising Spend', description: 'The total cost of the advertising campaign during the same period.' }, returnOnAdSpend: { sql: `revenue_from_ads / NULLIF(advertising_spend, 0)`, type: 'number', title: 'Return on Ad Spend', description: 'Measures the revenue generated for every dollar spent on advertising.' } },
dimensions: { id: { sql: `id`, type: 'string', primaryKey: true, title: 'ID' }, campaignName: { sql: `campaign_name`, type: 'string', title: 'Campaign Name' }, startDate: { sql: `start_date`, type: 'time', title: 'Start Date' }, endDate: { sql: `end_date`, type: 'time', title: 'End Date' } }});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