Skip to content

Answer library  /  Wasted Ad Spend  ·  Conversions and ROI

What is a good return on ad spend for an ecommerce business?

A good ROAS is one that clears breakeven, and breakeven is 1 divided by contribution margin, so a 30 percent margin needs 3.3x. Then look under the blend: two home brands I run report 21x, but Shopping earns 61x on 18% of spend and Performance Max 12x on 82%. One 21-day geo holdout measured 38% real lift against 92% reported.

“Good ROAS” is the wrong question

A 5x ROAS on a 20 percent contribution margin product is a money-losing campaign. A 2x ROAS on a 60 percent margin product is profitable. Asking what a good ROAS looks like without naming a margin is asking a question the number can’t answer.

ROAS is revenue divided by ad spend. Profit is what survives cost of goods, shipping, payment processing, ad spend, and everything else that scales with an order. The dashboard knows none of that. Start with contribution margin per order, then back into the ROAS the business needs to clear. Skipping that step is why an account looks healthy in Ads Manager and dies on the P&L.

The breakeven math

Breakeven ROAS = 1 / contribution margin

A 30 percent margin breaks even at 3.3x. A 50 percent margin at 2x. A 20 percent margin needs 5x to stop losing money on incremental orders. Read against gross margin instead, 40 percent breaks even at 2.5x and 55 percent at 1.82x.

Then layer in profit. A healthy target sits well above breakeven on cold traffic, and the formula tells you why: a brand at 70 percent margin breaks even at 1.43x, so 3x is comfortable, while a brand at 35 percent margin breaks even at 2.86x and needs far more than 3x before cold traffic pays. Founders who do this math for the first time often find their internal “good ROAS” target was set below breakeven.

Breakeven also sets the floor you enforce in the platform. Google Ads target ROAS bidding should sit at least 20 percent above breakeven to absorb tracking variance and returns. On Meta, the equivalent is a minimum-ROAS rule on the campaign. Watch for campaign-level ROAS sitting near breakeven across a 30-day window, or below it for two weeks running.

The same math gives a target CPA: gross profit per order minus a planned contribution to fixed costs. On a Shopify home brand at 55 percent gross margin and a $160 average order value, that lands between $50 and $70. Reported CPA above target on a rolling 30-day window is the concern line. Two days is noise. Two weeks is structural, and the fix is redistribution toward the campaigns already converting under target, not a bid adjustment.

Why category averages don’t help much

I don’t publish a ROAS table by category, because the margin inside a category varies more than the average between categories. Home and furniture: big baskets hide thin per-order economics, and freight eats margin the dashboard never sees, as the furniture playbook covers. Apparel: returns compress effective margin, so platform ROAS has to clear higher than the math first implies. Consumer electronics: thin margins mean a ROAS that looks strong is often a losing account dressed up by branded-search overlap. A furniture brand at 55 percent margin on an $1,800 AOV also operates differently than one at 30 percent margin on a $400 AOV. Run the brand’s own breakeven first.

On one ecommerce store I manage, I set the Performance Max target with headroom above the brand’s breakeven, because Google’s target ROAS undershoots more than it overshoots on its own reporting. The weekly read swings hard: 3x, then 4x, then 2x, then 6x in consecutive weeks. Over a quarter the blended number lands near the target. The ninety-day blended is the read that matches the P&L.

Blended ROAS vs platform-reported ROAS

Every platform claims credit for the same conversion when journeys overlap, so the sum of platform numbers usually exceeds actual revenue.

Blended ROAS is total revenue divided by total ad spend across every platform for the period, and it’s the only number that ties to the bank account. A 5x Meta and a 4x Google on top of a 2.5x blended is a flashing light. Those platforms are each claiming revenue the other one also claimed, and the bank balance exposes it a month or two later. Set blended as the north star and run a monthly blended-vs-platform reconciliation. The tracking stack reference covers the de-duplication contract that makes it trustworthy.

The gap can be wide. On the one store in my ecommerce tracking accuracy benchmark where both sides were readable, the ad platform’s counted purchases equaled 58.5% of the store’s entire 90-day order book, while the store attributed none of those orders to paid (N = 1). The blend is also an average that hides its parts. Two home brands I run report a combined 21x on Google Ads, but split by campaign type, Shopping earned 61x on 18% of the spend and Performance Max 12x on the other 82%. A blended number can be honest about the bank account and still say nothing about which campaign is buying new customers.

Even blended revenue overstates what the ads caused. On one 21-day geo holdout I ran for a home-furnishings brand, pausing paid media in one state cut revenue there by 38%, while attribution had called 92% of revenue paid-influenced (N = 1). Run a holdout before treating any ROAS, platform or blended, as incremental.

Branded-search overlap inflation

Clicks on searches for the store’s own name usually carry the highest ROAS in any account that buys them, and much of it isn’t incremental, because the organic listing would have delivered those buyers free. My default is to stay out of that auction. I add the store’s brand name and its misspellings as phrase negatives across the account, Performance Max included, and let the organic result take those searches. The one exception is a competitor’s ad holding the brand search above the organic result. Then a separate brand campaign is worth testing, kept out of every non-brand number, and the brand negatives move from the account level to a shared list applied to every non-brand campaign. Strip brand clicks out of a healthy-looking Google Ads account and the ROAS left over is often far lower, and that’s the number that matters for growth. Brand traffic flatters lead-gen accounts too. Meta retargeting works the same way. A 10x ROAS against existing site visitors recaptures demand the brand already paid to create.

New-customer ROAS is the metric that scales

Total ROAS includes returning buyers who would have purchased through email, organic, or direct. New-customer ROAS strips them out and predicts whether the account can grow. Whether a given new-customer ROAS is healthy depends on how much a first buyer is worth over the following year, so set the floor from your own LTV. A platform reporting 4x total ROAS against 0.8x new-customer ROAS is recapturing existing demand, and the growth ceiling is in sight. Chasing 4x new-customer ROAS on cold traffic shrinks that ceiling from the other direction, because targeting tightens until only existing-intent buyers convert. Loosen the target, accept first-purchase contribution near breakeven, and let LTV pay back acquisition cost across month two through month twelve.

The report is GA4 with a new_customer parameter on the purchase event, segmented by paid channel. Setup takes an afternoon. On one ecommerce store I manage, platform-reported ROAS looked healthy at the 4x target. Once the GA4 split was running, the new-customer cut sat closer to 2x. Total ROAS was the dashboard read. New-customer ROAS was the growth read.

Contribution margin after ad spend

The most honest number in the account. Revenue, minus cost of goods, minus ad spend, divided by revenue. Negative means the campaign is paying customers to take inventory.

Below zero is a stop-loss, and below zero on cold-traffic orders for more than 30 days with no LTV plan to recover the gap is the definition of bad ROI regardless of what Ads Manager says. Anything negative on first purchase needs a clear second-order or subscription pickup to be defensible. Pull the campaigns printing negative numbers, redistribute into the campaigns with the healthiest margin after ad spend, then think about scaling. It’s common to find a few campaigns silently losing money inside an account reporting a healthy blended ROAS.

Reading social spend against the same targets

Meta shows one number, Shopify another, TikTok a third that disagrees with both. Each measures a different slice of the same purchase, with different windows and different signal-loss adjustments stitched on after iOS 14.5. Six reads make social spend legible against the math above.

CPM. Pull CPM by ad set on a rolling 14-day window and read it against its own history, not a published average, because CPM depends heavily on the optimization event. In my Meta CPM benchmark, conversion-optimized ad sets paid a $20.35 pooled CPM against $2.88 for reach and impressions ad sets (N = 9 and N = 6). A sharp CPM rise on cold prospecting without a matching lift in ROAS calls for a creative refresh. More budget won’t fix it.

CPC and click-to-purchase rate. TikTok tends to run cheaper on impressions and expensive on commercially qualified clicks. Compare the paid-social click-to-purchase rate against your store’s own conversion rate for those pages. If paid clicks convert at a fraction of the store average, the offer-to-page match is broken, the page is slow, or the audience is wrong.

CPA against contribution margin. A $48 CPA on a $90 contribution margin is healthy. The same CPA on a $35 contribution margin is bleeding.

Attribution window. Meta defaults to 7-day-click plus 1-day-view, written 7DC/1DV. Read 7DC/1DV for directional health, 7-day-click when comparing against Shopify, 1-day-click when stress-testing. If 7DC/1DV looks strong but 1-day-click ROAS collapses below 1, the campaign is harvesting credit for purchases it didn’t cause.

Frequency. On cold prospecting, watch for frequency climbing while CTR falls and CPA inflates in step. That’s fatigue. Warm and retargeting audiences tolerate a higher frequency before the same thing happens.

CAPI deduplication. The one most founders skip, and it decides whether everything above is signal or noise. The browser pixel loses a meaningful share of conversion events post-iOS 14.5. The Conversions API fills the gap server-side, but every browser event must match a server event by event_id or Meta double-counts the purchase. Check deduplication in Events Manager. If browser and server events aren’t being deduplicated, reported ROAS is wrong. The tracking stack reference walks the event_id handshake, the fbp/fbc passthrough, and the match keys that lift Event Match Quality above 7.

A Meta-reported 4.2x against a Shopify-reported 1.9x is normal in a poorly tracked account. Meta claims purchases inside a 1-day-view window and Shopify doesn’t, so strip the view-through column to compare like-for-like. Shopify credits the last touch, often a session Meta legitimately introduced. And a dedup failure counts the same purchase twice. The fix lives in the tracking stack, not the bid strategy.

The indicators that move before ROAS does

Conversion rate against a vertical benchmark. Read against a benchmark, conversion rate tells you whether the leak sits upstream or downstream of the click. Use a benchmark with a stated sample, or your own trailing rate. For home-services Google Ads, the median click-to-lead rate across the accounts with clean tracking in my Q3 2026 home-services cost-per-lead benchmark was 10.3% (N = 9). Ecommerce purchase rates run far lower than lead rates, and furniture lower still because of the consideration cycle. Worry when relevant traffic, judged by the search-term report, converts at a fraction of that reference. Relevant traffic that won’t convert is a page problem. Irrelevant traffic is a match-type problem.

Impression share lost to budget. The share of auctions a campaign was eligible for but didn’t enter because the daily budget was spent. A large share lost to budget on a campaign already hitting target CPA or target ROAS is a campaign asking for more money. A small share on a campaign missing its targets means budget isn’t the constraint. The structure is.

CTR-to-CR ratio. A high CTR with a low CR means the ad promised something the page didn’t deliver. Watch for a strong CTR paired with a conversion rate well under your own trailing rate. Match the ad headline to the H1 of the page, then match the H1 to the query that triggered the ad.

Check what the conversion column counts before reading any rate off it. In my ecommerce tracking accuracy benchmark, two of three ecommerce accounts counted add-to-cart or begin-checkout events inside the metric their bidding optimized toward, and 19.8% to 25.8% of their reported conversion value was cart value rather than revenue. The column still read “Conv. value”. A conversion rate or ROAS built on that column runs high, and nothing in the interface says so.

Trend and cohort: the reads that need time

Single-month ROAS bounces. The signal is the rolling 90-day trend. Worry when blended ROAS slides across a rolling 90-day window while spend holds roughly constant. That gradient means acquisition cost is rising faster than the brand can absorb. Plot a 13-week rolling chart of blended ROAS next to spend and pull it monthly.

Read the fourth quarter against the full year, not against the volume it carries. On one ecommerce account I manage, purchase-only ROAS in Q4 came in under the full-year average both years I could measure: 14.1% under in 2024 and 10.5% under in 2025 (N = 1). The busiest quarter was the weakest return both times, so a Q4 target copied from the annual number sets the account up to overspend.

The second read is LTV-adjusted ROI. A 2x first-purchase ROAS that turns into 4x by month six is a great account. A 3x that stays at 3x for 12 months is an account with no second order, which means no business. The warning sign is 90-day or 180-day LTV-adjusted ROI flat or below first-purchase ROI. The report is a Klaviyo or Shopify cohort view of revenue per acquired customer at day 30, 60, 90, and 180, plotted against the channel they came in on. Paid channels producing flat cohorts get cut first, even when first-purchase ROAS beats channels with rising cohorts. A payback period longer than 90 days on a first-time buyer is the same failure read from the cash side.

Any single read on this page in the red is a yellow flag. Two or more at once is an account funding itself on working capital. Founders who hit four should request the free ads audit instead of spending another week tuning alone. I write it myself and send it back within 24 hours of read-only access.

What to target by growth stage

Smaller brands usually have to accept thinner headroom over breakeven to buy growth, and lower platform ROAS on cold traffic. As revenue grows, the target should rise above breakeven, with new-customer ROAS set from LTV and total ROAS allowed to climb as repeat purchase compounds. At the top end, guard hard against branded-search bundling and attribution inflation, because every point of inflated ROAS turns into real overspend at that size.

A good ROAS is the one that funds the business after every variable cost. Benchmark ranges set the floor for a category. Margin and LTV set it for a specific business. If what the platforms report sits well above your blended number, the free 25-page Setup Checklist covers the conversion settings that cause most of that inflation, and the wasted ad spend library covers the rest of the metrics that get misread in account reviews.

When to bring me in

Bring me in when cost per lead keeps rising and the fixes above haven’t moved it, when you can’t tell which campaigns produce booked work, or when the search terms report shows money going to searches you’d never pick.

I'm Conner Crowe, and I write every audit myself. Send the free audit request and add me as a read-only user, and within 24 hours of access you'll have a written read on where the spend leaks and what to fix first. No call needed, and nothing in your account or store changes.

Request a free Google Ads audit

See how I manage Google Ads accounts.

Tools for this diagnosis

All my free tools

Related questions

Back to the full wasted ad spend: the diagnosis library

Want this diagnosed in your account?

Same diagnosis,
run on your account.

Add me as a read-only user and I'll write the audit myself: where the spend leaks and what to fix first, 5 to 7 pages, back within 24 hours of access. No call needed. If you'd rather talk first, a call is open too.