Daily campaign report — 2026-08-05, against 2026-08-04

The account spent $625.17 across five worldwide creatives and the German buy, and took 1,128 installs at $0.554. The day before it spent $446.00 for 785 at $0.568. Within-day revenue was $898.32 against $588.70. Our payment records read 0.98 of Meta's booked figure; the report clock, the three revenue measures and a regime are defined in the appendix.

1Overview

spendinstallsCPIimpressionsCPMCTRbookedbROASwithin-daywROAScohort@24hcROAS
2026-08-04$446.00785$0.56835,85212.449.03%$921.862.07$588.701.32$817.431.83
2026-08-05$625.171,128$0.55453,52211.689.18%$1,427.512.28$898.321.44$923.621.48

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$0.9750$1.5693$2.3236$15.37$21.78$29.091,277

Cohort@24h is 100% covered on 08-04 and 9% on 08-05, so those two columns are not set against each other here; the completed figure and the comparison it allows are in Caveats. Within-day is sealed on both days and is the day-over-day measure.

The cohort gap is age. At matched H=6: pool5 0.951 → 1.331, bikini 0.241 → 0.256; bodysuit 0.750 → 0.496 falls anyway.

2Hourly, 2026-08-05

Delivery columns are Meta's instrument on both sides of every ratio. ours is our own registration count, never crossed with Meta's installs. cov is cohort coverage at H=24 for that hour's installs.

hrspendimprCPMclicksCTRinstclk→iCPIourscovbookedbROASwithin-daywROASwPaycohort@24hcROAS
0$22.261,79212.421669.26%4728.3%$0.47444100%$4.990.22$66.622.994$66.622.99
1$20.391,95410.441889.62%4121.8%$0.49740100%$59.142.90$210.9410.351$210.9410.35
2$21.882,3409.352289.74%5925.9%$0.3715740%$166.927.63$20.880.953$20.880.95
3$25.002,5989.622138.20%6329.6%$0.397650%$159.726.39$94.493.789$97.483.90
4$28.042,60810.752248.59%5926.3%$0.475580%$58.292.08$42.841.532$42.841.53
5$31.342,88610.862649.15%4918.6%$0.640550%$67.882.17$5.010.161$5.010.16
6$32.212,46213.082239.06%5424.2%$0.596550%$93.432.90$20.770.644$20.770.64
7$46.063,18214.482768.67%5620.3%$0.822630%$29.430.64$27.910.615$27.910.61
8$0.785713.6858.77%8160.0%$0.098100%$42.6354.66$3.023.871$3.023.87
9$0.000—0—5——70%$25.99—$0.000.000$0.000.00
10$0.000—0—2——10%$46.94—$0.000.000$0.000.00
11$0.000—0—1——40%$0.00—$0.000.000$0.000.00
12$0.0142.5000.00%30.0%$0.00330%$12.491248.98$0.000.000$0.000.00
13$6.3033218.983911.75%820.5%$0.78760%$10.391.65$0.000.000$0.000.00
14$43.473,10314.0132010.31%6219.4%$0.701620%$89.192.05$31.850.732$31.850.73
15$49.224,27011.5343610.21%8619.7%$0.572920%$43.050.87$29.990.615$29.990.61
16$37.753,51910.733249.21%6118.8%$0.619640%$50.881.35$16.510.443$16.510.44
17$43.763,96611.033318.35%8525.7%$0.515870%$38.000.87$45.991.055$45.991.05
18$47.344,20711.253748.89%7921.1%$0.599820%$62.271.32$27.910.595$31.470.66
19$39.503,54711.143168.91%8125.6%$0.488840%$168.434.26$141.623.5910$141.623.59
20$33.603,11110.802919.35%6823.4%$0.494730%$67.542.01$29.670.883$29.670.88
21$37.242,89312.872749.47%5821.2%$0.642630%$27.120.73$5.930.161$5.930.16
22$27.412,47711.072178.76%4721.7%$0.583540%$55.742.03$54.802.005$67.792.47
23$31.612,21414.282049.21%4622.5%$0.687550%$47.021.49$21.580.681$27.340.86
ALL$625.1753,52211.684,9139.18%1,12823.0%$0.5541,1849%$1,427.512.28$898.321.4470$923.621.48

⚠ Payer counts per hour run 0–10. An hourly ARPPU on one payer is that payer's own basket. Read the ALL row for level and the hours for shape only. Hours 08–12 carry booked revenue against no spend because booked sits on the payment hour while spend sits on the delivery hour. Those are earlier installs paying during the blackout.

The blackout is a billing event. Hours 09–12 UTC (PT 02:00–05:00) took zero impressions and $0.00, hour 08 took 57, against 2,400–3,200 impressions either side.

A threshold charge failed, and the billing ledger times it to the hour delivery stopped. On 08-05 the account was on threshold billing at $539.00:

PTeventamountcardstatus
01:00threshold charge — "you reached your $539.00 payment threshold"$540.72MasterCard ····9617Failed
01:16Meta splits it and retries$67.58MasterCard ····9617Paid
01:16the other half of the split$135.35MasterCard ····9617Failed
04:40"you requested this manual payment"$480.62Visa ····7533Paid
05:11account moved onto a prepaid balance$990.00MasterCard ····9617Funded

The charge failed at 01:00 and delivery stopped at 01:00; paying did not bring it back: ~1h20m to any delivery, ~2h20m to full.

That also explains the two features nothing else does: it hit all five arms at the same minute, and it was a hard zero. Meta pacing and budget exhaustion both taper (meta_ads_manager_driving.md records a monotonic $38 → $33 → $27 → … → $0 for a real cap). The activity history for Aug 3 → Aug 6, with the rendered range asserted, records no budget change and no ad-set status change across the window, which is consistent: a billing stop is account-level and writes nothing to a campaign log.

The account is on prepaid now, a different failure mode: it stops when the balance runs out, with no decline. $239.87 against $850/day committed.

2026-08-06T07:28:59.772171 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0 10 20 30 40 50 USD Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 0 1000 2000 3000 4000 impressions Impressions and installs by hour impressions installs 0 20 40 60 80 installs (Meta Leads) The day's motion — whole account, 2026-08-05 (UTC)
The day's motion: spend by hour, and impressions against installs
2026-08-06T07:28:59.937716 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 8.5 9.0 9.5 10.0 10.5 11.0 11.5 CTR % CTR 0 4 8 12 16 20 hour (UTC) 10 12 14 16 18 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 20 40 60 80 100 120 140 160 installs / clicks % Click → install 0 4 8 12 16 20 hour (UTC) 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 USD Cost per install Delivery by hour — whole account, 2026-08-05 (UTC)
CTR, CPM, click-to-install and CPI by hour, whole account

Against the prior day, hour matched to hour

Hours both days delivered in, on the UTC clock: 00, 01, 02, 03, 04, 05, 06, 07, 08, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23. 2026-08-04 additionally delivered in 09, 10, 11, 12. Only the shared hours are compared.

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

metrichours 2026-08-05 ran higherhours it ran lowersign test
CPM6 of 2014 of 20p = 0.115
CTR10 of 2010 of 20p = 1.000
click→install8 of 2012 of 20p = 0.503
CPI11 of 209 of 20p = 0.824

A sign test throws magnitude away and buys weight-free direction with it.

The full hour-by-hour pairing, 2026-08-04 → 2026-08-05

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

hrimpressionsCPMCTRclick→installCPI
00844 → 1,79215.69 → 12.429.48% → 9.26%21.2% → 28.3%0.779 → 0.474
011,066 → 1,95411.44 → 10.447.50% → 9.62%23.8% → 21.8%0.642 → 0.497
021,111 → 2,34011.96 → 9.356.48% → 9.74%18.1% → 25.9%1.022 → 0.371
031,224 → 2,59811.73 → 9.629.31% → 8.20%33.3% → 29.6%0.378 → 0.397
041,281 → 2,60813.19 → 10.758.98% → 8.59%22.6% → 26.3%0.650 → 0.475
051,372 → 2,88612.76 → 10.867.43% → 9.15%40.2% → 18.6%0.427 → 0.640
061,276 → 2,46213.65 → 13.087.60% → 9.06%29.9% → 24.2%0.601 → 0.596
07671 → 3,18215.78 → 14.4810.43% → 8.67%25.7% → 20.3%0.588 → 0.822
081,316 → 5714.94 → 13.688.13% → 8.77%29.0% → 160.0%0.634 → 0.098
131,187 → 33214.80 → 18.989.86% → 11.75%26.5% → 20.5%0.567 → 0.787
141,114 → 3,10312.15 → 14.019.25% → 10.31%24.3% → 19.4%0.541 → 0.701
152,034 → 4,27010.49 → 11.5310.67% → 10.21%16.6% → 19.7%0.593 → 0.572
162,652 → 3,5199.11 → 10.738.60% → 9.21%17.5% → 18.8%0.604 → 0.619
172,512 → 3,96611.44 → 11.038.92% → 8.35%18.8% → 25.7%0.684 → 0.515
182,211 → 4,20711.82 → 11.258.68% → 8.89%24.0% → 21.1%0.568 → 0.599
191,877 → 3,54710.99 → 11.148.74% → 8.91%29.3% → 25.6%0.430 → 0.488
201,672 → 3,11111.44 → 10.8012.08% → 9.35%27.2% → 23.4%0.348 → 0.494
211,608 → 2,89312.90 → 12.8712.44% → 9.47%27.5% → 21.2%0.377 → 0.642
221,638 → 2,47716.07 → 11.0711.48% → 8.76%23.4% → 21.7%0.598 → 0.583
231,623 → 2,21412.61 → 14.2810.23% → 9.21%22.3% → 22.5%0.553 → 0.687
2026-08-06T07:29:00.127630 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 5 10 15 20 hour (UTC) 7 8 9 10 11 12 CTR % CTR 2026-08-04 2026-08-05 0 5 10 15 20 hour (UTC) 10 12 14 16 18 USD per 1,000 impressions CPM 0 5 10 15 20 hour (UTC) 20 40 60 80 100 120 140 160 installs / clicks % Click → install 0 5 10 15 20 hour (UTC) 0.2 0.4 0.6 0.8 1.0 USD Cost per install Delivery by hour — 2026-08-05 against 2026-08-04, shared hours only (UTC)
The same four ratios with the prior day laid over the day, shared hours only

Nothing separated. CPM comes closest, lower in 14 of 20 hours at p = 0.115; a 40% bigger day moved no delivery ratio.

3Country

2026-08-23T12:43:18.984428 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN DE US MX ID TR GB AR MY PH FR CA 0 50 100 150 200 250 300 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-05 spend within-day revenue
Spend against within-day revenue, by country
2026-08-23T12:43:19.022493 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-05 (report clock)
Cost per install by country

(i) The portfolio by country, 2026-08-05. 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.3021.7%19,972$6.87319$0.430$128.560.9437
DE$71.3011.3%1,441$49.4735$2.037$21.850.312
US$54.508.6%1,258$43.3350$1.090$288.785.3015
MX$22.103.5%2,454$9.0056$0.395$32.411.473
ID$21.223.4%3,014$7.0473$0.291$43.682.062
TR$20.053.2%1,181$16.9741$0.489$0.000.001
GB$19.083.0%534$35.7220$0.954$0.000.001
AR$15.182.4%1,248$12.1650$0.304$66.934.414
MY$13.072.1%1,546$8.4627$0.484$5.380.413
PH$13.032.1%3,110$4.1953$0.246$31.512.425
FR$10.051.6%299$33.6211$0.913$0.000.000
CA$9.671.5%253$38.1911$0.879$20.882.163

175 further countries are not listed, $225.17 between them (35.6% 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) $181.12 from Meta 2026-08-04 and $450.58 from Meta 2026-08-05, a measured UTC-day total of $631.70.

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-05.

B1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$137.3021.7%19,972$6.87319$0.430$128.560.9437
DE$71.3011.3%1,441$49.4735$2.037$21.850.312
US$54.508.6%1,258$43.3350$1.090$288.785.3015
MX$22.103.5%2,454$9.0056$0.395$32.411.473
ID$21.223.4%3,014$7.0473$0.291$43.682.062
TR$20.053.2%1,181$16.9741$0.489$0.000.001
GB$19.083.0%534$35.7220$0.954$0.000.001
AR$15.182.4%1,248$12.1650$0.304$66.934.414
MY$13.072.1%1,546$8.4627$0.484$5.380.413
PH$13.032.1%3,110$4.1953$0.246$31.512.425
FR$10.051.6%299$33.6211$0.913$0.000.000
CA$9.671.5%253$38.1911$0.879$20.882.163

175 further countries are not listed, $225.17 between them (35.6% 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-04, the same two tables.

(i) The portfolio by country, 2026-08-04. 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$102.9523.1%13,736$7.50193$0.533$136.791.3327
US$43.459.7%903$48.1336$1.207$136.893.159
DE$33.507.5%604$55.4417$1.970$25.410.761
MX$14.943.3%1,410$10.5925$0.597$40.772.735
GB$14.933.3%389$38.4019$0.786$0.000.001
TR$12.272.8%652$18.8222$0.558$0.000.000
MY$10.542.4%1,096$9.6220$0.527$5.380.511
ID$10.472.3%1,608$6.5139$0.268$0.000.000
AR$10.272.3%860$11.9438$0.270$4.990.492
PH$9.522.1%2,130$4.4735$0.272$0.000.001
AU$8.391.9%160$52.347$1.198$0.000.000
FR$7.841.8%300$26.1018$0.436$0.000.000

189 further countries are not listed, $166.94 between them (37.4% 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) $104.91 from Meta 2026-08-03 and $341.09 from Meta 2026-08-04, a measured UTC-day total of $446.00.

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-04.

B1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$102.9523.1%13,736$7.50193$0.533$136.791.3327
US$43.459.7%903$48.1336$1.207$136.893.159
DE$33.507.5%604$55.4417$1.970$25.410.761
MX$14.943.3%1,410$10.5925$0.597$40.772.735
GB$14.933.3%389$38.4019$0.786$0.000.001
TR$12.272.8%652$18.8222$0.558$0.000.000
MY$10.542.4%1,096$9.6220$0.527$5.380.511
ID$10.472.3%1,608$6.5139$0.268$0.000.000
AR$10.272.3%860$11.9438$0.270$4.990.492
PH$9.522.1%2,130$4.4735$0.272$0.000.001
AU$8.391.9%160$52.347$1.198$0.000.000
FR$7.841.8%300$26.1018$0.436$0.000.000

189 further countries are not listed, $166.94 between them (37.4% 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 20 hours both days delivered in, on the UTC clock. Meta's instrument on both sides of every ratio.

spendimpressionsCPMclicksCTRinstallsclick→installCPI
2026-08-04$373.9230,28912.352,8389.37%69124.35%$0.541
2026-08-05$625.1653,51811.684,9139.18%1,11722.74%$0.560

Pooling across hours is a mix comparison: hours are weighted by delivery, so these rows can move with no hour changing. §2's pairing is unweighted.

measure2026-08-04ROAS2026-08-05ROAS
booked$921.862.07$1,427.512.28
within-day$588.701.32$898.321.44
cohort@24h$817.431.83 (100% cov)$923.621.48 (9% cov)
2026-08-06T07:29:00.389889 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 200 400 600 800 1000 1200 1400 USD 2.07 1.32 1.83 2.28 1.44 1.48 the number above each bar is that measure's ROAS against the same day's spend The three revenue measures, 2026-08-04 against 2026-08-05 (UTC) 2026-08-04 2026-08-05
The three revenue measures on both days, ROAS above each bar
2026-08-06T07:29:00.452243 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-08-04 2026-08-05 0 200 400 600 800 1000 1200 1400 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
booked revenue on 08-05, by the UTC day its payer installed
installed 2026-08-05 — this is the within-day figure$898.3262.9%
installed 2026-08-04$244.6717.1%
installed 2026-08-03$101.027.1%
installed 2026-08-02$50.783.6%
installed 2026-08-01$100.137.0%
installed 2026-07-31$32.592.3%

37.1% of booked revenue came from people who installed before the day: the whole gap between booked 2.28 and within-day 1.44.

5Per ad set, hourly

Rows sit at ad grain. spill runs two ads in one ad set, a replacement pair on the same creative that never both deliver on one day, so the delivering ad is the ad-set row on any single day. The German ad sets hold 10 and 15 ads and are not readable at this level; §7 covers them.

2026-08-06T07:29:00.527780 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0 CTR % CTR by hour — every asset, 2026-08-05 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/spill2 E2/lounge DE/turkish_mature DE/german_mature DEww/bodysuit
CTR by hour, one line per asset
2026-08-06T07:29:00.698887 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0 5 10 15 20 25 30 35 40 installs / clicks % Click → install by hour — every asset, 2026-08-05 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/spill2 E2/lounge DE/turkish_mature DE/german_mature DEww/bodysuit
Click-to-install by hour, one line per asset
2026-08-06T07:29:00.775522 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0 1 2 3 4 5 6 7 8 USD Cost per install by hour — every asset, 2026-08-05 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/spill2 E2/lounge DE/turkish_mature
Cost per install by hour, one line per asset
2026-08-06T07:29:00.612531 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 50 60 70 USD per 1,000 impressions CPM by hour — every asset, 2026-08-05 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/spill2 E2/lounge DE/turkish_mature DE/german_mature DEww/bodysuit
CPM by hour, one line per asset

spill leads on CTR across the whole clock and bodysuit trails it: a level difference, the one delivery gap that outlasts the noise.

The blackout appears in every panel as one five-hour gap, in all arms simultaneously.

6Per ad set × country

META-day cut, as §3. Regions: US · India · other T1 (developed markets) · rest.

assetregionspendinstallsCPIwithin-day
pool5US$18.3724$0.765$273.81
pool5India$18.5534$0.546$11.52
pool5other T1$30.2542$0.720$34.69
pool5rest$35.1379$0.445$201.99
bodysuitUS$16.279$1.808$4.99
bodysuitIndia$26.7966$0.406$46.59
bodysuitother T1$11.7019$0.616$29.40
bodysuitrest$31.5265$0.485$42.83
bikiniUS$2.701$2.700$0.00
bikiniIndia$27.8659$0.472$38.11
bikiniother T1$2.120—$0.00
bikinirest$10.2324$0.426$0.00
spillUS$2.361$2.360$0.00
spillIndia$11.4220$0.571$17.27
spillother T1$5.457$0.779$9.99
spillrest$14.1036$0.392$24.88
loungeUS$4.301$4.300$4.99
loungeIndia$16.8317$0.990$11.52
loungeother T1$10.148$1.267$0.00
loungerest$23.2534$0.684$27.29
2026-08-06T07:29:00.876653 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 E2/bodysuit E2/lounge E2/bikini E2/spill2 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-08-05 (META day) IN DE US ID TR GB other
Where each asset bought: share of its own spend by region
2026-08-06T07:29:00.953034 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 E2/bodysuit E2/lounge E2/bikini E2/spill2 0 1 2 3 4 USD per install Cost per install by region — every asset, 2026-08-05 (META day) IN DE US ID TR GB
Cost per install by region, every asset
2026-08-06T07:29:01.006250 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 E2/bodysuit E2/lounge E2/bikini E2/spill2 0 50 100 150 200 250 USD Within-day revenue by region — every asset, 2026-08-05 (META day) IN US ID
Within-day revenue by region, every asset

The arms did not buy the same world. pool5 bought 14.3% US and drew $273.81, bikini 4.1% and nothing: 30.5% of the day's within-day revenue.

bikini bought 48% India on the hour-matched window, the highest in the pack. Its low CPM is that purchase showing through.

7Per ad set, aggregate, all three measures

A. Per asset — delivery

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
E2/pool5$149.0616,3339.131,5959.77%32220.19%$0.463
E2/bodysuit$146.2916,2299.011,0846.68%30027.68%$0.488
E2/bikini$83.659,6818.648538.81%19122.39%$0.438
E2/spill2$76.605,69613.4587715.40%19722.46%$0.389
E2/lounge$74.693,75119.9138010.13%8422.11%$0.889
DE/turkish_mature$56.001,02854.47706.81%1318.57%$4.308
DE/german$12.2323152.94156.49%533.33%$2.446
DE/german_mature$11.7723450.30187.69%211.11%$5.885
DEww/bodysuit$7.5719039.8494.74%111.11%$7.570
DE/german_6s$5.1810847.9676.48%342.86%$1.727
DEww/spill2$1.401782.35423.53%250.00%$0.700
DE/turkish_6s$0.39848.7500.00%0——
DEww/bikini$0.221415.7117.14%00.00%—
DEww/pool5$0.12260.0000.00%0——
earner/bodysuit$0.000—0—5—$0.000
earner/bikini$0.000—0—2—$0.000
earner/pool5$0.000—0—0——
E2/spill$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, 9% covered on this day. Report clock UTC.

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
E2/pool5$695.984.67 (4.59)$545.463.66$562.013.77247.0%1.58622.7338.7%
E2/bodysuit$176.551.21 (1.30)$152.201.04$152.201.04196.2%0.4968.0119.3%
E2/bikini$117.581.41 (2.15)$47.450.57$53.210.6483.8%0.2285.9319.6%
E2/spill2$102.921.34 (2.23)$81.981.07$84.981.11126.3%0.4296.8313.4%
E2/lounge$49.390.66 (0.98)$49.390.66$49.390.6666.7%0.5558.2343.7%
DE/turkish_mature$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/german$21.851.79 (1.79)$21.851.79$21.851.79120.0%4.37021.85100.0%
DE/german_mature$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DEww/bodysuit$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/german_6s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DEww/spill2$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/turkish_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DEww/bikini$0.000.00 (0.00)$0.000.00$0.000.000————
DEww/pool5$0.000.00 (0.00)$0.000.00$0.000.000————
earner/bodysuit$168.10— (—)$0.00—$0.00—00.0%0.000——
earner/bikini$39.56— (—)$0.00—$0.00—00.0%0.000——
earner/pool5$30.61— (—)$0.00—$0.00—00.0%0.000——
E2/spill$24.97— (—)$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.

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/pool5$128.0714.5%14.3%71.2%50.2%
E2/bodysuit$108.1724.8%15.0%60.2%3.3%
E2/bikini$66.2342.1%4.1%53.9%0.0%
E2/spill2$53.0821.5%4.4%74.0%0.0%
E2/lounge$78.9221.3%5.5%73.2%10.1%
DE/turkish_mature$35.970.0%0.0%100.0%—
DE/german$2.020.0%0.0%100.0%0.0%
DE/german_mature$10.770.0%0.0%100.0%—
DEww/bodysuit$8.840.0%0.0%100.0%—
DE/german_6s$3.420.0%0.0%100.0%—
DEww/spill2$1.960.0%0.0%100.0%—
DE/turkish_6s$0.390.0%0.0%100.0%—
DEww/bikini$0.280.0%0.0%100.0%—
DEww/pool5$0.220.0%0.0%100.0%—

D. Regime-matched, mix-neutral

mix-neutral is that ad's ROAS recomputed on the regime's own pooled country mix, keeping its own cost and revenue efficiencies. All four arms below delivered inside regime E2-R3 at $100/day.

adinstallsspendCPMCTRIndia%CPIRPIROASmix-neutral
bikini62$27.411.3211.08%31%$0.4420.3200.730.80
bodysuit76$35.911.719.17%9%$0.4721.3442.852.28
pool572$25.49.049.80%6%$0.3524.56512.969.81
spill65$26.315.4715.54%18%$0.4040.1860.460.94

⚠ DECISION_LOG.md #48 records that a single-table mix-neutral figure "reads −14% or −22% depending on which population the table is built from; neither is real." Read the column as a direction only.

2026-08-06T07:29:01.106453 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-02 08-03 08-04 08-05 day (UTC) 0 1 2 3 4 5 6 7 8 payers / installs % Payer rate by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini earner/bodysuit E2/mugshot earner/bikini earner/pool5 E2/spill E2/spill2 E2/lounge
Payer rate by day, one line per asset
2026-08-06T07:29:01.205611 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-02 08-03 08-04 08-05 day (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 within-day USD per install ARPU by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini earner/bodysuit E2/mugshot earner/bikini earner/pool5 E2/spill E2/spill2 E2/lounge
ARPU by day, one line per asset
2026-08-06T07:29:01.292199 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-02 08-03 08-04 08-05 day (UTC) 0 5 10 15 20 25 within-day USD per payer ARPPU by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini earner/bodysuit E2/mugshot earner/bikini earner/pool5 E2/spill E2/spill2 E2/lounge
ARPPU by day, one line per asset
2026-08-06T07:29:01.409938 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-02 08-03 08-04 08-05 day (UTC) 0.0 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/pool5 E2/bodysuit E2/bikini earner/bodysuit E2/mugshot earner/bikini earner/pool5 E2/spill E2/spill2 E2/lounge
Within-day ROAS by day, one line per asset
2026-08-06T07:29:01.495082 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-05 E2/pool5 E2/bodysuit E2/bikini E2/spill2 E2/lounge
Composite: every asset across every measure, normalised across the day

pool5's advantage is ARPPU. Payer rate 7.0% against bodysuit's 6.2%, but $22.73 against $8.01; $24.84, $23.27, $23.42 across three days on 42 pooled payers.

spill is the delivery leader and the weakest audience buy. CTR 15.40% against a pack at 6.7–10.1%, CPI $0.389, lowest revenue per install (0.648, hour-matched).

bodysuit is the volume arm with a falling CTR: 7.53% → 7.63% → 6.68% across three days, last in the pack hour-matched at 6.40%.

lounge is the most expensive arm and buys an ordinary install: CPI $0.889 against a pack at $0.39–0.49, CPM 19.91, one payer at 43.7%.

The German buy is not readable. $17.11 in six hours against $100/day, and bodysuit took 78% of the new ad set ($8.78 of $11.24).

8Caveats

The cohort figure below was published at 9% coverage and has since completed. At the full 24-hour horizon 2026-08-05's cohort is $1,258.59, the figure the 2026-08-06 report carries in its prior-day column; what this page shows is a lower-coverage read of the same cohort, not a different number. Against 08-04's completed $817.43 the day reads +54.0% — the comparison this page declined. Within-day and booked are unaffected; they were sealed and settled when this page shipped.

9What would settle the open questions

questionwhat would settle it
Which creative is worth producing more ofThe five-cell A/B test — it randomises away the audience confound every observational read above is subject to
Whether spill's CTR edge convertsThe same test: cost per lead resolves 20% inside day 1
Whether pool5 is a creative or a geographyA US-held comparison, or the test's own non-overlapping split
Whether the US/India mix should be bought deliberatelyA targeting decision no creative test addresses — carried unresolved for four sessions
Why MasterCard ····9617 declined three times on 08-05The issuer, not Meta. Meta records the decline, never the reason
Whether the balance survives the five-cell testCurrent balance $239.87 against $850/day committed — under seven hours of runway. Top up before it stops the test
Whether the worldwide pack buys German impressions cheaperGen 7 after a full day, on CPM and cost per click only

10What this hands to the five-cell test

The test was scheduled to start 2026-08-06 00:00 PT and run five days across all five arms (bikini, bodysuit, pool5, spill, lounge) with cost per lead as the key metric.

The arms opened unequal and were equalised four hours in. bodysuit and pool5 started at $150/day and the other three at $100/day; at 04:05–04:06 PT on 08-06, bikini, spill and lounge were raised to $150, putting all five at $150/day and the test at $750/day. The first four hours ran at a 1.5:1 budget ratio and the remainder will not. Cost per install is what the test resolves first and it is exactly what this affects, so the day-1 read should be taken on the post-equalisation window.

The prior this report hands over: spill leads on CTR by a margin nothing else here approaches; pool5 leads on money but half of that is an American position; bodysuit is fading on CTR; bikini buys the cheapest audience; lounge is the most expensive. None of it is a verdict, and the test exists because none of it can be.

11Reproduce

Window: UTC 2026-08-05 00:00–24:00, stitched from Meta days 08-04 (17:00–23:59) and 08-05 (00:00–16:59). Meta exports pulled 2026-08-05 19:23–19:26 PT: ads hourly for Meta day 08-05 (155 rows, hours 00–19), ads × day and ads × country × day for Jul 1 → Aug 5. Lum Telegram export taken on the laptop the same evening: 12,967 registrations, 1,306 payments, 7 unmatched. Payment data cut 2026-08-06 02:27 UTC. Activity history read for Aug 3 → Aug 6 with the rendered range asserted.

python -m ad_ops.measures       --config <run>/run_config.json --day 2026-08-05 --prev 2026-08-04
python -m ad_ops.day_compare    --config … --today 2026-08-05 --prev 2026-08-04 --h 6
python -m ad_ops.cohort_arpu    --config … --days 2026-08-01,…,2026-08-05
python -m ad_ops.report_tables  --config … --day 2026-08-05 --prev 2026-08-04
python -m ad_ops.report_charts  --config … --day 2026-08-05 --prev 2026-08-04 \
    --days 2026-08-02,…,2026-08-05 --out ad_ops/figures/2026-08-05 --relpath figures/2026-08-05
python -m ad_ops.asset_estimator hourly --meta <08-03,08-04,08-05 hourly> --lum <run>/lum --fx … \
    --ads ww_bikini_10s,ww_bodysuit_10s,ww_pool5,ww_mugshot,ww_spill,ww_lounge \
    --campaign bailingxia_meituan_ww_cvr_260802 --horizon 24

Working files: ../_runs/2026-08-05_0805_asset_candidates/.

12Appendix — definitions

The report clock is UTC. Adjust reports in UTC, so a UTC-bucketed report lines up with the attribution dashboard with no conversion in the head. Meta's ad account is fixed at UTC-7, so a UTC day is Meta day D-1 17:00–23:59 plus Meta day D 00:00–16:59. The window moves seven hours, and a UTC pull therefore 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. Country tables stay a META-day cut, because Meta serves no hour × country grid. The instrument check is invalid off the META clock, because Meta's conversion value sits on the conversion hour. The estimator and day_compare run on Meta's clock deliberately, since their subject is Meta-side delivery windows.

The three revenue measures, all read on our own payment records:

measurecountsmoves after the day closes?
bookedrevenue that arrived inside the day, whatever day its payer installedsettles ~4 h after midnight, then fixed. Meta's own number is this basis
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

Meta can express only booked, having no notion of an install-day cohort, so it rides bracketed beside that column and never as a row of its own. Within-day revenue is the "installed that day" row of the booked split in §4; the gap between booked and within-day is exactly the inherited cohort.

A regime is a stretch over which the 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). This day contains one break, at ~PT 23:50 on Aug 4.

Two install counts exist. 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 share one instrument. Ours is used for payer rate and every revenue measure, so payers and the installs they came from are the same population. They are never crossed.

The 16-payer bar (#37). Below roughly 16 payers a revenue figure carries a direction only.

The composite chart is parallel coordinates, and its axes never collapse into a single number. Cost axes are inverted so up is always better, revenue axes dashed and marked *, assets under 20 installs dropped, and money markers hollow where the point sits under 16 payers.

Internal — noindex. Not for distribution outside the team.