Simple version. We spent $5,214 in 17 days to find out whether people will buy this product from an ad. 154 did, and they tried to spend $7,187. Two ads out of 92 did most of it and were profitable on their own. The whole test lost $923 because finding those two cost $3,835. At today's ad cost this is not yet a business; at the two winners' ad cost it is. One more week and $2,500 tells us which.
154
sales at the wall
$7,187 of carts, $46.67 average, 47% of revenue from carts of 5+ sets
$5,214
Meta spend, 17 full days
planned about $5,000; 92 ads, seven customer pockets
−$923
after ad spend, 1.38x
the bar is +20% margin and 2x
What we tested and how. A real store, real ads, a wall at the last click so no card was charged. Every sale is a person who entered her details and pressed Pay. 28 August to 13 September.
What we found. One idea sells: "actually short", shown in a picture that proves it, landing on the design's own page. Two ads on that idea made 38% of the sales on 17% of the money, at $15 and $16 a sale against a $22 bar, +$907 after ads. Two more ads clear the bar on small counts. Six of the seven pockets do not buy. The price rise to $16 did not cost sales.
What the learning cost. The launch wave $1,066 (58 ads on the collection page at $50 a set). Pockets that never sold $1,533. Raising winners too fast about $330. About $300 was avoidable with stricter kill rules; the rest was the price of the answer.
What we do not know yet. Whether the winners hold their cost per sale on their own budget: no ad in this test held through a big raise. What a week at $350 a day yields as a planning unit. Card declines at a real checkout.
The decision. Not a green light to spend more of the same, and not a stop. One week, about $2,500: the four proven ads each on their own budget plus five small variations, budgets fixed, kill rules written down. If the two Short winners hold under $22 a sale for six days, the ads can carry about $100 a day at a 20% margin and inventory gets planned on about three sales a day per ad. If they do not, the business needs more winners or bigger carts before more money goes in.
What changed in how we work. Product pages, not the collection. One ad per ad set. Read at $100 spent, not day one. Rank on sales, never on checkout traffic. Double a winner, never multiply it. Tracking complete before the first dollar.
Press On Repeat, demand test, 28 Aug to 14 Sep 2026
What happened, when
17
full days of spend
28 Aug to 13 Sep
$5,214
Meta spend
$5,196 inside the phase windows
154
people pressed Pay
one person once, at her largest cart
$34
cost per Pay person
ad spend ÷ people: $5,196 ÷ 154
$46.67
AOV
average cart of a Pay person
$7,187
in those carts
what shoppers saw: $14 until 09-09 6 PM, then $16
−$923
profit after ad spend
$4,272 before ads; zero orders
1.38x
intent ROAS
carts ÷ spend; the bar is 2x
−12.8%
margin after ad spend
profit ÷ carts; the bar is 20%
The six ad waves, the price rise, and the sheet's own cut
Event tags on the next slides
ShopifyMetaAdsTrackingDecisionResult
03
The whole test on one line
Wave 1, the launch(08-28 → 09-01)
Wave 2, consolidation(09-01 8:44 PM → 09-06)
Wave 3, iteration 2(09-07 → 09-09 6 PM)
The price rise(09-09 evening)
Wave 4, the scale-up on the winners + the video test(09-10 → 09-13)
The end
Fri 28 Aug
08-28
First day of delivery
08-28
Result
First day of delivery
First day of delivery. $329 spent; 7 sets at ≈$47 each, i.e. the sets ran at ≈$50/day (see disagreement 1)
08-28 14:30
80 products on the Meta channel
08-28 14:30
Shopify
80 products on the Meta channel
80 products included on the NEW "Meta" channel
Sat 29 Aug
08-29
First Pay clicks, theme v1.2 live
08-29
ResultShopifyTracking
First Pay clicks, theme v1.2 live
First Pay clicks: 4 people. Theme Production_v1.2 published (PRICING v2 renamed "…(08/29/26)" and unpublished). Two Shop Pay checkouts never reached our pixel, the blind spot found
Sun 30 Aug
08-30
Arjun's dashboard v1
08-30
Tracking
Arjun's dashboard v1
Arjun's Mission Control v1 built (18:56–20:28); the sheet hand-reconciled (7 buyers / $203 that evening); wall verified with real traffic (a customer pressed Pay twice, zero orders); rule set: our MC intent count is a floor
Mon 31 Aug
08-31
Budgets cut to $30 a set
08-31
MetaAdsTracking
Budgets cut to $30 a set
Budgets cut $50 → $30 per set (spend $327 → $208); 4 MixMatch ads (A030, A031, A032, A037) last touched 19:33 (paused); the sheet's "not checked" marker fixed so the hourly log reader advances itself
Tue 1 Sep
09-01 18:04 → 20:00
Checkout button on the bar, ad name in the cart
09-01 18:04 → 20:00
ShopifyTracking
Checkout button on the bar, ad name in the cart
Website: the Stack & Save bar's offer line ("$14 a set, 5+ sets: $12 each…") replaced by a "Secure Checkout, $X" button on the collection page, the Technique page grid and all 7 landing pages (18:39); adding from a product page now opens the cart drawer on phones too, the pinned bar ducks out of the way at the bottom of the page, phone product pages un-stick the header (19:57–20:00). POR-52: the ad name (utm_content) written into a cart attribute so the wall log carries the ad, Pay clicks before 09-01 can never be traced to an ad. Arjun's custom checkout pixel (Version 15) starts feeding the sheet's Checkout events tab
09-01 18:33
Launch ads paused, Short to $50
09-01 18:33
MetaAds
Launch ads paused, Short to $50
AS-5-MixMatch paused; AS-3-Collector → $20; AS-2-Short → $50; the launch ads not being kept paused one by one
09-01 20:10–20:18
Clarity installed
09-01 20:10–20:18
Tracking
Clarity installed
Microsoft Clarity session recording installed by Arjun in theme.liquid (project ybt4ep1sz7); email and search boxes masked
09-01 20:44–20:46
Consolidation goes live, $190 a day
09-01 20:44–20:46
MetaAds
Consolidation goes live, $190 a day
Consolidation goes live. AS-8-ForceTest created ($40); AS-7-AllergyStory, AS-3-Collector, AS-4-Method paused; AS-1-Gap → $50; AS-6-Conditions → $50; 9 rewritten "-PDP" ads created, each pointing at a design's own product page, Short: A010 → Garnet, A011 → Cobalt Tips, A013 → Ballet Slipper, Gap: A004 → Something Blue, A002 → The Red, Conditions: A045 → Tortoise, A054 → Tortoise, ForceTest: A028 → Cherry French, A048 → Tortoise. $190/day. Launch phase closed at this minute
Wed 2 Sep
09-02 03:44
Next wave drafted, inactive
09-02 03:44
Meta
Next wave drafted, inactive
AS-9-Short, AS-10-Gap, AS-11-Conditions, AS-12-Reusability created INACTIVE (a first draft of the next wave; never ran; rebuilt 09-06)
09-02 07:49
MJ's product-page push: deck, shape tiles
09-02 07:49
Shopify
MJ's product-page push: deck, shape tiles
Website, MJ's push: the image deck landed on the product page under Add to Bag (five tilted cards you swipe, headline crossfading above); the three stacked shape pills became three shape-icon tiles in one row; "Find your size" moved beside the shape row and opens as a pop-up; description, rewear box and "Your Rotation" bar hidden so set pricing sits right above the button; sticky bar yields on scroll-up
09-02 15:55 → 19:41
Arjun's push: technique deck, new hero copy
09-02 15:55 → 19:41
Shopify
Arjun's push: technique deck, new hero copy
Website, Arjun's push: the Technique page's Why-Tabs pill section replaced by the same deck, new hero copy "You decide how long they stay on.", homepage copy edits, the PDP's benefit-imagery blocks removed, the Why Tabs component deleted from the theme
09-02
First full day: 9 Pay people
09-02
ResultDecision
First full day: 9 Pay people
First full consolidation day: $238 spend, 9 Pay people ($600), the best day yet. Arjun: "we're counting it today forward" (phase counts from 09-02)
Thu 3 Sep
09-03 08:38–08:42
Design test built, 5 sets at $10
09-03 08:38–08:42
MetaAds
Design test built, 5 sets at $10
Design test built: AS-2.1 Cherry Noir, AS-2.2 Espresso Velvet, AS-2.3 Bare Minimum, AS-2.4 Ballet Tips, AS-2.5 Pearl Slip at $10/day, one A010-pose ad each on its own PDP with the shape preselected
09-03 10:56–10:57
Design test switched on
09-03 10:56–10:57
Meta
Design test switched on
Arjun switched the 5 design-test sets Active
09-03 12:07–12:11
Short and Conditions to $75, A013 force test
09-03 12:07–12:11
MetaAds
Short and Conditions to $75, A013 force test
Day-one read applied: AS-2-Short → $75, AS-6-Conditions → $75, AS-1-Gap → $30; A048-PDP and A002-PDP paused (12:08); AS-2.6-Short-ForceTest created ($30) holding A084, an exact copy of A013 with its own tag, Active 12:11. Live budget $300/day
09-03
Dashboard rebuilt around phases
09-03
TrackingDecision
Dashboard rebuilt around phases
Dashboard rebuilt around phases, intent carts and the money; GA4 dropped as a source; day-6 demand read written (19 Pay-clickers / $888; the sheet is the Pay-click authority); MJ ruling: coffin is extra short too
Fri 4 Sep
09-04 00:16
Shape mix in every grid, shape preselected
09-04 00:16
Shopify
Shape mix in every grid, shape preselected
Website, MJ's push: shape mix in every product grid. Cards no longer all show Almond: each block of three carries all three shapes in scrambled order, each card shows that shape's own photo, the hover pose-swap follows it, and tapping a card opens the product page with that shape already selected (Shop All, Technique grid, all 7 landing pages, cart upsells, best-sellers row). Nothing else changed on the site until the price rise on 09-09
09-04
10 Pay people, dashboard reads the sheet
09-04
ResultTracking
10 Pay people, dashboard reads the sheet
Best launch-era day: $340 spend, 10 Pay people ($436). Our Mission Control v13 starts reading the sheet; sensor ladder recorded (sheet 19, Meta add_payment_info 16, GA4 14, MC 9)
09-04 23:17
Gap and force test paused
09-04 23:17
Meta
Gap and force test paused
AS-1-Gap paused; AS-2.6 force test paused (A084: one person for $51, "the answer was no"); AS-8-ForceTest → $20. phases.json writes this up as 09-05 02:20 AM PT; Meta's own log says 23:17 on 09-04
AS-8-ForceTest paused (0.46x). Consolidation is now AS-2-Short + AS-6-Conditions at $75 each; 5 ads live (A010, A011, A013, A045, A054)
09-06 19:15–19:26
Iteration 2 built, paused
09-06 19:15–19:26
AdsMeta
Iteration 2 built, paused
Iteration 2 built, paused: AS-13-ConditionsStory ($30, 2 ads), AS-9-Short (4 penny / coffee-bean ads), AS-10-Gap (4), AS-11-Conditions (3), AS-12-Reusability (4), 17 ads (A085–A101), new pictures and words, each on a design's PDP with the shape preselected. Arjun: "turn the ads on at 12 am PST"
Mon 7 Sep
09-07 00:45–01:10
Pre-flight relinks
09-07 00:45–01:10
Ads
Pre-flight relinks
Pre-flight on the 17 ads: A094 relinked Bare Minimum → Cinnamon Velvet, A089/A090 Lilac Chrome → Aurora Lilac; 9 ads rebuilt on clean creatives (all Advantage+ features opted out)
09-07 01:20
MJ switches iteration 2 on
09-07 01:20
Meta
MJ switches iteration 2 on
MJ switched AS-9, 10, 11, 12, 13 Active (Meta records "Mj Patio"; the dashboard text says "Arjun at midnight"). Live budget $350/day
09-07
Busiest traffic day
09-07
ResultShopifyTracking
Busiest traffic day
Busiest traffic day of the test: 1,182 ad sessions, $353 spend, 9 Pay people. Coffin box label "SHORT COFFIN" → "X SHORT COFFIN" live on 72 boxes; Sorbet Tips reaches 15/15 images; first Clarity drop-off read (A045 → Tortoise PDP); Manufacturing page added to the dashboard
Tue 8 Sep
09-08
Clarity sweep, audience read
09-08
ResultTrackingDecision
Clarity sweep, audience read
12 Pay people ($743). Clarity full sweep (5,669 sessions: sticky add button used 0 times; PDP loses 63% by 15% depth); audience read (Pay clicks 35-65+, none under 35); duplicate rules: same-cart merge built and removed the same day
Wed 9 Sep
09-09 (day)
Best day: 22 Pay people
09-09 (day)
Result
Best day: 22 Pay people
Best day of the test: 22 Pay people, $1,197 at today's ladder ($850 before 6 PM + $222 after, at the prices seen) on $368 spend
09-09 (before 6 PM)
Price eras built
09-09 (before 6 PM)
Tracking
Price eras built
Price eras built into the dashboard so every cart is priced at the ladder of its own minute (keyed on First seen)
09-09 17:10 → 18:46
Theme v1.3 built, published 6:46 PM
09-09 17:10 → 18:46
Shopify
Theme v1.3 built, published 6:46 PM
Theme Production_v1.3 – "price +2, ship 6 (2026-09-09)" created by Arjun (17:10); every surface that quotes a price rewritten to $16 / $14 / $12 (announcement bar, Stack & Save bar and its running message, offer line, cart drawer and page, PDP set pricing, home, quiz, kit, technique page, all 7 landing pages: 34 files, 17:24–17:42); published at 18:46, v1.2 unpublished. It is the live theme now
09-09 18:02–18:03
Sets to $16, shipping $6
09-09 18:02–18:03
Shopify
Sets to $16, shipping $6
Sets $14 → $16 (225 variants); both ladder discounts edited (still $2 / $4 off) → ladder $16 / $14 at 5+ / $12 at 10+; flat shipping under $60 $5 → $6 (free at $60 unchanged); accessories up too: Nail Tabs $8 → $10, Brush-On Glue $9 → $10, Glass Nail File $6 → $7, Cuticle Stick $6 → $7, Cuticle Oil $12 → $14, The Nail Kit $34 → $36. Dashboard cutover recorded as 06:00 PM
09-09 21:35
Budgets re-cut for the new prices
09-09 21:35
Meta
Budgets re-cut for the new prices
Budgets re-cut for the new prices: AS-13-ConditionsStory → $50; AS-6-Conditions → $50 (from $75); AS-2.2 Espresso Velvet → $30 and AS-2.4 Ballet Tips → $30 (from $10); AS-2.5 Pearl Slip paused
09-09 (why, per MJ on 09-15)
Why the price rose
09-09 (why, per MJ on 09-15)
Decision
Why the price rose
Why the price rose: Arjun's call, with two aims: find out whether a $2 higher price cuts the number of people who press Pay (are shoppers price-comparing, or not?) and lift the margin. Early read: it did not cut them. Site copy was changed to match the new ladder; ad copy was deliberately left alone so the ad data stays comparable
Thu 10 Sep
09-10 00:29
First video ad, AS-14
09-10 00:29
AdsMeta
First video ad, AS-14
AS-14-ShortVideo created ($30) with A102 "SoldAsShort-Dice", the test's first video ad (copy quotes the new $16/$14/$12 ladder); MJ switched it Active 01:19. MJ (09-15): A102 and A103 are the same concept and copy, only the design differs (Dice vs Raspberry Velvet)
09-10 (day)
18 Pay people, timezone fix
09-10 (day)
ResultTracking
18 Pay people, timezone fix
18 Pay people ($872); $390 spend. Arjun fixes his machine's timezone (Windows was on Central-Mexico; page stamps had run ~2 h early); the All view now counts untraced Pay people; profit-margin tile
09-10 15:54
Conditions, AS-9, Cherry Noir paused
09-10 15:54
Meta
Conditions, AS-9, Cherry Noir paused
AS-6-Conditions paused (the A045/A054 control is over), AS-9-Short paused, AS-2.1 Cherry Noir paused
09-10 23:46 → 09-11 00:32
Re-allocation: Short to $100, AS-15
09-10 23:46 → 09-11 00:32
MetaAds
Re-allocation: Short to $100, AS-15
The re-allocation: AS-2-Short → $100/day; AS-14 video → $50; AS-15-ShortVideo created ($30) with A103 "SoldAsShort-RaspberryVelvet" (MJ Active 00:21); AS-10-Gap, AS-11-Conditions, AS-12-Reusability paused; AS-2.2 Espresso Velvet → $50; AS-2.4 Ballet Tips → $50; AS-2.3 Bare Minimum paused. MJ (09-15): Arjun's call; Conditions was switched off on purpose (15:54) to free budget for the others
Fri 11 Sep
09-11 10:36 → 12:39
Batch 2: 20 designs live
09-11 10:36 → 12:39
Shopify
Batch 2: 20 designs live
Batch 2: 20 new designs (59–78) created at $16 and published by Arjun, Cabernet, Ruby Velvet, Rosé Velvet, Caramel Milk, Sterling, Dew French, Gilded Tips, Halo, Frost Tips, Chestnut Velvet, Leopard Tips, Merlot Velvet, Rosewater, Champagne Velvet, Jaguar, Rouge Noir, Zebra Tips, Gold Thread, Fawn Tips, Wisteria. Catalogue 73 → 93 sets. Sorted into All Sets and the six vibe collections 16:14–16:21. COGS for them estimated at family averages the same day
09-11 16:16 / 17:28
AS-15 to $50, AS-9 back on
09-11 16:16 / 17:28
Meta
AS-15 to $50, AS-9 back on
AS-15 video → $50; AS-9-Short re-activated. Final line-up from here: AS-2-Short $100 (A010/A011/A013), AS-2.2 Espresso Velvet $50, AS-2.4 Ballet Tips $50, AS-9-Short $30 (A085/A086/A087/A096), AS-13-ConditionsStory $50 (A093/A095), AS-14 video $50, AS-15 video $50 = $380/day
09-11 17:02 → 19:22
Pop-out product page on Shop All
09-11 17:02 → 19:22
Shopify
Pop-out product page on Shop All
Website, Arjun: the pop-out product page on Shop All. Tapping a set's photo or name now opens the whole product page in a pop-up over the grid (gallery, shape buttons, set pricing, sizing guide, Add to Bag all inside it; "Close" pill top right; Back returns to the card). Same push: Tortoise and Tortoise Tips no longer appear twice on All Sets. The last change to the site: nothing on the live theme is newer than 19:22
09-11
Design read, ad register
09-11
DecisionTracking
Design read, ad register
10 Pay people ($516). Design performance read (day 15: 109 Pay-clickers into three groups); ad register updated for the 25 ads launched since 09-02
Sat 12 Sep
09-12
Batch 2 pass, duplicates button
09-12
ShopifyTracking
Batch 2 pass, duplicates button
12 Pay people ($764). Batch 2 imagery/copy pass on Shopify; "Remove Duplicates" button on the dashboard. Data state 20:41: 140 intent purchases / $6,685 / $4,769 spent
Sun 13 Sep
09-13
Last full day: $410
09-13
Result
Last full day: $410
Last full day: $410 spend (highest of the test), 1,162 ad sessions, 14 Pay people ($534). No change made
Mon 14 Sep
09-14 01:04
Campaign paused
09-14 01:04
Meta
Campaign paused
Arjun paused the campaign ABO-POR-DemandTest. Test over. $1.87 of trailing spend; 3 late Pay people on 09-14 (two with no ad tag, one from A010). MJ (09-15): a planned stop, the test was budgeted at about $5,000
09-14 17:30
Last dashboard build
09-14 17:30
Tracking
Last dashboard build
Last dashboard build: Prices chip ("As they were, Today's ladder"), Top ads + Bestsellers with pictures, the sheet's duplicate label replaces the button; four pages the next morning. Final data state 17:31: 154 intent purchases / $7,187 / $5,195.70 spent. The hourly refresh has not pushed since
Tue 15 Sep
09-15
Spend $0
09-15
Result
Spend $0
Meta spend $0. Direct shoppers still trickle into the sheet as "not checked" rows
Gap + force test off (23:17 the night before); ForceTest $20
09-06 Sat
$243
860
132
36
8
$367
ForceTest off 7:11 PM; iteration 2 built paused
09-07 Sun
$353
1,182
163
56
9
$376
iteration 2 on 1:20 AM → $350/day
09-08 Mon
$356
891
176
37
12
$638
same
09-09 Tue
$368
927
166
45
22
$1,072
price rise 6 PM; budgets re-cut 9:35 PM
09-10 Wed
$390
1,064
175
50
18
$872
video ad on; Conditions / Cherry Noir / AS-9 off 3:54 PM; re-allocation 11:46 PM
09-11 Thu
$355
968
172
48
10
$516
Batch 2 live 12:39 PM; second video ad; $380/day
09-12 Fri
$379
1,044
160
37
12
$764
same
09-13 Sat
$410
1,162
182
49
14
$534
same, last full day
09-14 Sun
$2
30
3
1
3
$156
campaign paused 1:04 AM
Total
$5,196
13,905
2,168
557
154
$7,187
Takeaway
The test got better as it went. Every launch day lost money; after the move to product pages, five of the last twelve full days were profitable and four more were within $50 of breakeven. The best days were conversion days, not traffic days: 09-09 had fewer visits than average and 22 sales. And the two days with the most ad spend (09-13 at $410, 09-04 at $340) both lost, because spend was rising faster than sales.
05
Winning days, breakeven days, losing days
Every day of the test sorted by profit after ad spend. Breakeven means within $50 of zero either way. A sale is dated to the day the person was first seen and ad spend to the day it ran, so single days are noisy; the point is the shape, not one day. The columns re-sort when you change the price basis.
Winning days
Day
Sales
Spend
Carts $
ROAS
Profit after ads
Margin
What was running
Breakeven days
Day
Sales
Spend
Carts $
ROAS
Profit after ads
Margin
What was running
Losing days
Day
Sales
Spend
Carts $
ROAS
Profit after ads
Margin
What was running
Takeaway
After the launch, three of the four losing days were days something new was switched on or a budget raised: 09-03 (design test, force test, Short and Conditions to $75), 09-04 (first full day at $300) and 09-07 (iteration 2 on at $350). The fourth was the highest-spend day, 09-13. New money takes two or three days to turn into sales, so a launch day always reads worse than it is. Judge a change by its first full week, not its first day.
06
What each wave came to
8/28 launch(08-28 → 09-01)
14people
Spend$1,337
Carts$485
Spend per person$95
Intent ROAS0.36x
Profit after ads−$1,066
Margin after ads−219.8%
9/2 consolidation(09-02 → end)
81people
Spend$1,836
Carts$4,060
Spend per person$23
Intent ROAS2.21x
Profit after ads+$550
Margin after ads13.5%
9/3 design test(09-03 → end)
21people
Spend$751
Carts$742
Spend per person$36
Intent ROAS0.99x
Profit after ads−$324
Margin after ads−43.7%
9/3 A013 force test(09-03 → 09-04)
1people
Spend$53
Carts$19
Spend per person$53
Intent ROAS0.36x
Profit after ads−$45
Margin after ads−234.9%
9/7 iteration 2(09-07 → end, incl. the 2 video sets)
24people
Spend$1,220
Carts$1,303
Spend per person$51
Intent ROAS1.07x
Profit after ads−$398
Margin after ads−30.5%
All five
154people
Spend$5,196
Carts$7,187
Spend per person$34
Intent ROAS1.38x
Profit after ads−$923
Margin after ads−12.8%
Phase
Ads
Spend
Pay people
Carts $
Spend per person
Intent ROAS
Profit before ads
Profit after ads
Margin after ads
Sets per cart (median)
8/28 launch (08-28 → 09-01)
58
$1,337
14
$485
$95
0.36x
$271
−$1,066
−219.8%
2.1 (1)
9/2 consolidation (09-02 → end)
9
$1,836
81
$4,060
$23
2.21x
$2,385
+$550
13.5%
3.4 (2)
9/3 design test (09-03 → end)
5
$751
21
$742
$36
0.99x
$426
−$324
−43.7%
1.7 (1)
9/3 A013 force test (09-03 → 09-04)
1
$53
1
$19
$53
0.36x
$8
−$45
−234.9%
1.0 (1)
9/7 iteration 2 (09-07 → end, incl. the 2 video sets)
19
$1,220
24
$1,303
$51
1.07x
$822
−$398
−30.5%
3.0 (2)
All five
92
$5,196
154
$7,187
$34
1.38x
$4,272
−$923
−12.8%
2.9 (2)
Takeaway
Only the consolidation wave clears the bar of 20% margin and 2x. It did that on nine ads, and two of them, A010 and A011, made all the profit. The launch wave cost $1,066 finding them, the six other pockets never sold, and every ad that was pushed hard got more expensive. The next money belongs to the four proven ads at their own budgets, not to more pockets.
07
What worked
Simple version. Send the click to the design's own page, run few ads with real money each, show the length in the picture, and let the ladder build the cart. Those four things made every dollar of profit in the test.
In the ads
$167 → $30 cost per sale, Shop All → product page
Product pages instead of Shop All
Cost per sale when the same ads landed on the design's own page instead of the collection grid. Four times the sales per visitor; 33% of checkout arrivals paid against 11%.
58 launch ads spread over seven sets lost $1,066. The nine consolidation ads made +$550 after ad spend.
$16 a sale · 3.44x A010's cost per sale and ROAS
The Short idea on the A010 picture
One nail held against the fingertip, and words short-nail women already say. 36 sales, +$602 after ads, no drift over twelve days.
$15 a sale · 3.25x A011's cost per sale and ROAS
The same idea on a second design
A011 on Cobalt Tips did as well as Garnet, on Meta's leftovers. The idea is the winner, not one design.
47% of revenue came from carts of 5 or more sets
The price ladder
42 of 154 carts held five or more sets. Average cart $46.67 on a $16 product.
$14 to $17 a sale cost per sale of the ads left at $10 to $50 a day
Small, steady budgets left alone
Every ad that ran untouched at $10 to $50 a day gave an honest number. The two raised five-fold in a day went to $64 and $65.
off by day 5 how fast most losing ad sets were paused
Losers switched off fast
Most losing ad sets were paused within four or five days. Only about $300 of the $923 lost was left on the table by not killing sooner.
On the website
2.3% → 5.2% ad visits that reached the checkout, launch week → last week
The product page did the selling
Share of ad visits that reached the checkout, launch week against the last week. Of those, the share who paid went 20% → 28%.
3.6 sets a cart average cart from the Garnet ad
The shop sold the rotation
Only 13 of A010's 36 buyers bought Garnet; the rest browsed on. 47% of all sets bought were designs that never had an ad.
2.65 → 3.71 sales per $100 of ad spend, before → after the price rise
The price rise to $16
Sales per $100 of ad spend before and after 09-09. Margin after ads −27% → +8.9%. Buying did not slow.
135 of 154 sales tied to the ad that made them
The ad's name written into the cart
Sales tied to the ad that made them, even on return visits. Without this there are no per-ad numbers.
7 of 7 buyers the wall log knew on 08-30 (Shopify knew 2)
The wall as the sensor
Buyers the wall log knew on 08-30; Shopify's own records knew 2. Every sale counted once, including Shop Pay and wallet checkouts.
Unread The checkout button on the bar (09-01), the product-page deck and shape tiles (09-02), the shape mix on every grid (09-04) and the pop-out product page (09-11) all went live in the same hours as ad changes or too close to the end. Nothing in the daily numbers steps up or down on those dates. Not credited, not blamed.
08
What did not work
Simple version. Sending clicks to Shop All, spreading the launch over 58 ads, six of the seven pockets, and every sharp budget jump. On the site, a sticky bar nobody used and a page that loses most readers before the fold. In how we ran it, two winners in one budget, ranking on checkout traffic, and cutting a winner while it was winning.
In the ads
$167 a sale cost per sale on the collection page
Shop All as the landing page
The launch sent every click to a grid of seventy designs. 11% of checkout arrivals paid; on product pages, 33%. The launch wave lost $1,066.
38 of 56 under $20 launch ads that got under $20 in total
Spray and pray at the launch
Meta funded one or two ads per set and starved the rest. 73% of the launch money was gone before anyone could read anything.
$1,533 → 9 sales spend and sales across the six pockets
Six of the seven pockets
Glue-burned, gap, tab doubter, collector, mix & match and reusability. Re-tested in iteration 2 with new pictures: $379 → 0 sales.
$14 → $64 a sale Ballet Tips' cost per sale, before → after the five-fold raise
Sharp budget jumps
Ballet Tips after the five-fold raise. Espresso Velvet $17 → $65. A045 $18 → $51 with a full week to prove it.
$321 → 4 sales spend and sales on the two video ads
The video ads
Clicks at expensive impressions and almost no one paid. Too early to call; no sign yet.
$53 → 1 sale the A013 copy (A084) on its own budget
The A013 force test
Good on three small sales, did not reproduce when given its own budget.
On the website
0 of 5,669 recorded sessions that used the sticky bar
The sticky add-to-bag bar
Recorded sessions that used it in a week. People added from the button in the page.
63% gone viewers lost by 15% of page depth
The product page below the fold
Share of viewers lost by 15% of page depth. What sold sat above the button: picture, price, shapes.
26% paid of A045's checkout arrivals (A010: 46%)
The Tortoise page under the Conditions ad
Of A045's checkout arrivals, against 46% for A010. A third of its clicks left within a second; stayers looped on shape and size.
In how we ran it
$0 to $4 a day A011's budget for its first four days
Two winners sharing one budget
What A011 got for its first four product-page days while A010 took the money. The second winner was never read on its own.
most arrivals, −$157 A045: most checkout arrivals of any ad, profit after ads
Ranking on checkout traffic
A045 led the test on checkout arrivals and lost money. Bare Minimum, cheapest per sale, was last on arrivals and got cut.
$16 a sale, paused Bare Minimum's cost per sale when it was switched off
Cutting Bare Minimum while it was winning
Switched off on 09-11 to fund two ads that were then raised five-fold and went to $64 and $65.
6 of 14 launch-week sales that can't be tied to an ad
Tracking not complete on day one
Launch-week sales that can never be tied to an ad. The ad name reached the cart on 09-01.
0 ads ads reduced after a raise went wrong
Never stepping back
Ads reduced after a raise went wrong: none. Several were raised on two days of data.
09
The Short winners, A010 and A011 (Short set, 08-27 → 09-14)
Simple version. Two ads made most of the money. Same words, same picture idea, different nail. A011 got less money and started later and still did as well as A010. Next: give each its own budget and see if they stay cheap.
A010 Garnet"This is the whole length." · lands on the Garnet page
Spend$571
Days with real money12
Sales36
Cost per sale$16
ROAS3.44x
Profit after ads+$602
Average cart$54
A011 Cobalt Tips"Short like you mean it." · lands on the Cobalt Tips page
Spend$329
Days with real money8 of 11
Sales22
Cost per sale$15
ROAS3.25x
Profit after ads+$305
Average cart$49
What happened well
One idea sold: a nail pinched against the fingertip so you can see the length, and words short-nail women already say.
Two ads on it, Garnet and Cobalt Tips, made 58 of the test's 154 sales on 17% of the money.
$16 and $15 a sale against a $22 bar; +$907 after ad spend between them.
Their buyers shopped around: carts of three to four sets, mostly other designs.
The same words carried a dark design and a light one. The idea is the winner, not one design.
What we did to improve it, and did it work
09-01, moved the click from Shop All to the design's own page and rewrote the copy. Worked: A010 went from 1 sale on $65 to 36 sales on $571.
09-03, doubled the Short set from $50 to $75 a day. Held: both ads stayed under the bar.
09-10, raised it to $100; Meta moved the money to A011. Mostly held: A011 went from $9 to $21 a sale, still under; A010 got cheaper as its share fell.
09-03, tried the picture on five other designs at $10 a day. Worked until pushed: three of five sat at the bar; the two raised five-fold went to $64 and $65 a sale; the one cut was winning.
Never done: giving A011 its own budget, or stepping an ad back down after a raise.
What we can do next
Run A010 and A011 in their own ad sets at $50 a day, budgets fixed for the week.
Beside them, four $25 copies of A010 that change one thing each: Bare Minimum as before, "Short like you mean it" on Garnet, Garnet next to a penny, Garnet with the comment-reply line.
Read at $100 spent, on sales and cost per sale. Keep the wall and the sheet running three days after the ads stop.
If both stay under $22 a sale: about $100 a day at the bar; a scaling campaign with a minimum under each; plan on about three sales a day per ad.
If they get more expensive: turn each back to where it held and grow the copy that holds. Kill only if over the bar at the low budget for six days.
The numbers, side by side
A010 Garnet
A011 Cobalt Tips
Spend
$571 over 13 days
$329 over 13 days
Days with real money ($10+)
12
8
Visits
2,206 at $0.26 each
1,219 at $0.27 each
Reached the checkout
79 (3.6% of visits)
42 (3.4%)
Of those, paid (fair week, 09-03 to 09-09)
24 of 65 = 37%
12 of 19 = 63%
Sales
36
22
Revenue
$1,961
$1,068
Cost per sale
$16 (fair week $18)
$15 (fair week $9)
ROAS
3.44x
3.25x
Profit after ads
+$602
+$305
Margin after ads
31%
29%
Average cart / sets per cart
$54 / 3.6
$49 / 3.4
Bought the design in the picture
13 of 36 (36%)
4 of 22 (18%)
Per dollar they are the same ad: $16 against $15 a sale, 3.44x against 3.25x. A010 has more sales only because Meta gave it more money.
A011 sends slightly fewer visitors to the checkout, but more of them pay.
Both are doors into the catalogue: most of their buyers bought other designs and built carts of three to four sets.
Where they ran and how the money was shared
Day
Short set budget
A010 spend / sales
A011 spend / sales
08-28
≈$50
$ 17 / 0 Shop All
$ 26 / 0 Shop All
08-29
≈$50
$ 14 / 0 Shop All
$ 9 / 0 Shop All
08-30
≈$50
$ 17 / 1 Shop All
$ 8 / 0 Shop All
08-31
$30
$ 0 / 2
$ 2 / 0 Shop All
09-01
$30 → $50 (6:33 PM)
$ 2 / 0
$ 0 / 0
09-02
$50
$ 54 / 4
$ 3 / 0
09-03
$50 → $75 (12:07 PM)
$ 61 / 1
$ 4 / 0
09-04
$75
$ 82 / 3
$ 0 / 0
09-05
$75
$ 52 / 2
$ 1 / 0
09-06
$75
$ 64 / 3
$ 14 / 1
09-07
$75
$ 38 / 1
$ 23 / 2
09-08
$75
$ 38 / 1
$ 34 / 7
09-09
$75
$ 37 / 7
$ 35 / 2
09-10
$75 → $100 (11:46 PM)
$ 38 / 2
$ 38 / 3
09-11
$100
$ 45 / 3
$ 52 / 2
09-12
$100
$ 30 / 6
$ 63 / 1
09-13
$100
$ 30 / 0
$ 62 / 4
09-14
paused 1:04 AM
$ 0 / 1
$ 0 / 0
TOTAL
$573 / 36
$329 / 22
Both were born at the launch (08-27) pointing at Shop All, where they did almost nothing. On 09-01 fresh copies were made that point at the design's own page, and the old ones were paused.
They shared one ad set and one budget. Meta chose the split: A010 got 61% of the money, A011 35%, A013 4%. A011 got $0 to $4 a day for its first four days.
Neither was ever paused on its own. They stopped when the whole campaign was paused on 09-14 at 1:04 AM.
10
The other two winners, A095 and A085 (iteration 2, 09-07 → 09-13)
Simple version. Two more ads cleared the bar, on smaller numbers. A095 shows a damaged nail growing back under a set over 14 days and sold 13 times at $23 each. A085 shows a nail next to a penny and sold 7 times at $23 each, with the biggest carts of any ad. Both are promising, not proven; both go into the next test with their own budget.
A095 Gold Leaf, day 0 / day 1 / day 14"It grows back under the set." · Conditions story · lands on the Gold Leaf page
Spend$299
Days with real money7
Sales13
Cost per sale$23
ROAS2.14x
Profit after ads+$88
Average cart$49
A085 Champagne Dots beside a penny"Short enough for short nail beds." · Short · lands on the Champagne Dots page
Spend$162
Days with real money7
Sales7
Cost per sale$23
ROAS2.48x
Profit after ads+$87
Average cart$57
What happened well
A095: the picture is proof over time. One nail on day 0 (hidden), day 1 (a set going on) and day 14 (grown back). The first line names the person: "the nail you've been hiding". 13 sales at $23 each, 2.14x, +$88 after ads; 29% of the people it sent to the checkout paid.
A085: a single nail next to a penny proves the size, and "Short enough for short nail beds" names the person. 7 sales at $23 each, 2.48x, +$87 after ads; 39% of checkout arrivals paid.
A085 has the biggest carts of any ad: $57 and 3.6 sets on average, and 12 of its 25 sets were Almond, the shape the rest of the test barely bought.
Both use A010's trick: the picture proves the claim, the first line says who it is for, and the click lands on that design's own page.
A095 is the only Conditions ad that cleared the bar. The pocket can sell when the picture shows the outcome instead of a chart.
What we did to improve it, and did it work
09-06, built in iteration 2; 09-07 at 1:20 AM, switched on at $30 a day. A095 shared its ad set with one other ad (A093, which got $8); A085 shared with three penny and coffee-bean ads (which got $13 to $22). Meta gave A095 97% of its set's money and A085 76%.
09-09 at 9:35 PM, A095's set raised from $30 to $50. Same fade as every raised ad: $14 a sale before (7 sales on $101), $33 after (6 sales on $198). Still near the bar.
09-10 at 3:54 PM, Arjun paused A085's set; 09-11 at 5:28 PM it was switched back on. Before the pause $71 for 2 sales; after it $91 for 5 sales at $18. Whether the restart helped or the sales were simply late cannot be told apart.
Never done: its own ad set and budget for either. A085's three set-mates never got a read.
Two of A095's 13 sales are people first seen at the launch who came back and bought through A095's tag. Late sales are real sales, and they are why the last days of any ad read low.
What we can do next
Both in their own ad sets at $50 a day, budgets fixed for the week (line-up sets 3 and 4).
A095: the question is whether the Conditions story holds at $50 on its own money. It sits a dollar over the bar on 13 sales.
A085: the same question on 7 sales. If it holds, re-run its three unread set-mates (penny with white dots, penny with red dots, the coffee bean) at $25 each, one per set.
Read at $100 spent, on sales and cost per sale. Both stay "promising, not proven" until they clear $22 on five or more sales in their own set.
The numbers, side by side
A095 Gold Leaf
A085 Champagne Dots
Spend
$299 over 7 days
$162 over 7 days
Visits
1,091 at $0.27 each
336 at $0.48 each
Reached the checkout
45 (4.1% of visits)
18 (5.4%)
Of those, paid
13 of 45 = 29%
7 of 18 = 39%
Sales
13
7
Revenue
$641
$402
Cost per sale (before → after the change above)
$23 ($14 → $33)
$23 ($36 → $18)
ROAS
2.14x
2.48x
Profit after ads
+$88
+$87
Margin after ads
14%
22%
Average cart / sets per cart
$49 / 2.8
$57 / 3.6
Carts of 5 or more sets
3 of 13
3 of 7
Bought the design in the picture
3 of 13 (23%)
3 of 7 (43%)
Shapes bought (sets)
Coffin 21, Oval 11, Almond 2
Almond 12, Coffin 7, Oval 5
Per dollar they match: $23 a sale each, a dollar over the $22 bar, both well over 2x.
A085 pays almost twice as much per visit as A010 ($0.48 against $0.26) and makes it back on bigger carts; A095 buys visits as cheaply as A010 and converts fewer of them.
Both are on small numbers: 13 and 7 sales. Promising, not proven.
Where they ran and how the money was shared
Day
AS-13 budget
A095 spend / sales
AS-9 budget
A085 spend / sales
09-07
$30
$38 / 1
$30
$20 / 0
09-08
$30
$27 / 0
$30
$13 / 1
09-09
$30 → $50 (9:35 PM)
$36 / 4
$30
$21 / 0
09-10
$50
$59 / 2
$30, paused 3:54 PM
$17 / 1
09-11
$50
$35 / 1
back on 5:28 PM
$13 / 0
09-12
$50
$53 / 0
$30
$47 / 4
09-13
$50
$51 / 3
$30
$32 / 1
09-14
paused 1:04 AM
$0 / 0
paused 1:04 AM
$0 / 0
TOTAL
$299 / 13*
$162 / 7
Both were built on 09-06 in iteration 2 and switched on by MJ on 09-07 at 1:20 AM, each at $30 a day in a set shared with other ads.
*A095's total includes 2 sales from people first seen at the launch who bought later through its tag, so the daily column adds to 11.
Neither ad was ever paused on its own. A085's set was paused by Arjun on 09-10 for a day. Both stopped when the whole campaign was paused on 09-14 at 1:04 AM.
11
Wave 1, the launch (08-28 → 09-01)dashboard "8/28 launch"
08-28
Result
What happened
First day of delivery. $329 spent; 7 sets at ≈$47 each, i.e. the sets ran at ≈$50/day (see disagreement 1)
08-28 14:30
Shopify
What happened
80 products included on the NEW "Meta" channel
08-29
ResultShopifyTracking
What happened
First Pay clicks: 4 people. Theme Production_v1.2 published (PRICING v2 renamed "…(08/29/26)" and unpublished). Two Shop Pay checkouts never reached our pixel, the blind spot found
08-30
Tracking
What happened
Arjun's Mission Control v1 built (18:56–20:28); the sheet hand-reconciled (7 buyers / $203 that evening); wall verified with real traffic (a customer pressed Pay twice, zero orders); rule set: our MC intent count is a floor
08-31
MetaAdsTracking
What happened
Budgets cut $50 → $30 per set (spend $327 → $208); 4 MixMatch ads (A030, A031, A032, A037) last touched 19:33 (paused); the sheet's "not checked" marker fixed so the hourly log reader advances itself
09-01 18:04 → 20:00
ShopifyTracking
What happened
Website: the Stack & Save bar's offer line ("$14 a set, 5+ sets: $12 each…") replaced by a "Secure Checkout, $X" button on the collection page, the Technique page grid and all 7 landing pages (18:39); adding from a product page now opens the cart drawer on phones too, the pinned bar ducks out of the way at the bottom of the page, phone product pages un-stick the header (19:57–20:00). POR-52: the ad name (utm_content) written into a cart attribute so the wall log carries the ad, Pay clicks before 09-01 can never be traced to an ad. Arjun's custom checkout pixel (Version 15) starts feeding the sheet's Checkout events tab
09-01 18:33
MetaAds
What happened
AS-5-MixMatch paused; AS-3-Collector → $20; AS-2-Short → $50; the launch ads not being kept paused one by one
09-01 20:10–20:18
Tracking
What happened
Microsoft Clarity session recording installed by Arjun in theme.liquid (project ybt4ep1sz7); email and search boxes masked
12
Wave 2, consolidation, design test, A013 force test (09-01 8:44 PM → 09-06)dashboard "9/2 consolidation" + "9/3 design test" + "9/3 A013 force test"
09-01 20:44–20:46
MetaAds
What happened
Consolidation goes live. AS-8-ForceTest created ($40); AS-7-AllergyStory, AS-3-Collector, AS-4-Method paused; AS-1-Gap → $50; AS-6-Conditions → $50; 9 rewritten "-PDP" ads created, each pointing at a design's own product page, Short: A010 → Garnet, A011 → Cobalt Tips, A013 → Ballet Slipper, Gap: A004 → Something Blue, A002 → The Red, Conditions: A045 → Tortoise, A054 → Tortoise, ForceTest: A028 → Cherry French, A048 → Tortoise. $190/day. Launch phase closed at this minute
09-02 03:44
Meta
What happened
AS-9-Short, AS-10-Gap, AS-11-Conditions, AS-12-Reusability created INACTIVE (a first draft of the next wave; never ran; rebuilt 09-06)
09-02 07:49
Shopify
What happened
Website, MJ's push: the image deck landed on the product page under Add to Bag (five tilted cards you swipe, headline crossfading above); the three stacked shape pills became three shape-icon tiles in one row; "Find your size" moved beside the shape row and opens as a pop-up; description, rewear box and "Your Rotation" bar hidden so set pricing sits right above the button; sticky bar yields on scroll-up
09-02 15:55 → 19:41
Shopify
What happened
Website, Arjun's push: the Technique page's Why-Tabs pill section replaced by the same deck, new hero copy "You decide how long they stay on.", homepage copy edits, the PDP's benefit-imagery blocks removed, the Why Tabs component deleted from the theme
09-02
ResultDecision
What happened
First full consolidation day: $238 spend, 9 Pay people ($600), the best day yet. Arjun: "we're counting it today forward" (phase counts from 09-02)
09-03 08:38–08:42
MetaAds
What happened
Design test built: AS-2.1 Cherry Noir, AS-2.2 Espresso Velvet, AS-2.3 Bare Minimum, AS-2.4 Ballet Tips, AS-2.5 Pearl Slip at $10/day, one A010-pose ad each on its own PDP with the shape preselected
09-03 10:56–10:57
Meta
What happened
Arjun switched the 5 design-test sets Active
09-03 12:07–12:11
MetaAds
What happened
Day-one read applied: AS-2-Short → $75, AS-6-Conditions → $75, AS-1-Gap → $30; A048-PDP and A002-PDP paused (12:08); AS-2.6-Short-ForceTest created ($30) holding A084, an exact copy of A013 with its own tag, Active 12:11. Live budget $300/day
09-03
TrackingDecision
What happened
Dashboard rebuilt around phases, intent carts and the money; GA4 dropped as a source; day-6 demand read written (19 Pay-clickers / $888; the sheet is the Pay-click authority); MJ ruling: coffin is extra short too
09-04 00:16
Shopify
What happened
Website, MJ's push: shape mix in every product grid. Cards no longer all show Almond: each block of three carries all three shapes in scrambled order, each card shows that shape's own photo, the hover pose-swap follows it, and tapping a card opens the product page with that shape already selected (Shop All, Technique grid, all 7 landing pages, cart upsells, best-sellers row). Nothing else changed on the site until the price rise on 09-09
09-04
ResultTracking
What happened
Best launch-era day: $340 spend, 10 Pay people ($436). Our Mission Control v13 starts reading the sheet; sensor ladder recorded (sheet 19, Meta add_payment_info 16, GA4 14, MC 9)
09-04 23:17
Meta
What happened
AS-1-Gap paused; AS-2.6 force test paused (A084: one person for $51, "the answer was no"); AS-8-ForceTest → $20. phases.json writes this up as 09-05 02:20 AM PT; Meta's own log says 23:17 on 09-04
AS-8-ForceTest paused (0.46x). Consolidation is now AS-2-Short + AS-6-Conditions at $75 each; 5 ads live (A010, A011, A013, A045, A054)
09-06 19:15–19:26
AdsMeta
What happened
Iteration 2 built, paused: AS-13-ConditionsStory ($30, 2 ads), AS-9-Short (4 penny / coffee-bean ads), AS-10-Gap (4), AS-11-Conditions (3), AS-12-Reusability (4), 17 ads (A085–A101), new pictures and words, each on a design's PDP with the shape preselected. Arjun: "turn the ads on at 12 am PST"
13
Wave 3, iteration 2 (09-07 → 09-09 6 PM)
09-07 00:45–01:10
Ads
What happened
Pre-flight on the 17 ads: A094 relinked Bare Minimum → Cinnamon Velvet, A089/A090 Lilac Chrome → Aurora Lilac; 9 ads rebuilt on clean creatives (all Advantage+ features opted out)
09-07 01:20
Meta
What happened
MJ switched AS-9, 10, 11, 12, 13 Active (Meta records "Mj Patio"; the dashboard text says "Arjun at midnight"). Live budget $350/day
09-07
ResultShopifyTracking
What happened
Busiest traffic day of the test: 1,182 ad sessions, $353 spend, 9 Pay people. Coffin box label "SHORT COFFIN" → "X SHORT COFFIN" live on 72 boxes; Sorbet Tips reaches 15/15 images; first Clarity drop-off read (A045 → Tortoise PDP); Manufacturing page added to the dashboard
09-08
ResultTrackingDecision
What happened
12 Pay people ($743). Clarity full sweep (5,669 sessions: sticky add button used 0 times; PDP loses 63% by 15% depth); audience read (Pay clicks 35-65+, none under 35); duplicate rules: same-cart merge built and removed the same day
09-09 (day)
Result
What happened
Best day of the test: 22 Pay people, $1,197 at today's ladder ($850 before 6 PM + $222 after, at the prices seen) on $368 spend
14
The price rise (09-09 evening)the sheet's "Phase 3 New Pricing Ladder Launch"
09-09 (before 6 PM)
Tracking
What happened
Price eras built into the dashboard so every cart is priced at the ladder of its own minute (keyed on First seen)
09-09 17:10 → 18:46
Shopify
What happened
Theme Production_v1.3 – "price +2, ship 6 (2026-09-09)" created by Arjun (17:10); every surface that quotes a price rewritten to $16 / $14 / $12 (announcement bar, Stack & Save bar and its running message, offer line, cart drawer and page, PDP set pricing, home, quiz, kit, technique page, all 7 landing pages: 34 files, 17:24–17:42); published at 18:46, v1.2 unpublished. It is the live theme now
09-09 18:02–18:03
Shopify
What happened
Sets $14 → $16 (225 variants); both ladder discounts edited (still $2 / $4 off) → ladder $16 / $14 at 5+ / $12 at 10+; flat shipping under $60 $5 → $6 (free at $60 unchanged); accessories up too: Nail Tabs $8 → $10, Brush-On Glue $9 → $10, Glass Nail File $6 → $7, Cuticle Stick $6 → $7, Cuticle Oil $12 → $14, The Nail Kit $34 → $36. Dashboard cutover recorded as 06:00 PM
09-09 21:35
Meta
What happened
Budgets re-cut for the new prices: AS-13-ConditionsStory → $50; AS-6-Conditions → $50 (from $75); AS-2.2 Espresso Velvet → $30 and AS-2.4 Ballet Tips → $30 (from $10); AS-2.5 Pearl Slip paused
09-09 (why, per MJ on 09-15)
Decision
What happened
Why the price rose: Arjun's call, with two aims: find out whether a $2 higher price cuts the number of people who press Pay (are shoppers price-comparing, or not?) and lift the margin. Early read: it did not cut them. Site copy was changed to match the new ladder; ad copy was deliberately left alone so the ad data stays comparable
15
Wave 4, the scale-up on the winners + the video test (09-10 → 09-13)
09-10 00:29
AdsMeta
What happened
AS-14-ShortVideo created ($30) with A102 "SoldAsShort-Dice", the test's first video ad (copy quotes the new $16/$14/$12 ladder); MJ switched it Active 01:19. MJ (09-15): A102 and A103 are the same concept and copy, only the design differs (Dice vs Raspberry Velvet)
09-10 (day)
ResultTracking
What happened
18 Pay people ($872); $390 spend. Arjun fixes his machine's timezone (Windows was on Central-Mexico; page stamps had run ~2 h early); the All view now counts untraced Pay people; profit-margin tile
09-10 15:54
Meta
What happened
AS-6-Conditions paused (the A045/A054 control is over), AS-9-Short paused, AS-2.1 Cherry Noir paused
09-10 23:46 → 09-11 00:32
MetaAds
What happened
The re-allocation: AS-2-Short → $100/day; AS-14 video → $50; AS-15-ShortVideo created ($30) with A103 "SoldAsShort-RaspberryVelvet" (MJ Active 00:21); AS-10-Gap, AS-11-Conditions, AS-12-Reusability paused; AS-2.2 Espresso Velvet → $50; AS-2.4 Ballet Tips → $50; AS-2.3 Bare Minimum paused. MJ (09-15): Arjun's call; Conditions was switched off on purpose (15:54) to free budget for the others
09-11 10:36 → 12:39
Shopify
What happened
Batch 2: 20 new designs (59–78) created at $16 and published by Arjun, Cabernet, Ruby Velvet, Rosé Velvet, Caramel Milk, Sterling, Dew French, Gilded Tips, Halo, Frost Tips, Chestnut Velvet, Leopard Tips, Merlot Velvet, Rosewater, Champagne Velvet, Jaguar, Rouge Noir, Zebra Tips, Gold Thread, Fawn Tips, Wisteria. Catalogue 73 → 93 sets. Sorted into All Sets and the six vibe collections 16:14–16:21. COGS for them estimated at family averages the same day
09-11 16:16 / 17:28
Meta
What happened
AS-15 video → $50; AS-9-Short re-activated. Final line-up from here: AS-2-Short $100 (A010/A011/A013), AS-2.2 Espresso Velvet $50, AS-2.4 Ballet Tips $50, AS-9-Short $30 (A085/A086/A087/A096), AS-13-ConditionsStory $50 (A093/A095), AS-14 video $50, AS-15 video $50 = $380/day
09-11 17:02 → 19:22
Shopify
What happened
Website, Arjun: the pop-out product page on Shop All. Tapping a set's photo or name now opens the whole product page in a pop-up over the grid (gallery, shape buttons, set pricing, sizing guide, Add to Bag all inside it; "Close" pill top right; Back returns to the card). Same push: Tortoise and Tortoise Tips no longer appear twice on All Sets. The last change to the site: nothing on the live theme is newer than 19:22
09-11
DecisionTracking
What happened
10 Pay people ($516). Design performance read (day 15: 109 Pay-clickers into three groups); ad register updated for the 25 ads launched since 09-02
09-12
ShopifyTracking
What happened
12 Pay people ($764). Batch 2 imagery/copy pass on Shopify; "Remove Duplicates" button on the dashboard. Data state 20:41: 140 intent purchases / $6,685 / $4,769 spent
09-13
Result
What happened
Last full day: $410 spend (highest of the test), 1,162 ad sessions, 14 Pay people ($534). No change made
16
The end
09-14 01:04
Meta
What happened
Arjun paused the campaign ABO-POR-DemandTest. Test over. $1.87 of trailing spend; 3 late Pay people on 09-14 (two with no ad tag, one from A010). MJ (09-15): a planned stop, the test was budgeted at about $5,000
09-14 17:30
Tracking
What happened
Last dashboard build: Prices chip ("As they were, Today's ladder"), Top ads + Bestsellers with pictures, the sheet's duplicate label replaces the button; four pages the next morning. Final data state 17:31: 154 intent purchases / $7,187 / $5,195.70 spent. The hourly refresh has not pushed since
09-15
Result
What happened
Meta spend $0. Direct shoppers still trickle into the sheet as "not checked" rows
17
The next test (one week, about $2,500)
Simple version. Run the four proven ads again, each with its own money, and see whether they stay cheap. Beside them, a handful of small copies of the winning picture with one thing changed. Touch nothing for three days, kill the dead ones on day four, and count the winners at the end of the week. If the winners stay under $22 a sale, we have a business; if they get expensive, we turn them back down and grow the copy that holds instead.
The line-up, about $325 a day
Ad set
Ad
Budget a day
Week
What it answers
1
A010 Garnet, as it ran
$50
$350
Does the best ad hold on its own money (it averaged $48 a day inside a shared set)
2
A011 Cobalt Tips, as it ran
$50
$350
First clean read of the second winner; $50 is double what it averaged
3
A095 Gold Leaf, day 0 / day 1 / day 14
$50
$350
Does the Conditions winner hold; it sits a dollar over the bar on 13 sales
4
A085 Champagne Dots beside a penny
$50
$350
Same question, on 7 sales
5
Bare Minimum, the A010 picture as it ran
$25
$175
The winner that was cut while winning
6
Garnet pinch with "Short like you mean it."
$25
$175
Is the line on the picture the difference between A010 and A011
7
Garnet next to a penny
$25
$175
A different proof of the same claim, on the winning design
8
Garnet pinch with the comment-reply line ("Can y'all make nails for the girls with short nail beds 😭 / Done.")
$25
$175
A013's idea, funded cleanly for the first time
9
One new proof device of MJ's (the nail against something everyone knows the size of)
$25
$175
A new way to show the length
9 ad sets, one ad each
$325
$2,275
leaves about $225 of the $2,500 in hand
Rules for the week
One ad per ad set, always.
Every copy of A010 keeps A010's words and lands on the design's own product page with no shape preselected. Only the picture changes.
Budgets are set on day one and never raised during the week.
Nothing on the collection page.
Tracking checked before the first dollar.
Rank on sales and cost per sale, never on checkout arrivals.
Keep the wall, the sheet and the dashboard running three days after the ads stop, so late sales land before the read.
What each result means
If A010 and A011 stay under $22 a sale at $50 a day for six days: the two ads can carry about $100 a day at the 20% bar. Move them to a scaling campaign with a minimum under each. Plan inventory on about three sales a day per ad (arithmetic on the first test's rate, not a forecast).
If they get more expensive: do not kill them. Turn each back to the budget where it held and let it keep selling there. Grow whichever $25 copy holds instead.
Kill a winner only if it stays over the bar at the low budget for six days.
Either answer is worth the money. The second one is worth more.
18
How we call an ad (the rules, any round)
Simple version. Count money, not days. $100 spent decides a kill, $150 decides a winner, and the bar an ad has to hold is $22 a sale. Double a proven winner once and step back if it drifts. Never kill a winner to pay for its variations. The written rulebook is Ads/_AD-TESTING-RULES.md.
The bar$22 a sale
The ad cost per customer, the CAC. The most you can pay in ads to get one person who presses Pay and still keep a 20% margin after ads, at the new price. Every call below is measured against it.
Average cart
$51
$7,829 across 154 sales
Profit before ads
$32
product, label, mailer, card fee taken out
Keep a 20% margin
−$10
20% of $51
Left for ads, the bar
$22
CAC
$25 = 2x ROAS, still a winner · $30 = break even, the keeper kill line at $300 · $44 = twice the bar, kill at $150
Remember 1$100 to kill, $150 to call
Count money, not days. 0 or 1 sale at $100: kill. 5 or more at $22 or less by $150: winner. 1 to 4 at $100: halve, count again in two days. No ad with 1 to 4 sales at $100 ever became a winner in the test.
Remember 2Only a proven winner takes a double
A010 and A011 held at $16 and $15 a sale when their set went from $50 to $100. A045, Ballet Tips and Espresso Velvet doubled their cost per sale when raised. Double once. Over $22 for three days: step back.
Remember 3Never kill a winner to fund variations
Bare Minimum was cut at 5 sales and $16 a sale to close the design test. A winner keeps its money as long as it holds $22. Variations get their own sets and their own money.
How to call each ad
Count money, not days. No ad is judged before it has spent $100.
$100 and 0 sales: kill.
$100 and 5 or more sales at $22 or less each: winner. Hold six days, then double.
$100 and 1 to 4 sales: halve the budget, count again two days later. 5 or more, restore it; 0 or 1, kill; 2 to 4, keep that budget and never raise it.
$150 and over $44 a sale: kill.
Between $22 and $44 a sale it is a keeper: it earns its own money and nothing more. Keep the budget it held at, never raise it. Raise it and you turn a keeper into a loser.
At $50 a day an ad reaches $100 on day 2 and is decided on day 4. At $25 a day: day 4 and day 6.
The kill or keep table
Spent so far
Sales
Do
under $100
any
Nothing. Do not look yet.
$100
0
Kill.
$100
1 to 4
Halve the budget and count again two days later: 5 or more, restore it; 0 or 1, kill; 2 to 4, keep that budget and never raise it.
$100
5 or more, at $22 or less each
Winner. Hold the same budget six days, then double it.
$150
over $44 a sale
Kill.
$300
over $30 a sale
Kill.
after a double
over $22 a sale for three days
Step back to the last budget that held. Kill only if it stays over the bar there for six days.
The same thing as a picture
$22 a saleis the bar in every box below. 20% margin at the $16 price; $25 is 2x ROAS. Hold it and you are a winner. Lose it for three days after a raise and you step back.
Step 1 · the first read, at $100 spent
Step 2 · what happens to a winner (does it hold $22?)
Step 3 · what happens to a keeper (over $22, under $44)
killwinnerhold (a keeper)a questionMoney, not days. At $50 a day an ad reaches $100 on day 2 and is decided on day 4; at $25 a day, day 4 and day 6.
The CBO rulewhen a winner is big enough to leave the ABO
WhenOnly a winner that held its double
An ad that stayed at $22 or under at $100 a day in its own set for a week. Anything smaller keeps growing in the ABO. Conor moves an ad only when it can carry real money on its own (ep05, ep07).
How to moveDuplicate, switch on, switch the ABO copy off
Copy the ad into the CBO, turn it live there, pause the ABO ad set but keep it. Never run both copies at once: they bid for the same people and neither read is clean.
Inside the CBOOne ad per ad set, a floor under each
The campaign holds the budget and Meta moves it between the ads. Every ad set gets a minimum spend at the level the ad held in the ABO, so the favourite cannot starve the others (Conor, ep08).
JudgingSame as the ABO: $22 a sale
Spend share is Meta's opinion, not a verdict. An ad on $50 at $18 a sale is a winner; an ad on $250 at $30 is a keeper on a winner's money. Read each ad at $150 spent, and read the campaign's blended cost per sale too.
ScalingRaise the campaign a step at a time
Each raise no bigger than the last. Blended cost per sale over $22 for three days after a raise: step the campaign back. Leave a CBO winner running; turn it off only when it gets really bad (ep05).
If a moved winner does not holdFloor it, read it, move it back
Floor at its ABO budget, give it $150. Still over $22: un-pause the ABO set at the budget where it held and turn the CBO copy off. If it fails there too, it is the ad, not the campaign: step back to the last budget that held.
Left running too longby the rules above, ad by ad
Every ad replayed against the rules above. Total excess spend is the money spent past the point a rule said stop: past the $100 read for a loser, past $150 where the $44-a-sale rule applied, past the $300 keeper line for A045 on Tortoise, and the whole raise above the old daily level for the three ads raised on 09-10. Money is New Price.
Ad
The rule that fired
Start day & phase
Rule day
Stopped
Days past
Total excess spend
Total spend
Sales
Per sale
A045 damage story, Tortoise pagekeeper
$300 spent at $31 a sale; the keeper line is $30
09-01Consolidation
09-06
09-10
4
$286
$586
16
$37
A082 Ballet Tips, A010 copykeeper
raised $11 to $37 a day; next 3 days $135 a sale
09-03Design test
09-12
09-14
2
$148
$263
8
$33
A080 Espresso Velvet, A010 copykeeper
raised $12 to $38 a day; next 3 days $68 a sale
09-03Design test
09-12
09-14
2
$145
$264
7
$38
A029 no-crusties gardenloser
$100 with 0 sales
08-28Launch
08-30
09-01
2
$68
$168
2
$84
A028 outdated stamp, product pageloser
$100 with 1 sale
09-01Consolidation
09-04
09-06
2
$56
$156
1
$156
A095 Day 0/1/14winner at 2x, raised early
raised $36 to $59 a day; next 3 days $49 a sale
09-07Iteration 2
09-12
09-14
2
$54
$299
13
$23
A004 sticker QA, collection pageloser
$100 with 0 sales
08-28Launch
08-30
09-01
2
$38
$138
0
—
A102 video, Diceloser
$150 spent at $46 a sale
09-10Iteration 2, video
09-13
09-14
1
$36
$186
4
$46
A103 video, Raspberry Velvetloser
$100 with 0 sales
09-11Iteration 2, video
09-13
09-14
1
$35
$135
0
—
A045 damage story, collection pageloser
$100 with 1 sale
08-28Launch
08-31
09-01
1
$24
$124
1
$124
A058 stop-reveal macroloser
$100 with 0 sales
08-28Launch
08-31
09-01
1
$15
$115
0
—
A094 pretty or healingloser
$100 with 0 sales
09-07Iteration 2
09-10
09-10
0
$11
$111
0
—
Total
losers $283 · keepers and the early raise $633
$915
$2544
52
What the column says$915 spent past the point the rules would have stopped it, 18% of the test.
$633 of it is keepers fed like winners, $283 is losers run past their read. Nothing ran a week too long. The leak was budget put on ads that had not earned it, and A045 on Tortoise alone is $286 of it. The $50-a-set launch that got four losers to $100 by day 3 is the part no rule can claw back; only the structure can.
19
Where the sources disagree, settle these before reading results
Launch budgets, 08-28 → 08-30.phases.json: "Budgets cut $50 to $30 per set on 08-31". Shopify Apps/_STATE.md (08-30) and the build manifest: "7 × $30". Meta's activity feed shows the sets created at $30 and no budget event until 09-01. Spend is the referee: ≈$47 per set per day for three days, then $30 from 08-31, the sets were effectively at $50; the raise and the cut are simply missing from Meta's feed.
Gap + A013 force test pause time.phases.json / RUNBOOK say 09-05 02:20 AM PT; Meta's log and Ads/_STATE.md say 09-04 23:17 PT. Arjun's laptop was on the wrong timezone until 09-10; trust Meta.
Who switched iteration 2 on. Page text: "Arjun at midnight PT 09-07". Meta and Ads/_STATE.md: Mj Patio, 09-07 01:20 PT.
Design test "still PAUSED".Ads/_BUILD-MANIFEST-DESIGNTEST.md says built 23:39 PT and still paused; the sets were created 08:38 PT (23:39 was Manila) and Arjun activated them 10:56 PT the same morning.
Iteration 2 is 19 ads, not 17, and phases.json was never updated after 09-06: AS-14 and AS-15 (video) have no phase of their own, the exact failure mode the RUNBOOK warns about.
The consolidation caption is stale ("two ad sets at $75 each"): Conditions went to $50 on 09-09 21:35, off on 09-10 15:54; Short ran at $100 from 09-10 23:46.
Live theme. Workspace memory and theme-repo notes: Production_v1.2. Shopify: Production_v1.3 (price +2, ship 6) since 09-09 17:10, made in the admin, the theme repo has no commits after 09-02 and a dirty tree, so the live theme has drifted from git again.
The pricing canon is stale everywhere but Arjun's repo._MASTER-CHECKLIST.md, Shipping Cost Model/_STATE.md, _PRODUCT-TRUTH.md still say $14 / $12 / $10 + $5 flat; the RUNBOOK still says $5 in two places; the discount titles in Shopify still read "($14/set)" and "($12/set)". Live since 09-09 18:00: $16 / $14 / $12, $6 flat under $60, free at $60.
Early spend totals. "$1,571 Aug 28 → Sep 3" (Ads/_STATE.md) vs "$1,657" (Shopify Apps/_STATE.md) were both mid-day reads; settled Meta spend 08-28 → 09-03 inclusive is $1,867 (through 09-02: $1,593).
Meta's activity feed is incomplete: no budget change before 09-01, no ad-level pauses after the build, nothing from 09-07 08:20 until 09-09 21:35, hourly snapshots of data/meta.json (Arjun's repo) fill the gaps and agree with the feed where both exist.
Pay-people totals by sensor: dashboard 154 people / $7,187 as seen / $7,829 repriced; sheet Pivots $7,151 (formula spill, lags by a few rows); Shopify abandoned checkouts 176 records (anyone who typed an email, a different thing). Use the dashboard / sheet YES rows for people, never the abandoned-checkout list.
The meta-ads connector currently holds the WRITE token (ads_management, business_management, expires 2026-10-25), memory and CLAUDE.md say it holds the read-only one. Only read calls were made today. Swap it back before anything automated touches it.
Dashboard chips still say LIVE / "Live now 0": the campaign has been paused since 09-14 01:04 and the hourly job has not pushed since 09-14 17:30.
20
Answers so far, and what is still open
Answered by MJ on 2026-09-15
Why the price rose ($14 → $16, $5 → $6 shipping): Arjun's decision. Two aims: test whether a higher price cuts the number of people who press Pay (it did not seem to), and lift the margin. Site copy was changed to match; ad copy was left untouched so the ad data stays comparable.
The end: planned. The test was budgeted at about $5,000; the campaign was paused at $5,214.
The video ads: A102 (Dice) and A103 (Raspberry Velvet) are the same concept and copy, only the design differs.
Direct-traffic spikes on 09-05 and 09-07: probably a mix of team QA and sharing; not known for sure.
Team traffic: MJ made no test purchases during the test and believes team sessions were filtered.
The yardstick for every phase:profit margin of 20% or more after ad spend, and intent ROAS of 2x or more. (Whole test: −3.8% and 1.51x. The consolidation wave alone: 21.4% and 2.44x.)
Price basis for the readout: both, side by side, with a toggle.
Headline count: the dashboard's 154 people are exactly the sheet's 154 YES rows (one row per person; the 7 rows marked duplicate are excluded by both), so there is no difference to choose between.
The 09-10/11 re-allocation: Arjun's call. Switching off Conditions (A045/A054) was intended, to free budget for Short, Espresso Velvet, Ballet Tips and the two video ads.
Launch budgets 08-28 → 08-30: Meta's change history has no budget entry for those days; the spend (≈$47 a set a day, then $30) says the sets ran at $50. Treated as $50.
Still open
AS-9-Short went off on 09-10 (15:54) and came back on 09-11 (17:28); reason not recorded.
What the deep dive must decide (inventory order, launch ads, pricing, budget), order constraints (minimums, budget) and timing are on hold until MJ has asked his own questions.
The success metric was never written before spend; the 20% / 2x yardstick above is the after-the-fact standard.
Wall message ("Sold out, this drop is gone for now", flagged 08-27 as false scarcity) never changed and never resolved.
The theme repo has no commits after 09-02; everything later (the price copy, the pop-out) was done in the admin by Arjun and is dated above from the theme file history. The live site has not changed since 09-11 19:22.
Abandoned-checkout export (Shopify deletes after 3 months), never scheduled.
Source of truth: Ads/_DEMAND-TEST-TIMELINE.md in the workspace. All times Pacific.