How to read this. This is an interrupted time-series, not a controlled test — regimes
overlap and revenue/PM% are moved by many things besides Meta (Google, price, promos, seasonality).
Each changepoint compares the 28 days before vs after, matched on day-type and
headlined on Non sale — weekdays so the sale calendar can't fake a result. The charts mirror your
Baseline Trends report — monthly median by day-type — with the regimes shaded over them; the dated
before/after below does the precise measurement. Meta ROAS is 7-day-click attributed (matching the later regimes' triggers); PM% is
blended (Google+Meta ÷ revenue) — lower PM% = more media-efficient. Dates marked ★ in the
sheet were approximate and resolved by assumption.
Meta API note: HTTP 400: {"error":{"message":"Error validating access token: The session has been invalidated because the user changed their password or Facebook has changed the session for security reasons.","type":"OAuthExc — ROAS/spend may be partial.
Baseline with optimisation regimes overlaid
Median daily revenue by day-type, per month
Median blended PM% by day-type, per month
Median Meta ROAS (7d click) by day-type, per month
Regimes (shaded):
Baseline: single ASC + GA4
+ Bounce-rate kill-signal
New Adv+ Shopping + CPES
Bounce-rate only
Bounce gate + ROAS
Platform 7d-click ROAS
Creative-quality cull
4-product attribution split
Before / after each changepoint
How to read these (in plain English)
Every time the team changed the Meta setup, the question is: did results shift
because of the change,
or would they have moved anyway with the season? For each change:
- Mark the switch date — the day the setup changed.
- Look 28 days before vs 28 days after that date.
- Compare every day-type to its own kind — non-sale weekday vs non-sale weekday, non-sale weekend
vs non-sale weekend, sale weekday vs sale weekday, and so on. A quiet Tuesday is only ever compared to
another quiet Tuesday, so the sale calendar can't fake a result.
- Use the typical day (the median), not the average, so one freak day can't skew it.
Each row shows the
days available on each side. Rule of thumb:
≥6 each side = a confident read;
3–5 shows but is flagged
“thin”;
under 3 we don't compare (
“not enough”).
Each figure also carries a tiny
clear /
within-noise mark — “clear” means the before→after shift is
bigger than the day-to-day wobble (worth trusting even on a thin row); “within noise” means it could just be
daily variation, so treat it with care.
If another change landed soon after, the window is shortened so two setups don't blur together.
Sale days are matched like-for-like too — fair because your sales run at similar intensity (February's softer
one aside); month-level seasonality (January being bigger than March, say) isn't adjusted out, as that's expected and known.
The line under each table shows how long the whole test ran and what it spent — so you can judge if it ran long enough.
+ Bounce-rate kill-signal ★
Before 2025-08-18 → 2025-09-14 · After 2025-09-15 → 2025-10-12
Kept the single-ASC structure but added bounce rate as an engagement screen: spend >$300-500 + above-average bounce + no GA4 revenue ⇒ switch the ad off.
| Day-type | Days (before→after) | Revenue | PM% | Meta ROAS |
| Non sale — weekday hangover |
4 → 0 not enough |
—
|
—
|
—
|
| Non sale — weekdays |
16 → 10 |
$185k → $220k
+18%
tentative
|
9.3% → 8.9%
-0.4pp
within noise
|
—
|
| Non sale — weekend |
8 → 4 thin |
$188k → $252k
+34%
clear
|
9.7% → 9.1%
-0.6pp
within noise
|
—
|
| Sale — weekdays |
0 → 10 not enough |
—
|
—
|
—
|
| Sale — weekend |
0 → 2 not enough |
—
|
—
|
—
|
| Sale — last weekend |
0 → 2 not enough |
—
|
—
|
—
|
The whole test ran 99 days (15 Sep 2025 → 22 Dec 2025) ·
$0 Meta spend · $2,792,852 total media.
The before/after above compares the 28 days each side of the switch.
Where we had enough days — non sale — weekdays revenue +18% / PM% -0.4pp; non sale — weekend revenue +34% (clear) / PM% -0.6pp.
New Adv+ Shopping + CPES
Before 2025-11-25 → 2025-12-22 · After 2025-12-23 → 2026-01-12
Migrated to the new Advantage+ Shopping campaigns (old ASCs discontinued); campaign = product, ad set = format. Optimised to CPES (cost per engaged session).
Team saidDidn't work — PM% not improved, revenue showed no improvement.
| Day-type | Days (before→after) | Revenue | PM% | Meta ROAS |
| Non sale — weekday hangover |
2 → 1 not enough |
—
|
—
|
—
|
| Non sale — weekdays |
10 → 0 not enough |
—
|
—
|
—
|
| Non sale — weekend |
6 → 0 not enough |
—
|
—
|
—
|
| Sale — weekdays |
8 → 14 |
$718k → $512k
-29%
clear
|
5.8% → 6.1%
+0.3pp
within noise
|
—
|
| Sale — weekend |
0 → 4 not enough |
—
|
—
|
—
|
| Sale — last weekend |
2 → 2 not enough |
—
|
—
|
—
|
The whole test ran 21 days (23 Dec 2025 → 12 Jan 2026) ·
$0 Meta spend · $676,009 total media.
The before/after above compares the 28 days each side of the switch.
Where we had enough days — sale — weekdays revenue -29% (clear) / PM% +0.3pp. Broadly matches the team's 'didn't work' note — no revenue gain where we could compare.
Bounce-rate only
Before 2025-12-23 → 2026-01-12 · After 2026-01-13 → 2026-02-09
Replaced CPES with bounce rate as the only optimisation metric, across campaign, ad set and creative level.
Team saidDidn't work — PM% not improved, revenue showed no improvement.
| Day-type | Days (before→after) | Revenue | PM% | Meta ROAS |
| Non sale — weekday hangover |
1 → 3 not enough |
—
|
—
|
—
|
| Non sale — weekdays |
0 → 11 not enough |
—
|
—
|
—
|
| Non sale — weekend |
0 → 6 not enough |
—
|
—
|
—
|
| Sale — weekdays |
14 → 6 |
$512k → $348k
-32%
clear
|
6.1% → 8.5%
+2.4pp
clear
|
—
|
| Sale — weekend |
4 → 2 not enough |
—
|
—
|
—
|
| Sale — last weekend |
2 → 0 not enough |
—
|
—
|
—
|
The whole test ran 64 days (13 Jan 2026 → 17 Mar 2026) ·
$0 Meta spend · $1,406,736 total media.
The before/after above compares the 28 days each side of the switch.
Where we had enough days — sale — weekdays revenue -32% (clear) / PM% +2.4pp. Broadly matches the team's 'didn't work' note — no revenue gain where we could compare.
Bounce gate + ROAS
Before 2026-02-18 → 2026-03-17 · After 2026-03-18 → 2026-04-14
Bounce rate as a first layer (must beat the 3-month benchmark); the ad must then recoup 100% of product price with a positive ROAS or it's switched off. Ad-set goal = purchase conversions.
Team saidPBI PM% was the limiting factor — platform ROAS looked strong but spend couldn't scale within the PM% cap.
| Day-type | Days (before→after) | Revenue | PM% | Meta ROAS |
| Non sale — weekday hangover |
2 → 4 not enough |
—
|
—
|
—
|
| Non sale — weekdays |
16 → 6 |
$219k → $183k
-16%
clear
|
7.5% → 5.1%
-2.5pp
clear
|
—
|
| Non sale — weekend |
8 → 4 thin |
$238k → $233k
-2%
within noise
|
8.9% → 8.0%
-0.9pp
within noise
|
—
|
| Sale — weekdays |
2 → 10 not enough |
—
|
—
|
—
|
| Sale — weekend |
0 → 2 not enough |
—
|
—
|
—
|
| Sale — last weekend |
0 → 2 not enough |
—
|
—
|
—
|
The whole test ran 55 days (18 Mar 2026 → 11 May 2026) ·
$0 Meta spend · $1,215,190 total media.
The before/after above compares the 28 days each side of the switch.
Where we had enough days — non sale — weekdays revenue -16% (clear) / PM% -2.5pp; non sale — weekend revenue -2% (within noise) / PM% -0.9pp. Team flagged PM% as the ceiling here — compare the PM% and ROAS columns.
Not yet measurable
Regimes we can't read cleanly at account level yet — shown for completeness.
-
Baseline: single ASC + GA4 —
baseline / pre-period (no prior regime to compare against).
One ASC per product, a single ad set for all creatives. Optimised on GA4 revenue & ROAS (secondary: outbound CTR, hook rate).
-
Platform 7d-click ROAS —
AU/NZ split pending the team's refinement.
Shift toward in-platform purchase ROAS (7-day click); from 26 May, grouped categories and moved to custom-conversion / custom-event objectives. The sheet logs this against NZ — the AU/NZ split is being refined by the team.
Ran 171 days so far · $0 Meta spend.
-
Creative-quality cull —
too recent for a 28-day after-window.
Spend more on proven creatives — ~6 strong creatives per product, dropping the 400-creatives/month target. CBO + ABO.
Ran 137 days so far · $0 Meta spend.
-
4-product attribution split —
too recent for a 28-day after-window.
Nuve / Nimble / Omni / Versa only — won't show cleanly in account-level totals.
Nuve, Nimble, Omni and Versa each get 3 campaigns: purchase event (all attribution), custom events (all attribution), custom events (7-day only).
Ran 135 days so far · $0 Meta spend.
-
Small-items: bounce + CPA — product subset.
Small items only — annotated for context, not an account-level changepoint.
Pillow, side-support pillow, bamboo bedding, cooling quilt, sleepwear — bounce rate + a CPA goal (later removed; campaigns couldn't spend).
Generated 2026-10-30 03:08 AEDT · revenue & Google from Redshift · Meta spend & 7d-click ROAS from the Meta API · regimes from optimisation_phases.json ·
click a day-type in the legend to spotlight it ·
append ?refresh=1 to force a fresh pull.