How to Create a Channel ROAS Report: A Full Guide

A blended ROAS figure is the most comfortable number in marketing and the least useful. It tells you the account is fine while one channel quietly burns budget.
The fix is a report that splits by channel. That part is easy. What makes the report wrong is almost never the arithmetic.
Two things break it. Averaging the wrong way, and comparing spend and revenue that belong to different days.
This guide covers what the report needs, how the platform actually reports the number, the three manual routes, and where each one stops holding.
What a channel ROAS report needs to contain
One row per channel, one column per period, and two source columns behind every ratio: spend and conversion value.
Keep both raw columns visible. A report that shows only the ratio cannot answer "is that because spend fell or revenue rose," which is the first question anyone asks.
You also need the attribution basis written down. Two exports of the same account on the same day can differ, and the reason is usually the reporting basis rather than an error.
Three decisions come before any formula.
The channel definition. Paid search, paid social, and affiliate are clear. "Other" is where reports go to die, so name what falls in it.
The revenue source. Platform-reported conversion value and your own order data will not match. Pick one as the reporting basis and note it.
The period boundary. Calendar month is conventional. It is also the boundary most likely to cut through a conversion delay, which is the subject of two sections below.
How Google reports ROAS, and the averaging trap
Start with the platform's own definition, because it differs from the shorthand most people use.
Google's Target ROAS documentation defines it as "the average conversion value (for example, revenue) you'd like to get for each dollar you spend on ads." The worked example is expressed as a percentage: "$5 USD in sales ÷ $1 USD in ad spend x 100% = 500% target ROAS."
So a 5:1 return is 500% in the platform, not 5. Pick one convention for your report and label it, because mixing the two in one table is a genuine source of confusion.
Now the mistake that actually breaks reports. Never average the individual channel ROAS figures to get an account total.
Consider two channels. Channel A spends $100 and returns $500, so 500%. Channel B spends $10,000 and returns $20,000, so 200%.
The arithmetic mean of those two is 350%. The real account figure is $20,500 divided by $10,100, which is roughly 203%.
The mean flatters you by 147 percentage points, because it treats a $100 channel and a $10,000 channel as equals. The correct total is always total conversion value divided by total spend.
Click time versus conversion time
This is the subtlety that makes month-end reports disagree with themselves, and it is documented.
Google's conversion tracking documentation is explicit about the basis. Its primary conversion columns are "calculated based on the time of the click, not the time of the conversion."
Read that carefully. A click on March 30 that converts on April 3 is reported in March, alongside the March spend that produced it.
That behaviour is deliberate and correct for measuring efficiency. It also means a report built from order dates will not match a report built from platform columns.
The same page offers the alternative: "You can also report on conversions based on the time the conversion occurred." It also sets expectations about cross-tool comparison, noting that "discrepancies, often up to 20%, are expected due to different attribution models."
Two more practical notes from the platform. Reporting lags "can take up to 24-48 hours." The Target ROAS page also advises you to "ensure the time frame of your ROAS evaluation excludes the most recent conversion delay period."
In plain terms, do not judge last week on Monday morning. The number will move.
How to do it manually
Option 1: Aggregate first, divide second
Build two columns per channel before any ratio. Total spend with SUMIFS filtered on channel and date bounds, then total conversion value the same way.
Only then divide. Putting the ratio in a third column, computed from two visible totals, makes the averaging mistake structurally impossible.
Add an account row at the bottom that sums both columns and divides once. That row is your check against anyone who averaged.
The ceiling is that this gives you a snapshot with no trend. You know last month, not whether it is moving.
Option 2: Build a channel-by-period matrix
One row per channel, one column pair per month. Now you can see direction, which is what a report is for.
Watch the denominators as you widen the matrix. A channel that spent nothing in a month produces a division error. A channel that spent $40 produces a ratio that looks meaningful and is not.
Set a minimum spend threshold below which you report the raw numbers and suppress the ratio. Label the threshold on the report.
The limit is maintenance. Every new channel and every renamed campaign needs mapping again.
Option 3: Keep a definitions tab
Record the channel mapping, the revenue source, the attribution basis, the period boundary, the minimum spend threshold, and the export date.
This is what makes this month comparable to last month. It is also the tab that gets skipped when the number is wanted before a standup.
The limitation is that writing a rule does not apply it. Somebody still rebuilds the same filters every cycle.
The shared ceiling. All three assume the channel labels are stable. After a campaign restructure, half the mapping is wrong and the report looks fine.
Where the manual route slows down
The first report takes an afternoon and finds something real. The fourth takes as long, because the account changed underneath it.
Campaign names change constantly, and the channel mapping is usually built on name patterns. One naming convention update and spend silently lands in "Other."
Attribution settings change too. A window adjustment reshapes historical conversion values, and a chart that was correct last month now disagrees with itself.
Then there is the timing error that survives longest. Pulling spend from one export and revenue from another, on different dates, produces a ratio where the numerator and denominator describe different weeks.
That is the risk in this kind of report. A wrong ROAS does not look wrong. It looks like a decision.
The tooling side of this problem has its own roundup, in AI tools for ad spend analysis.
How to build it with Powerdrill Bloom
Step 1: Upload your ad exports
Upload the spend export and the revenue file together. Powerdrill Bloom profiles the columns on arrival, so inconsistent channel labels, duplicate campaign rows, and missing conversion values surface before any ratio is computed.
Step 2: Describe the report in natural language
State the rules rather than building them. Give the channel mapping, the revenue source, the period, and the minimum spend threshold.
Then ask the questions that catch the errors. Ask whether any channel labels look like near-duplicates. Ask for the account total computed from summed columns rather than averaged ratios. Then ask how the figures change if the last week of data is excluded.
Step 3: Export the chart, report, or deck
Take out the channel table, a trend chart, or slides that carry the attribution basis alongside the numbers.
Why this beats rebuilding it each month
| Manual route | Powerdrill Bloom | |
|---|---|---|
| Account total across channels | Sum both columns, divide once | Ask for the weighted total |
| Renamed campaigns after a restructure | Spot it when "Other" grows | Surfaces on upload |
| Excluding the conversion delay window | Rebuild the date filter | State the new window and ask |
| Low-spend channels with silly ratios | Threshold column per channel | State the threshold |
The third row is the one that changes decisions. Being able to see the report with and without the last week turns "performance dropped" into "the data is not in yet."
Common mistakes
Averaging channel ratios to get an account total. Sum conversion value, sum spend, divide once. The mean overweights small channels badly.
Mixing 5:1 and 500% in one table. The platform reports a percentage. Pick a convention, label it, and stay in it.
Judging the most recent days. Reporting lags run 24 to 48 hours, and conversion delay runs longer. Exclude the tail before drawing conclusions.
Comparing platform revenue against your own order data without saying so. Discrepancies up to 20% are expected across attribution models. Name the basis on the report.
Reporting a ratio for a channel that spent almost nothing. Set a minimum spend threshold and show raw figures below it.
Building the channel mapping on campaign name patterns and never rechecking. One naming change moves budget into "Other." Audit the mapping every cycle.
Leaving the two source columns out of the report. Without spend and revenue visible, nobody can tell which half moved. Show both beside every ratio.
Conclusion
Define your channels, fix the revenue source, state the attribution basis, aggregate before dividing, and exclude the conversion delay window. That is what makes a channel ROAS report survive its first review.
The expensive part is not the calculation. It is that campaign names, attribution settings, and reporting lag all move the number without anyone touching the file.
If that is where your month-end goes, try Powerdrill Bloom on your current exports. See also our guide to building a marketing funnel report, plus the AI audience research and CSV AI assistant pages.
Frequently asked questions
How is ROAS calculated?
Total conversion value divided by total ad spend for the same period. Google's documentation expresses the result as a percentage, using the example of $5 in sales divided by $1 in spend giving 500%.
Can I average the ROAS of each channel?
No. That treats a small channel and a large one as equals and inflates the result. Sum conversion value, sum spend, then divide once.
Why does my platform report differ from my order data?
Usually attribution. Platform conversion columns are calculated on the time of the click rather than the time of the conversion, and discrepancies up to 20% are expected.
How recent can the data be?
Reporting lags run 24 to 48 hours, and conversions arrive after that. Google's guidance is to exclude the most recent conversion delay period from any ROAS evaluation.
What minimum spend makes a channel ROAS meaningful?
There is no universal figure, so set a threshold that suits your account and label it. Below it, report raw spend and revenue instead of a ratio.