Campaign bailingxia_meituan_ww_cvr_260730: one CBO ad set at $500/day, three creatives, worldwide, Android, optimised to Purchase. On a UTC day it spent $278.28 across 11 delivering hours, against $733.94 across 23 hours on 08-01. The report clock, the three revenue measures and regime are defined in the appendix, along with the one thing about this pair of days that bounds every comparison in the report: they are not regime-matched.
| 08-01 | 08-02 | change | |
|---|---|---|---|
| delivering hours | 23 | 11 | −12 |
| spend | $733.94 | $278.28 | −62.1% |
| installs | 1,963 | 745 | −62.0% |
| cost per install | $0.374 | $0.374 | −0.1% |
| booked | $1,110.93 · 1.51 (Meta 1.59) | $559.00 · 2.01 (Meta 2.19) | +32.7% |
| within-day | $980.99 · 1.34 | $272.13 · 0.98 | −26.8% |
| cohort at 24 h | $1,163.16 · 1.58 | $360.61 · 1.30 | −18.2% |
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.
| app | ARPU (d0) | ARPU (d3) | ARPU (d7) | ARPPU (d0) | ARPPU (d3) | ARPPU (d7) | installs |
|---|---|---|---|---|---|---|---|
| Vloom | $0.3736 | $0.6544 | $0.9786 | $9.74 | $15.35 | $20.86 | 938 |
On the three revenue rows the change column is the change in ROAS. Dollars fell on all three, roughly with the spend.
The account bought less at the same price. CPM rose 21.1% and CTR 21.2%, cancelling exactly.
Booked rose while the day's own traffic earned less. The share earned by that day's own installs fell 88.3% to 48.7%.
The fall is real; its size depends on the measure. Within-day reads 26.8%, cohort@24h 18.2%; the gap is how long late installs had to pay.
No per-asset revenue row clears the payer bar, at 13, 10 and 9 payers; §7 ranks them anyway, as directions.
Spend, impressions, clicks and installs sit on the delivery hour. Booked sits on the hour the money arrived. Within-day and cohort sit on the install hour: what that hour's traffic went on to earn. So only the within-day and cohort ratios divide an hour's revenue by that same hour's spend; the booked column is here so the day's total is traceable to where in the day it landed.
| hour UTC | spend | impr | CPM | clicks | CTR | inst | CPI | booked | ROAS | within-day | ROAS | cohort 24 h | ROAS |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 00 | $7.13 | 799 | $8.92 | 68 | 8.51% | 16 | $0.446 | $14.51 | 2.03 | $14.51 | 2.03 | $14.51 | 2.03 |
| 01 | $0.00 | 0 | — | 0 | — | 4 | — | $2.99 | — | $2.99 | — | $2.99 | — |
| 02 | $0.00 | 0 | — | 0 | — | 3 | — | $36.50 | — | $2.99 | — | $2.99 | — |
| 03 | $0.00 | 0 | — | 0 | — | 1 | — | $8.75 | — | $0.00 | — | $0.00 | — |
| 04 | $0.00 | 0 | — | 0 | — | 3 | — | $20.27 | — | $0.00 | — | $0.00 | — |
| 05 | $0.00 | 0 | — | 0 | — | 0 | — | $18.74 | — | $0.00 | — | $0.00 | — |
| 06 | $0.00 | 0 | — | 0 | — | 5 | — | $29.49 | — | $4.99 | — | $4.99 | — |
| 07 | $0.00 | 0 | — | 0 | — | 2 | — | $23.68 | — | $0.00 | — | $0.00 | — |
| 08 | $13.29 | 1,512 | $8.79 | 166 | 10.98% | 29 | $0.458 | $0.00 | 0.00 | $0.00 | 0.00 | $0.00 | 0.00 |
| 09 | $36.11 | 4,266 | $8.46 | 373 | 8.74% | 82 | $0.440 | $7.12 | 0.20 | $42.58 | 1.18 | $42.58 | 1.18 |
| 10 | $41.41 | 4,119 | $10.05 | 388 | 9.42% | 96 | $0.431 | $69.02 | 1.67 | $47.03 | 1.14 | $57.29 | 1.38 |
| 11 | $27.73 | 3,119 | $8.89 | 294 | 9.43% | 80 | $0.347 | $26.36 | 0.95 | $16.15 | 0.58 | $82.26 | 2.97 |
| 12 | $30.76 | 2,573 | $11.95 | 255 | 9.91% | 73 | $0.421 | $28.26 | 0.92 | $28.26 | 0.92 | $28.26 | 0.92 |
| 13 | $31.15 | 2,752 | $11.32 | 306 | 11.12% | 72 | $0.433 | $32.70 | 1.05 | $70.64 | 2.27 | $70.64 | 2.27 |
| 14 | $25.46 | 2,578 | $9.88 | 278 | 10.78% | 79 | $0.322 | $89.42 | 3.51 | $21.11 | 0.83 | $21.11 | 0.83 |
| 15 | $24.26 | 2,670 | $9.09 | 272 | 10.19% | 67 | $0.362 | $36.83 | 1.52 | $10.90 | 0.45 | $10.90 | 0.45 |
| 16 | $27.54 | 3,024 | $9.11 | 313 | 10.35% | 70 | $0.393 | $12.25 | 0.44 | $4.99 | 0.18 | $4.99 | 0.18 |
| 17 | $13.44 | 1,543 | $8.71 | 140 | 9.07% | 43 | $0.313 | $32.91 | 2.45 | $0.00 | 0.00 | $0.00 | 0.00 |
| 18 | $0.00 | 0 | — | 0 | — | 11 | — | $16.76 | — | $0.00 | — | $7.12 | — |
| 19 | $0.00 | 0 | — | 0 | — | 2 | — | $11.96 | — | $0.00 | — | $0.00 | — |
| 20 | $0.00 | 0 | — | 0 | — | 3 | — | $5.76 | — | $4.99 | — | $9.98 | — |
| 21 | $0.00 | 0 | — | 0 | — | 2 | — | $15.99 | — | $0.00 | — | $0.00 | — |
| 22 | $0.00 | 0 | — | 0 | — | 1 | — | $12.99 | — | $0.00 | — | $0.00 | — |
| 23 | $0.00 | 0 | — | 0 | — | 1 | — | $5.76 | — | $0.00 | — | $0.00 | — |
| total | $278.28 | 28,955 | $9.61 | 2,853 | 9.85% | 745 | $0.374 | $559.00 | 2.01 | $272.13 | 0.98 | $360.61 | 1.30 |
Meta's own booked total for the day is $610.49 · 2.19, on its conversion clock. Installs in hours with zero delivery are conversion-clock residue from earlier hours; there are 38 of them.
Analysis. Hours 01–07 are the tail of Meta day 08-01, where the CBO ad set had spent $505.93 against a $500/day budget by 17:59.
Hours 18–23 are not a cap: only $271.15 was spent by then and the campaign delivered again later on the same account day.
The thirteen hours that bought nothing booked $209.64 against $15.96 of within-day revenue: 37.5% of booked and 5.9% of within-day.
Within the delivering hours the buying is steady. CPM runs $8.46 to $11.95 and CTR 8.51% to 11.12%, with no trend across the block. Cost per install drifts from $0.458 down to $0.313. What the traffic did afterwards does not hold steady: within-day ROAS by hour runs 0.00 to 2.27 on materially identical delivery, and hour 11 reads 0.58 within-day against 2.97 at a 24-hour horizon on the same traffic.
That last pair is the censoring, visible in one row. Compare hours to each other on the cohort column, and one day to another on within-day.
Only hours both days delivered in are compared. The diurnal shape is the largest confound in a day-over-day read on this account, so an hour one day is missing is dropped. This runs on the report clock, from the same loader as the table above, because spend, impressions, clicks and installs sit on Meta's delivery hour and restitch across two account days exactly.
Hours both days delivered in, on the UTC clock: 00, 08, 09, 10, 12, 13, 14, 15, 16, 17. 2026-08-02 additionally delivered in 11. 2026-08-01 additionally delivered in 01, 02, 03, 04, 05, 06, 07, 18, 19, 20, 21, 22, 23. Only the shared hours are compared.
Counting which way each shared hour points, which needs no weighting and asks only for a direction:
| metric | hours 2026-08-02 ran higher | hours it ran lower | sign test |
|---|---|---|---|
| CPM | 9 of 10 | 1 of 10 | p = 0.021 |
| CTR | 9 of 10 | 1 of 10 | p = 0.021 |
| click→install | 3 of 10 | 7 of 10 | p = 0.344 |
| CPI | 8 of 10 | 2 of 10 | p = 0.109 |
A sign test throws magnitude away and buys weight-free direction with it.
Impression price rose almost everywhere, and the click rate with it. pool5 entered on 08-02, moving CTR by composition, but composition cannot move impression price.
Every shared hour, 2026-08-01 → 2026-08-02. 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.
| hr | impressions | CPM | CTR | click→install | CPI |
|---|---|---|---|---|---|
| 00 | 370 → 799 | 12.76 → 8.92 | 16.76% → 8.51% | 38.7% → 23.5% | 0.197 → 0.446 |
| 08 | 7,863 → 1,512 | 6.72 → 8.79 | 6.79% → 10.98% | 25.5% → 17.5% | 0.389 → 0.458 |
| 09 | 8,151 → 4,266 | 6.83 → 8.46 | 6.31% → 8.74% | 25.1% → 22.0% | 0.431 → 0.440 |
| 10 | 5,917 → 4,119 | 7.50 → 10.05 | 6.39% → 9.42% | 25.4% → 24.7% | 0.462 → 0.431 |
| 12 | 1,073 → 2,573 | 7.79 → 11.95 | 7.74% → 9.91% | 26.5% → 28.6% | 0.380 → 0.421 |
| 13 | 2,469 → 2,752 | 6.94 → 11.32 | 8.67% → 11.12% | 27.1% → 23.5% | 0.296 → 0.433 |
| 14 | 3,175 → 2,578 | 7.80 → 9.88 | 9.17% → 10.78% | 27.8% → 28.4% | 0.306 → 0.322 |
| 15 | 3,452 → 2,670 | 7.71 → 9.09 | 9.21% → 10.19% | 24.8% → 24.6% | 0.337 → 0.362 |
| 16 | 4,177 → 3,024 | 7.04 → 9.11 | 8.55% → 10.35% | 23.8% → 22.4% | 0.346 → 0.393 |
| 17 | 5,594 → 1,543 | 6.70 → 8.71 | 7.85% → 9.07% | 26.4% → 30.7% | 0.323 → 0.313 |
Hour 00 is the single exception on both CPM and CTR, and the one hour carried in from Meta day 08-01's tail.
(i) The portfolio by country, 2026-08-02. 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.
| cc | spend | share | impressions | CPM | registrations (ours) | cost/reg | within-day | wROAS | payers |
|---|---|---|---|---|---|---|---|---|---|
| IN | $72.71 | 26.1% | 13,199 | $5.51 | 210 | $0.346 | $56.74 | 0.78 | 25 |
| US | $14.81 | 5.3% | 317 | $46.71 | 33 | $0.449 | $35.96 | 2.43 | 4 |
| BR | $14.47 | 5.2% | 1,162 | $12.45 | 74 | $0.195 | $50.92 | 3.52 | 4 |
| ID | $12.54 | 4.5% | 1,832 | $6.85 | 56 | $0.224 | $0.00 | 0.00 | 1 |
| TR | $9.14 | 3.3% | 471 | $19.41 | 19 | $0.481 | $21.25 | 2.33 | 3 |
| MY | $7.18 | 2.6% | 825 | $8.70 | 19 | $0.378 | $0.00 | 0.00 | 0 |
| PH | $6.35 | 2.3% | 1,431 | $4.43 | 37 | $0.172 | $0.00 | 0.00 | 0 |
| GB | $6.19 | 2.2% | 184 | $33.62 | 6 | $1.032 | $0.00 | 0.00 | 0 |
| IT | $5.37 | 1.9% | 217 | $24.70 | 7 | $0.767 | $0.00 | 0.00 | 0 |
| TH | $5.15 | 1.9% | 584 | $8.82 | 13 | $0.396 | $0.00 | 0.00 | 0 |
| MX | $5.11 | 1.8% | 458 | $11.16 | 12 | $0.426 | $0.00 | 0.00 | 2 |
| DE | $4.92 | 1.8% | 126 | $39.00 | 9 | $0.547 | $0.00 | 0.00 | 0 |
178 further countries are not listed, $114.35 between them (41.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) $7.13 from Meta 2026-08-01 and $271.15 from Meta 2026-08-02, a measured UTC-day total of $278.28.
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-02.
B1
| cc | spend | share | impressions | CPM | registrations (ours) | cost/reg | within-day | wROAS | payers |
|---|---|---|---|---|---|---|---|---|---|
| IN | $72.71 | 26.1% | 13,199 | $5.51 | 210 | $0.346 | $56.74 | 0.78 | 25 |
| US | $14.81 | 5.3% | 317 | $46.71 | 33 | $0.449 | $35.96 | 2.43 | 4 |
| BR | $14.47 | 5.2% | 1,162 | $12.45 | 74 | $0.195 | $50.92 | 3.52 | 4 |
| ID | $12.54 | 4.5% | 1,832 | $6.85 | 56 | $0.224 | $0.00 | 0.00 | 1 |
| TR | $9.14 | 3.3% | 471 | $19.41 | 19 | $0.481 | $21.25 | 2.33 | 3 |
| MY | $7.18 | 2.6% | 825 | $8.70 | 19 | $0.378 | $0.00 | 0.00 | 0 |
| PH | $6.35 | 2.3% | 1,431 | $4.43 | 37 | $0.172 | $0.00 | 0.00 | 0 |
| GB | $6.19 | 2.2% | 184 | $33.62 | 6 | $1.032 | $0.00 | 0.00 | 0 |
| IT | $5.37 | 1.9% | 217 | $24.70 | 7 | $0.767 | $0.00 | 0.00 | 0 |
| TH | $5.15 | 1.9% | 584 | $8.82 | 13 | $0.396 | $0.00 | 0.00 | 0 |
| MX | $5.11 | 1.8% | 458 | $11.16 | 12 | $0.426 | $0.00 | 0.00 | 2 |
| DE | $4.92 | 1.8% | 126 | $39.00 | 9 | $0.547 | $0.00 | 0.00 | 0 |
178 further countries are not listed, $114.35 between them (41.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-01, the same two tables.
(i) The portfolio by country, 2026-08-01. 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.
| cc | spend | share | impressions | CPM | registrations (ours) | cost/reg | within-day | wROAS | payers |
|---|---|---|---|---|---|---|---|---|---|
| IN | $237.98 | 32.4% | 52,368 | $4.54 | 700 | $0.340 | $203.94 | 0.86 | 43 |
| US | $38.57 | 5.3% | 689 | $55.97 | 50 | $0.771 | $60.91 | 1.58 | 7 |
| BR | $32.24 | 4.4% | 3,182 | $10.13 | 146 | $0.221 | $72.62 | 2.25 | 4 |
| ID | $25.76 | 3.5% | 4,560 | $5.65 | 123 | $0.209 | $50.55 | 1.96 | 3 |
| TR | $24.03 | 3.3% | 1,304 | $18.43 | 44 | $0.546 | $21.25 | 0.88 | 3 |
| MY | $21.97 | 3.0% | 2,074 | $10.60 | 67 | $0.328 | $42.81 | 1.95 | 3 |
| GB | $20.23 | 2.8% | 499 | $40.53 | 24 | $0.843 | $0.00 | 0.00 | 0 |
| MX | $17.36 | 2.4% | 1,406 | $12.35 | 31 | $0.560 | $5.71 | 0.33 | 3 |
| PH | $16.00 | 2.2% | 3,280 | $4.88 | 101 | $0.158 | $55.24 | 3.45 | 4 |
| DE | $13.69 | 1.9% | 269 | $50.87 | 12 | $1.141 | $0.00 | 0.00 | 0 |
| AR | $13.54 | 1.8% | 997 | $13.58 | 36 | $0.376 | $24.93 | 1.84 | 2 |
| PL | $10.80 | 1.5% | 416 | $25.98 | 19 | $0.568 | $35.81 | 3.32 | 3 |
182 further countries are not listed, $261.77 between them (35.7% 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) $235.14 from Meta 2026-07-31 and $498.80 from Meta 2026-08-01, a measured UTC-day total of $733.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-01.
B1
| cc | spend | share | impressions | CPM | registrations (ours) | cost/reg | within-day | wROAS | payers |
|---|---|---|---|---|---|---|---|---|---|
| IN | $237.98 | 32.4% | 52,368 | $4.54 | 700 | $0.340 | $203.94 | 0.86 | 43 |
| US | $38.57 | 5.3% | 689 | $55.97 | 50 | $0.771 | $60.91 | 1.58 | 7 |
| BR | $32.24 | 4.4% | 3,182 | $10.13 | 146 | $0.221 | $72.62 | 2.25 | 4 |
| ID | $25.76 | 3.5% | 4,560 | $5.65 | 123 | $0.209 | $50.55 | 1.96 | 3 |
| TR | $24.03 | 3.3% | 1,304 | $18.43 | 44 | $0.546 | $21.25 | 0.88 | 3 |
| MY | $21.97 | 3.0% | 2,074 | $10.60 | 67 | $0.328 | $42.81 | 1.95 | 3 |
| GB | $20.23 | 2.8% | 499 | $40.53 | 24 | $0.843 | $0.00 | 0.00 | 0 |
| MX | $17.36 | 2.4% | 1,406 | $12.35 | 31 | $0.560 | $5.71 | 0.33 | 3 |
| PH | $16.00 | 2.2% | 3,280 | $4.88 | 101 | $0.158 | $55.24 | 3.45 | 4 |
| DE | $13.69 | 1.9% | 269 | $50.87 | 12 | $1.141 | $0.00 | 0.00 | 0 |
| AR | $13.54 | 1.8% | 997 | $13.58 | 36 | $0.376 | $24.93 | 1.84 | 2 |
| PL | $10.80 | 1.5% | 416 | $25.98 | 19 | $0.568 | $35.81 | 3.32 | 3 |
182 further countries are not listed, $261.77 between them (35.7% 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.
Pooled over the 10 hours both days delivered in, on the UTC clock. Meta's instrument on both sides of every ratio.
| spend | impressions | CPM | clicks | CTR | installs | click→install | CPI | |
|---|---|---|---|---|---|---|---|---|
| 2026-08-01 | $301.39 | 42,241 | 7.14 | 3,190 | 7.55% | 826 | 25.89% | $0.365 |
| 2026-08-02 | $250.55 | 25,836 | 9.70 | 2,559 | 9.90% | 627 | 24.50% | $0.400 |
Pooling across hours is a mix comparison: it weights each hour by delivery, so where it disagrees with §2's unweighted pairing, the mix moved.
On this pair of days the two reads agree. Both put CTR up and leave click-to-install unresolved, and no single hour dominates the compared impressions.
Held to a single creative that ran on both days, the comparison can only be made on the ad account's own clock: the matched-hours work keys every cell on (campaign, ad set, ad, Meta day, Meta hour), and its shared-hours logic means something only against Meta's own delivery days. What follows is Meta day 08-02 against Meta day 08-01, a seven-hour-offset pair of windows against every other table in this report, and its levels do not reconcile against them. Only the nine hours both Meta days delivered are used, because the diurnal shape is the largest confound: 01, 02, 03, 05, 06, 07, 08, 09, 10.
Install counts here are cell-attributed with carry-back, which is a third basis from either Meta's Leads or a raw registration timestamp. Cohort coverage at H=24 on this subset is 100% on both days.
| impressions | clicks | CTR | installs | click→install | payers | payer rate | ROAS | |
|---|---|---|---|---|---|---|---|---|
| 08-01 pooled | 41,871 | 3,128 | 7.47% | 896 | 28.64% | 36 | 4.02% | 1.50 |
| 08-02 pooled | 25,037 | 2,491 | 9.95% | 671 | 26.94% | 25 | 3.73% | 1.04 |
bodysuit 08-01 | 25,675 | 1,997 | 7.78% | 551 | 27.59% | 20 | 3.63% | 1.52 |
bodysuit 08-02 | 12,889 | 1,073 | 8.32% | 318 | 29.64% | 7 | 2.20% | 0.72 |
bikini 08-01 | 10,910 | 762 | 6.98% | 239 | 31.36% | 10 | 4.18% | 1.22 |
bikini 08-02 | 3,105 | 318 | 10.24% | 72 | 22.64% | 6 | 8.33% | 1.25 |
bikini's shared window is four hours, 02, 03, 05 and 06; bodysuit's is all nine.
Nothing in that pooled funnel separates the days either. Click-to-install falls 6.0% at p = 0.156 and the payer rate falls 7.3% at p = 0.767. Held to bodysuit, click-to-install rises 7.4% at p = 0.230 and the payer rate falls 39.4% at p = 0.242, on seven payers.
bikini's click-to-install drop is basis-dependent and not settled: 27.8% at p = 0.004 cell-attributed, 19.3% at p = 0.083 on Meta's own funnel.
So the funnel after the click is not meaningfully different between the two Meta days. What moved is the price of the impression.
Back on the report clock, the two days on all three measures:
| 08-01 | 08-02 | |
|---|---|---|
| spend | $733.94 | $278.28 |
| installs | 1,963 | 745 |
| cost per install | $0.374 | $0.374 |
| booked | $1,110.93 · 1.51 (Meta 1.59) | $559.00 · 2.01 (Meta 2.19) |
| within-day | $980.99 · 1.34 | $272.13 · 0.98 |
| cohort at 24 h | $1,163.16 · 1.58 | $360.61 · 1.30 |
| cohort coverage at 24 h | 100%, complete | 100%, complete |
Booked revenue split by the UTC day its payer actually installed:
| payer installed | 08-01's booked revenue | 08-02's booked revenue |
|---|---|---|
| the day itself | $980.99 (88.3%) | $272.13 (48.7%) |
| one day earlier | $129.94 (11.7%) | $239.67 (42.9%) |
| two days earlier | — | $47.20 (8.4%) |
Analysis. The top row of that split table is within-day, so the gap between booked and within-day is the inherited cohort and nothing else.
On 08-01 the two nearly agree, 1.51 against 1.34, because 88.3% of what arrived was earned that day. On 08-02 they diverge hard, 2.01 against 0.98, because less than half was. A day that spends less while the previous days' buyers keep paying will always read well on booked revenue, and better still on Meta's version of it. That is the measure behaving as defined.
Two things bound how far the 0.98 can be pushed:
Maturity is not available as an explanation on either side: both cohorts are 100% covered at a 24-hour horizon, the youngest 08-02 install being 61.4 hours old at the payment cut.
This campaign runs one CBO ad set holding three ads, so the ad-set row would be the whole account and the level that separates is the ad; the rows here are labelled by creative.
Delivering hours only, single-clock metrics, on the UTC day. bodysuit delivered in 11 hours, pool5 in 10 and bikini in 9; all three ran together in the nine hours 09:00 to 17:59.
| 08-02 | spend | impressions | CPM | clicks | CTR | installs | click→install | CPI |
|---|---|---|---|---|---|---|---|---|
ww_bodysuit_10s | $129.15 | 15,331 | $8.42 | 1,264 | 8.24% | 367 | 29.03% | $0.352 |
ww_pool5_15s | $77.05 | 6,942 | $11.10 | 931 | 13.41% | 213 | 22.88% | $0.362 |
ww_bikini_10s | $72.08 | 6,682 | $10.79 | 658 | 9.85% | 165 | 25.08% | $0.437 |
The two creatives that ran on both UTC days:
| 08-01 | spend | impressions | CPM | clicks | CTR | installs | click→install | CPI |
|---|---|---|---|---|---|---|---|---|
ww_bodysuit_10s | $432.42 | 56,102 | $7.71 | 4,733 | 8.44% | 1,235 | 26.09% | $0.350 |
ww_bikini_10s | $301.52 | 36,344 | $8.30 | 2,782 | 7.65% | 728 | 26.17% | $0.414 |
Analysis. Against bodysuit, pool5 pays 31.8% more per impression, wins 62.7% more clicks, converts 21.2% fewer: the three cancel to 2.8% on cost per install.
Day over day, the two returning creatives moved differently. bodysuit's impression price rose 9.2% and its click rate slipped 2.4%, but it converted 11.3% more of its clicks, so its cost per install landed within 0.6% of the day before. bikini's impression price rose 30.0% and its click rate rose 28.8%, cancelling, and it paid 5.6% more per install. The account's flat pooled cost per install is therefore two creatives whose own moved 0.6% and 5.6%, plus pool5 entering at $0.362 on 27.7% of the spend.
⚠ Spend and installs are the META-day cut described in §3; revenue is on the UTC day. Cells above $3 of spend, in spend order.
| asset | cc | spend | inst | CPI | booked | within-day | ROAS | cohort 24 h | ROAS |
|---|---|---|---|---|---|---|---|---|---|
bodysuit | IN | $37.78 | 92 | $0.411 | $51.09 | $11.52 | 0.30 | $11.52 | 0.30 |
pool5 | IN | $23.95 | 47 | $0.510 | $11.52 | $11.52 | 0.48 | $11.52 | 0.48 |
bikini | IN | $20.29 | 42 | $0.483 | $43.03 | $27.95 | 1.38 | $35.07 | 1.73 |
bodysuit | US | $8.98 | 18 | $0.499 | $7.98 | $4.99 | 0.56 | $4.99 | 0.56 |
bodysuit | BR | $6.83 | 43 | $0.159 | $10.26 | $10.26 | 1.50 | $76.37 | 11.18 |
bodysuit | ID | $5.76 | 27 | $0.213 | $4.99 | $0.00 | 0.00 | $0.00 | 0.00 |
pool5 | BR | $5.50 | 22 | $0.250 | $35.53 | $35.53 | 6.46 | $35.53 | 6.46 |
pool5 | ID | $5.10 | 14 | $0.364 | $0.00 | $0.00 | 0.00 | $0.00 | 0.00 |
bodysuit | MY | $5.05 | 10 | $0.505 | $0.00 | $0.00 | 0.00 | $0.00 | 0.00 |
bodysuit | PH | $4.42 | 28 | $0.158 | $0.00 | $0.00 | 0.00 | $0.00 | 0.00 |
bodysuit | MX | $4.35 | 11 | $0.396 | $0.00 | $0.00 | 0.00 | $0.00 | 0.00 |
bikini | US | $4.13 | 7 | $0.590 | $17.98 | $17.98 | 4.35 | $17.98 | 4.35 |
bodysuit | TR | $4.08 | 4 | $1.020 | $5.89 | $5.89 | 1.44 | $5.89 | 1.44 |
bikini | TR | $4.02 | 8 | $0.503 | $5.89 | $5.89 | 1.47 | $5.89 | 1.47 |
bodysuit | AU | $3.85 | 2 | $1.925 | $0.00 | $0.00 | 0.00 | $0.00 | 0.00 |
pool5 | US | $3.66 | 7 | $0.523 | $0.00 | $0.00 | 0.00 | $0.00 | 0.00 |
bikini | BR | $3.63 | 12 | $0.303 | $5.13 | $5.13 | 1.41 | $5.13 | 1.41 |
bikini | TH | $3.33 | 5 | $0.666 | $0.00 | $0.00 | 0.00 | $0.00 | 0.00 |
bikini | ID | $3.33 | 10 | $0.333 | $0.00 | $0.00 | 0.00 | $0.00 | 0.00 |
pool5 | TR | $3.03 | 10 | $0.303 | $9.47 | $9.47 | 3.12 | $9.47 | 3.12 |
Analysis. Inside India and inside Brazil the creatives spread as widely as the countries do, on one or two payers a cell: nothing here separates.
What the table does well is locate revenue. Each creative's within-day figure leans on one person. bodysuit's largest single payer is 42.3% of its $100.67, which is $42.58, the entire within-day total of hour 09. pool5's largest is 33.6% of its $105.65, which is $35.53, its entire Brazil cell. bikini's largest is 27.3% of its $65.81, which is $17.98, its entire United States cell. Three creatives, three single baskets sitting under three headline numbers.
bodysuit's Brazil row also shows the censoring directly: $10.26 within-day against $76.37 at 24 hours. Most of what that cell earned was paid after UTC midnight and inside a day of the buyer arriving.
The region charts inherit §3's caveat and are drawn on the META-day country cut.
The three tables below are the standing per-asset block, emitted by report_tables.py and pasted unedited. They carry the same columns in the same order in every report in this series, so any two days can be read against each other.
Meta's instrument on both sides of every ratio. Our registrations never enter this table.
| asset | spend | impressions | CPM | clicks | CTR | installs | click→install | CPI |
|---|---|---|---|---|---|---|---|---|
earner/bodysuit | $129.15 | 15,331 | 8.42 | 1,264 | 8.24% | 367 | 29.03% | $0.352 |
earner/pool5 | $77.05 | 6,942 | 11.10 | 931 | 13.41% | 213 | 22.88% | $0.362 |
earner/bikini | $72.08 | 6,682 | 10.79 | 658 | 9.85% | 165 | 25.08% | $0.437 |
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.
| asset | booked | bROAS (Meta) | within-day | wROAS | cohort@H | cROAS | payers | payer% | ARPU | ARPPU | largest payer |
|---|---|---|---|---|---|---|---|---|---|---|---|
earner/bodysuit | $350.23 | 2.71 (3.14) | $100.67 | 0.78 | $175.44 | 1.36 | 13 | 3.3% | 0.257 | 7.74 | 42.3% |
earner/pool5 | $105.65 | 1.37 (1.34) | $105.65 | 1.37 | $112.24 | 1.46 | 10 | 4.4% | 0.470 | 10.57 | 33.6% |
earner/bikini | $103.12 | 1.43 (1.42) | $65.81 | 0.91 | $72.93 | 1.01 | 9 | 5.0% | 0.368 | 7.31 | 27.3% |
The 16-payer bar (#37): any row above whose payer count is under 16 is a direction and never a magnitude.
⚠ 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.
| asset | spend | India % | US % | other % | US % of its revenue |
|---|---|---|---|---|---|
earner/bodysuit | $153.94 | 24.5% | 5.8% | 69.6% | 5.0% |
earner/pool5 | $85.65 | 28.0% | 4.3% | 67.8% | 0.0% |
earner/bikini | $82.07 | 24.7% | 5.0% | 70.2% | 27.3% |
Analysis. Which creative is best depends on which measure is read, and the answers do not agree.
Booked revenue on the day puts bodysuit far ahead, 2.71 against 1.37 and 1.43, and Meta reads it higher still at 3.14. Its own traffic puts it last on within-day at 0.78. pool5 shows why: its booked and within-day figures are the same number, $105.65. It bought nothing at all on 08-01 UTC, and none of the buyers it picked up on 07-30 and 07-31 paid inside this UTC day, so every dollar credited to it came from someone who installed that day. bodysuit and bikini both delivered on the two UTC days before this one, and 71.3% of what bodysuit was credited with, against 36.2% of bikini's, was paid by people who installed earlier. On any day the spend falls, booked revenue promotes whichever creative holds the largest stock of earlier buyers still paying.
The hour-neutral measure narrows the gap. At a 24-hour horizon pool5 leads at 1.46, bodysuit follows at 1.36 and bikini trails at 1.01. bodysuit's jump from 0.78 to 1.36 is the same censoring §4 describes: it delivered latest into the UTC day, and its Brazil cell alone goes from $10.26 within-day to $76.37 at 24 hours.
Hollow markers on the four charts above sit under the 16-payer bar, which on this day is every marker. Assets under 20 installs are left off the composite below and off §6's region charts: one payer on four installs reaches 1.0 on a normalised revenue axis and squashes every real arm into the bottom of the chart.
The estimator keys every cell on a Meta day and hour, and its regimes are Meta wall-clock instants: a budget was changed at 04:10 on the account's clock, and that is the event. The table below is therefore on Meta's clock and spans whole regimes, at a 12-hour horizon. mix-neutral re-prices each creative's return on its regime's own pooled country mix, answering "how would this asset have done if it had bought the same countries as its siblings".
| asset | regime | $/day | installs | spend | CPM | CTR | India share | CPI | cohort 12 h ROAS | mix-neutral |
|---|---|---|---|---|---|---|---|---|---|---|
ww_bikini_10s | R5 | 500 | 352 | $135.1 | $10.16 | 9.57% | 27% | $0.384 | 1.52 | 1.54 |
ww_bodysuit_10s | R5 | 500 | 1,430 | $501.2 | $8.57 | 8.37% | 29% | $0.351 | 1.18 | 1.20 |
ww_pool5_15s | R5 | 500 | 309 | $116.6 | $10.95 | 12.20% | 19% | $0.377 | 1.11 | 1.02 |
ww_bikini_10s | R4 | 875 | 732 | $286.7 | $8.33 | 7.62% | 32% | $0.392 | 1.17 | 1.17 |
ww_bodysuit_10s | R4 | 875 | 488 | $144.2 | $6.16 | 7.86% | 39% | $0.296 | 1.45 | 1.45 |
Inside R5 the two largest arms carry 95% confidence intervals of 0.73–2.51 for bikini and 0.82–1.60 for bodysuit, and the estimator's own audience test finds their country mixes worth +1.5% of each other with an interval spanning zero.
Held to whole budget regimes on Meta's clock, the ordering changes again. Inside R5, where all three ran at $500/day, bikini leads at 1.52 with bodysuit at 1.18 and pool5 last at 1.11, and the mix-neutral column says none of that is a country-mix artifact: it moves bikini and bodysuit up 0.02 each and pool5 down 0.09. pool5 bought the cheapest mix of the three across R5, 19% India, and still finishes last once that advantage is removed. bikini meanwhile is 1.17 in R4 at $875/day against 1.52 in R5 at $500/day, with India share moving 32% to 27%: the budget is a geography dial, and a verdict taken across a budget change is a verdict about the budget.
The day and the regime disagree about pool5, neither decisively. Its lead is ten payers and one basket; over R5 it finishes last, intervals overlapping.
bodysuit in R5 at 1,430 installs, 9% of that. Every ROAS here is descriptive.pool5 did not deliver on 08-01 UTC, so it has no day-over-day row.bikini's 08-02 funnel reads 25.72% → 20.75% on Meta's own clicks and installs over the same four hours, two verdicts either side of the 0.05 line on 72 installs, and its payer rate moved 99% the other way over the same cells at p = 0.162.pool5's delivery lead survives the regime cut. Across R5 it leads on CTR by more than half and comes within 3% of the cheapest cost per install.| Question | What is needed |
|---|---|
Is pool5's within-day lead real or newness? | A day on which it carries an inherited cohort of its own. Its regime-matched figure over the whole of R5 is 1.11, behind both siblings, so the day-level lead is not yet corroborated |
| How large is India's discount? | The whole-run read puts India at 0.87× the account on 1,283 installs, a real discount and a far smaller one than any single day suggests. Its own ad set with its own budget would settle whether it can be bought around |
| Is Brazil's spike real? | More payers. Over 370 run-wide installs Brazil returns 0.71× the account, so the day's figure is a basket, not a market |
| Which creative actually wins? | E2's randomised split. Nothing in this campaign's structure separates three creatives inside one CBO ad set at these payer counts |
The CBO ad set stopped delivering at 04:20 on 08-03, Meta clock, and was replaced by E2, a randomised creative test running one creative per ABO ad set.
The baseline to beat is within-day ROAS 0.98 at $0.374 cost per install on the UTC clock, or 1.30 at a 24-hour horizon. It is not the 2.01 booked or the 2.19 Meta books. Every E2 arm is brand new and therefore has no inherited cohort, exactly as pool5 collected none on 08-02, so comparing an E2 arm against a booked figure from this campaign compares a flow against a stock and will make E2 look worse than it is. Compare within-day to within-day, and cohort at 24 h to cohort at 24 h. India stays a quarter of the buy at 0.87× the account's value, and no creative test addresses that.
The report day is a UTC day, to line up with Adjust. Meta stamps its hourly exports in the ad account's own zone, UTC-7, so every delivery figure above is restitched from two account days: 08-01 17:00–23:59 and 08-02 00:00–16:59.
Three revenue measures run through every table and are never mixed.
| measure | counts | moves after the day closes? |
|---|---|---|
| booked | revenue that arrived inside the UTC day, whatever day its payer installed. It inherits earlier buyers | settles a few hours after midnight, then fixed. Meta's own number is this basis |
| within-day | people who installed that day and paid before that day closed | never. Sealed at midnight |
| cohort at 24 h | that day's installs counted within 24 hours of each person's own install, which removes the advantage a morning install has over an evening one | rises until every install has lived 24 h. Complete on both days here |
All three are read on our own payment records, with Meta's figure bracketed beside booked and never given a row of its own. The instrument check between the two runs on Meta's clock, where its conversion value can be read against the day it belongs to; there our records are 0.94 and 0.91 of Meta's booked value on the two account days, inside the documented 0.91–1.06 band.
The two measures count different install populations. Meta attributes 1,963 and 745 installs; our own records tie 2,134 and 795 registrations to these ads. Every ROAS in this report is revenue over spend and uses neither count. The install and cost-per-install rows are Meta's.
A regime is a stretch of time over which the ad set's daily budget did not change. It matters 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 being compared on different audiences.
These two days are not regime-matched, and that bounds every comparison in the report. 08-02 sits wholly inside one regime, R5 at $500/day, which ran 08-01 04:10 to 08-03 04:20 on Meta's clock. 08-01 does not: its window opens on the tail of an earlier $500/day setting, runs at $875/day, and returns to $500/day at 11:10 UTC, with $435.60 of its spend falling before that change and $298.34 after. The straddle comes from the UTC window reaching back into the previous account day. Regimes are read from Ads Manager's activity history and cannot be recovered from any export.
Report day 2026-08-02 00:00 → 24:00 UTC, restitched from Meta account days 08-01 17:00–23:59 and 08-02 00:00–16:59, the account being fixed at UTC-7. A UTC pull therefore needs the previous Meta day's hourly export as well as the day's own. Payment records cut 2026-08-05 10:59 UTC, which gives 08-02's installs 61.4 to 82.9 hours and 08-01's 83.1 to 106.9 hours, so both 24-hour cohorts are complete. Country figures come from one account-wide Country × Day pull and are a Meta-day cut.
Meta rows are selected by Ad ID, not by ad-set or creative name: E2 carries byte-identical creative names to this campaign's, and its first ad set was itself named ww_broad_purchase_adv_cbo150 for ten hours on 08-02–08-03. A name filter over-attributes by ~70%.
cd C:/Projects/VideoGenAI_Related
CFG=_runs/2026-08-05_0804_settled/run_config.json # tz: UTC
python -m ad_ops.measures --config $CFG --day 2026-08-02 --prev 2026-08-01
python -m ad_ops.cohort_arpu --config $CFG --days 2026-07-31,2026-08-01,2026-08-02
python -m ad_ops.report_tables --config $CFG --day 2026-08-02 --prev 2026-08-01
python -m ad_ops.report_charts --config $CFG --day 2026-08-02 --prev 2026-08-01 \
--days 2026-07-31,2026-08-01,2026-08-02 \
--out ad_ops/figures/2026-08-02 --relpath figures/2026-08-02
# META clock — the instrument gate, §4's per-creative tests, and the regime table
python -m ad_ops.measures --config _runs/2026-08-05_0804_settled/run_config_meta.json \
--day 2026-08-02 --prev 2026-08-01
python -m ad_ops.day_compare --config $CFG --today 2026-08-02 --prev 2026-08-01 --h 24 \
--campaign bailingxia_meituan_ww_cvr_260730 --ads ww_bikini_10s,ww_bodysuit_10s,ww_pool5
python -m ad_ops.asset_estimator hourly --horizon 12 \
--meta ad_ops/_data/b1_meta_exports/B1-Ads-Jul-30-2026-Jul-30-2026.csv \
ad_ops/_data/b1_meta_exports/B1-Ads-Jul-31-2026-Jul-31-2026.csv \
_runs/2026-08-03_aug2_hourly/exports/ads_hourly_aug1_settled.csv \
_runs/2026-08-03_aug2_hourly/exports/ads_hourly_aug2_settled.csv \
_runs/2026-08-04_e2_start_and_0803_report/exports/ads_hourly_aug3_settled.csv \
--lum _runs/2026-08-05_0804_settled/lum \
--fx _runs/2026-08-02_today_read/fx_rates.json \
--ads ww_bikini,ww_bodysuit,ww_pool5
report_tables --prev emits §2's matched-hours pairing and §4's pooled funnel as well as §7's three standing tables. report_charts writes all nineteen charts and a per-section block of image links.
The measures run raises by name if the previous Meta day's hourly export is missing; without that guard the first seven hours of the UTC day come out short-filled. The 08-03 hourly file is required by the estimator for the same reason in the other direction: the campaign delivered past midnight, and without it attach_cohorts carries every post-midnight install back into the last 08-02 cell.