
Most ROAS problems get blamed on the algorithm when the real issue is somewhere upstream: broken tracking, an arbitrary target, or a landing page that doesn't match the ad. This guide walks through the fixes in the order that actually moves the number, so you're not adjusting bids on a campaign that was never measuring revenue correctly in the first place. By the end, you'll have a repeatable process for diagnosing weak ROAS and fixing it based on impact, not guesswork. You'll need admin access to your ad accounts, at least 30 days of conversion data, and your actual product or service margins on hand before you start.
Open your conversion actions in Google Ads, Meta Ads Manager, and Microsoft Ads and check what's actually being counted as a "conversion." A shocking number of accounts count form submits, add-to-carts, or page views as full conversions with dollar values attached, which inflates or distorts reported ROAS long before you get to bidding decisions. If a conversion action doesn't represent an actual sale or qualified lead with real revenue tied to it, your ROAS number is fiction.
Next, reconcile platform-reported revenue against GA4 or your CRM. Two things commonly cause mismatches: consent mode gaps, where cookie-declining users create holes in tracked conversions, and attribution window mismatches. Google Ads defaults to a 30-day click, 1-day view attribution window unless you've changed it. If Meta is using a 7-day click window and Google is using 30-day, and you're comparing them as if they measure the same thing, you'll draw the wrong conclusions about which platform is actually driving revenue.
Walk through this checklist before you touch a single bid:
If tracking is broken, every optimization downstream, bids, budgets, creative decisions, is built on bad data. Fixing this first isn't optional. It's the difference between optimizing toward reality and optimizing toward noise.
Before you decide whether a campaign is "underperforming," you need a target rooted in your own numbers, not a benchmark pulled from a blog post. Start with breakeven ROAS: divide 1 by your gross margin as a decimal. A business running a 40% gross margin needs roughly 2.5x ROAS just to break even on ad spend, before you've covered overhead, salaries, or profit. A business at 25% margin needs 4x just to break even. These are wildly different targets for two businesses that might otherwise get told to "aim for 4x" by a generic benchmark.
Once you know breakeven, add your actual profit target on top. If you want a 20% margin on ad-driven revenue after covering product cost, your target ROAS needs to sit meaningfully above breakeven, not right at it.
Separate blended ROAS from platform-reported ROAS. Platform-reported ROAS only counts what that platform claims credit for, which is inflated when multiple channels touch the same conversion. Blended ROAS divides total revenue across all channels by total ad spend across all channels in the same period. It's a more honest number because it doesn't let Google, Meta, and Microsoft each take partial credit for the same sale. If your blended ROAS is consistently lower than your platform-reported numbers combined, you've got attribution overlap worth investigating.
The common mistake here is copying a "good ROAS" figure from a competitor's case study or a generic benchmark without adjusting for your margin, customer acquisition cost payback period, or lifetime value. A subscription business with high LTV can profitably run at a lower first-purchase ROAS than a one-time-purchase eCommerce brand. Set the number from your own math, then hold every campaign to it.
Pull a search terms report in Google Ads and Microsoft Ads going back 30 to 90 days, and a placement report for Meta if you're running Advantage+ placements or Audience Network. Sort by spend and look for terms or placements with meaningful spend and zero conversions. This is usually the fastest lever you have, because you're not guessing, you're removing spend that has a track record of producing nothing.
Add negative keywords and placement exclusions in batches rather than one at a time. Pull the list, review it for anything that's a false positive (a term with zero conversions but only three clicks isn't a pattern yet), and add the rest as negatives in a single pass. Then wait two weeks before reacting again. Single-day search term or placement data is noisy, and reacting to a bad Tuesday will have you adding and removing the same negative keyword every week without learning anything.
Audience exclusions matter just as much as keyword and placement exclusions. Check whether past converters are still being targeted in prospecting campaigns at your full budget. Retargeting a list of people who already bought, without excluding them from cold prospecting, dilutes ROAS because that audience typically converts at a much lower rate for a repeat top-of-funnel offer than it would for a tailored retention campaign. Exclude any audience segment converting at a fraction of your target ROAS from campaigns designed for new customer acquisition, and consider moving them to a separate retention effort with its own target.
Once you've trimmed the obvious waste, look at how your account is structured. A common mistake is organizing campaigns by product category alone, when margin and intent matter more for ROAS. A high-margin service line and a low-margin lead-generation offer shouldn't share a budget or a bid strategy just because they sit in the same product category on your website. Split them so each can be measured and bid against its own realistic target.
Check for fragmentation. If you've got five ad groups or campaigns each generating a handful of conversions a month, Smart Bidding and Meta's Advantage+ automation don't have enough data per campaign to optimize well. Google's own guidance has generally recommended around 30 or more conversions per month at the campaign level for Smart Bidding to exit the learning phase and stabilize (confirm current thresholds in Google Ads Help, since these guidelines shift). Consolidating fragmented campaigns into fewer, better-fed campaigns often improves ROAS without changing a single bid, simply because the algorithm finally has enough signal to work with.
Once campaigns are structured around intent and margin, look at budget allocation. It's tempting to throw more budget at an underperforming campaign hoping volume fixes it. It usually doesn't. Reallocate budget toward campaigns already hitting or beating your target ROAS, and either fix or pause the ones that aren't, rather than subsidizing them with more spend on the assumption that scale will solve a structural problem.
Target ROAS bidding works well, but only once a campaign has enough conversion history to support it. Switching to tROAS before you've got consistent conversion volume resets the learning phase, and performance typically dips for one to two weeks while the algorithm re-learns. If your campaign is still generating fewer than roughly 15 to 30 conversions a month, tROAS is likely premature.
For lower-volume accounts, Maximize Conversion Value with a ROAS floor (called a "target" in some Google Ads interfaces, functioning as a guardrail rather than a strict target) can outperform strict Target ROAS because it isn't as data-hungry and gives the algorithm more room to find volume while still respecting a minimum efficiency threshold. This is often the better starting point for newer accounts or campaigns with seasonal or lumpy conversion patterns.
Layer in seasonality adjustments for known demand spikes, like a holiday sale, a service business's peak season, or a planned promotion, instead of waiting for the algorithm to react after the fact. Google Ads allows you to set a seasonality adjustment with a specific date range and expected conversion rate change, which tells the system to anticipate the shift rather than treat it as a performance anomaly to correct for. Skipping this step is why so many accounts see a ROAS dip in the days right after a big promotion ends, the bid strategy is still calibrated to the spike.
Whichever strategy you choose, confirm current settings and thresholds directly in-platform, since Google and Meta adjust automation defaults and learning-phase guidance periodically.
Low ROAS often isn't a bidding problem at all, it's a relevance problem. Check Meta's ad quality ranking (found in the ad's diagnostics) and Google's Ad Strength and landing page experience signals. If an ad is flagged as below average on quality, engagement rate, or conversion rate ranking compared to competing advertisers targeting the same audience, no bid adjustment will fix that. The algorithm is telling you the ad or the destination isn't earning attention or trust.
Match ad messaging to landing page content specifically. If your ad promises "20% off this weekend," that offer needs to be visible above the fold on the landing page, not buried three scrolls down or missing entirely because the page links to your generic homepage. This kind of mismatch is one of the most common, and most fixable, causes of a ROAS drop. Users bounce when the page doesn't deliver on what the ad promised, and that bounce shows up as wasted spend with no clean explanation unless you check the actual user path.
When you test changes, isolate one variable at a time, headline, offer, or hero image, rather than changing several elements and hoping for a lift. Let each test run long enough to reach statistical relevance before calling a winner. Ending a test after two days because one variant is "ahead" is how accounts end up chasing noise instead of real improvements. A test needs enough conversions on each side, generally in the range of at least 100 per variant for a reasonably confident read, though this varies by baseline conversion rate and how big a difference you're trying to detect.
ROAS improvement isn't a project with an end date. It needs a cadence, or the gains from steps one through six erode within a quarter as new keywords creep in, creative fatigues, and account structure drifts.
Set a weekly review for search terms, placements, and budget pacing, the fast-moving variables that can waste spend quickly if left unchecked. Set a monthly review for campaign structure, bid strategy performance, and creative fatigue, the slower-moving factors that need more data before a change is justified.
Periodically, run an incrementality check, a geo holdout or audience holdout test where you pause ads for a portion of your market and compare actual revenue to the group still seeing ads. This confirms whether your reported ROAS reflects real incremental revenue or is partly counting conversions that would have happened anyway, from branded search or repeat customers who didn't need an ad to convert. Without this check, you're trusting platform-reported ROAS at face value, and platforms have a built-in incentive to claim as much credit as possible.
Document every change you make and when, budget shifts, bid strategy switches, new creative, negative keyword batches. When ROAS moves, you want to trace it back to a specific action, not guess which of five simultaneous changes caused it.
Work through these steps in order. Tracking accuracy and a margin-based target come first because everything else is measured against them. Structural and bidding fixes come second, once you know the data underneath them is trustworthy. Treat ROAS improvement as a cadence you run every week and every month, not a project you finish once and move on from.
If this feels like more than your team has the time or platform depth to manage across Google, Meta, Microsoft, and beyond, that's the exact gap Triad Media Lab fills for agencies and advertisers who want senior-level management without building an in-house team from scratch. Learn more about our services