Marketing ROI: how to calculate it, and how to show it to a client
The marketing ROI formula, a worked example comparing ROAS, revenue ROI and gross-margin ROI, the GA4 attribution caveats, and how to present it to a client.
Marketing ROI is the return your marketing generated minus what it cost, divided by what it cost: (return − marketing cost) ÷ marketing cost × 100. The two choices that change the answer are what counts as the return (revenue, or the gross profit left after the cost of the product) and which sales you credit to marketing in the first place. Get those two written down and agreed, and the arithmetic is the easy part.
The marketing ROI formula, and what goes into it
Marketing ROI (%) = (Return attributed to marketing − Marketing cost) ÷ Marketing cost × 100
The return. Most guides plug in revenue. That is quick and it overstates the result, because revenue includes the cost of the goods or service you sold. Google’s own Ads help subtracts the cost of goods too: its example product costs $100 to make and sells for $200, and its ROI counts both production and ad costs (Google Ads Help: Return on investment). Gross profit (revenue minus cost of goods sold) is the honest version. Use revenue only if you label it clearly.
The cost. Count everything the marketing needed, not only the media:
- Ad spend on every platform
- Agency, freelancer or contractor fees
- Tools and software used for the work
- Creative production (design, video, copy)
- Internal time, if you are calculating ROI for the whole marketing function
Leaving fees out is the usual way an ROI figure ends up looking far better than it is.
The period. Match return and cost to the same window, and make it long enough for the sales cycle. A campaign that runs in October and closes deals in December has a misleading October ROI. That is why the weekly marketing KPIs list keeps ROI in the monthly review.
A worked example: ROAS, revenue ROI and gross-margin ROI
The numbers below are illustrative, not from a real client. A store spends one month on paid campaigns:
- Ad spend: $10,000
- Agency fee: $4,000
- Tools and creative: $1,000
- Total marketing cost: $15,000
- Revenue attributed to the campaigns: $60,000
- Gross margin: 40%, so gross profit on that revenue is $24,000
| Metric | Calculation | Result |
|---|---|---|
| ROAS | $60,000 ÷ $10,000 ad spend | 6.0 (600%) |
| Revenue ROI | ($60,000 − $15,000) ÷ $15,000 | 300% |
| Gross-margin ROI | ($24,000 − $15,000) ÷ $15,000 | 60% |
All three figures are correct for the same month. The 600% says the ads are efficient at producing sales. The 60% says the business got $1.60 of gross profit back for every $1 of marketing, which is what an owner deciding next quarter’s budget needs to know.
Break-even is the number to know before any of these. At a 40% margin, each dollar of revenue leaves 40 cents of gross profit, so ads alone need a ROAS of 1 ÷ 0.40 = 2.5 to pay for themselves. Covering the full $15,000 of cost takes $15,000 ÷ 0.40 = $37,500 of attributed revenue. Below $37,500 of revenue (a ROAS of 3.75), the illustrative store loses money on the month, even though any ROAS above 2.5 covers the ad spend alone.
If the business sells through leads, not a checkout
Lead generation adds steps between the click and the money. Again with illustrative numbers:
- 150 leads from marketing in a quarter
- 12% close into customers: 18 customers
- $5,000 average first-year revenue per customer: $90,000
- 60% gross margin: $54,000 gross profit
- Quarter’s marketing cost: $30,000
- Gross-margin ROI: ($54,000 − $30,000) ÷ $30,000 = 80%
The close rate and deal value come from the CRM, not from GA4. If you use lifetime value instead of first-year revenue, say so: it makes the ROI look better and depends on retention assumptions the client should see.
ROAS vs ROI vs gross-margin ROI: which one to report
| ROAS | Revenue ROI | Gross-margin ROI | |
|---|---|---|---|
| Return used | Revenue | Revenue | Gross profit |
| Cost used | Ad spend only | All marketing cost | All marketing cost |
| Good for | Comparing campaigns and channels | Quick top-line check | Budget and profitability decisions |
| Main trap | Ignores margin and fees | Ignores margin | Needs margin data from the client |
ROAS is a ratio of revenue to ad spend. Google expresses it as a percentage: $5 in sales for $1 of ad spend is a 500% ROAS (Google Ads Help: About Target ROAS bidding). It is the right tool for comparing one campaign with another, and the wrong one for telling a client whether marketing made money.
Our recommendation: report gross-margin ROI as the headline once a month or quarter, and keep ROAS per campaign underneath it as the working metric.
Where the “return” comes from: attribution caveats
Every ROI figure depends on a decision about which sales marketing gets credit for. In GA4, that decision is the attribution model, and it is worth knowing the current facts before putting a number in front of a client.
- Data-driven is the default. “Google Analytics uses the data-driven attribution model by default” (Analytics Help: How to attribute credit for key events). It spreads credit across touchpoints using a model specific to your property and its key events.
- Three models are left. Data-driven, paid and organic last click, and Google paid channels last click. First click, linear, time decay and position-based “are no longer available as of November 2023” (Analytics Help: Get started with attribution), so older guides comparing five or six GA4 models are out of date.
- Changing the model rewrites history. It “applies to historical and future data”, and you need the Marketer role or above at property level to change it (Analytics Help: Select attribution settings).
- Not every report follows the model. The setting changes key event reports that use event-scoped traffic dimensions. Session- and user-scoped dimensions, such as Session source or First user medium, are not affected (Analytics Help: Change the reporting attribution model). Two GA4 reports can show different revenue by channel for this reason alone.
Three more caveats sit outside GA4 settings:
- GA4 revenue is not the bank balance. GA4’s Purchase revenue is “the sum of revenue from purchases made on your website or app, minus any refunds given” (Analytics Help: dimensions and metrics), and it only counts what the tag saw. Visitors who decline consent (Analytics Help: consent mode) and ad blockers usually make it lower than the store or billing system. The store is right about money; see Shopify Analytics vs GA4 for why the totals differ.
- Cost has to come in too. Google Ads cost shows in GA4 reports once the accounts are linked. Other ad platforms need a campaign data import, or you take their spend from each platform directly.
- Attributed is not caused. A model assigns credit to touchpoints that happened; it does not prove the sale would not have happened anyway. Branded search and retargeting are the usual examples. If the budget is large enough to matter, a holdout test (pause a channel in one region or for one period) is the most direct way to see the incremental effect.
An ROI number without its model, window and cost list is half a number.
How to show marketing ROI to a client
The goal is a figure the client trusts next month as much as this month, which takes consistency more than precision.
- Agree the definition at kickoff, in writing. Which return (revenue or gross profit, and where the margin comes from), which costs (including your fee), which attribution model and lookback window, and which source of revenue (store, CRM or GA4). Agree any later change with the client before the report that uses it.
- Report it monthly or quarterly. Weekly ROI on a lead business is mostly noise. Weekly, report the leading indicators that feed it: sessions by channel, key events, cost per key event.
- Lead with one headline number and the bridge to it. “Marketing returned 60% on gross margin in October” followed by the small table: revenue, gross profit, each cost line, ROI. Clients trust a number they can rebuild.
- Show the range when the model matters. If ROI by channel changes a lot between data-driven and last click, show both in the appendix rather than picking the flattering one. GA4’s key event attribution models report compares models side by side for this.
- Write the caveats in plain words. “GA4 sees less revenue than the store because some visitors decline tracking, so we use the store’s total and GA4 only for the split by channel” reads better than a footnote about tag coverage.
- End with the decision. Move budget, cut a channel or test a holdout. Say which.
An illustrative summary paragraph for a client update:
October returned 60% on gross margin: $24,000 of gross profit on $15,000 of total marketing cost, fees included. Paid social carried most of it. Branded search shows a high return under last click but most of those buyers already knew you, so we suggest a two-week pause in one region in November to measure what it really adds.
The client reporting guide covers where this sits in the wider report, and the KPI report template has a scorecard format that an ROI row slots into.
If you are an agency
Include your own fee in the cost line. Leaving it out makes the ROI look better until the client’s finance person adds it back, and that conversation costs more trust than a lower number. Ask for the client’s gross margin early; many will give a range, which is enough.
If you report to your own boss or founder
You usually have the margin and CRM data already, so skip ROAS as the headline and go straight to gross-margin ROI per quarter. Keep a running sheet with the definition at the top so the number means the same thing every quarter, even after a model or tool change.
Where Dialytics fits, and where it does not
Dialytics is our product, so to be plain about its limits: it does not calculate ROI, ROAS or revenue. It does not read ad costs, store revenue or CRM data, and it connects only to GA4 and Slack.
What it does is the weekly part around the ROI number. Every Monday at 8am (Paris time) it posts a digest to Slack comparing the week with the one before, with a short explanation and the one point worth your attention. Every day it checks sessions, users, new users and key events against the same weekday over roughly the last 12 weeks, and posts at most one alert when something is genuinely unusual. If the client’s purchase or lead event is its main key event, a sharp drop can show up as a key events alert days before the monthly ROI would reveal it. The alert watches total key events, so a drop in one event among several busier ones may not be large enough to trigger it. Agencies can run each client in its own Slack channel from one account; see Dialytics for agencies.
Frequently asked questions
What is the formula for marketing ROI?
Marketing ROI is the return attributed to marketing minus the marketing cost, divided by the marketing cost, times 100. Use gross profit as the return when you can, not revenue, and count every cost: ad spend, agency or freelancer fees, tools and creative. Revenue-based ROI flatters the result because it ignores what the product costs to make.
What is the difference between ROAS and ROI?
ROAS divides revenue by ad spend only: 6 means $6 of revenue for every $1 of ads. ROI subtracts all marketing costs and compares the net result with those costs. A campaign can show a healthy ROAS and still lose money once margins, fees and tools are counted, which is why ROI is the number for a budget decision.
What is a good marketing ROI?
There is no universal benchmark, because it depends on margins, sales cycle and how ROI is defined. Work out your own break-even instead: at a 40% gross margin, every dollar of ads needs $2.50 of revenue just to pay for itself. Above break-even and improving over time is a good ROI for that business.
Which GA4 attribution model should I use for ROI?
GA4 uses data-driven attribution by default and also offers paid and organic last click, plus Google paid channels last click. First click, linear, time decay and position-based were removed in November 2023. Pick one model, write it into the report, and keep it: switching models changes historical numbers too.