Every asset the account bought on 2026-08-04, ranked on each measure the day can carry, with the sample bar applied to each. Scoped to that one day: lifetime figures pool budget regimes, campaign structures and country mixes that differ, and this account changes all three inside a week. Where a comparison needs more than a day to mean anything, that is said rather than worked around.
The report clock is UTC. Meta stamps its hourly exports in the ad account's own zone, UTC-7, so this day is the account's 17:00–23:59 on 08-03 plus its 00:00–16:59 on 08-04, restitched from two hourly exports. Two things cannot follow the clock and are labelled on their face wherever they appear: per-country cuts, because Meta serves no hour by country grid, and the matched-hours and regime instruments, which key on Meta wall-clock instants by design.
The day: $446.00 across seven objects that took spend, 785 installs (Meta) at $0.568, within-day revenue $588.70 (ROAS 1.32), booked $921.86 (2.07), cohort at 24 hours $783.90 (1.76) at 35% coverage. Payment cut 2026-08-05 10:59 UTC. The standing per-asset block is in asset_performance_report_2026-08-04.md §8 and is not repeated here; this document is the ranking argument built on it.
Delivery is answerable. CPM, CTR, click→install and CPI are single-clock quantities on thousands of impressions and hundreds to thousands of clicks per arm. They need no maturity and no horizon.
Revenue is not, and it fails two gates rather than one. The far gate is sample: across 1,596 installs and 81 payers the coefficient of variation is 7.72, and required sample scales with its square, so resolving a 20% difference needs 23,363 installs per arm. The largest arm on this day carried 221. That is 0.9% of the requirement.
The near gate binds first. No arm on this day reaches the 16-payer bar (#37): pool5 12, bodysuit 11, bikini 8, spill2 4, mugshot 1. There is no per-asset revenue ranking here to defend. Every revenue ordering below is a direction, and the difference between a twelve-payer arm and an eleven-payer arm is not a result at all.
| rank | asset | CPI | CTR | click→install | CPM | spend |
|---|---|---|---|---|---|---|
| 1 | spill2 | $0.369 | 13.34% | 25.71% | 12.66 | $30.27 |
| 2 | bodysuit | $0.513 | 7.63% | 27.56% | 10.77 | $113.28 |
| 3 | bikini | $0.540 | 9.03% | 24.79% | 12.09 | $111.81 |
| 4 | pool5 | $0.562 | 8.88% | 23.56% | 11.77 | $103.49 |
| 5 | mugshot | $1.034 | 10.43% | 14.99% | 16.17 | $75.48 |
Three readings, all safe at this sample:
spill2 buys the cheapest installs on the account, $0.369 against a pack running $0.513 to $1.034, and it holds the cheapest install in every six-hour block it delivered in. It carries the day's highest CTR at 13.34% and reaches 15.37% in the 18–23 block, though mugshot edges it on CTR in the two earlier blocks, which are also the two where spill2 bought least. It first delivered in hour 07 of this day, so it did not run the whole clock.mugshot is dear at both ends and dearest at the click. Its install costs 2.00× the other four arms pooled, and that multiple decomposes exactly: its CPM is 1.39× theirs, its CTR is 1.18× theirs, and its click→install is 0.59× theirs. People do click it, and 14.99% of those clicks become installs against 23.6% to 27.6% for the pack. It was switched off at 12:32 account time.bodysuit, bikini and pool5 sit inside a 9.6% band on price and trade the stages between them. bodysuit buys the cheapest impressions on the account and wins the fewest clicks, then converts more of them than anything else; bikini and pool5 win more clicks and convert fewer. The three land at $0.513, $0.540 and $0.562.One delivery result clears significance day-over-day, on the ad account's clock. The matched-hours instrument keys on Meta's own delivering hours, so it is reported as the instrument produces it and its day boundaries are not this report's. Held to matched hours at a fixed horizon of six hours, bodysuit's click→install fell 36.33% → 25.55%, −29.7%, p = 0.001, on flat CPI ($0.511 → $0.506). It is the only p < 0.05 negative in the comparison, and it shares its window with bodysuit's own $100 → $150 budget change at 12:31 account time, so the decline and the budget move cannot be separated here. bikini (p = 0.224), pool5 (p = 0.240) and mugshot (p = 0.052) do not separate. spill's +913% (p = 0.000) is the rejected build being replaced by its copy and is already recorded (DECISION_LOG.md #50).
Within-day is sealed and is the only revenue basis used in this table. Spend and the wROAS built on it are the UTC day; the two country columns are a META-day cut and are seven hours offset from everything beside them.
| asset | within-day | wROAS | payers | ARPPU | largest payer | US % of spend (META day) | US % of its revenue |
|---|---|---|---|---|---|---|---|
pool5 | $228.50 | 2.21 | 12 | 19.04 | 38.9% | 13.5% | 41.1% |
bodysuit | $177.48 | 1.57 | 11 | 16.13 | 25.3% | 13.4% | 21.4% |
bikini | $54.67 | 0.49 | 8 | 6.83 | 23.6% | 9.2% | 9.1% |
spill2 | $38.61 | 1.28 | 4 | 9.65 | 54.2% | 7.9% | 0.0% |
mugshot | $6.32 | 0.08 | 1 | 6.32 | 100.0% | 3.2% | 0.0% |
Nothing in this table clears the payer bar. Twelve is the highest count the day produced, against a bar of 16, so the wROAS column carries direction and no magnitude at all.
One person decides the order of the top two arms. A single payer paid $88.95 inside this day. That is 38.9% of everything pool5 earned and 15.1% of the account's entire within-day revenue. Remove him and pool5 goes from 2.21 to 1.35, below bodysuit's untouched 1.57. The ranking between the day's two leading arms turns on one person, and it does so whichever country he sits in.
Where he sits is pool5's United States cell. $14.10 of United States spend on the country cut, 13.5% of pool5's own spend there, returned $93.94 within-day, which is 41.1% of the asset's revenue and 16.0% of the day's. That cell holds exactly two payers, $88.95 and $4.99; the larger is 94.7% of it. The same creative bought $15.17 of India on the same cut and returned within-day 0.76 there.
The mix column separates two arms from the rest, both on the positive side. pool5's United States revenue share is 3.0× its United States spend share and bodysuit's is 1.6×. bikini is level, 9.1% of revenue against 9.2% of spend, and mugshot and spill2 earned nothing in the United States at all. The two sides of that ratio sit on different clocks, so it is a direction on where the money came from rather than a measured gap.
spill2's $38.61 sits on four payers with one of them worth 54.2% of it. Same shape as pool5's cell, a fifth of the money, and further under the bar.
This section runs on the ad account's clock. The estimator keys every cell on Meta's delivering hour and its regimes are Meta wall-clock instants: a budget changed at 12:31 on the account's clock, and that is the event. Its window spans the account's 08-03 and 08-04 rather than this UTC day. Cells matured to H=12. mix-neutral re-prices each arm's return on its regime's own pooled country mix, holding its own cost and revenue efficiency. It answers what an asset would have returned buying what its siblings bought.
| regime | asset | installs | CPI | CTR | India share | ROAS | mix-neutral |
|---|---|---|---|---|---|---|---|
| E2-R1 | bikini | 160 | 0.436 | 8.82% | 34% | 1.12 | 1.00 |
| E2-R1 | bodysuit | 111 | 0.506 | 6.90% | 17% | 1.05 | 1.08 |
| E2-R1 | pool5 | 111 | 0.601 | 9.93% | 15% | 1.00 | 0.81 |
| E2-R1 | mugshot | 95 | 0.852 | 8.64% | 22% | 0.21 | 0.25 |
| E2-R1 | spill | 85 | 1.308 | 1.67% | 7% | 0.05 | 0.07 |
| E2-R2 | bikini | 132 | 0.545 | 8.29% | 40% | 0.54 | 0.63 |
| E2-R2 | bodysuit | 106 | 0.546 | 7.02% | 25% | 1.12 | 1.17 |
| E2-R2 | pool5 | 81 | 0.668 | 8.59% | 15% | 3.34 | 1.93 |
| E2-R2 | mugshot | 50 | 0.981 | 10.95% | 22% | 0.00 | — |
| E2-R2 | spill | 35 | 0.309 | 10.64% | 23% | 2.46 | 3.81 |
| E2-R3 | bikini | 23 | 0.383 | 12.43% | 35% | 0.96 | 0.97 |
| E2-R3 | bodysuit | 32 | 0.343 | 12.00% | 12% | 2.39 | 2.06 |
| E2-R3 | pool5 | 37 | 0.232 | 10.60% | 0% | 2.16 | 1.89 |
| E2-R3 | spill | 24 | 0.377 | 15.18% | 12% | 0.64 | 0.98 |
E2-R1 is the only stretch this account has run with all five arms on the same $100 budget, and it is where the mix confound is cleanest to read. There pool5's raw 1.00 becomes 0.81 once its country mix is neutralised, putting it below bikini at 1.00 and bodysuit at 1.08.
Mix-neutralising moves pool5 down in all three regimes and moves no other arm down by more than 0.33, which is bodysuit in E2-R3 on 32 installs. That is the same conclusion §3 reaches from the payer side, reached independently from the country side.
Two arms rise after neutralising, both on thin cells: spill in E2-R2 (2.46 → 3.81 on 35 installs) and in E2-R3 (0.64 → 0.98 on 24). Neither is separable at those counts.
The UTC day sits across the seam. Its first seven hours fall inside E2-R1 with every arm at $100, the middle runs the whole of E2-R2 with spill at $25 against the rest at $100, and the last four hours open E2-R3 with bodysuit at $150. Seven of twenty-four hours are budget-matched.
mugshot is dead and the evidence is not close. Dearest impressions of the five worldwide arms at 16.17 CPM against a 10.77 to 12.66 pack, worst click→install at 14.99% against a 23.6% to 27.6% pack, an install at 2.00× the pack, and $6.32 of within-day revenue from a single payer at a 1.3% payer rate. On the estimator's lifetime cut it reads 0.13 at H=1, H=6 and H=12 at full coverage and 0.26 at H=24 at 69%. It was switched off at 12:32 account time and should not come back.spill2 has earned more spend. Cheapest installs and the day's highest CTR, from hour 07 onward. Its money side is four payers, so it is unproven rather than good, and that is exactly the argument for buying more of it.pool5 leads every revenue measure and does it on twelve payers with one person worth 38.9% of the arm; bodysuit follows on eleven. Both sit under the bar, and the 0.64 of ROAS between them is smaller than the single payer who decides it.bodysuit carries the day's one significant negative and its money held. Both facts are about the same asset and neither cancels the other: its funnel got worse while its revenue was the second best on the account. The decline shares its window with a budget change, so it is not a clean creative result either.pool5 should not be scaled on this day's result. Its lead is a two-payer American cell, and inside that cell one person is 94.7%. If the intention is to buy those payers, that is a targeting decision and belongs in the geography question, not in a creative ranking.bikini is the quiet underperformer. Third of five on every delivery column and 0.49 within-day on eight payers. On the country cut 34.9% of its spend went to India, the highest India share of any arm, and India returned 1.15 within-day account-wide against the United States' 2.73 on the same cut. Both of those country figures rest on thirteen and five payers, so they order the countries and do not size the gap.On this clock the day catches only the buy's first three delivering hours, 21:00 to 23:59, and two of the fifteen creatives sharing its single ad set took any spend inside them. $11.67 spent, five installs at $2.334, $25.41 within-day from one payer.
| creative | spend | impressions | CPM | CTR | click→install | installs | CPI | within-day |
|---|---|---|---|---|---|---|---|---|
german_mature_10s | $9.88 | 203 | 48.67 | 5.42% | 36.36% | 4 | $2.470 | $25.41 |
latina_true_10s | $1.79 | 36 | 49.72 | 8.33% | 33.33% | 1 | $1.790 | $0.00 |
No German asset is decidable, and the gap is not close. The better-looking of the two is one payer, and one creative took 84.7% of the window's spend.
What this window can carry is the price of a German impression. Against the worldwide buy on the same day:
| CPM | CTR | cost per click | click→install | CPI | |
|---|---|---|---|---|---|
| German-speaking | $48.83 | 5.86% | $0.834 | 35.7% | $2.334 |
| Worldwide, five arms | $12.20 | 9.05% | $0.135 | 23.8% | $0.566 |
| German multiple | 4.00× | 0.65× | 6.19× | 1.50× | 4.12× |
Only the first column survives the sample. 239 impressions at four times what the worldwide arms paid is a price, and prices read cleanly on hundreds of impressions. Everything to the right of it rests on 14 clicks and 5 installs: that is why the click→install column reads above the worldwide rate here, which is not a claim anyone should carry out of this table. At this depth the funnel below the impression is a direction and never a rate, and no statement about the landing page, the store listing or the purchase flow can be made from it.
That is a statement about this window, not about the German buy. A lifetime funnel read across the buy's whole life is a different cut on a far larger click sample, and this document does not make it either way. Anything concluded here about what sits above or below the click applies to three hours and fourteen clicks.
The rest of the buy's first day belongs to 08-05 on this clock. Three further German creatives spent on the ad account's 08-04 after 17:00 account time, all of it outside this UTC day; on the META-day country cut turkish_mature alone took $18.69 in Germany, more than every creative in the window above combined, and none of it is visible here.
Two consequences follow, and neither is about picking a German creative:
pool5 at 12 is the deepest cell the day produced.spill is at $25 and then bodysuit at $150 and mugshot is off. Any cross-arm comparison spanning the whole day is partly a comparison of budgets.bodysuit's funnel decline and its budget change share a window and cannot be separated on this data.Run from the repository root with PYTHONIOENCODING=utf-8. The config carries tz: "UTC".
python -m ad_ops.measures --config _runs/2026-08-05_0804_settled/run_config.json \
--day 2026-08-04 --prev 2026-08-03
python -m ad_ops.report_tables --config _runs/2026-08-05_0804_settled/run_config.json \
--day 2026-08-04 --prev 2026-08-03
python -m ad_ops.cohort_arpu --config _runs/2026-08-05_0804_settled/run_config.json \
--days 2026-08-03,2026-08-04
§2's two-proportion tests and §4's regime table run on the ad account's clock, from the sibling config run_config_meta.json, which differs from the UTC one only in tz:
python -m ad_ops.day_compare --config _runs/2026-08-05_0804_settled/run_config_meta.json \
--today 2026-08-04 --prev 2026-08-03 --h 6
python -m ad_ops.asset_estimator hourly --campaign bailingxia_meituan_ww_cvr_260802 --adset '' \
--ads ww_bikini_10s,ww_bodysuit_10s,ww_pool5,ww_mugshot,ww_spill,ww_lounge \
--meta <08-03 hourly> <08-04 hourly> <08-05 hourly> \
--lum _runs/2026-08-05_0804_settled/lum --fx <fx_rates.json>
A UTC day needs the previous account day's hourly export as well as its own, and measures.py raises by name rather than short-filling if it is missing.
Payer-level concentration inside a single country cell, which the standing block reports per asset but not per cell, was read with a short script over measures.Ctx's own loaders rather than a second instrument: _runs/2026-08-05_0804_settled/utc_2026-08-04/cell_payers.py.