← Blog
meta-adsalgorithmbudget

Meta Moved 6k of My Spend to a Worse Ad — Why the Algorithm Does This

When Meta shifts budget from a 2.6x ROAS ad to a 1.8x ad, it's not broken. It's starving. Here's what's actually happening.

Meta Moved 6k of My Spend to a Worse Ad — Why the Algorithm Does This

"Meta took 6k of my daily spend from a 2.6 ROAS ad and put it all into a 1.8 ROAS ad today."

This is one of the most common complaints in every Shopify and media buying community. It feels like Meta is sabotaging your campaigns. But the algorithm isn't broken — it's making decisions based on the data you're giving it. And that data is probably wrong.

Why Meta reallocates budget

Meta's delivery system optimises for one thing: conversions at the lowest cost within your constraints. When it moves budget from Campaign A to Campaign B, it's because its model predicts B will generate more conversions per pound.

The key word is "predicts." The model is only as good as its input data.

If Campaign A is actually your best performer but Meta can only see 40% of its conversions (low match rate), while Campaign B happens to have slightly better event matching (maybe 55%), Meta's model genuinely believes B is better. It's not being stupid — it's being logical with incomplete information.

The invisible data problem

Here's a simplified scenario:

Campaign A (reality): 50 conversions, £6,000 spend, true ROAS 2.6x Campaign A (what Meta sees): 22 conversions (44% match rate), reported ROAS 1.1x

Campaign B (reality): 30 conversions, £3,000 spend, true ROAS 1.8x Campaign B (what Meta sees): 18 conversions (60% match rate), reported ROAS 1.1x

Meta looks at this and thinks: "B converts at a similar rate but there's room to scale it. A is underperforming." So it shifts budget.

The cruel irony: Campaign A was your winner. But because its audience happens to include more Safari users, more iOS opt-outs, more ad blocker users — its conversions are disproportionately invisible. Meta kills it based on a measurement artefact.

This is a signal problem, not an algorithm problem

The advertisers who complain about Meta's budget allocation almost always have a tracking gap. When we look at stores where server-side tracking is running properly (match rates above 80%), the algorithm behaves predictably:

  • Budget flows to genuinely better-performing campaigns
  • ROAS reporting closely matches reality
  • Scaling decisions become obvious because the data is trustworthy

The algorithm hasn't changed. The data feeding it has degraded. Fix the data, and the algorithm starts working for you again.

What you can't control vs what you can

You can't control: Meta's delivery algorithm, CPM pricing, auction dynamics, or how many of your customers use Safari.

You can control: How much conversion data reaches Meta and how confident that data is.

Every conversion you send server-side with enriched customer data is a vote of confidence that tells Meta's algorithm: "This campaign works. This audience converts. Spend more here."

When 60% of those votes go missing because your pixel can't see them, the algorithm isn't broken — it's just listening to an incomplete story.

The practical fix

Stop trying to outsmart the algorithm. Manual budget caps, forced allocations, splitting campaigns to prevent reallocation — these are Band-Aids on a data problem.

Fix the signal instead:

  1. Implement server-side CAPI alongside your pixel. Every conversion fires twice — once from the browser, once from the server. Meta deduplicates automatically using event IDs.

  2. Enrich your events. Send hashed email, phone, customer data. The more parameters, the higher the match confidence.

  3. Check match rates per campaign. In Events Manager, compare EMQ scores across campaigns. If your "underperforming" campaigns happen to have lower match rates, you've found your problem.

  4. Wait. Once match rates improve, give the algorithm 3-5 days to recalibrate. It will start reallocating budget based on real performance, not measurement artefacts.

The next time Meta moves your budget somewhere you don't expect, check the data before blaming the machine. Nine times out of ten, the machine is doing exactly what you told it to — you just told it the wrong thing.


LiquidLift is free until your first attributed sale. Join the waitlist to get early access.

Free audit

Find out what your tracking is missing.

Join the waitlist and get a free Revenue Leak Audit — we'll analyse your store's tracking setup, attribution gaps, and signal loss.

Get my free audit →