Meta Ads · TOF Expansion · Post-Mortem
What Happened When We Scheduled?
Schedule live Jun 25
15 days after vs 27 before
Recommend revert
Blended cost per lead
$5.09 → $9.27
1.8× worse after the schedule went live
Leads not collected
65
Same CA$732 at the old rate buys 144, not 79
Schedule compliance
11 of 16
Comparison Chart hours that actually ran
Real hourly edge
1.52×
Validated out-of-sample. The signal was real.
Ordered vs Delivered
The automated rules were set on June 25. The top row of each grid is the schedule we asked Meta to run. The bottom row is what Meta actually delivered, measured in real spend. Where the two rows disagree, the schedule did not do what it was told. Hover any square for the numbers behind it.
Ordered on
Ordered off
Delivered as ordered
Delivered heavily (over 2× its old spend)
Ordered on, never ran
Ordered off, ran anyway
Off, correctly silent
How to read this
Ordered on, never ran (hatched red)
The rules told Meta to deliver in this hour and Meta spent nothing there across all 15 days. These are the hours that silently disappeared from the plan.
Delivered heavily (bright blue)
This hour absorbed more than double the daily spend it used to get. The budget the lost hours would have spent had to go somewhere, and it went here.
Contiguity
How many uninterrupted hours a delivery window runs for. When an ad set switches back on, it takes time to re-enter the auction and ramp up. Short windows never get up to speed before they close again.
Compression
Meta paces a daily budget to spend it within whatever time it has. Halve the available hours and the same money gets pushed through the hours that remain, bidding harder for each impression.
Worked example, Comparison Chart at 8pm: before the schedule it took CA$1.66 of spend a day and returned leads at CA$4.98 each. After the schedule it took CA$7.38 a day, which is 4.5× as much, and leads cost CA$5.82. It held up better than its neighbours, and it still got worse. At 11pm the same story is uglier: CA$1.24 a day becomes CA$3.01 a day, and the lead price goes from CA$2.24 to CA$11.30.
The Compression Tax
The six evening hours are the only ones that survived on Comparison Chart. Same audience, same single creative, same hour of the day, before and after. The only thing that changed is how much money had to move through them.
| Hour | Spend / day before | Spend / day after | Spend multiple | CPR before | CPR after | CPR multiple |
|---|---|---|---|---|---|---|
| 6pm | CA$2.00 | CA$2.52 | 1.3× | CA$5.99 | CA$6.31 | 1.05× |
| 7pm | CA$1.56 | CA$4.31 | 2.8× | CA$4.20 | CA$9.23 | 2.20× |
| 8pm | CA$1.66 | CA$7.38 | 4.5× | CA$4.98 | CA$5.82 | 1.17× |
| 9pm | CA$1.86 | CA$7.26 | 3.9× | CA$4.19 | CA$12.09 | 2.89× |
| 10pm | CA$1.57 | CA$4.36 | 2.8× | CA$2.49 | CA$7.26 | 2.92× |
| 11pm | CA$1.24 | CA$3.01 | 2.4× | CA$2.24 | CA$11.30 | 5.05× |
| 6pm to 11pm | CA$9.88 | CA$28.83 | 2.9× | CA$3.71 | CA$8.01 | 2.16× |
Not one of the six improved. This is not a creative story either: after the change, 100% of Comparison Chart spend went to a single ad, A2 "Info Comes Later", and that one ad's own cost per lead went from CA$4.05 to CA$7.84. Same ad. Same people. Nearly double the price.
Was The Hour Signal Real?
Two separate questions, and they have different answers. The hours we picked were genuinely better hours. The mechanism we used to run them was the problem.
Yes · the hours held up
The hourly ranking predicts the future, out of sample.
We ranked every hour by cost per lead using only May 26 to Jun 9, then checked what those hours actually did in Jun 10 to Jun 24, data the ranking had never seen. The cheap hours stayed cheap. A random ranking, simulated 20,000 times, produces a 1.00× edge on average and clears 1.37× only 5% of the time.
1.52× edgep = 0.014. The hour-of-day effect is real, and it is modest.
No · the prize was oversold
The ceiling was about 15%, not 75%.
In the pre-schedule data the kept hours ran CA$3.74 and the cut hours ran CA$7.03. Moving every cut-hour dollar into a kept hour at perfect efficiency and zero compression cost takes 209 leads to 241. That is the theoretical maximum. The earlier report projected roughly 120 extra leads, which assumed the CA$485 of "dead hour" spend was recoverable. Nearly all of it was ordinary statistical noise: 187 zero-result day-and-hour squares observed, and 181.6 expected purely by chance.
+15% ceilingAgainst a compression cost measured at 2.16×. Negative expected value.
The part worth keeping. Before any schedule existed, 71.9% of Comparison Chart spend was already landing in the hours the analysis would go on to call "good". Meta was already day-parting, dynamically, while keeping the freedom to spend elsewhere when the auction turned favourable. The schedule did not add intelligence. It removed an option.
Key Takeaways
What the two weeks actually taught us.
01 · The Failure
The rules did not run the schedule we wrote.
Comparison Chart was told to run 16 hours. It ran 11. The whole morning block from 8am to 12pm, one of the two cheap engines the analysis identified, took zero spend across 15 days. Meanwhile 12am, an hour we explicitly cut, spent CA$11.42 and returned 3 leads at CA$3.81.
02 · The Mechanism
Fragmented windows never get off the ground.
Delivery restarts went from 1.1 a day to 3.9 a day. Every switch-on makes Meta re-enter the auction and ramp from cold. The only block that survived is the one long unbroken run, 5pm to 11pm. Short, scattered windows close before delivery ever spins up.
03 · The Cost
Both offers regressed, and it is not chance.
Comparison Chart 1.82× worse (95% range 1.37× to 2.42×, p below 0.0001). Pricing Guide 2.00× worse (95% range 1.20× to 3.33×, p = 0.003). Pricing Guide's schedule ran exactly as written, with almost no compression, and it still doubled. Restart churn is the one thing both share.
65
leads left on the table in fifteen days. The CA$732 spent since June 25 would have produced 144 leads at the campaign's prior cost per lead. It produced 79. At the Comparison Chart rate, that shortfall is worth roughly CA$330 of pure waste, and 65 fewer people in the retargeting pool that the pricing call campaign depends on.
Balance Catamarans · TOF Expansion Day-Parting Post-Mortem · May 26 to Jul 9, 2026
Prepared by Abhi Chand · abhichand.com
Method: hour-of-day data pulled at ad level in the ad account time zone across the full campaign life, split at June 25 when the automated rules went live. The before window covers 27 delivery days and 293 leads on CA$1,491.61; the after window covers 15 days and 79 leads on CA$731.97. Cost-per-lead differences are tested with a Poisson rate-ratio test. The 1.52× hourly edge is validated on a held-out window and benchmarked against 20,000 simulations of a null in which every hour is equally efficient. Caveat worth stating: the after window is short, sits over the July 4 holiday, and runs on a single creative per offer. Compression is the best-supported explanation and reverting the schedule is what will confirm it.