Daily campaign report — 2026-08-08, against 2026-08-07

The account bought $745.02 and got 814 installs at $0.915, against $749.94 and 998 at $0.751 the day before. Booked revenue was $1,695.44; within-day was $996.74, up 128.1% on the same spend. Our records read 0.99 and 1.04 of Meta's booked figure on the account's own clock, inside the documented 0.91–1.06 band. The German campaign was off for the whole day, so the worldwide buy is 100% of it against 98.4% the day before, and this is the third complete day of the five-cell split test; definitions and the report clock are in the appendix.

1Overview

Delivery rows are the delivering campaigns summed. The retired earner's booking tail (1 install (Meta), 17 registrations (ours), $3.35 within-day, on $0.00 of spend) is excluded here and named in section 5, because counting it would put installs into a CPI denominator against spend that was never incurred.

2026-08-072026-08-08move
spend$749.94$745.02−0.7%
impressions81,14275,033−7.5%
CPM$9.24$9.93+7.5%
clicks5,0164,202−16.2%
CTR6.18%5.60%−9.4%
installs (Meta)998814−18.4%
click→install19.90%19.37%−2.6%
CPI$0.751$0.915+21.8%
booked (Meta)$1,505.16 (2.01)$1,695.44 (2.28)+12.6%
within-day$436.98 (0.58)$996.74 (1.34)+128.1%
cohort @ 24h$472.45 (0.63)$1,163.66 (1.56)+146.3%

Cohort value — ARPU and ARPPU at d0, d3 and d7

Keyed on the INSTALL day and measured from each user's own install stamp: dN is their first (N+1) x 24 h. ARPU is Adjust's own series, the one the partner's dashboard reports; ARPPU is our payment ledger, because Adjust exposes no cumulative distinct-payer count. A horizon the window has not lived through yet is left empty rather than written as zero.

appARPU (d0)ARPU (d3)ARPU (d7)ARPPU (d0)ARPPU (d3)ARPPU (d7)installs
Vloom$1.0710$1.7803$2.6828$17.93$26.19$37.21971

Campaign spend split, both days. Worldwide $737.89 (98.4%) → $745.02 (100.0%); German $12.05 (1.6%) → $0.00.

Delivery got worse for the fourth day running and the money side reversed. Same spend, 21.8% more per install, within-day revenue more than doubled.

The country mix moved. US installs 4.7% → 7.1%: +13% of the payer-rate move and +13% of revenue per install, 87% inside countries (section 3).

It rests on 47 payers, one of whom is a seventh of the day. Payer rate 3.84% → 5.99%, ARPPU $11.58 → $20.18.

The split test's ranking did not replicate on its third day. Spearman +0.70 between the first two days, +0.10 against the third (section 6).

2Hourly, 2026-08-08

Hours both days delivered in, on the UTC clock: 00 through 23. Only the shared hours are compared.

Every hour of the day itself, all three revenue measures beside the delivery funnel. Delivery columns are Meta's on both sides of each ratio; ours is our own registrations and every revenue column is ours. cov is that hour's cohort coverage at H=24, which falls to zero in the last hours because those installs have not yet lived a full day.

hrspendimprCPMclicksCTRinstclk→iCPIourscovbookedbROASbPaywithinwROASwPaywARPUwARPPUcohortcROAScPaycARPUcARPPU
0$16.04147410.881006.78%3030.0%$0.53533100%$14.990.933$5.610.3510.1705.61$5.610.3510.1705.61
1$21.2521639.821476.80%3825.9%$0.55940100%$24.351.155$82.633.8942.06620.66$82.633.8942.06620.66
2$22.9923739.691325.56%2418.2%$0.95830100%$55.932.436$7.980.3510.2667.98$7.980.3510.2667.98
3$23.4728918.121756.05%2614.9%$0.90331100%$24.231.033$11.700.5020.3775.85$11.700.5020.3775.85
4$27.7230279.161725.68%3520.3%$0.79241100%$14.290.523$248.728.9736.06682.91$248.728.9736.06682.91
5$25.0428918.661434.95%2618.2%$0.96328100%$177.857.106$0.000.0000.0000.00$0.000.0000.0000.00
6$27.75272810.171495.46%3322.1%$0.84132100%$133.104.808$56.892.0531.77818.96$56.892.0531.77818.96
7$21.1925288.381445.70%3322.9%$0.64236100%$110.075.196$4.990.2410.1384.99$4.990.2410.1384.99
8$24.7528788.601465.07%2215.1%$1.12526100%$15.440.622$9.890.4010.3809.89$9.890.4010.3809.89
9$24.8229398.451585.38%2918.4%$0.85633100%$29.141.174$18.740.7610.56818.74$18.740.7610.56818.74
10$28.7929589.731414.77%2517.7%$1.15231100%$61.492.143$5.010.1710.1615.01$5.010.1710.1615.01
11$34.41322710.661665.14%3319.9%$1.04336100%$14.890.433$0.000.0000.0000.00$3.560.1010.0993.56
12$33.84320210.571865.81%3016.1%$1.12837100%$36.431.085$43.641.2951.1808.73$43.641.2951.1808.73
13$39.62332911.901785.35%4123.0%$0.96643100%$106.092.689$60.891.5421.41630.44$110.122.7822.56155.06
14$38.01305912.431916.24%3317.3%$1.15237100%$102.972.717$18.190.4820.4929.09$18.190.4820.4929.09
15$37.2641438.992506.03%4518.0%$0.82855100%$35.580.958$49.451.3350.8999.89$54.441.4660.9909.07
16$38.0242318.992395.65%4719.7%$0.80954100%$140.633.7010$30.040.7930.55610.01$64.771.7041.19916.19
17$41.5352257.952394.57%4217.6%$0.98941100%$117.672.8310$113.992.7442.78028.50$113.992.7442.78028.50
18$40.0846148.692325.03%4519.4%$0.89147100%$77.001.925$47.331.1821.00723.67$47.331.1821.00723.67
19$36.45336310.842096.21%3717.7%$0.98543100%$22.820.634$11.520.3220.2685.76$11.520.3220.2685.76
20$39.49346511.402025.83%4120.3%$0.96344100%$70.231.785$32.210.8220.73216.10$32.210.8220.73216.10
21$34.65295111.741735.86%3017.3%$1.15532100%$78.032.257$50.051.4431.56416.68$50.051.4431.56416.68
22$33.89277412.221926.92%4322.4%$0.78840100%$170.715.048$81.342.4022.03440.67$152.204.4933.80550.73
23$33.96260013.061385.31%2618.8%$1.30632100%$61.501.813$5.930.1710.1855.93$9.490.2810.2979.49
ALL$745.02750339.9342025.60%81419.4%$0.915902100%$1695.442.28133$996.741.34511.10519.54$1163.661.56551.29021.16

Counting which way each shared hour points, which needs no weighting and asks only for a direction:

metrichours 2026-08-08 ran higherhours it ran lowersign test
CPM17 of 247 of 24p = 0.064
CTR5 of 2419 of 24p = 0.007
click→install9 of 2415 of 24p = 0.307
CPI19 of 245 of 24p = 0.007

A sign test throws magnitude away and buys weight-free direction with it. CTR ran lower in 19 of the 24 shared hours and CPI higher in 19 of 24, so neither is an artifact of when the day bought. CPM misses 0.05 and click→install points nowhere.

Within-day revenue is one hour. Hour 04 alone carries $248.72 of the day's $996.74, a quarter of it, on three payers.

2026-08-09T14:27:25.225490 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0 5 10 15 20 25 30 35 40 USD Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 1500 2000 2500 3000 3500 4000 4500 5000 impressions Impressions and installs by hour impressions installs 25 30 35 40 45 installs (Meta Leads) The day's motion — whole account, 2026-08-08 (UTC)
The day's motion: spend by hour, and impressions against installs
2026-08-09T14:27:25.418535 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 4.5 5.0 5.5 6.0 6.5 7.0 CTR % CTR 0 4 8 12 16 20 hour (UTC) 8 9 10 11 12 13 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 16 18 20 22 24 26 28 30 installs / clicks % Click → install 0 4 8 12 16 20 hour (UTC) 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 USD Cost per install Delivery by hour — whole account, 2026-08-08 (UTC)
CTR, CPM, click-to-install and CPI by hour, whole account
2026-08-09T14:27:25.725134 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 5 10 15 20 hour (UTC) 4.5 5.0 5.5 6.0 6.5 7.0 7.5 CTR % CTR 2026-08-07 2026-08-08 0 5 10 15 20 hour (UTC) 7 8 9 10 11 12 13 USD per 1,000 impressions CPM 0 5 10 15 20 hour (UTC) 16 18 20 22 24 26 28 30 installs / clicks % Click → install 0 5 10 15 20 hour (UTC) 0.6 0.8 1.0 1.2 USD Cost per install Delivery by hour — 2026-08-08 against 2026-08-07, shared hours only (UTC)
The same four ratios with the prior day laid over, shared hours only
The full hour-by-hour pairing, 2026-08-07 → 2026-08-08

Every shared hour, 2026-08-07 → 2026-08-08. All columns are Meta's instrument on both sides of each ratio. Revenue is deliberately absent: per-hour payer counts run 0 to 5, so an hourly revenue column would be one person's basket read as a rate.

hrimpressionsCPMCTRclick→installCPI
002,615 → 1,47410.65 → 10.886.88% → 6.78%18.9% → 30.0%0.819 → 0.535
013,149 → 2,1638.18 → 9.826.38% → 6.80%18.9% → 25.9%0.678 → 0.559
023,370 → 2,3738.15 → 9.696.62% → 5.56%18.8% → 18.2%0.654 → 0.958
033,416 → 2,8918.47 → 8.126.24% → 6.05%18.8% → 14.9%0.723 → 0.903
043,507 → 3,0279.71 → 9.165.82% → 5.68%19.1% → 20.3%0.873 → 0.792
053,656 → 2,8919.79 → 8.666.18% → 4.95%21.7% → 18.2%0.731 → 0.963
063,287 → 2,7286.53 → 10.176.27% → 5.46%21.4% → 22.1%0.487 → 0.841
073,081 → 2,5288.24 → 8.385.10% → 5.70%19.1% → 22.9%0.846 → 0.642
083,560 → 2,8787.99 → 8.606.38% → 5.07%15.4% → 15.1%0.813 → 1.125
093,873 → 2,9398.76 → 8.455.19% → 5.38%22.9% → 18.4%0.738 → 0.856
103,994 → 2,9589.20 → 9.735.78% → 4.77%18.6% → 17.7%0.855 → 1.152
114,115 → 3,2279.57 → 10.665.66% → 5.14%20.2% → 19.9%0.838 → 1.043
124,018 → 3,2028.91 → 10.576.22% → 5.81%16.4% → 16.1%0.873 → 1.128
134,017 → 3,3298.45 → 11.905.58% → 5.35%20.5% → 23.0%0.738 → 0.966
143,510 → 3,05911.44 → 12.436.95% → 6.24%19.7% → 17.3%0.836 → 1.152
154,316 → 4,1437.88 → 8.996.16% → 6.03%17.3% → 18.0%0.740 → 0.828
163,608 → 4,2318.03 → 8.996.32% → 5.65%16.7% → 19.7%0.762 → 0.809
174,110 → 5,2258.41 → 7.956.52% → 4.57%16.8% → 17.6%0.768 → 0.989
183,700 → 4,61411.26 → 8.697.14% → 5.03%20.1% → 19.4%0.786 → 0.891
193,206 → 3,36310.71 → 10.845.36% → 6.21%25.0% → 17.7%0.799 → 0.985
202,799 → 3,46510.31 → 11.406.11% → 5.83%28.1% → 20.3%0.601 → 0.963
212,353 → 2,95111.49 → 11.746.88% → 5.86%27.2% → 17.3%0.615 → 1.155
222,211 → 2,77412.42 → 12.226.33% → 6.92%23.6% → 22.4%0.832 → 0.788
231,671 → 2,60010.76 → 13.067.48% → 5.31%20.8% → 18.8%0.692 → 1.306

3Country

2026-08-23T12:43:19.737551 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US MX GB ID PH CA AR TR IT AU DE 0 50 100 150 200 250 300 350 USD delivery raked onto the report clock against two measured margins; revenue is the report day Spend against within-day revenue by country — 2026-08-08 spend within-day revenue
Spend against within-day revenue, by country
2026-08-23T12:43:19.771893 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ −0.04 −0.02 0.00 0.02 0.04 USD per install Cost per install by country — 2026-08-08 (report clock)
Cost per install by country

(i) The portfolio by country, 2026-08-08. On the report clock. Meta serves no hour x country grid, so each country cut is raked from its own Meta day onto UTC; our own columns were already there.

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$137.8418.5%23,932$5.76248$0.556$142.381.0319
US$120.4116.2%2,822$42.6770$1.720$348.802.9018
MX$32.444.4%4,330$7.4950$0.649$0.000.006
GB$27.583.7%944$29.2125$1.103$28.741.044
ID$21.072.8%3,787$5.5639$0.540$22.671.084
PH$20.692.8%6,361$3.2554$0.383$3.350.164
CA$19.102.6%697$27.4010$1.910$4.990.262
AR$18.822.5%1,504$12.5130$0.627$0.000.001
TR$15.302.1%935$16.3617$0.900$0.000.000
IT$13.971.9%818$17.0720$0.699$48.903.503
AU$13.721.8%366$37.525$2.743$5.610.412
DE$12.751.7%286$44.616$2.125$41.433.252

194 further countries are not listed, $291.33 between them (39.1% of this block).

Reconciliation, what is measured and what is fitted. Every per-country cell is an allocation across hours; every total is measured. B1 (UTC-7) $164.26 from Meta 2026-08-07 and $580.76 from Meta 2026-08-08, a measured UTC-day total of $745.02.

Absent from the table above, by name: Nomad Node, KBM1, HR1. Their spend is in every day-grain table; only their country split is missing.

(ii) The same cut per account, 2026-08-08.

B1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$137.8418.5%23,932$5.76248$0.556$142.381.0319
US$120.4116.2%2,822$42.6770$1.720$348.802.9018
MX$32.444.4%4,330$7.4950$0.649$0.000.006
GB$27.583.7%944$29.2125$1.103$28.741.044
ID$21.072.8%3,787$5.5639$0.540$22.671.084
PH$20.692.8%6,361$3.2554$0.383$3.350.164
CA$19.102.6%697$27.4010$1.910$4.990.262
AR$18.822.5%1,504$12.5130$0.627$0.000.001
TR$15.302.1%935$16.3617$0.900$0.000.000
IT$13.971.9%818$17.0720$0.699$48.903.503
AU$13.721.8%366$37.525$2.743$5.610.412
DE$12.751.7%286$44.616$2.125$41.433.252

194 further countries are not listed, $291.33 between them (39.1% of this block).

Nomad Node — no country block: it delivered nothing on this day, a measured zero.

KBM1 — no country block: it delivered nothing on this day, a measured zero.

HR1 — no country block: it delivered nothing on this day, a measured zero.

The prior day, 2026-08-07, the same two tables.

(i) The portfolio by country, 2026-08-07. On the report clock. Meta serves no hour x country grid, so each country cut is raked from its own Meta day onto UTC; our own columns were already there.

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$153.4220.5%28,467$5.39296$0.518$70.560.4628
US$85.3811.4%2,161$39.5053$1.611$28.930.347
DE$34.054.5%787$43.2813$2.619$5.740.173
TR$26.603.5%1,572$16.9233$0.806$0.000.002
MX$26.163.5%4,033$6.4955$0.476$5.710.223
ID$22.703.0%4,093$5.5553$0.428$21.950.974
GB$22.082.9%1,007$21.9231$0.712$6.040.272
CA$17.492.3%665$26.3119$0.921$4.990.291
PH$16.482.2%5,524$2.9852$0.317$11.270.684
MY$16.022.1%2,165$7.4021$0.763$0.000.001
AR$15.732.1%1,619$9.7231$0.507$7.980.512
IT$15.472.1%959$16.1325$0.619$9.990.653

187 further countries are not listed, $298.37 between them (39.8% of this block).

Reconciliation, what is measured and what is fitted. Every per-country cell is an allocation across hours; every total is measured. B1 (UTC-7) $201.27 from Meta 2026-08-06 and $548.67 from Meta 2026-08-07, a measured UTC-day total of $749.94.

Absent from the table above, by name: Nomad Node, KBM1, HR1. Their spend is in every day-grain table; only their country split is missing.

(ii) The same cut per account, 2026-08-07.

B1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$153.4220.5%28,467$5.39296$0.518$70.560.4628
US$85.3811.4%2,161$39.5053$1.611$28.930.347
DE$34.054.5%787$43.2813$2.619$5.740.173
TR$26.603.5%1,572$16.9233$0.806$0.000.002
MX$26.163.5%4,033$6.4955$0.476$5.710.223
ID$22.703.0%4,093$5.5553$0.428$21.950.974
GB$22.082.9%1,007$21.9231$0.712$6.040.272
CA$17.492.3%665$26.3119$0.921$4.990.291
PH$16.482.2%5,524$2.9852$0.317$11.270.684
MY$16.022.1%2,165$7.4021$0.763$0.000.001
AR$15.732.1%1,619$9.7231$0.507$7.980.512
IT$15.472.1%959$16.1325$0.619$9.990.653

187 further countries are not listed, $298.37 between them (39.8% of this block).

Nomad Node — no country block: it delivered nothing on this day, a measured zero.

KBM1 — no country block: it delivered nothing on this day, a measured zero.

HR1 — no country block: it delivered nothing on this day, a measured zero.

4Aggregate, both days

Pooled over the 24 hours both days delivered in, on the UTC clock. Meta's instrument on both sides of every ratio.

spendimpressionsCPMclicksCTRinstallsclick→installCPI
2026-08-07$749.9481,1429.245,0166.18%99819.90%$0.751
2026-08-08$745.0275,0339.934,2025.60%81419.37%$0.915

Pooling across hours weights each hour by what it delivered. Section 2's pairing is the unweighted read of the same two days; here they agree.

Mix-neutral account line. Account CPM $9.13 → $9.93 (+8.7%), and $9.93 held to 08-07's campaign mix: the whole move is inside the worldwide buy.

The three measures side by side:

measure2026-08-072026-08-08moves after the day closes?
booked$1,505.16 (2.01) (Meta 2.06)$1,695.44 (2.28) (Meta 2.21)settled
within-day$436.98 (0.58)$996.74 (1.34)never
cohort @ 24h$472.45 (0.63), 100% covered$1,163.66 (1.56), 100% coveredfrozen, both days

08-07's cohort figure has matured and barely moved. The 08-07 report published $468.89 at 51% coverage; fully covered it is $472.45, +0.8%.

Booked revenue by the UTC day its payer installed. The top row is the within-day figure; the gap to booked is the inherited cohort.

installedbooked on 08-08share
2026-08-08$996.7458.8%
2026-08-07$70.444.2%
2026-08-06$94.575.6%
2026-08-05$88.215.2%
2026-08-04$57.873.4%
2026-08-03$43.222.5%
older than 08-03$344.3920.3%

Today's own cohort is 58.8% of booked revenue against 29.0%. 08-07 lived off inherited payers; 08-08 earned most of its booked figure inside the day.

2026-08-09T14:27:26.024102 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 200 400 600 800 1000 1200 1400 1600 USD 2.01 0.58 0.63 2.28 1.34 1.56 the number above each bar is that measure's ROAS against the same day's spend The three revenue measures, 2026-08-07 against 2026-08-08 (UTC) 2026-08-07 2026-08-08
The three revenue measures on both days, ROAS above each bar
2026-08-09T14:27:26.083745 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-08-07 2026-08-08 0 200 400 600 800 1000 1200 1400 1600 USD the bottom segment IS the within-day figure: the same number seen twice Booked revenue by the day its payer installed (UTC) the day itself one day earlier two days earlier three days earlier four or more
Booked revenue by the day its payer installed

Eight days, because two days cannot show whether the account is regressing

Every row from measures.py on one config and one payment cut, UTC clock. Within-day is sealed on every day here and is the column to read across them; cohort@24h is complete except on 08-08.

dayspendinstallsCPIbookedbROASwithin-daywROASrevenue per install
2026-08-01$733.941,963$0.374$1,110.931.51$980.991.34$0.500
2026-08-02$278.28745$0.374$559.002.01$272.130.98$0.365
2026-08-03$445.83766$0.582$709.351.59$397.690.89$0.519
2026-08-04$446.00785$0.568$921.862.07$588.701.32$0.750
2026-08-05$631.701,128$0.560$1,427.512.26$898.321.42$0.796
2026-08-06$793.941,172$0.677$1,401.051.76$620.480.78$0.529
2026-08-07$749.94998$0.751$1,505.162.01$436.980.58$0.438
2026-08-08$745.02814$0.915$1,695.442.28$996.741.34$1.225

⚠ 08-01 and 08-02 are a different campaign (_260730, the retired earner) and 08-02 is the billing-stop day. The like-for-like window is 08-03 onward.

Delivery has regressed and not recovered. The same spend bought 1,963 installs on 08-01 and 814 on 08-08, cost per install up 57% since 08-03.

Return on spend has not regressed. Within-day ROAS oscillates between 0.58 and 1.42 across the eight days with no direction; 08-08's 1.34 is also 08-01's.

Revenue per install rose in step with cost per install. $0.500 on 08-01 → $1.225 on 08-08, CPI $0.374 → $0.915: both up 145%.

Two thirds of the cost rise is inside countries, a third is the mix moving up-market. Each day's own per-country prices, held to 08-03's mix:

Meta dayactual CPIheld to 08-03's mixwhat the mix didwhat happened inside countries
2026-08-03$0.572$0.572——
2026-08-04$0.532$0.400+$0.132−$0.202
2026-08-05$0.577$0.487+$0.090−$0.114
2026-08-06$0.715$0.566+$0.149−$0.031
2026-08-07$0.764$0.658+$0.105+$0.058
2026-08-08$0.964$0.819+$0.145+$0.220

The India share of spend has halved and the US share tripled across the same window, 31.5% → 18.3% and 5.3% → 16.7% on the Meta clock. That is the mix term, and it is real and large. But the larger term is the other one: held to a fixed mix the account still pays +$0.220 more per install than on 08-03, and that component only turned positive on 08-07 and then doubled. The up-market shift explains the smaller share, and it is also the part that pays for itself in revenue per install; the within-country price rise is not.

Watch the join between the two. If within-country cost keeps rising while revenue per install stops, ROAS falls on about two days' warning.

5The campaigns, side by side

Delivery is Meta's instrument on both sides of every ratio; every revenue measure is ours. Cohort horizon H=24h. Report clock UTC. Rank on CPM, cost per click and CPI only — geography is the treatment here, which is what makes those comparable across campaigns, while revenue still needs 16 payers (DECISION_LOG.md #37, #48) and a campaign under that bar carries a direction and never a magnitude.

campaignspendshareimpressionsimpr shareCPMclicksCTRcost/clickinstallsCPIwithin-daywROASpayers
Worldwide$745.02100.0%75,033100.0%9.934,2025.60%$0.177813$0.916$993.391.3350

Booking with no delivery, and excluded from every rate above: German (DE/AT) 0 installs (Meta), 0 registrations (ours), $0.00 within-day; Earner (retired 08-03) 1 install (Meta), 17 registrations (ours), $3.35 within-day. Counting them would put installs into the CPI denominator against spend that never happened.

The three campaign charts are not drawn. Spend share, CPM and CPI by campaign each need two delivering campaigns; the German buy spent nothing.

6The worldwide campaign

bailingxia_meituan_ww_cvr_260802, the whole of the day's spend.

Structure on this day

Six ad sets, five delivering. ..._d100_mugshot has been off since 08-04 12:32 PT and took no spend. The ..._d100_spill set holds two ads, vid_ww_spill_8s_9x16_v1 and its Copy, a replacement pair: only the Copy delivered on this day. So one delivering ad per ad set on this day, which makes the ad-set row the ad row for the daily cut, and the rows below are labelled by asset. That identity holds for this day's cut alone; the object model does not carry it.

All five delivering arms carried $150/day throughout, unchanged since 08-06 04:06 PT. They are budget-matched by construction, which is what lets a cross-arm comparison inside this stretch avoid DECISION_LOG.md #47.

A. Per asset — delivery

Meta's instrument on both sides of every ratio. Our registrations never enter this table.

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
E2/bodysuit$162.4217,9709.049795.45%21021.45%$0.773
E2/bikini$158.4212,87412.317505.83%14919.87%$1.063
E2/pool5$155.9221,2767.331,0544.95%17116.22%$0.912
E2/spill2$148.4212,23412.137856.42%17322.04%$0.858
E2/lounge$119.8410,67911.226345.94%11017.35%$1.089
E2/mugshot$0.000—0—0——

B. Per asset — the three revenue measures

Ours on every column. Meta can express only booked, so it rides bracketed beside that column and never as a row. Payers are distinct people, never transactions. Cohort horizon H=24h, 100% covered on this day. Report clock UTC.

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
E2/bodysuit$412.362.54 (3.39)$341.102.10$375.062.31156.4%1.45822.7441.0%
E2/bikini$116.510.74 (1.34)$102.160.64$117.230.7431.7%0.57434.0553.8%
E2/pool5$480.093.08 (2.89)$357.782.29$407.012.61179.2%1.94421.0516.3%
E2/spill2$114.750.77 (0.65)$106.760.72$171.861.1673.9%0.60015.2536.3%
E2/lounge$132.551.11 (1.97)$85.600.71$89.150.7487.3%0.77810.7033.6%
E2/mugshot$0.00— (—)$0.00—$0.00—00.0%0.000——

The 16-payer bar (#37): any row above whose payer count is under 16 is a direction and never a magnitude. Only pool5 clears it on this single day.

C. Per asset — country mix

⚠ This table is cut on the META day, while every other table on this page is on the UTC clock. Meta serves no hour × country grid, so per-country delivery exists only on the ad account's own UTC-7 day and cannot be restitched. It is a seven-hour-offset window against tables A and B above; read it for mix, never for level against them.

The last column is the share of that asset's own within-day revenue that came from the United States: where it far exceeds the US spend share, the return is a property of the geography the asset bought.

assetspendIndia %US %other %US % of its revenue
E2/bodysuit$161.7422.8%16.5%60.7%69.2%
E2/bikini$177.3720.3%16.4%63.3%53.8%
E2/pool5$149.3017.8%17.1%65.1%14.8%
E2/spill2$151.8114.7%18.1%67.2%4.7%
E2/lounge$126.0614.8%15.4%69.8%0.0%

Table C changes how table B reads. bodysuit and bikini took most of their within-day revenue from the United States; pool5 did not.

2026-08-16T16:10:21.026654 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 3 4 5 6 7 8 9 10 CTR % CTR by hour — every asset, 2026-08-08 (UTC) E2/bodysuit E2/bikini E2/pool5 E2/spill2 E2/lounge
CTR by hour, one line per asset
2026-08-16T16:10:21.085641 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 6 8 10 12 14 16 18 20 USD per 1,000 impressions CPM by hour — every asset, 2026-08-08 (UTC) E2/bodysuit E2/bikini E2/pool5 E2/spill2 E2/lounge
CPM by hour, one line per asset
2026-08-16T16:10:21.141166 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 10 20 30 40 installs / clicks % Click → install by hour — every asset, 2026-08-08 (UTC) E2/bodysuit E2/bikini E2/pool5 E2/spill2 E2/lounge
Click-to-install by hour, one line per asset
2026-08-16T16:10:21.198108 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 1 2 3 4 5 6 USD Cost per install by hour — every asset, 2026-08-08 (UTC) E2/bodysuit E2/bikini E2/pool5 E2/spill2 E2/lounge
Cost per install by hour, one line per asset
2026-08-16T16:10:21.297572 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/bikini E2/bodysuit E2/spill2 E2/pool5 E2/lounge 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-08-08 (META day) IN US GB MX AR CA other
Where each asset bought: share of its own spend by region
2026-08-16T16:10:21.357017 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/bikini E2/bodysuit E2/spill2 E2/pool5 E2/lounge 0 1 2 3 4 5 USD per install Cost per install by region — every asset, 2026-08-08 (META day) IN US GB MX AR CA
Cost per install by region, every asset
2026-08-16T16:10:21.410308 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/bikini E2/bodysuit E2/spill2 E2/pool5 E2/lounge 0 50 100 150 200 USD Within-day revenue by region — every asset, 2026-08-08 (META day) IN US GB CA
Within-day revenue by region, every asset

The split test, on its three complete days

The test E2_ww_creative_5cell_260806 runs 08-06 00:00 → 08-11 00:00 PT. Its pre-registered primary is payers per install at a 65% confidence bar, pooled over the run. Everything below is on our own registrations and our own payers, matured to 24 h at the payment cut, so numerator and denominator share one instrument.

Pooled over the three days, one arm separates and it is the loser.

armpayersinstallspayers per install
lounge213995.26%
pool5265224.98%
bodysuit296084.77%
spill214714.46%
bikini154993.01%

Four of the ten pairs clear the 65% bar decisively and all four are the same comparison: lounge (95.7%), pool5 (94.6%), bodysuit (93.2%) and spill (88.4%) each beat bikini. Among the top four, only lounge over spill (70.9%) and pool5 over spill (65.1%) reach the bar at all, and a 65% bar means roughly one call in three is wrong. The honest read is that bikini is worse than the other four and the other four are not separated from each other.

Four arms now clear the 16-payer bar. bodysuit 29, pool5 26, spill 21, lounge 21, bikini 15: most carry a magnitude for the first time.

The ranking did not replicate, and that is the day's finding.

arm08-0608-0708-08
bodysuit4 / 131 = 3.05%10 / 267 = 3.75%15 / 210 = 7.14%
pool54 / 122 = 3.28%7 / 239 = 2.93%15 / 161 = 9.32%
bikini5 / 161 = 3.11%5 / 178 = 2.81%5 / 160 = 3.12%
spill6 / 126 = 4.76%10 / 189 = 5.29%5 / 156 = 3.21%
lounge6 / 134 = 4.48%8 / 169 = 4.73%7 / 96 = 7.29%

Rank order, best first: 08-06 spill > lounge > pool5 > bikini > bodysuit; 08-07 spill > lounge > bodysuit > pool5 > bikini; 08-08 pool5 > lounge > bodysuit > spill > bikini. Spearman on the rate itself is +0.70 between 08-06 and 08-07, +0.10 between 08-06 and 08-08, and +0.10 between 08-07 and 08-08. spill went first, first, fourth. pool5 went third, fourth, first. Only bikini holds a stable position, at the bottom on all three days.

Held against the first two days pooled, two arms moved on day three and three did not: pool5 3.05% → 9.32% (one-sided p = 0.001) and bodysuit 3.52% → 7.14% (p = 0.023); bikini, spill and lounge are unchanged within noise. Both movers moved on the day the whole campaign's payer rate moved, from 3.84% to 5.99%, which is why the report treats the day effect as the thing that happened and the arm differences on it as riding on top.

This amends DECISION_LOG.md #57. #57 recorded Spearman +0.90 between cost per install and payers per install over two days; over three it is +0.10:

armcost per installpayers per install
bodysuit$0.6734.77%
pool5$0.7384.98%
spill$0.8294.46%
bikini$0.8343.01%
lounge$0.9415.26%

The two metrics are not inverted; they are unrelated. The operational half of #57 survives untouched and for a better reason. Cost per install carries no information about which arm pays, so it cannot be used to cull one. But the stated mechanism, that the dearest installs are the best payers, does not hold on three days and should not be quoted again.

Cost per install replicated: bodysuit < pool5 < bikini ≈ spill < lounge on all three days, nine of ten pairs clearing 65%, eight 94%.

The co-primary is not computable and closes as unanswerable by construction. §7a wanted install→registration as a funnel stage; ours exceed Meta's on every arm.

The quantity it actually is can be tested. Under a Poisson model, R ~ Binomial(R+M, p) with p = R/(R+M):

armoursMetaours ÷ Meta
bikini5625001.124
bodysuit6896381.080
pool55895531.065
spill5174981.038
lounge4414401.002
pooled2,7982,6291.064

Homogeneity across the five arms: χ² = 1.81 on 4 df, p = 0.771. The arms do not differ.

A validity check on every other endpoint. The 6.4% excess is an instrument gap common to all five arms, so no Meta-denominator figure is biased.

How loose the 65% bar is: these five arms give six of ten pairs "clearing" 65% on data whose omnibus test finds nothing.

2026-08-16T16:10:21.478512 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-05 08-06 08-07 08-08 day (UTC) 0 2 4 6 8 payers / installs % Payer rate by day — every asset (UTC) E2/bodysuit E2/pool5 E2/spill2 E2/bikini E2/lounge
Payer rate by day, one line per asset
2026-08-16T16:10:21.533412 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-05 08-06 08-07 08-08 day (UTC) 0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 within-day USD per install ARPU by day — every asset (UTC) E2/bodysuit E2/pool5 E2/spill2 E2/bikini E2/lounge
ARPU by day, one line per asset
2026-08-16T16:10:21.592317 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-05 08-06 08-07 08-08 day (UTC) 0 5 10 15 20 25 30 35 within-day USD per payer ARPPU by day — every asset (UTC) E2/bodysuit E2/pool5 E2/spill2 E2/bikini E2/lounge
ARPPU by day, one line per asset
2026-08-16T16:10:21.671712 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-05 08-06 08-07 08-08 day (UTC) 0.5 1.0 1.5 2.0 2.5 3.0 3.5 revenue / spend Within-day ROAS by day — every asset (UTC) E2/bodysuit E2/pool5 E2/spill2 E2/bikini E2/lounge
Within-day ROAS by day, one line per asset
2026-08-16T16:10:21.736115 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ CTR click→install CPI payer rate * ARPU * wROAS * 0.0 0.2 0.4 0.6 0.8 1.0 normalised across the day (1.0 = best of the pack) * axis sits under the 16-payer bar on most days: direction only, never a level. Assets under 20 installs on the day are not plotted. Composite — every asset across every measure, 2026-08-08 E2/bodysuit E2/bikini E2/pool5 E2/spill2 E2/lounge
Composite: every asset across every measure, normalised across the day

The CTR fall has a third in-test point now

The 08-07 report left this open because two points cannot separate a settling level from a trend. Pooled CTR over matched hours, one instrument across all four days:

08-05 (pre-test)08-0608-0708-08
pooled CTR8.73%7.23%6.05%5.37%
step—−1.50 pp−1.18 pp−0.68 pp

Each step is smaller than the one before it, by 21% then 42%; the asymptote is near 4%, 1.4 points below where the day ended.

Fatigue is ruled out on this step. Reach/frequency over the four days: 46,284/1.23, 44,191/1.58, 49,549/1.53, 50,814/1.50 — reach up 2.6%, frequency down, CTR down 0.48.

7Caveats

8What would settle the open questions

9What this hands to the next report

10Reproduce

Run directory _runs/2026-08-09_0808_daily/. Report clock UTC; the ad account is fixed at UTC-7, so a UTC day is Meta day 08-07 17:00–23:59 plus Meta day 08-08 00:00–16:59.

Exports, all from AdsPower Profile 23 (k1elevon), B1's bound environment, pulled 2026-08-09 14:11–14:14 PT:

filebreakdownwindow
exports/ads_hourly_aug8_settled.csvTime of dayMeta day 08-08, 24 buckets, 130 rows
exports/ads_day_jul1_aug9.csvDayJul 1 – Aug 9
exports/ads_country_day_jul1_aug9.csvDay × CountryJul 1 – Aug 9

The hourly file was pulled twice, 7.8 h apart, as a settling check: spend +0.17%, impressions +0.11%, and clicks, leads, purchases and conversion value all 0.00%. Meta files a conversion on the hour it converted, so a past day's revenue does not grow.

Attribution comes from a hand-taken Telegram export of the LumUser and LumPayment channels, driven on the laptop, parsed with ad_ops/lum_notifications/parse_export.py at --tz America/Los_Angeles: 17,716 registrations, 1,988 payments, 14 payments with no matching registration (0.7%). The three clock checks all pass. The parser corrected 56,303 timestamps for the Telegram DST bug; registered_at agrees with the corrected message time to a median of +0.1 s; and correlating our hourly registrations against Meta's hourly Leads wins at lag 0 (r = 0.877 against 0.587 and 0.531).

The instrument gate was run on the META clock, where it is valid: our records read 0.99 and 1.04 of Meta's booked conversion value on the two days, inside the documented 0.91–1.06 band. On the UTC clock the same comparison is cross-clock and measures.py refuses it by name.

python -m ad_ops.measures      --config _runs/2026-08-09_0808_daily/run_config.json --day 2026-08-08 --prev 2026-08-07
python -m ad_ops.day_compare   --config _runs/2026-08-09_0808_daily/run_config.json --today
2026-08-08 --prev 2026-08-07 --h 6
python -m ad_ops.asset_estimator hourly --lum _runs/2026-08-09_0808_daily/lum \
    --meta <the four hourly exports 08-05..08-08> --fx _runs/2026-08-02_today_read/fx_rates.json \
    --ads ww_bikini_10s,ww_bodysuit_10s,ww_pool5,ww_mugshot,ww_spill,ww_lounge \
    --campaign bailingxia_meituan_ww_cvr_260802 --horizon 24
python -m ad_ops.cohort_arpu   --config _runs/2026-08-09_0808_daily/run_config.json --days 2026-08-04,…,2026-08-08
python -m ad_ops.report_tables --config _runs/2026-08-09_0808_daily/run_config.json --day 2026-08-08
--prev 2026-08-07 [--campaign-table | --campaign ww]
python -m ad_ops.report_charts --config _runs/2026-08-09_0808_daily/run_config.json --day 2026-08-08
--prev 2026-08-07 \
    --days 2026-08-05,2026-08-06,2026-08-07,2026-08-08 --out ad_ops/figures/2026-08-08

Two probes in the run directory carry the analyses the instruments do not: e2_65pct.py (the test's own endpoints at its 65% bar, copied from the 08-07 run and repointed to the third day) and payer_jump.py (the mix-neutral decomposition of the day's payer-rate and revenue-per-install move).

REGIMES_260802 in ad_ops/asset_estimator/cohorts.py was extended for this report from manage/campaigns/history, range string asserted "Aug 4, 2026 – Aug 9, 2026".

11Appendix — definitions

The report clock. A report day is a UTC day, because Adjust reports in UTC and a UTC-bucketed report lines up with the attribution dashboard without anyone converting in their head. Meta's ad account is fixed at UTC-7, so each UTC day is stitched from two Meta days and a UTC pull needs the previous Meta day's hourly file as well as the day's own.

Three things the clock does not reach, each labelled where it appears: the country tables cannot follow it, because Meta serves no hour × country grid, so they stay a META-day cut; the instrument check is invalid off the META clock, because Meta's conversion value sits on its conversion hour and cannot be honestly restitched; and the estimator runs on Meta's clock deliberately, because its subject is Meta-side delivery windows.

The three revenue measures, never one, never mixed, always labelled:

measurecountsmoves after the day closes?
bookedrevenue that arrived inside the day, whatever day its payer installed. Meta's own number is this basissettles ~4 h after midnight, then fixed
within-dayinstalled that day and paid before that day closednever. Sealed at midnight
cohort at Hthat day's installs, counted within H hours of each person's own install. House horizon H=24rises until every install has lived H hours, then frozen. Always state coverage

All three are read on our own payment records. Meta can express only booked, so it appears bracketed beside that column and never as a row of its own: that is one measure on two instruments, not two measures.

Two install counts exist and are never crossed. Meta's Leads and our own registrations disagree by 5–10%. Meta's is used for the delivery funnel (CPI and click→install), so numerator and denominator are both its. Ours is used for payer rate and every revenue measure, so the payers and the installs they came from are the same population.

A regime is a stretch over which an ad set's daily budget did not change. It belongs in a daily report because the budget is a geography dial on this account: raising it buys wider, cheaper countries, so two creatives measured across a budget change are compared on different audiences (DECISION_LOG.md #47). All of 08-08 sits inside one regime, E2-R6, which began 08-06 04:06 PT when the last two arms were levelled to $150/day and runs to the test's end. Every delivering arm carries the same budget throughout it.

The 16-payer bar (DECISION_LOG.md #37): below roughly 16 payers a revenue figure is a direction and never a magnitude. Coverage, payer count and the denominator's instrument are the three columns to read before the one you came for.

Internal — noindex. Not for distribution outside the team.