Paid ads · playbook
Remarketing Playbook
What we do with the people who nearly bought. Built on the funnel as it stands today: new quiz live since 1 August, no lifetime sale running.
Pulls stamped 10 Aug 2026 UTC · Google Ads API v24 · Meta Marketing API v21.0 ·
GA4 property 177471782 · Stripe live
Revised 11 Aug 2026 (Aga's local date) after a full growth-fleet review.
§5 fixes 1 and 2 done and re-verified; fix 3 reframed — never a broken tag. Then six
specialists, the Skeptic and the Data Verification Officer BLOCKED the original plan:
every Meta figure was double-counted, the Meta window held 1.7% of the spend, the £98.67 kill
condition was unusable, the abandoner count included test traffic, and the landing page is live
with a retired price and a banned rating. Corrections are marked 🔴 in place.
Build status added 11 Aug 2026 evening UTC — Nic's first sitting, each claim
re-verified against Meta and Google live. See the block directly below.
Nic reported three things. Each was checked live — Meta Marketing API v21.0
(act_710789699289834 "TMA NEW", GBP) and Google Ads API v24
(customer 6909169207, GBP), pulled 11 Aug ~21:40 UTC.
🔴 Both accounts bill in GBP — figures below are £ and are not converted.
| Reported | Status | What the account actually shows |
|---|---|---|
| 6 remarketing audiences web visits 7/14/30D · app installs 7/14/30D, non-purchasers |
Not on the account yet | Matches his own wording — "started creating". Full pagination of all
212 custom audiences returns zero created on or after 1 Aug 2026
(newest: 3 Jul), and zero saved audiences. Nothing wrong; it is in progress.
🔑 Two minutes well spent before building: most of this ladder may already exist.
Live on the account since 3 Jul —
Users that Logged-In No Purchase 1D/7D/14D/30D/60D/90D,
Quiz Users→Paywall→Didn't Purchase (Control) and (V2-2),
App Opens Last 30D, App Open 180D, Purchase Last 730D,
180days - webhit, plus the 7-day/28-day web-event sets MOF used.
Duplicates fragment an audience that is already too small to exit learning phase at
£5/day — see JOB 1. |
Build NIC-97 — the one geo-locked lead line |
Live | New campaign QLG | ADV+ ON | MC | Variant 2 | Quiz Root — ACTIVE,
OUTCOME_LEADS, £9.62/day, created 11 Aug 20:19 UTC.
Destination read off the live creative's CTA link:
https://quiz.themovementathlete.com/ — the ROOT.
url_tags preserved. First spend £1.74 · 237 impressions.
Geo NL·CA·SE·GB·AU·FR·DE (+ the French/Dutch dependent territories Meta bundles
in); US rides the sibling QLG | ADV+ ON | US | Variant 2, also
ACTIVE at £9.62/day and also now pointed at the root. All 8 buyer countries covered
across two campaigns — the spec left the implementation call to Nic. |
| Pause MOF | Done | MOF - Lead Form PAUSED 11 Aug 20:14:17 UTC (it spent £7.15
earlier that day). This is JOB 3's Meta twin, and it is closed. |
| — (not reported; found in the check) | Open | 🟡 QLG | ADV+ OFF | MC | Control is still ACTIVE and still points at
quiz.themovementathlete.com/2026/. Three live ad sets
(£9.62 + £9.62 + £7.00/day = £26.24 of the account's £45.48 daily budget),
£20.69 spent on 11 Aug.
The budget moved exactly as NIC-97 specified — MOF's £9.62/day became the new line's £9.62/day, and the account total is £45.48/day before and after. (An earlier version of this block said Meta spend "went up". Withdrawn — the arithmetic is flat.) What the clone branch left open is narrower and still worth closing: MC Control was the campaign the row named for re-aiming, and it is untouched, so 58% of Meta's daily budget still lands on the offer-less page. This is JOB 0's problem in Meta form — paying to land people on a page we have already decided is the wrong one. ✅ RULED BY AGA, 11 Aug — Nic repoints it. "yes Nic needs to know about this — one Meta campaign is still sending people to the old quiz page instead of the new one that sells the $97." Two of our own dated notes had disagreed — 7 Aug recorded these ads as the deliberate A/B control arm, kept on purpose for cheap multi-country leads, with an explicit "nobody re-flags them later as a defect"; 10 Aug Aga ruled "RE-AIM into the ONE geo-locked lead line". The 10 Aug ruling stands; the 7 Aug note is OVERTAKEN and stamped as such on the cockpit page. What Nic does — 5 min: change the destination on the four live ads of QLG | ADV+ OFF | MC | Control from quiz.themovementathlete.com/2026/ to https://quiz.themovementathlete.com/ (the ROOT). Ads 120253084939360728, 120253084939340728 (US/CA ad set) and 120245527336080728, 120245527336070728 (AUS/FR/UK/NZ ad set). 🔴 Destination only — leave url_tags, budgets, geo and objective alone, and do not pause the campaign. Why: 129 leads/30d at £2.43, the cheapest lead source on the account, currently all landing on the page that does not sell. Zero cash change (£45.48/day account-wide before and after). NIC-106. |
Keyword surgery on Competitive Non-Branded | US(this is JOB 3) |
Done Read 13 Aug | Both halves of JOB 3 step 4 were executed, in one sitting on 11 Aug. Google's
change log — re-pulled once it caught up — stamps two blocks:
14:36:02, bid changes on 5 keywords in this campaign
(calisthenics bars, calisthenics equipment, calisthenics gear,
calisthenics kit, calisthenics bars for home) plus 2 on Branded; and
20:15:17–20:15:24, the 3 keywords still spending
(home calisthenics equipment, calisthenics home equipment,
home gym calisthenics) PAUSED. Six of 66 paused in total, counting the 7 Aug round.
🟡 JOB 3's step 5 — "report what you freed" — cannot be answered yet, and this block originally answered it wrongly. It said the surgery "didn't work", citing £9.11 spent on 11 Aug. The changes landed at 14:36 and 20:15, so almost all of that day's spend predates them. That is judging a change with data older than the change, and it is withdrawn. First clean day is 12 Aug; the read is 13 Aug. |
| — (what holds regardless of the timing) | Structural | Three facts that do not depend on last night: (1) 30-day totals £235.89 · 32 clicks · 0 conversions · 0 all-conversions, while both siblings converted in the same window (Competitors Branded £311.57 → 24, Non-Branded £241.33 → 6). (2) The 7 Aug round is readable — it had four clean days after it and spend simply continued (£7.61, £7.41, £6.22, £9.11). (3) All 60 still-enabled keywords are equipment phrases, behind 0 campaign negatives and 0 shared negative lists. |
🔴 And the correction JOB 3 needs — its keyword-level rule is right in general and wrong
in this campaign. JOB 3 says "work at keyword level, never campaign level; 59 of 66
keywords have never served, and zero impressions is untested, not failed." Here, every one
of the 60 still-enabled keywords is an equipment phrase — "buy calisthenics equipment",
"calisthenics bars for sale", "calisthenics machine", "calisthenics weighted vest". They are not 60
untested bets; they are 60 more tickets in the same lottery this campaign has now lost
£235.89 on. What the money actually bought, 1–11 Aug: backyard calisthenics
setup £9.94 · outdoor calisthenics gym £8.46 · calisthenics bar
£8.30 · wooden parallettes calisthenics £7.91 · parallettes £6.00 ·
gornation pull up bar £4.77 · pull up bar in wall £4.35 ·
dip bar for home £3.26. People shopping for hardware. We sell a
programme. And with 0 campaign-level negatives and 0 shared negative lists,
every pause simply promotes the next equipment phrase — which is precisely what four rounds of
surgery have produced.
So JOB 3 gets a step 6 — staged behind a read, not run now: add the hardware negatives at campaign level — bar · bars · parallettes · equipment · gear · machine · station · vest · kit · setup · buy · for sale · cheap — or pause this campaign and rebuild it on programme intent. 🔴 Do not run this before 13 Aug: two clean days belong to Nic's 11 Aug round, and writing negatives on top of it would make his change unreadable. 13 Aug decides — spend holding at ~£6–9/day on hardware search terms means the set-level fix is needed; a material, sustained drop means his round worked and this step stands down. The fleet holds the Google Ads OAuth credential and can write it by API on Aga's GO; it is live spend in Nic's account, so it ships only on her word.
Both open items are filed, so neither can rot here:
AGA-157 — the 2-minute GO/NO-GO on set-level negatives, staged behind the
13 Aug read of Nic's round, after which the fleet writes them and reports the freed figure ·
NIC-106 — 5 minutes in the Ads UI to pause or repoint MC Control.
NIC-97 is closed as delivered, with the live verification recorded on the row.
1The play, in one page
Two channels, two different jobs. Meta has a switched-off campaign that was making money and should be turned back on. Google needs a small, tiered abandoner ladder built on audiences that already exist. Neither is expensive. Both were blocked on one measurement fix — which landed on 11 August and now needs one verification pass (§5).
This playbook went through the growth fleet on 11 August. Its two headline numbers did not survive. Meta conversions were double-counted (one purchase, seven labels, two of them summed), and the Meta window showed 1.7% of what those campaigns actually spent. Cost per purchase is £67.48, not £2.41, and all five in-window sales were of a $297 lifetime offer that ended on 12 July.
The order of work changed as a result. The old JOB 1 — "switch on Meta this
week, it makes money now" — is demoted to a small, honestly-labelled experiment.
Fixing the landing page comes first: /start-training/ is live right
now showing the dead $297 lifetime price beside $497 and the
retired 4.9★ rating, and every button on it points at the old
/register/ checkout estate. That fix is cheap, certain, and helps every channel —
not just a £5/day ad test.
And the honest size of this whole playbook: roughly $200–400/month incremental, optimistically $700–1,400, against a $6,193/month gap. It is a margin lever worth running. It is not a growth plan and must not be counted as one.
1 · Don't rebuild what exists. The Google remarketing campaign, the cart-abandoner audience and the Meta retargeting campaigns are all already in the accounts. This is a re-point-and-switch-on job, not a build.
2 · Don't put a discount in front of anyone who hasn't refused full price. Discounting the whole funnel teaches it to wait for a sale.
3 · Don't scale on the "Conversions" column until you've checked it recomputed. Of 76 reported Google conversions in 1–9 Aug, 6 were sales. The demotions that fix this landed on 11 Aug — but the column had not caught up at the last pull. §5 has the check to run before you trust it.
The strategic read — remarketing is not the growth lever, it's the margin lever
Before the recommendation, the thing the account is actually doing. In the last nine days paid spend was £592.04 across both channels and produced 6 attributed sales — £98.67 a sale. But look at where the money sat:
| Where £592.04 went, 1–9 Aug | Spend | Sales | Verdict |
|---|---|---|---|
| Google — Branded, Non-Branded, PMax | £143.55 | 6 | Working |
| Google — Competitors Branded | £103.03 | 0 | 20 lead-forms, no sales |
| Google — Competitive Non-Branded | £83.67 | 0 | No conversions at all |
| Meta — all three live campaigns | £261.79 | 0 | 190 leads, no sales |
| Produced no attributed purchase | £448.49 | — | 75.8% of paid spend |
Three quarters of the paid budget bought leads, not customers. That is not an
accident and it is not a creative problem — it is what we instructed the platforms to do.
All three live Meta campaigns are OUTCOME_LEADS, and Google's account carries seven
biddable conversion goals of which four are not sales (§5). We asked both platforms for leads. They
delivered: 306 Meta leads and 72 Google lead-form submissions in nine days. They are good at it.
"No attributed purchase in this window" is not the same as worthless. Leads feed the email list and can convert weeks later, outside the attribution window. The honest claim is narrower and still damning: we cannot show that £448 of nine days' spend produced a sale, and we are not currently instructing it to try.
So what the paid fleet actually recommends
Do not add remarketing on top of an account that is buying the wrong thing. Change what we are buying first, then reallocate into remarketing from money we are already spending. Net new budget: zero.
| # | Move | Cost | Why it comes in this order |
|---|---|---|---|
| 1 | Point the account at sales, not leads — §5 Done 11 Aug | £0 | Everything below was unreadable until this landed. It changes what the bidding buys — the single highest-leverage change available, and it cost nothing but the time. Verification of the reported column is still outstanding. |
| 2 | Stop the two zero-sale Google campaigns at keyword level | frees ~£187/9d | Competitive Non-Branded has taken £83.67 for zero conversions of any kind. Cut at the keyword level, not the campaign — untested keywords aren't failed keywords. |
| 3 | Un-pause Meta retargeting — §4 | ~£5/day | The only paid activity in the account with evidence of producing sales cheaply. Already built, already Purchase-optimised. Highest confidence per pound of anything here. |
| 4 | Build the Google abandoner ladder — §3 | £12/day | Funded entirely by move 2. Works the 430 people a month who reach our checkout and don't pay — demand we have already bought and are currently letting go. |
The logic in one line: we are already paying to create high-intent demand and then dropping it. 146 people opened the checkout in nine days and 129 walked away. Remarketing is the cheapest way to go back for them — but only once the account stops rewarding itself for generating leads it never converts.
What we expect — with the assumptions visible
No forecast is possible from the platforms today, because purchase values aren't passing through correctly (§5). So here is the arithmetic instead, and you can judge the assumption:
| If the ladder recovers… | Extra sales/month | At $86.56 blended | Less all-in ad spend ($648) | Share of the $6,193 gap |
|---|---|---|---|---|
| 2% of abandoners | 7.1 | $618 | −$30 | Loses money |
| 3% | 10.7 | $927 | +$279 | 4.5% |
| 4% | 14.3 | $1,236 | +$588 | 9.5% |
| 6% | 21.4 | $1,854 | +$1,206 | 19.5% |
[MODELLED] — ~357 abandoners/month [ESTIMATE, 9-day base] × an assumed incremental recovery rate × $86.56, the blended amount quiz-rail buyers actually paid (n=15, 1–10 Aug, live Stripe). The recovery rate is pure assumption and nothing in our data supports a value. Gross, before ~3% Stripe fees and a 9.88% all-time refund rate.
1 · The price. The table first modelled $97, and a competing
estate claim said the real charge was $78.50. Both were wrong to use.
Live Stripe shows August quiz-rail sales at 13 × $97.00, 1 × $12.48, 1 × $24.98 — blended
$86.56. The $78.50 figure is real but belongs to the other estate
(a checkouts-v3 50off/12month subscription that expired incomplete) — a two-estate
conflation, which is exactly the error the checkout rule forbids.
2 · "The $97 annual price" is not an annual price. It is a one-time first
payment (coupon tma_quiz_97_once) against a $157/yr plan. Year two
renews at $157. Never call it the annual price.
3 · The currency was mixed. Spend was quoted in GBP and revenue in USD, so "breaks even at 2%" was wrong — it compared $618 of revenue against £360 without converting, and it counted only the Google ladder while ignoring Meta's £5/day. All-in spend is ~£510/mo ≈ $648. Restated in one currency, the ladder does not break even until roughly 2.6% recovery, and 2% now loses money.
The welcome arc DOES ask for the sale, at full price, on day ~10 —
email cid 4147 in 750 TMA | Welcome Sequence After Quiz, pointing at
checkouts-v3/trial/12month/. (Worth noting: the emails use the correct v3 checkout
while both landing pages still use legacy /register/.)
As drafted, rung 2 opens on day 8 with 50% off — two days before that ask. A paid channel would teach the discount before the free channel has finished asking full price. That is the margin harm, and it is avoidable at zero cost: run rung 2 on days 17–30 instead of 8–30. The build already requires custom recency windows, so 17–30 is the same work. Ad and email then carry the same offer at the same time — reinforcement, not contradiction.
Two exclusions are mandatory before either rung serves: the ever-paid
set (ever_paid_emails.json — 3,389 lifetime buyers have no Stripe record, so
a GA4 purchase-event exclusion cannot see them, and showing 50% off to someone who paid $497 is
member-facing harm), and email's 1-in-5 holdout bucket (a deterministic hash, so
it is computable and uploadable) — otherwise the ads destroy the estate's only running
incrementality experiment before its first read.
And the ads holdout cannot be read. Simulated on this plan's own design (n=64 control, n=366 treated) at its own assumed +3pp lift, it detects a real effect 9% of the time. Keep it running, but pre-register it as unreadable for ~6 months and judge on cost per sale ≤ £66.05 instead.
These people are already being emailed. The abandonment email machine works the same audience, so ads only add reach to the share who never open email, plus reinforcement for those who do. That makes the genuinely ads-incremental figure lower than the table suggests — which is exactly why the 15% holdout is not optional. Without it we will credit the ads with recoveries email produced, and scale on a number that isn't real.
Kill conditions — decided now, not later
- Meta retargeting: if 30 days at ~£5/day produces fewer than 3 purchases, it was a promo-period artefact and it goes back off.
- Google ladder: if after 30 days the touched group shows no measurable lift over the holdout, stop rung 2 first (it's the one costing margin) and keep rung 1 only if it is at least break-even.
- Either channel: cost per sale above £66.05. 🔴 Corrected 11 Aug —
this page first said £98.67 and that number could not carry a kill condition. It divided
BOTH channels' spend by only Google's sales (Meta made zero in that window), and one of the six
"sales" was the phantom £297 promo conversion. Depending on which denominator you pick it lands
anywhere between £23.93 and £118.41 — a threshold that would kill or spare the test arbitrarily.
£66.05 = Google's own spend ÷ its 5 real purchases, which is the only version
where the numerator and denominator describe the same thing. It is platform-claimed, not
Stripe-reconciled — only 2 of August's quiz-rail subscriptions carry a
gclidat all.
The two calls for Aga
| # | Decision | Fleet recommendation |
|---|---|---|
| 1 | Un-pause Meta retargeting against the current offer? | Yes — first, and this week. Already built, already Purchase-optimised, ~£5/day, with a 30-day kill condition. Highest confidence per pound in the account. |
| 2 | Build the Google abandoner ladder at £12/day? | Yes — §5's demotions landed 11 Aug, so this is unblocked once the Conversions column is confirmed recomputed. Funded by cutting the two zero-sale campaigns, not net-new budget. If you'd rather not touch those campaigns yet, this waits rather than expands the envelope. |
Neither raises the budget envelope. Your cap is roughly $3,175/month across both channels; combined spend for 1–9 Aug was £592.04 (Google £330.25 + Meta £261.79) [LIVE 10 Aug]. Anything that would raise the cap is Aga's decision, and nothing here needs it.
2Who we remarket to — four tiers, not just abandoners
Checkout abandoners are the hottest audience we have, but at ~14 a day they cannot feed a campaign on their own — Demand Gen starves at that volume and frequency burns out inside a week. So we tier by how far down the funnel someone got, and treat each tier differently.
The funnel as it actually is, 1–9 August
The quiz shows 4,029 landings in these nine days, but 3,086 of them are the YouTube link-checking crawler left over from the 869-video description retrofit. It lands, taps the first question, and gives one email address in nine days. Every figure below uses real humans = 943 landings. Any conversion rate computed on 4,029 is wrong by a factor of four. [LIVE 10 Aug · GA4, sessionSource=youtube]
The checkout converts at roughly 7.8% — about 9 real buyers of about 116 real arrivals, once the quiz_checkout_smoke test traffic (29 arrivals, 8 “successes”) is stripped. The page first published 11.6% (17 of 146) because that test traffic was counted. That is still a working checkout.
The constraint is how few people reach it, not what happens when they do.
[LIVE 10 Aug · GA4 pagePath /payments/quiz-checkout]
The four tiers, and what each one gets
| Tier | Who they are | 9 days | ~/month | What they get |
|---|---|---|---|---|
| T1 | Opened the checkout, didn't pay | 129 | ~430 | The ladder — full price first, 50% off only after they refuse |
| T2 | Gave email, never opened the checkout | 74 | ~247 | "Your plan is ready." No discount — email is already working them |
| T3 | Started the quiz, never gave an email | 222 | ~740 | Re-entry nudge, no offer. Finish-what-you-started |
| T4 | Landed, never answered question 1 | 501 | ~1,670 | Leave alone at this budget. Closest to cold — we'd be paying to re-acquire three-second bounces |
[LIVE 10 Aug · GA4 quiz-host screen events, crawler removed · monthly figures are the 9-day count × 30/9, so [MODELLED] and will move]
Tiers 2–4 have never seen a price and refused it. Showing them 50% off doesn't overcome an objection they haven't formed — it just lowers what we can charge everyone. The ladder exists so that the discount is a response to a refusal, not an opening bid.
What about the July list?
This changes what we target. The lifetime sale ran 2–12 July and is gone. The huge cart numbers from that period belong to it and to the remarketing campaign that ran alongside it — they are history, not inventory:
Cart activity fell about 95% when the sale ended.
[LIVE 10 Aug · GA4 add_to_cart totalUsers] The Cart abandoners
60D audience still holds 1,900 people, but most of them were captured during that sale and
age out of the 60-day window around 10 September. We can use the list — we just
can't offer them what they walked away from, and we shouldn't plan around its current size.
3Google — the abandoner ladder
What already exists (don't rebuild it)
| Asset | ID | State | Use |
|---|---|---|---|
Remarketing | 4th of July Promo | 23991976077 | PAUSED | Demand Gen, Maximize Conversions — copy it twice, don't rebuild |
Cart abandoners 60D | 9423059779 | OPEN 1,900 / 3,700 | The audience. Already exists |
Purchasers | 8482982777 | OPEN | Exclusion list |
All Converters | 9419522996 | OPEN | Second exclusion list |
Audience size is no longer a blocker. Google dropped the minimum to 100 active users across Search, Display and YouTube in December 2025 — it used to be 1,000 for Search and YouTube. At 1,900 Display / 3,700 Search this list qualifies everywhere.
The ladder
| Rung | Recency | Offer | Landing page |
|---|---|---|---|
| 1 | 0–7 days | Full price + 7-day free trial. No discount, no deadline | /start-training/ |
| 2 | 8–30 days | 50% off | /50promo/ |
[LIVE 10 Aug · both pages return HTTP 200]
The 50%-off checkout charges immediately — the discount replaces the free trial. No rung-2 asset may contain the words "free", "trial", "try free" or "7 days". That includes automatically-created assets and shared sitelinks. Turn automated assets off on the rung-2 campaign and don't share extensions between rungs — a "7-Day Free Trial" sitelink appearing on a rung-2 ad would misrepresent the offer to a buyer who is about to be charged.
Settings
| Setting | Rung 1 — trial | Rung 2 — 50% off |
|---|---|---|
| Daily budget | £7/day | £5/day |
| Bidding | Maximize Conversions | Maximize Conversions |
| Conversion goals | PURCHASE only — set at campaign level on both, regardless of the account default | |
| Frequency cap | 3/day, 10/week | 2/day, 7/week |
| Audience | Cart abandoners, 0–7d | Cart abandoners, 8–30d, excluding rung 1 |
| Exclusions | Purchasers + All Converters on both | |
Do not use Target ROAS. It needs roughly 30–50 valued conversions per 30 days to function and this lane will produce single digits. Revisit only if a campaign passes 30 purchases in 30 days.
Build two GA4 audiences with the right windows — Cart abandoners 7D and
Cart abandoners 30D — from the same event rules as the existing list, then exclude the
7D list from rung 2. Allow 24–48h for them to populate. If that hits a wall, run rung 1 alone for
14 days and add rung 2 after; cruder, but shippable.
The holdout — don't skip it
Hold back a random 15% of the audience from both campaigns. Without it we cannot separate recovered revenue from revenue that would have arrived anyway, and a meaningful share of abandoners return with no intervention at all. A ROAS number without a holdout is not evidence. If Demand Gen won't express the split cleanly, run two weeks on / two weeks off and compare.
Ad copy — paste-ready
Character counts are inclusive and inside Google's limits. Business name:
The Movement Athlete. No star glyphs in ad text (policy risk) — "Rated 4.8". Injury
wording stays generic, because Google's personalised-ads policy restricts health callouts in
remarketing.
Rung 1 · headlines (30)
- Your plan is already built 26
- Start at your exact level 25
- 7 days free, cancel anytime 27
- Joint-safe progressions 23
- Built with physiotherapists 27
Rung 2 · headlines (30)
- Your plan, now 50% off 22
- Half price. Full system. 24
- Start at 50% off 16
- 50% off, 60-day guarantee 25
- Same plan. Half the price. 26
Rung 1 · long headlines (90)
- Your personalised plan is ready. Start it with a 7-day free trial, full access. 79
- The assessment placed you at your exact level on every movement. The plan starts there. 87
- Micro-progressions build strength in small, joint-safe steps your body is ready for. 84
- Not sure you'll stick with it? The trial is free for 7 days and you can cancel anytime. 87
- Built with physiotherapists, gymnastics coaches and elite calisthenics coaches. 79
Rung 1 · descriptions (90)
- You've seen your result. The plan behind it adjusts to your level every single session. 87
- 7-day free trial, cancel anytime, 60-day money back guarantee. Try the plan properly. 85
- Harder variations, not more reps. Strength that builds without beating up your joints. 86
- 100,000+ athletes in 47 countries train this way. Rated 4.8. Your plan is waiting. 82
- Backed by the LEAD Sports Tech Accelerator (the Adidas family, ex-Red Bull executives). 87
Rung 2 · long headlines + descriptions (90) — no trial language
- The plan you built is still yours. It's now 50% off, with a 60-day money back guarantee. 88
- Your training plan at half price. Same assessment, same progressions, same guarantee. 85
- Still thinking it over? Fair. That's what the 60-day money back guarantee is for. 81
- Strength built in small, joint-safe steps. 100,000+ athletes, rated 4.8. Now half price. 88
- Join today at half price, protected by the 60-day money back guarantee. 71
- Half price, same system: 100,000+ athletes, 47 countries, rated 4.8. Cancel anytime. 84
Final URLs — keep the trailing slash, the redirect strips utm_*
without it, and never hardcode a _gl= token:
Rung 2 https://themovementathlete.com/50promo/?utm_source=google&utm_medium=cpc&utm_campaign=remarketing-ladder&utm_content=r2-50off
4Meta — turn the paused campaigns back on
This is the highest-value item in the document and it needs no build at all.
Over the last 30 days [LIVE 10 Aug · Meta Marketing API, unified attribution, 11 Jul – 9 Aug]:
| Campaign | Status | Spend | Purchases | Value | Cost/purchase |
|---|---|---|---|---|---|
| QLG | ADV+ OFF | MC | Control | ACTIVE | £284.68 | 0 | £0 | — |
| QLG | ADV+ ON | US | Variant 2 | ACTIVE | £147.03 | 2 | £37.50 | £73.52 |
| MOF - Lead Form | ACTIVE | £129.18 | 0 | £0 | — |
| Retargeting | July 4th 2026 Sale | WW | EXU | PAUSED | £12.23 | 2 | £444.68 | £6.12 |
| Retargeting | July 4th 2026 Sale | NA-EU-AU | PAUSED | £6.84 | 1 | £37.45 | £6.84 |
| Retargeting | July 4th 2026 Sale | WW | API | PAUSED | £5.07 | 2 | £222.53 | £2.54 |
| These three, in this window only | — | £24.14 | 5 | £704.66 | £4.83 |
| 🔴 ALL SEVEN retargeting campaigns, full life 1 Jul – 10 Aug | — | £1,417.04 | 21 | £3,373.32 | £67.48 |
| The three ACTIVE lead-gen campaigns | — | £560.89 | 1 | £18.74 | £560.89 |
1 · We double-counted every Meta conversion. Meta reports one purchase under
seven labels — purchase, omni_purchase,
offsite_conversion.fb_pixel_purchase, onsite_web_purchase and three more,
all with identical values. Our puller summed two of them. Every Meta count on this page was
exactly double. Real: 5 retargeting purchases, not 10 ·
6 account purchases in 30 days, not 12 · 190 leads in August, not
306. Fixed in remarketing_playbook_pull.py; the law is now "never sum Meta
action types — take exactly one."
2 · The window was cherry-picked, and this is the bigger error. The 11 Jul – 9 Aug window shows 3 of the 7 retargeting campaigns and £24 of £1,417 — 1.7% of what these campaigns actually spent — while keeping 5 of their 21 purchases. The four campaigns it drops (QUP, LLU Warm/Cold/Hot) spent £691.93 for 1 purchase. Honest lifetime cost per purchase: £67.48, not £2.41 — roughly 28× worse, and worse than Google's own £66.05.
[LIVE 10 Aug · Meta Marketing API v21.0, per-campaign, unified attribution, re-derived twice]
Five of the six Meta purchases in the last 30 days came from campaigns that are currently switched off — but read the next paragraph before drawing anything from that. In August the three active campaigns spent £261.79 and produced zero purchases (190 leads). [LIVE 10 Aug · Meta API, 1–9 Aug]
All five purchases landed on 11, 12 and 13 July — inside, or one day after, the 2–12 July $297 lifetime sale. In the 28 days from 13 July to 9 August these campaigns produced exactly one purchase, worth £0. So the sample is not "small but promising"; it is five sales of a $297 lifetime offer that no longer exists, on campaigns live for three days.
Two more things that were wrong here. The offer these campaigns learned on is gone — average sale value £222 and £111, consistent with the lifetime price, against roughly $87 today. And at £5/day across three campaigns Meta cannot exit the learning phase (it needs ~50 purchase events per ad set per week; the whole account managed 5 in three days during a sale). So this can only ever be a cheap read, never a revenue lever.
What still survives: the direction — warm audiences told to optimise for Purchase produced sales; cold audiences told to optimise for Lead produced leads and almost none. That asymmetry is real and is the only reason to run this at all.
This page first said "five exclusion audiences are applied and none of them excludes customers."
That is wrong. Reading targeting.excluded_custom_audiences live, the
ad sets DO exclude customers — lifetime_and_current_subscribers.csv,
Purchase Last 730D (a dynamic pixel audience, not a file) and the lifetime CSVs.
A first re-check looked at targeting.exclusions, found it empty, and concluded "zero
exclusions" — also wrong, and the same mistake in the other direction.
The real defect is staleness, not absence: those CSVs are dated July 2024 and September 2025. The job is to refresh the customer-match file, not to add an exclusion that is already there.
What to do, in order
- Re-point and un-pause the three retargeting campaigns. They are already
OUTCOME_SALESwithcustom_event_type: PURCHASEon warm audiences. Update creative and landing URLs to the current offer (the $297 lifetime is gone — send them to/start-training/), then switch on at a small budget. - Refresh the purchaser exclusion — it already exists. 🔴 Corrected 11 Aug:
the ad sets DO exclude customers (
lifetime_and_current_subscribers.csv,Purchase Last 730D, the lifetime CSVs). The defect is that those files are dated July 2024 and September 2025 — roughly a year stale. We are paying to advertise to people who already bought. - Leave cold prospecting on Lead for now. Cold Purchase optimisation needs
roughly £13,800/month to exit the learning phase — about four times the entire envelope. The
standard move is to step cold back to
InitiateCheckout(~£1,200/month, which fits) while retargeting stays on Purchase. That is a separate decision from this playbook; flag it, don't bundle it.
Why Meta and Google don't do the same job here. Meta's warm pool is far larger than Google's abandoner list — CRM-matched audiences run to roughly 75,000 addressable people. So Meta carries broad warm retargeting, and Google runs the tight, high-intent abandoner ladder. That split is why we don't need both channels chasing the same 430 people.
5The measurement fix — two done, one that was never broken
Fixes 1 and 2 are done. Every non-sale conversion action and all five stale
Lifetime $297 Promo actions are now Secondary — re-read straight off
the Google Ads API, not from the report of it. Fix 3 was never a broken tag: the
value pass-through was wired weeks ago, before the new checkout pages existed, which is
why older purchases carry no value. Detail below, and the one job that genuinely remains.
| The three fixes | Status | What is left |
|---|---|---|
| 1 · Demote the non-sale actions | Done | Confirm the Conversions column recomputes — see below |
| 2 · Retire the stale $297 promo actions | Done | They still record; watch the phantom value stops |
| 3 · Purchase value pass-through | Reframed | Not a tag fix — retire or repoint the old success pages |
What the account was doing — the before state
Google Ads reported 76 conversions for 1–9 August. Only 6 were sales:
| What the account counted | Count | Is it a sale? |
|---|---|---|
| Lead-form submissions | 72 | No |
| App sessions | 6 | No |
| App installs | 2 | No |
| Purchases | 6 | Yes |
[LIVE 10 Aug · Google Ads API, conversion_action_category, 1–9 Aug]
The cause was that ADD_TO_CART, BEGIN_CHECKOUT,
SUBMIT_LEAD_FORM and DOWNLOAD actions were all Primary, so every Smart
Bidding campaign was being told a lead is a conversion — and bought accordingly.
Done 1 · The non-sale actions are Secondary
All four are now primary_for_goal: false, so they keep reporting and stop driving
bids:
| Action | id | Category | Now |
|---|---|---|---|
The Movement Athlete (web) add_to_cart (1) | 7663404933 | ADD_TO_CART | Secondary |
The Movement Athlete (web) begin_checkout | 7663404939 | BEGIN_CHECKOUT | Secondary |
The Movement Athlete (web) generate_lead | 7677680120 | SUBMIT_LEAD_FORM | Secondary |
…Training (Android) installs | 7663380213 | DOWNLOAD | Secondary |
[LIVE 10 Aug 21:2x UTC · Google Ads API v24, conversion_action]
Not one enabled action outside the PURCHASE category is Primary any more. Every
remaining Primary action is a PURCHASE action. The few Primary lead actions still on the books are
all status: HIDDEN app-side actions, which do not fire on the web.
A lead action that did not exist when this playbook was written is now live:
Leads - July 2026 - Google Tag Manager (id 7692888223,
SUBMIT_LEAD_FORM). It took 39 of the 77 lead-form conversions in 1–10 August, so
it is the account's biggest lead source. It is already Secondary — this
is here so nobody promotes it later and quietly undoes fix 1.
As of this pull the Conversions column still counts 77 lead-forms as bid-counted for 1–10 August, even though every enabled lead action is Secondary. Google recomputes that column against current settings, and it lags a change by hours. The config is confirmed; the report is not yet. [LIVE 10 Aug 21:2x UTC]
Re-read it in 24 hours with the same command in §7. The check that matters:
metrics.conversions should fall to roughly the PURCHASE count while
metrics.all_conversions stays high. If it hasn't moved by then, the demotion did not
take the way we think it did — say so rather than assuming.
Done 2 · The five $297 promo actions are Secondary — and a correction
All five are now Secondary and still enabled, so the history is preserved:
7663033877 · 7663405149 · 7663412083 ·
7670450541 · 7670450544.
§5 originally said 7670450544 — the one carrying
always_use_default_value — was the action stamping £297 in August. It is
not. That action has fired zero times since the sale ended on 12 July.
The one actually doing it is
Lifetime $297 Promo - Purchase (Google Analytics event purchase),
id 7663033877. It carries a default_value of 297 without the
always-use flag — so it stamps £297 whenever the purchase event arrives with no value of its own.
That is the same root cause as fix 3, showing up as a wrong number instead of a missing one.
And it is worse than "one fired": since the sale ended it has recorded 4 conversions carrying £1,188 of value that does not exist — one on 1 August and three more on 10 August. That £1,188 is most of the £1,350 of purchase value the account reports for 1–10 August. [LIVE 10 Aug · per-action daily series]
Now that it is Secondary it no longer drives bidding — but it still records. Watch that the £297 stamps stop. If they don't, disable that action outright.
Reframed 3 · The value pass-through was never broken
"3 was actually already wired a few weeks ago, way before the new checkouts. So that's why some purchase counts don't have purchase value — until the deployment of those new pages was completed."
That is the right read, and the data agrees. Purchase | Nic - Built on July 2026 | All
Success Pages (7685639495) does pass value — when the page it fires on sends one:
| Date | Purchases | Value recorded |
|---|---|---|
| 19–22 Jul | 5 | £0.00 |
| 26 Jul | 2 | £37.50 |
| 1 Aug | 1 | £72.05 |
| 6 Aug | 4 | £0.00 |
| 10 Aug | 2 | £90.41 |
[LIVE 10 Aug · Google Ads API, conversion_action 7685639495, 1 Jul – 10 Aug]
The reason it is intermittent rather than simply off: the action fires on "All Success Pages", and there are five different ones live. GA4 records purchase events on all of these in the last month:
| Success page | Estate | Passes value? |
|---|---|---|
app…/payments/checkouts-v3/success | New checkouts | Yes — the new pages |
app…/payments/quiz-checkout/success | Quiz rail | Yes |
app…/payments/success | Older | Predates the wiring |
app…/payments/success_2026 | Older | Predates the wiring |
checkout.themovementathlete.com/success.html | Legacy host | Different host entirely |
[LIVE 10 Aug · GA4 purchase events by hostName + pagePath, 15 Jul – 10 Aug]
So the remaining job is not a tagging job. It is: get every buyer landing on a
success page that passes a value — by retiring the old ones, repointing them, or adding the value
push to whichever must stay. The legacy checkout.themovementathlete.com/success.html is
the clearest case, still taking real purchases on a host outside the new estate.
Lifetime $297 action has stamped £297 in that period · the
Conversions column matches the PURCHASE count. Until all three hold, Target ROAS stays
off everywhere — a ROAS target on £1,188 of invented value would bid straight into it.GA4 records purchase events on app-test.themovementathlete.com:
15 users in 1–9 August, against 12 on production.
[LIVE 10 Aug · GA4 hostName] These are almost certainly QA runs, not
real buyers — but they inflate any purchase count taken from GA4 without a host filter, and they
reach the production Meta pixel too. Whether any were real buyers is
[NOT KNOWABLE] from GA4; it needs a live-mode Stripe check
against those timestamps. Every purchase figure in this document excludes them.
Most of §5 was already found on 7 Aug and written into
NIC_EXECUTION_PACK_2026-08-07.md. This pull confirms it on a fresh window — it had been
running for another month before fixes 1 and 2 landed on 11 Aug.
6Your build order
Four jobs, in this order. Each one says what it is for, what happens if it is skipped, the exact steps, and how you know it worked. Job 1 is independent — you can ship it today without waiting for anything else.
This page originally opened with "switch on Meta — it makes money now and depends on nothing." The growth fleet killed that ordering. The evidence behind it was double-counted and window-cropped, and the page the ads would point at is carrying live defects.
New order: 0 fixes the destination — cheap, certain, and it helps every channel, not just a £5/day test. 2 makes everything measurable (mostly done — one 24h check left). 3 frees the budget that 4 spends. 1 is now a small experiment, not a revenue play, and runs last.
JOB 0Fix the page the ads point at — before spending anything Now first
Goal: stop sending anyone — paid, organic, email or YouTube — to a page that advertises a price we retired a month ago.
Why it jumped the queue: these are the only findings in this whole review that are confirmed live, cost almost nothing, and benefit every channel. They are also a hard precondition for JOB 1 meaning anything: a paid test into a broken page reads worse than the truth and teaches us nothing.
What is wrong, verified live 10 Aug
- 🔴 Two contradictory lifetime prices on the same page. One block reads "50% OFF LIFETIME $997 → $497"; further down, "Lifetime $997 $297 Never Pay Again." The $297 was the 2–12 July sale price and it is still on the page.
- 🔴 The rating renders 4.9★. The published figure is 4.8; 4.9 is retired and banned on every surface. It appears 12 times on this page.
- Every checkout button points at the old
/register/estate (register/monthly3/,yearly3/, …) rather than canonicalcheckouts-v3/. They return 200, so nothing is broken — but attribution and the hardened consent logic live in v3. - Hardcoded
_gl=/_ga=tokens in 15 button URLs — someone's stale session, baked into the HTML. Standing rule: never hardcode these. /50promo/shows lifetime at $498; the map says $497.- NIC-59 still open:
checkouts-v3/trial/checkout-1month/returns 404 whiletrial/1month/returns 200.
/start-training/ contains no "$297" and no "4.9" · buttons point at
checkouts-v3/ URLs taken from the checkout map · no _gl= or
_ga= token appears in any href · /50promo/ reads $497 ·
checkouts-v3/trial/checkout-1month/ no longer 404s. Re-fetch each with a cache-buster
and confirm — do not check from the editor.JOB 1Meta — a small experiment, run last Demoted 11 Aug ✅ Aga approved · NIC-99
NIC-99
Aga approved this for you on 11 Aug. It is the $97 warm retargeting
test: ONE campaign, OUTCOME_SALES, ~£5/day, warm audiences
only (site visitors 30d · quiz-starters · abandoners, payers excluded via the
ever-paid set), the $97 straight, pointed at the quiz root.
The steps below are the build; the two boxes above it are the honest expectations.
🔴 Sequence it AFTER the two 5-minute jobs — NIC-106 (repoint
MC Control to the quiz root) first, because it costs nothing and fixes where 129 leads/month
already land. This test spends new money to find out something we do not know; that one just
stops existing leads landing on the wrong page.
Goal: find out — cheaply — whether purchase-optimised warm retargeting can re-learn an offer it has never sold. Not to make money this month.
The claim rested on £2.41/sale. The honest figure is £67.48 across all seven retargeting campaigns over their full life — worse than Google's £66.05. The £2.41 was a double-count on a window holding 1.7% of the spend.
And all five of those sales were a $297 lifetime offer, on three days in July. In the 28 days since, these campaigns produced one purchase worth £0. At £5/day they can never exit Meta's learning phase. Run it as a read with a kill condition, and expect it to fail.
What it does not do: it doesn't touch the three live campaigns, doesn't change any objective (Meta objectives can't be edited after creation anyway), and doesn't need new creative built from scratch — the existing creative just needs its offer references removed.
Web visits 7/14/30D and app installs 7/14/30D, non-purchasers. None are on the
account yet (0 of 212 custom audiences created since 1 Aug) — so this is the moment to
say it: check what already exists first. Since 3 Jul the account has carried
Users that Logged-In No Purchase 1D/7D/14D/30D/60D/90D,
Quiz Users→Paywall→Didn't Purchase (Control) and (V2-2),
App Opens Last 30D, App Open 180D and 180days - webhit.
🔴 And the arithmetic that should shape the ladder: at ~£5/day total, six separate cohorts get well under £1/day each. Meta needs roughly 50 optimisation events per ad set per week to leave learning phase — six thin, overlapping audiences will each fail that, and the overlap makes them bid against each other. Two tiers (7D and 30D, non-purchaser, web and app pooled) is the version of this that can actually learn at the budget the kill condition allows. The six-way split is worth building only when there is real budget behind it — which is the ~15 Nov Black Friday window, not the £5/day read.
Steps
- Open each campaign and check every ad's destination URL. They point at the
July $297 lifetime cart, which is retired. Repoint all of them to
https://themovementathlete.com/start-training/?utm_source=facebook&utm_medium=paid&utm_campaign=remarketing-warm&utm_content=<campaign-suffix>— keep the trailing slash, the redirect stripsutm_*without it. - Strip the sale from the creative. Any headline, primary text or image referencing "4th of July", "$297" or "lifetime" is now false. Swap to the current offer. If a creative can't be salvaged, pause that ad rather than run a wrong price.
- 🔴 Refresh the purchaser exclusion — do not "add" one, it is already there.
This page originally said no exclusion targeted customers; reading
targeting.excluded_custom_audienceslive shows it does —lifetime_and_current_subscribers.csv,Purchase Last 730D(dynamic) and the lifetime CSVs. The real problem is age: those CSVs are dated July 2024 and September 2025, so anyone who subscribed since is unprotected. Upload a fresh customer-match file from Stripe + the ever-paid set before switching on. 🔴 Useever_paid_emails.json, not a Stripe-only export — lifetime is a one-time CHARGE, and 3,389 lifetime buyers have no Stripe subscription record at all. - Set the budget to about £5/day total across the three (roughly £1.70 each, or consolidate into whichever performed best). Do not scale on day one.
- Leave the objective and optimisation event alone. They are already
OUTCOME_SALESwithcustom_event_type: PURCHASE. That is correct and it is the reason they work. - Switch on.
~30 min implementation + 20 min validation.
Kill condition, agreed up front: if 30 days at ~£5/day produces fewer than 3 purchases, it was a promo-period artefact — switch them back off and say so.
JOB 2Google — make "Conversions" mean sales Mostly done
Goal: stop the account instructing Smart Bidding to buy lead-forms, and make the reported conversion number something we can act on.
Aga demoted all four non-sale actions and all five stale
Lifetime $297 Promo actions to Secondary. Verified live against the Google Ads API —
see §5. Steps 1 and 2 below are closed. What remains is the verification pass
and the success-page work, which is a page job, not a Google Ads job.
Why it mattered: of 76 reported conversions in 1–9 August, 6 were sales. The other 70 were lead-forms, app sessions and installs, all biddable — so every Smart Bidding campaign, PMax included, was told a lead is a win and bought accordingly.
Expect the number to fall hard, and that is the point. Reported conversions should drop by roughly 90%. Nothing will have got worse — the number will have become honest. Post in Slack so nobody reads the drop as a collapse.
Steps
Demote the four non-sale actions to SecondaryDone 11 Aug —add_to_cart7663404933 ·begin_checkout7663404939 ·generate_lead7677680120 · Android installs 7663380213.Retire the five staleDone 11 Aug — all five Secondary, none deleted, history kept. Correction to what this said before: the action stamping £297 isLifetime $297 Promoactions.7663033877, not7670450544, and it has now done so 4 times for £1,188 — three of them on 10 August. §5 has the detail.- Verify the Conversions column actually recomputed. As of the 10 Aug pull it
still counted 77 lead-forms as bid-counted despite every lead action being Secondary — Google's
recompute lags the change. Re-run the §7 command after 24h and confirm
metrics.conversionshas fallen to roughly the PURCHASE count. If it hasn't moved, say so — don't assume it worked. - Get every buyer onto a success page that passes a value. This is the real
remaining work, and it is not a broken tag — the value push was wired weeks ago, ahead
of the new checkout pages. Purchases still completing on
/payments/success,/payments/success_2026and legacycheckout.themovementathlete.com/success.htmlrecord £0 because those pages predate it. Retire them, repoint them, or add the value push to whichever must stay. - Leave
Leads - July 2026 - Google Tag Manager(7692888223) Secondary. It is the account's biggest lead source — 39 of 77 lead-forms in 1–10 August — and it is already set correctly. Named here so it doesn't get promoted later and undo step 1. - Rename
Purchase (July 2026)to something that won't confuse whoever reads this in October.
~20 min remaining verification, plus the success-page work.
Lifetime $297 action has stamped £297 for seven days · you've posted the
before/after conversion count in Slack so the drop is on the record.JOB 3Google — stop the spend that isn't buying sales Executed 11 Aug Read 13 Aug
Nic ran this on 11 Aug and did both halves of step 4 — 5 keywords bid down at 14:36, the 3 remaining spenders paused at 20:15. Step 5's freed figure is not knowable until 13 Aug: the changes landed part-way through the day, so 11 Aug's spend mostly predates them.
Step 6, added 11 Aug — go up one level, but only after the read. Every
remaining enabled keyword in Competitive Non-Branded | US is an equipment phrase,
and the campaign carries zero negatives and zero shared negative lists, so the
structural expectation is that spend leaks to the next equipment phrase — which is what the
7 Aug round did over its four clean days. Nic's round is the fair test of
that, so do not write negatives on top of it before 13 Aug.
One correction that holds either way: the "zero impressions is untested, not failed" rule below is right for Competitors Branded. It does not transfer here, where the untested keywords are the same equipment-intent class this campaign has already spent £235.89 on for zero conversions.
Goal: free roughly £187 per nine days — about £620/month — from two campaigns producing no sales, and use it to fund Job 4. This is what makes the ladder cost nothing.
The evidence: in 1–9 August, Quiz Funnel | Competitors Branded | US
spent £103.03 for 20 conversions, all of them lead-forms, zero sales;
Quiz Funnel | Competitive Non-Branded | US spent £83.67 for
zero conversions of any kind — 16 clicks at £5.23 each. Neither has produced a
purchase in the 25 days we measured either.
Work at keyword level, not campaign level. Last time this came up, £204 of £207 sat on three equipment-shopper keywords while 59 of 66 keywords had never received a single impression. Pausing the campaign would have thrown away 59 untested bets. Zero impressions is untested, not failed. Only spend-with-no-return is a loser.
Steps
- Pull the keyword-level report for both campaigns over the last 30 days.
- Split the keywords into three piles: spent-with-no-sale · spent-with-sales · never-served (zero impressions).
- Read the intent of the spenders. Anything shopping for equipment — bars, rings, gear — will never buy an app subscription at any bid. That is a targeting mistake, not a landing-page or budget problem.
- Bid the no-sale spenders down to ~£0.10–0.20, or pause them individually. Leave the never-served keywords alone so they get their chance.
- Report what you freed — we need the figure to size Job 4 honestly.
~40 min implementation + 20 min validation.
JOB 4Google — build the two-rung abandoner ladder
Goal: go back for the people who reach our checkout and don't pay — 129 of them in the last nine days, about 430 a month — with full price first and a discount only after they've refused it.
Why it's worth doing: these people are the most expensive traffic we buy. They finished a 20-question quiz, saw their result, chose a plan and opened a checkout. The checkout itself converts at roughly 7.8%, so the problem isn't the page — it's that we let the other ~92% go. This is the cheapest way to go back for them.
Do not start this until Job 2 is confirmed. Without purchase-only bidding the campaigns would optimise toward carts and we'd have no way to read whether they worked.
Steps
- Build two GA4 audiences with the right recency windows —
Cart abandoners 7DandCart abandoners 30D— using the same event rules as the existingCart abandoners 60D(id 9423059779). Allow 24–48h to populate before going live. The 60-day list can't express "0–7 days" on its own, which is why these are needed. - Copy
Remarketing | 4th of July Promo(id 23991976077) twice and rename toRemarketing | Quiz Abandon | R1 Trialand… | R2 50off. It is already Demand Gen with Maximize Conversions — both correct. Set the budget explicitly (£7/day and £5/day); the inherited £3/day field is not what ran in July. - Set campaign conversion goals to PURCHASE only on both — belt and braces on top of Job 2, so these bid to sales regardless of what the account default does later.
- Attach audiences. R1 targets the 7-day list; R2 targets the 30-day list
excluding the 7-day list, so nobody sees both offers. Exclude
Purchasers(8482982777) andAll Converters(9419522996) from both. One audience per ad group — the July campaign put nine audiences in one ad group called "Mixed Audience", including Purchasers, which is why nothing about it could be read afterwards. - Load the ad copy from §3 and the two final URLs, trailing slashes intact. 🔴 Turn automated assets OFF on R2 and don't share sitelinks or callouts between the two campaigns — a "7-Day Free Trial" asset appearing on the 50%-off ad would promise a trial to someone who is about to be charged immediately.
- Set frequency caps — R1 3/day and 10/week, R2 2/day and 7/week. The audience is small; over-serving it is the main way this fails.
- Hold back a random 15% of the audience from both campaigns. Without a holdout we cannot separate recovered sales from sales that would have happened anyway, and these people are already receiving abandonment emails. If Demand Gen won't express the split cleanly, run two weeks on / two weeks off instead and tell us which weeks were which.
~1h30 implementation + 55 min validation, plus 24–48h for audiences to populate.
Purchasers excluded on both · one
audience per ad group · the holdout is in place and documented.
Screenshot those checks into Slack — that's the record we read the 30-day result against.
JOB 5Google + Apple — three ads jobs added 12 Aug New
Added on Aga's instruction, 12 Aug: "approve it but put it in the retargeting doc." All three were measured live against the Google Ads, Meta and Apple Search Ads APIs on 12 Aug. The governing list is §19 of the growth review (quiz-funnel-versions); this block is a working copy for the ads lane, and if the two ever disagree, §19 wins. Full working for all three is in §PA.11.
5a · NIC-108 — stop PMax buying placements that have never converted
Quiz Funnel | PMax | US | Sales OBJ is the only live campaign breaching the settled
"Category Search only — no Demand Gen, no YouTube" ruling, and the breach is measurable.
Last 30 days by network: Display £28.37 (39,067 impressions, 210 clicks, 0
conversions) · Search Partners £28.17 (48 clicks, 0 conv) · YouTube
£3.28 (17 clicks, 0 conv) · Discover £1.03 (5 clicks, 0 conv). That is
£60.85 — 40% of the campaign's £150.32 — buying nothing.
Its Search arm took £93.07 and returned 78 conversions at £0.53/click, the lowest cost-per-conversion in the account. Keep the Search delivery, stop the rest.
PMax gives no clean channel toggle, so pick one and tell us which: (1) account-level Excluded Placements + Content Suitability to cut Display/YouTube inventory; (2) campaign-level negative keywords + turn off Final URL expansion; or (3) the clean structural answer — retire PMax and move its £5/day into a standard Search campaign, which is what the ruling actually asks for.
Two caveats that travel with it: 86% of this account's "conversions" are not sales — 30d it booked 105 leads + 4 add-to-cart + 4 Android installs against just 18 purchases — so PMax's 78 are leads; and PMax self-attributes generously (78 conversions from 174 clicks is a 45% rate), so treat its Search figure as directional.
5b · NIC-110 — cut Competitors Branded to £5/day, put the £5 into PMax
After 5a (moving budget into PMax before its placement leak is fixed just enlarges the leak) and after 13 Aug (JOB 3's read lands then, and two simultaneous Google changes make the account-level read unusable).
It bids on rivals' brand names, mostly "betterme". It is the biggest line in the account — £314.77/30d, 32% of all Google spend, running at its £10/day cap, returning 24 conversions at £1.58/click. The problem is cost per output: £13.12 per conversion against PMax Search £1.19, Branded £1.74, and Meta's cheapest lead line £2.43 — third of five Google lines, better than Non-Branded (£40.07) and Competitive Non-Branded (no conversions at all), but 7.5× worse than the two that work. All three Stripe-verified Google sales in the 1–10 Aug audit came from Branded; none from this line.
Why a cut and not a pause: competitor-brand search is real in-market intent — someone searching "betterme alternative" is shopping — which a cold lead-form fill is not, so the two lead types are not interchangeable at any price. Why PMax gets the £5 and Branded does not: Branded spent £40.00 in 30 days against a £6/day cap, so it is volume-bound, not budget-bound — money moved there will not spend. PMax is the only line actually at its cap.
The change: set Competitors Branded to £5.00/day and PMax
to £10.00/day. Nothing else — leave keywords, bidding, geo and objective exactly as they are.
If there is a reason to hold £10/day that these numbers cannot see, say so and it stands.
5c · NIC-109 — name the report behind the Apple Search Ads revenue figure
A figure in circulation reads $404 spent across June and July → $2,277 revenue → 5.6× ROAS. The spend side reconciles — Apple's own billing is $377.32 for 1 Jun–31 Jul and $408.24 for 12 Jun–12 Aug. The revenue side does not: AppsFlyer credits Apple Search Ads with $1,098.82 from 6 buyers over the same window, roughly half.
Most likely benign: Apple's own dashboard attributes on Apple's window, which counts view-through installs — 165 tap-installs against 305 view-installs over 12 Jun–12 Aug, and a view-inclusive basis roughly doubling credited revenue is exactly this gap's shape. If that is what it is, both numbers are right and only the basis label is missing.
The ask: name the source report and its exact date range (Apple Search Ads dashboard? AppsFlyer? RevenueCat? App Store Connect?) and whether its attribution setting includes view-through.
Nothing to change in the account either way — separately measured, 100% of the attributed revenue in that window came from our own brand campaigns, while the 61% of spend that went to competitor and generic terms ($230.45) returned 15 installs, zero buyers and $0.00. Those five campaigns are already paused.
Total time, and what it depends on
| Job | Build | Validate | Blocked by |
|---|---|---|---|
| 1 · Meta un-pause | 30 min | 20 min | Nothing — ship today |
| 2 · Google measurement fix | 45 min | 30 min | Nothing (+24h to confirm on a live sale) |
| 3 · Cut the zero-sale keywords | 40 min | 20 min | Nothing |
| 4 · Build the ladder | 1h30 | 55 min | Job 2 confirmed · 24–48h audience populate |
| Total | 3h25 | 2h05 | ~5h30, spread over three days |
The validation column is your time checking what we've written against the real accounts, correcting it, and testing after it's live — not an afterthought. If any step here doesn't match what you actually see in the account, stop and say so rather than working around it; a step that's wrong on screen usually means we've misread something upstream.
7Every number, and how to re-derive it
Everything in this document regenerates with one read-only command:
It writes tools/analytics/data_remarketing_playbook.json. It issues SELECT and GET
calls only — it never changes a campaign, budget, bid, audience or conversion action.
| Figure | Window | Source |
|---|---|---|
| ~107 real abandoners · ~12/day · ~7.8% checkout conversion (smoke traffic stripped) | 1–9 Aug | GA4 pagePath /payments/quiz-checkout |
| Quiz funnel 943 → 442 → 220 → 167 | 1–9 Aug | GA4 quiz-host unifiedScreenName, crawler subtracted |
| 3,086 crawler landings | 1–9 Aug | GA4 sessionSource=youtube |
| Google £330.25 · 209 clicks · 76 conv · 6 purchases | 1–9 Aug | Google Ads campaign + conversion_action_category |
| Meta: all 7 retargeting campaigns £1,417.04 → 21 purchases (£67.48 each) | 1 Jul – 10 Aug | Meta /insights, unified attribution, ONE action type — see the never-sum note below |
| Meta £261.79 → 0 purchases · 190 leads | 1–9 Aug | Meta /insights |
| Cart collapse 3,521 → 165 → 14 | promo / after / now | GA4 add_to_cart totalUsers |
| Conversion-action Primary/Secondary state · the £1,188 of $297 stamps | current config · 13 Jul – 10 Aug | Google Ads conversion_action + per-action daily
segments.conversion_action |
| Five live success pages · which pass value | 15 Jul – 10 Aug | GA4 purchase by hostName + pagePath |
| Audience sizes | current | Google Ads user_list |
Rules this pull obeys
- GA4 is always host-filtered;
totalUsers, nevereventCount, for funnel steps;dimension_filter, never a top-N ordering (ordering plus a limit silently truncates and has produced confident wrong answers here before). - Google Ads
conversions(bid-counted) andall_conversions(includes engaged-view) are different columns. Both are carried and they are never summed. - The YouTube crawler is reported separately and subtracted, never silently folded in.
app-testpurchases are excluded from every purchase count and reported on their own.- Meta uses explicit
time_rangewith unified attribution —date_presetexcludes today and has caused a real reporting discrepancy before. - 🔴 NEVER SUM META ACTION TYPES. Meta reports one conversion under seven
labels —
purchase,omni_purchase,offsite_conversion.fb_pixel_purchase,onsite_web_purchase,onsite_web_app_purchase,web_in_store_purchase,web_app_in_store_purchase— with identical counts and values. Take exactly ONE.leadis the aggregate andoffsite_conversion.fb_pixel_leadis a SUBSET of it. Summing two of them is what published £2.41 and 306 leads on this page. - 🔴 Quote the campaign's whole life, not the window that flatters it. The 11 Jul – 9 Aug window held 1.7% of retargeting spend and 3 of 7 campaigns.
- GA4 checkout counts strip
quiz_checkout_smokeandtestsources as well as the YouTube crawler — the smoke test alone was 29 arrivals and 8 "successes".
The "~580 add-to-cart, ~505 begin-checkout, ~$128k, $220 average" you posted is the
2–12 July window — the lifetime sale — and matches to four figures:
576 / 505 / $127,629 / $221.58. Essentially all of it (1,081 of 1,085) is credited to the
Remarketing | 4th of July Promo campaign, and the $220 average is the $297 lifetime
price. It reads the all_conversions column; the conversions column for
that campaign is 0. Both are correct — they measure different things.
Read fairly, that campaign worked: 576 carts off £188.19 of spend is a good result. What we cannot say is whether those carts became money — Google recorded no PURCHASE-category conversions at all in that window, so it is [NOT KNOWABLE].
Cannot be verified from here
- Whether the July remarketing produced revenue. Purchase tracking was not capturing during the sale. Only a Stripe reconciliation against that window would settle it.
- Whether the
app-testpurchase events involved real money. Needs a live-mode Stripe check on those timestamps. - Meta pixel deduplication. The pixel stats endpoint reports received events and cannot cross-filter dedupe status, so server-vs-browser counts are consistent with dedupe working but do not prove it.
- Forecast revenue for the ladder. At ~357 abandoners/month [ESTIMATE], with purchase values still only passing from some success pages, any figure would be invented. It becomes measurable once every buyer lands on a value-passing success page (§5 fix 3) and the holdout has run 30 days.
Related: EXPERT_PROMPTS/GROWTH/PAID_ADS_RECOMMENDATION_DOCTRINE.md
(operator-level rule) · docs/company/ANALYTICS/ABANDONMENT_STRATEGY_2026-08-07.md
(the email side of the same people) ·
docs/company/ANALYTICS/NIC_EXECUTION_PACK_2026-08-07.md (the 7 Aug Meta and Google
reads) · docs/company/ANALYTICS/CHECKOUTS_V3_URL_MAP_AND_USE_CASES_2026-08-04.md
(checkout URL law).
Supersedes marketing/campaigns/paid-ads/GOOGLE_REMARKETING_LADDER_BRIEF_2026-08-10.md
(markdown, Google-only, written before the August pull).