Why your ROAS dropped this week, and what to check first

A campaign that worked for a month suddenly does not. Here are the seven causes worth checking, in the order that finds the answer fastest.

Nothing changed, and the numbers fell anyway. This is the single most common message a Shopify merchant sends about Meta ads, and it almost always has a findable cause.

The trick is the order you look. Most people start by rebuilding the campaign, which is the most expensive possible first move. Here is a sequence that finds the answer in about fifteen minutes.

0. Check that the drop is real

Before anything else, rule out the two ways a drop can be an artefact rather than an event.

The window is too short. A three-day dip on an ad set doing 15 purchases a week is well inside normal variance. Compare seven days to the previous seven, not yesterday to the day before.

Attribution is still filling in. Conversions attributed on a 7-day click window keep arriving for a week. The last two or three days of any report are systematically understated, and they look exactly like a decline. Re-read the same period in three days before reacting.

If the drop survives both checks, it is real. Now work through the list.

1. Frequency and creative fatigue

The most common real cause, and the easiest to confirm.

Look for the signature: frequency rising, CTR falling, CPM rising, all over the same two weeks. That combination is fatigue and nothing else. The audience has seen the ad enough times that the responsive part of it has already responded.

The fix is new creative, not a budget change and not a new audience. A different angle on the same product to the same audience usually recovers most of the loss — and it is cheaper than rebuilding targeting you already know works.

2. Something in the account actually did change

“Nothing changed” is usually wrong in a small way that matters:

  • A budget increase in the last week — even a modest one — can have reset the learning phase.
  • A new ad added to an existing ad set restarts delivery optimisation for that set.
  • An ad was rejected and is no longer delivering, so the remaining ads carry the whole budget.
  • Someone edited the audience, the placements or the optimisation event.

Ads Manager keeps an edit history per campaign. Open it before you theorise.

3. Auction pressure

Your CPM is a price set by other advertisers, and it moves for reasons that have nothing to do with you.

Black Friday, Christmas, a national holiday, a big competitor launching — all of them raise what you pay for the same impression. A CPM up 30% or more with CTR flat points here: your creative is working as well as it did, you are simply paying more for each viewer.

There is no clever fix. You either accept a lower ROAS for the window, or you reduce spend and wait it out. What you should not do is rebuild a campaign that was never broken.

4. The problem is downstream of the ad

Sometimes the ads are fine and the store changed.

Check, in this order: is the product still in stock? Did a price or shipping cost change? Is the landing page loading normally, on mobile, from the country you are targeting? Did a theme update break something in checkout?

The diagnostic is the funnel shape. CTR normal, add-to-cart normal, purchases down is a checkout problem. CTR normal, add-to-cart down is a product page or price problem. Neither is fixed inside Ads Manager.

5. Audience overlap you created yourself

If you launched a second campaign recently, your two campaigns may now be bidding against each other in the same auction. Meta deduplicates within an ad set, not across campaigns.

The symptom is a CPM rise confined to your own account while performance elsewhere looks normal. The fix is exclusions: keep your retargeting pool out of your prospecting sets, and your purchasers out of both.

6. Seasonality in your own category

Some drops are simply the calendar. Demand for your product is not constant across the year, and a mid-January decline for a gift-heavy catalogue is not a campaign failure.

The check is your Shopify data, not Meta’s: if organic and direct revenue fell by a similar proportion in the same week, the ads are not the cause.

7. Real audience exhaustion

The last one, and the only structural one. If you have scaled the same ad set steadily for weeks, at some point you have reached everyone in that audience who was going to respond at an acceptable price.

The signature is a slow, monotonic decline rather than a sudden drop, with frequency high and stable. The answer here is horizontal: a new interest cluster, a lookalike from purchasers, a new market, a genuinely different creative angle. This is the point where scaling has to change shape rather than continue.

The order matters

Run the list top to bottom and stop at the first cause that fits. Roughly two thirds of real drops are cause 1 or cause 2, both of which take a minute to check and neither of which requires you to touch the campaign structure.

The expensive habit is inverting the order: rebuilding targeting first, which throws away a working audience and restarts learning, in response to a problem that was a rejected ad or a tired image. Read the numbers in the order that makes them diagnostic rather than decorative.


AdPilot’s optimizer reads your export against the previous period and names the pattern — fatigue, auction pressure, funnel break or exhaustion — so you start at the right cause instead of rebuilding a campaign that was not broken.

Plan your next Meta campaign in a minute

Install AdPilot from the Shopify App Store and generate your first campaign today. The free plan needs no credit card.