By Ryan Richardson · Published 8 October 2026
For a self-published book sold directly off a landing page, which creatives are worth scaling spend into, and which should be killed, when the only thing you can measure early is cost per purchase? This test ran a continuous creative-testing-to-scaling pipeline on the same book offer for just under a year (22 Oct 2025 to 7 Oct 2026) to answer it with real money, not a one-off split test.
The method is Hernán Vázquez's Rapid Scale 2.0 / Red-Yellow-Green (RYG) model, run as written: a testing campaign seeds 5 new creatives a week into 3 ad sets (Interest / Lookalike / Broad) at a fixed daily budget. Every creative gets graded red (kill), yellow (hold) or green (scale) purely on cost per purchase against a moving target CPA, with no CTR or CPM override. Winners that clear 3+ purchases at or under the target graduate, by Facebook post ID (not by ad name, to avoid double-counting), into a separate broad-targeted scaling campaign with no interest restrictions.
3 campaign IDs sit under this one experiment: Creative Testing, an earlier single-campaign predecessor, and the Proven Scaling campaign that graduates feed into. 225 ads ran across them in the window pulled.
Meta's own attributed revenue (A$3,126.45) is lower than total spend (A$5,908.18) on this view because Meta under-counts post-checkout purchases that don't fire a browser-side pixel event before the buyer leaves the page; our own tracking work (see 'What we changed next' below) found the real per-campaign ROAS was materially higher once server-side purchase events were added. Treat the A$3,126.45 figure as a floor, not the true revenue.
| Metric | Value |
|---|---|
| Ads | 225 |
| Spend | A$5,908.18 |
| Impressions | 107,229 |
| Link clicks | 1,715 |
| CTR | 3.23% |
| Landing page views | 1,558 |
| Checkouts initiated | 620 |
| Purchases | 122 |
| Cost per purchase (CPA) | A$48.43 |
| Recorded revenue (Meta-attributed) | A$3,126.45 |
Avatar 5 at A$41.65 CPA is the cheapest-converting single cell found anywhere in this campaign's tagged ads; it's also the only cell with purchases (14) above the 10-sale mark this report treats as a usable minimum sample. Every other tagged cell is a single-digit purchase count and directional only.
| Dimension value | Spend | Purchases | CPA |
|---|---|---|---|
| Product-aware (s4) | A$825.86 | 13 | A$63.53 |
| Problem-aware (s2) | A$627.67 | 9 | A$69.74 |
| Avatar 5 | A$583.11 | 14 | A$41.65 |
| Avatar 1 | A$560.64 | 6 | A$93.44 |
122 purchases at A$48.43 CPA is the best-attested result in this whole dataset by a wide margin, both in spend (the largest single experiment pulled) and in sample size (10x the next-biggest purchase count). The win is at the pipeline level, not a single creative or audience: ads that clear the CPA bar graduate by post ID into an uncapped scaling campaign, and the campaign-level number above is a rolling average across however many ads have graduated and been killed over the year, not a single A/B result.
A caveat found in internal project notes and worth repeating here: a graduated ad's cost per purchase reliably gets worse once it moves from a small, tightly-targeted testing ad set into the broad, unrestricted scaling campaign. Two tracked examples moved from A$13 to A$37 (2.8x worse) and A$34 to A$40 (1.2x worse) on the same creative, same post ID. The lesson documented at the time: never plan a budget off a testing-ad CPA, forecast off the scaling number instead.
Several changes are documented as having been made directly off this test's numbers: the kill-age gate was cut from 168 hours to 72 hours because the original 7-day window was protecting creatives that were already grading red; a scaling-budget ceiling bug (a missing-budget value silently read as not-a-number, which defeated the entire spend cap check) was found and fixed; and a hold band (0.7 to target ROAS) was added so a previously-scaled creative that softens gets held rather than killed outright, while a brand-new creative showing the same soft number still dies. The target ROAS dial itself was raised from 0.5 to 0.8 over the test's life as the back-end offer matured.
Score every new creative on a fixed rubric before it spends a dollar (see the related scoring method below), seed a small fixed batch into 3 ad-set types at once rather than one ad set, judge purely on cost-per-action against a target you're willing to state out loud, and require a minimum purchase count (this test used 3) before anything graduates out of the small testing ad set. Match graduated and original ads by the platform's post or creative ID, not by the ad name you gave it, so a creative that gets renamed on promotion doesn't get silently double-counted or lost.
| Claim | Value | Source |
|---|---|---|
| Number of ads in the test | 225 | Sixty Steps ad account, Meta Ads data |
| Total spend | A$5,908.18 | Sixty Steps ad account, Meta Ads data |
| Impressions | 107,229 | Sixty Steps ad account, Meta Ads data |
| Link clicks | 1,715 | Sixty Steps ad account, Meta Ads data |
| CTR | 3.23% | Sixty Steps ad account, Meta Ads data |
| Landing page views | 1,558 | Sixty Steps ad account, Meta Ads data |
| Checkouts initiated | 620 | Sixty Steps ad account, Meta Ads data |
| Purchases | 122 | Sixty Steps ad account, Meta Ads data |
| Cost per purchase | A$48.43 | Sixty Steps ad account, Meta Ads data |
| Meta-attributed revenue | A$3,126.45 | Sixty Steps ad account, Meta Ads data |
| Date range of the campaign IDs pulled | 2025-10-22 to 2026-10-07 | Sixty Steps ad account, Meta Ads data |
| Method is Hernán Vázquez's Rapid Scale 2.0 / Red-Yellow-Green model, run as written | confirmed | Project book ryg autopilot.md, lines 11, 31 |
| 3 ad sets per testing campaign (Interest/Lookalike/Broad), 5 new creatives seeded weekly | confirmed | Project book ryg autopilot.md, line 15, 45 |
| Winners graduate at 3+ purchases at or under target CPA, matched by post ID not ad name | confirmed | Project book ryg autopilot.md, lines 31, 157 167 |
| Avatar 5 spend/purchases/CPA | A$583.11 / 14 / A$41.65 | Sixty Steps ad account, Meta Ads data |
| Avatar 1 spend/purchases/CPA | A$560.64 / 6 / A$93.44 | Sixty Steps ad account, Meta Ads data |
| Product-aware (s4) spend/purchases/CPA | A$825.86 / 13 / A$63.53 | Sixty Steps ad account, Meta Ads data |
| Problem-aware (s2) spend/purchases/CPA | A$627.67 / 9 / A$69.74 | Sixty Steps ad account, Meta Ads data |
| A graduated ad's CPA reliably gets worse moving from testing to scaling, two tracked examples | A$13 to A$37 (2.8x worse) and A$34 to A$40 (1.2x worse) | Project book ryg autopilot.md, lines 219 230 |
| Kill-age gate cut | 168 hours to 72 hours | Project book ryg autopilot.md, line 51 |
| CBO spend-ceiling NaN bug found and fixed | confirmed | Project book ryg autopilot.md, line 51 |
| Hold band added for previously-scaled creatives | 0.7 to target ROAS | Project book ryg autopilot.md, lines 97 124 |
| Target ROAS raised over the test's life | 0.5 to 0.8 | Project book ryg autopilot.md, lines 67, 232 |
| An earlier round of the same RYG method ran on a different book offer first: A$285.14 spend, 34 ads, 4 purchases, A$71.28 CPA | confirmed | Sixty Steps ad account, Meta Ads data |