Weekly campaign report — 2026-08-03 to 2026-08-09, against 2026-07-27 to 2026-08-02

One ad account bought this app in this week; the second began on 2026-08-11, after the period closes. It spent $4,456.96 over the seven UTC days for 6,299 installs, against $2,946.25 and 6,686 the week before; the report clock, the three revenue measures and the rest of the definitions are in the appendix.

1Overview

2026-07-27 to 2026-08-022026-08-03 to 2026-08-09
spend$2,946.25$4,456.96
impressions433,178591,832
CPM6.807.53
clicks27,46831,789
CTR6.34%5.37%
installs (Meta)6,6866,299
click→install24.34%19.82%
CPI$0.441$0.708
registrations (ours)7,3757,106
booked$4,852.38 (1.65)$9,685.33 (2.17)
within-day$3,369.01 (1.14)$4,676.67 (1.05)
cohort @ 24h$3,954.81 (1.34) at 100%$5,910.29 (1.33) at 100%
within-day payers323332

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.7321$1.1316$1.5009$14.38$19.39$23.637,368

Campaign spend split: Worldwide 90.7%, German (DE/AT/CH) 5.3%, the retired earner 4.0%. Sections 2 to 4 therefore set two different buys against each other.

The account replaced its buy and the new one costs more. CPI is higher in every shared hour, so the rise survives any weighting.

More impressions bought fewer installs. Click→install carries it, 24.34% to 19.82% and lower in 21 of 24 hours.

⚠ One rejected build is a third of the week's impressions and owns the pooled CTR row. Unweighted, CTR is higher in 17 of 24 hours.

Booked doubled and the return that cannot inherit fell. Within-day 1.14 to 1.05, cohort flat at 1.34 against 1.33; the account is a week older.

2Hourly, pooled across 2026-08-03 to 2026-08-09

The account over the seven UTC days, pooled by hour of day. Each of the 24 buckets holds seven hours, one from each day, so this is a diurnal shape and never a timeline. Delivery columns are Meta's instrument on both sides of every ratio. Payer rate, ARPU and ARPPU are ours on both sides, and the two install counts are never crossed. ours is our registrations in that bucket; cov is its cohort coverage at H=24.

hrspendimprCPMclicksCTRinstclk→iCPIourscovbookedbROASwithinwROASwPaycohortcROAS
0$129.4211,16711.597947.11%19724.8%$0.657215100%$201.281.56$128.250.9913$133.961.04
1$124.3513,1819.439437.15%20121.3%$0.619234100%$256.582.06$332.822.6810$332.822.68
2$138.2814,9559.251,0196.81%21621.2%$0.640261100%$460.323.33$143.321.0414$149.301.08
3$147.0816,1199.121,0916.77%23621.6%$0.623262100%$274.451.87$126.240.8614$129.240.88
4$171.6916,96210.121,1446.74%26323.0%$0.653299100%$237.221.38$355.182.0713$360.932.10
5$192.0518,99610.111,3056.87%28121.5%$0.683303100%$495.062.58$73.150.389$76.710.40
6$192.2318,99210.121,3497.10%32323.9%$0.595357100%$488.152.54$273.601.4221$277.161.44
7$177.6316,73410.611,1376.79%23921.0%$0.743281100%$372.242.10$185.291.0416$188.851.06
8$157.2816,1279.751,0566.55%21520.4%$0.732248100%$346.372.20$200.371.2716$200.371.27
9$161.4017,3039.331,0536.09%23322.1%$0.693268100%$391.962.43$213.381.3210$235.681.46
10$179.3117,15010.461,0706.24%23421.9%$0.766262100%$545.683.04$210.411.1712$262.481.46
11$165.4615,91210.401,0096.34%22222.0%$0.745265100%$256.951.55$96.470.5811$179.461.08
12$160.7814,93810.769406.29%20722.0%$0.777233100%$359.292.23$316.771.9712$316.771.97
13$177.3815,63811.349966.37%22322.4%$0.795244100%$416.272.35$123.360.7012$178.491.01
14$308.51198,0381.564,1922.12%2866.8%$1.079315100%$443.031.44$145.930.4710$191.160.62
15$218.1321,66910.071,6547.63%32219.5%$0.677381100%$306.721.41$149.630.6915$178.740.82
16$216.6521,8539.911,5687.18%29819.0%$0.727346100%$498.042.30$138.250.6416$367.391.70
17$241.7625,0549.651,6796.70%33620.0%$0.720373100%$454.681.88$222.340.9217$229.240.95
18$237.9922,79510.441,6227.12%34221.1%$0.696388100%$570.812.40$234.490.9918$294.691.24
19$224.6119,34611.611,4227.35%32122.6%$0.700360100%$545.022.43$343.871.5326$430.001.91
20$196.9216,92111.641,3377.90%32224.1%$0.612363100%$508.402.58$111.410.5712$156.140.79
21$190.5615,13812.591,2658.36%30023.7%$0.635320100%$309.761.63$116.140.618$125.460.66
22$183.4714,12212.991,1568.19%26422.8%$0.695278100%$536.802.93$277.491.5117$673.733.67
23$164.0212,72212.899887.77%21822.1%$0.752250100%$410.252.50$158.500.9710$241.521.47
all$4,456.96591,8327.5331,7895.37%6,29919.8%$0.7087,106100%$9,685.332.17$4,676.671.05332$5,910.291.33

⚠ Payer counts per hour run 0 to 9, and a bucket here is seven of those hours added together. The wPay column runs 8 to 26 for that reason; no single hour carried a readable payer count. Read the all row for level and the buckets for shape.

⚠ Hour 14 is one rejected build on one day. spill delivered 182,648 impressions there at a 0.60 CPM and was capped (DECISION_LOG.md #50).

Spend is flat across the clock; the price is not. CPM is cheapest in the small hours and dearest late evening, where CTR also peaks.

Cohort coverage is 100% in every bucket, so the cohort column reads as a level.

2026-08-16T16:04:07.325816 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0 50 100 150 200 250 300 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 25000 50000 75000 100000 125000 150000 175000 200000 impressions Impressions and installs by hour impressions installs 200 220 240 260 280 300 320 340 installs (Meta Leads) The period's motion — whole account, 2026-08-03..2026-08-09 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:04:07.489169 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 2 3 4 5 6 7 8 CTR % CTR 0 4 8 12 16 20 hour (UTC) 2 4 6 8 10 12 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 7.5 10.0 12.5 15.0 17.5 20.0 22.5 25.0 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) 0.6 0.7 0.8 0.9 1.0 1.1 USD Cost per install Delivery by hour — whole account, 2026-08-03..2026-08-09 (UTC)
CTR, CPM, click-to-install and CPI by hour, whole account

Against the prior period, hour matched to hour

Hours both periods delivered in, on the UTC clock: 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23. Only the shared hours are compared. Each bucket pools that hour across the 7 days of the period, so the floor for reading one is 350 impressions, seven days at 50 each.

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

metrichours 2026-08-03..2026-08-09 ran higherhours it ran lowersign test
CPM23 of 241 of 24p = 0.000
CTR17 of 247 of 24p = 0.064
click→install3 of 2421 of 24p = 0.000
CPI24 of 240 of 24p = 0.000

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

The full hour-by-hour pairing, 2026-07-27..2026-08-02 → 2026-08-03..2026-08-09

Every shared hour, 2026-07-27..2026-08-02 → 2026-08-03..2026-08-09. 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
006,241 → 11,1676.90 → 11.597.31% → 7.11%20.2% → 24.8%0.468 → 0.657
0113,763 → 13,1816.10 → 9.436.41% → 7.15%19.8% → 21.3%0.480 → 0.619
0216,118 → 14,9556.44 → 9.256.51% → 6.81%26.9% → 21.2%0.368 → 0.640
0316,030 → 16,1196.47 → 9.126.46% → 6.77%23.9% → 21.6%0.418 → 0.623
0419,788 → 16,9625.85 → 10.126.02% → 6.74%19.6% → 23.0%0.494 → 0.653
0522,580 → 18,9966.07 → 10.115.78% → 6.87%23.2% → 21.5%0.454 → 0.683
0625,208 → 18,9925.81 → 10.125.29% → 7.10%25.3% → 23.9%0.433 → 0.595
0723,988 → 16,7345.85 → 10.615.54% → 6.79%23.8% → 21.0%0.444 → 0.743
0829,607 → 16,1275.79 → 9.755.64% → 6.55%22.7% → 20.4%0.451 → 0.732
0931,160 → 17,3036.24 → 9.335.91% → 6.09%23.3% → 22.1%0.453 → 0.693
1027,614 → 17,1507.05 → 10.466.23% → 6.24%23.7% → 21.9%0.478 → 0.766
1118,398 → 15,9127.23 → 10.405.96% → 6.34%25.9% → 22.0%0.468 → 0.745
1216,325 → 14,9388.22 → 10.766.43% → 6.29%25.0% → 22.0%0.512 → 0.777
1318,308 → 15,6387.83 → 11.346.69% → 6.37%24.2% → 22.4%0.484 → 0.795
1417,961 → 198,0388.56 → 1.567.05% → 2.12%25.3% → 6.8%0.479 → 1.079
1521,565 → 21,6697.33 → 10.077.02% → 7.63%23.4% → 19.5%0.445 → 0.677
1628,745 → 21,8536.63 → 9.916.55% → 7.18%22.9% → 19.0%0.442 → 0.727
1725,758 → 25,0546.31 → 9.656.54% → 6.70%25.1% → 20.0%0.385 → 0.720
1819,764 → 22,7956.66 → 10.446.01% → 7.12%27.4% → 21.1%0.405 → 0.696
1912,992 → 19,3467.47 → 11.617.29% → 7.35%26.9% → 22.6%0.380 → 0.700
206,708 → 16,9219.56 → 11.647.72% → 7.90%30.5% → 24.1%0.406 → 0.612
215,652 → 15,1389.85 → 12.598.76% → 8.36%26.3% → 23.7%0.428 → 0.635
223,913 → 14,12210.90 → 12.999.48% → 8.19%26.7% → 22.8%0.431 → 0.695
234,992 → 12,7229.06 → 12.898.37% → 7.77%34.7% → 22.1%0.312 → 0.752

Cost moved one way in every bucket that could move. The one bucket where CPM ran lower is hour 14, the rejected build.

Click→install fell on both readings, so it fell. The pooled and the unweighted agree, which makes the fall the week's and not the weighting's.

⚠ The click rate is where the two readings disagree. The sign test gives hour 14 one vote; the pooled row lets it dominate.

2026-08-16T16:04:07.683162 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 5 10 15 20 hour (UTC) 2 4 6 8 CTR % CTR 2026-07-27..2026-08-02 2026-08-03..2026-08-09 0 5 10 15 20 hour (UTC) 2 4 6 8 10 12 USD per 1,000 impressions CPM 0 5 10 15 20 hour (UTC) 10 15 20 25 30 35 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 0 5 10 15 20 hour (UTC) 0.4 0.6 0.8 1.0 USD Cost per install Delivery by hour — 2026-08-03..2026-08-09 against 2026-07-27..2026-08-02, shared hours only (UTC)
The same four ratios with the prior period laid over the period, shared hours only

3Country

2026-08-23T13:56:10.828582 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US DE MX GB ID TR PH AR MY CA FR 0 200 400 600 800 1000 USD delivery raked onto the report clock against two measured margins; revenue is the report period Spend against within-day revenue by country — 2026-08-03..2026-08-09 spend within-day revenue
Spend against within-day revenue, by country
2026-08-23T13:56:10.874638 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-03..2026-08-09 (report clock)
Cost per install by country

(i) The portfolio by country, 2026-08-03..2026-08-09. 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$916.5720.6%221,046$4.151,803$0.508$793.400.87165
US$514.1611.5%11,930$43.10333$1.544$1,080.082.1062
DE$275.616.2%5,913$46.61134$2.057$180.760.6612
MX$151.943.4%20,773$7.31282$0.539$96.020.6320
GB$149.173.3%5,501$27.12163$0.915$106.120.719
ID$132.243.0%22,952$5.76362$0.365$109.260.8314
TR$129.602.9%7,761$16.70211$0.614$65.000.509
PH$105.372.4%39,681$2.66324$0.325$63.020.6018
AR$104.842.4%9,864$10.63252$0.416$89.880.8613
MY$90.412.0%13,934$6.49140$0.646$38.650.4310
CA$86.982.0%3,019$28.8176$1.145$40.820.477
FR$86.461.9%4,784$18.0799$0.873$193.392.245

210 further countries are not listed, $1,713.63 between them (38.4% of this block).

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-03..2026-08-09.

B1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$916.5720.6%221,046$4.151,803$0.508$793.400.87165
US$514.1611.5%11,930$43.10333$1.544$1,080.082.1062
DE$275.616.2%5,913$46.61134$2.057$180.760.6612
MX$151.943.4%20,773$7.31282$0.539$96.020.6320
GB$149.173.3%5,501$27.12163$0.915$106.120.719
ID$132.243.0%22,952$5.76362$0.365$109.260.8314
TR$129.602.9%7,761$16.70211$0.614$65.000.509
PH$105.372.4%39,681$2.66324$0.325$63.020.6018
AR$104.842.4%9,864$10.63252$0.416$89.880.8613
MY$90.412.0%13,934$6.49140$0.646$38.650.4310
CA$86.982.0%3,019$28.8176$1.145$40.820.477
FR$86.461.9%4,784$18.0799$0.873$193.392.245

210 further countries are not listed, $1,713.63 between them (38.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.

Reconciliation over the period. Every per-country cell is an allocation across hours; every total is measured. Each account's raked country total equals its bought spend for these days: B1 $4,456.96. The per-day reconciliations, naming the Meta days each figure was raked from, are on the daily pages.

4Aggregate, both periods

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

spendimpressionsCPMclicksCTRinstallsclick→installCPI
2026-07-27..2026-08-02$2,946.25433,1786.8027,4686.34%6,68624.34%$0.441
2026-08-03..2026-08-09$4,456.96591,8327.5331,7895.37%6,29919.82%$0.708

Pooling across hours weights each hour by what it delivered. The hourly pairing is the unweighted read of the same two periods; where they disagree, the mix moved.

⚠ The CTR row above is the rejected spill build as much as the week, and the click→install row survives the unweighted test.

The mix-neutral account line sits with the campaign table in section 5, because on these two periods it is about which campaigns existed.

The three measures side by side

measure2026-07-27 to 2026-08-022026-08-03 to 2026-08-09moves after the period closes?
booked$4,852.38 (1.65)$9,685.33 (2.17)settled
within-day$3,369.01 (1.14)$4,676.67 (1.05)never
cohort @ 24h$3,954.81 (1.34) at 100%$5,910.29 (1.33) at 100%frozen, complete on both

The measure that rose is the one that cannot rank a week. Booked collects inherited cohort; within-day fell and cohort at 24 hours is flat.

Booked revenue by how long its payer had been installed

installed2026-07-27 to 2026-08-022026-08-03 to 2026-08-09
the same day$3,369.01 (69.4%)$4,676.67 (48.3%)
one day earlier$698.50 (14.4%)$1,514.18 (15.6%)
two days earlier$343.59 (7.1%)$992.01 (10.2%)
three days earlier$135.10 (2.8%)$538.69 (5.6%)
four days earlier$127.62 (2.6%)$663.74 (6.9%)
five days earlier$92.50 (1.9%)$223.10 (2.3%)
six days earlier$65.67 (1.4%)$446.93 (4.6%)
seven days earlier$14.51 (0.3%)$344.35 (3.6%)

Over a week the split is by how long the payer had been installed. The top row is the within-day total, which is what makes the gap between booked and within-day exactly the inherited cohort and nothing else.

Booked rose because the account now has a tail. Under half of it came from people who arrived inside the week, against nearly seven tenths before.

2026-08-16T16:04:07.967633 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 2000 4000 6000 8000 10000 USD 1.65 1.14 1.34 2.17 1.05 1.33 the number above each bar is that measure's ROAS against the same period's spend The three revenue measures, 2026-07-27..2026-08-02 against 2026-08-03..2026-08-09 (UTC) 2026-07-27..2026-08-02 2026-08-03..2026-08-09
The three revenue measures on both periods, ROAS above each bar
2026-08-16T16:04:08.015992 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-07-27..2026-08-02 2026-08-03..2026-08-09 0 2000 4000 6000 8000 10000 USD the bottom segment IS the within-day figure: the same number seen twice Booked revenue by how long its payer had been installed (UTC) paid the day they installed one day after two days after three days after four or more days after
Booked revenue by how long its payer had been installed

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$4,043.9490.7%567,56495.9%7.1329,8215.25%$0.1365,769$0.701$4,262.331.05291
German (DE/AT/CH)$236.755.3%5,0740.9%46.663486.86%$0.68087$2.721$111.080.479
Earner (retired 08-03)$176.274.0%19,1943.2%9.181,6208.44%$0.109443$0.398$253.881.4427

Booking with no delivery, and excluded from every rate above: T1 (Jul 23) 0 installs (Meta), 2 registrations (ours), $0.00 within-day; T2 (Jul 23) 0 installs (Meta), 10 registrations (ours), $0.00 within-day; T3 (Jul 23) 0 installs (Meta), 21 registrations (ours), $0.00 within-day; T1 (Jul 25) 0 installs (Meta), 28 registrations (ours), $4.99 within-day; T2 (Jul 25) 0 installs (Meta), 45 registrations (ours), $0.00 within-day; T3 (Jul 25, India/SEA) 0 installs (Meta), 226 registrations (ours), $44.39 within-day. Counting them would put installs into the CPI denominator against spend that never happened.

Account CPM $9.60 → $7.53 (-21.6%). Held to 2026-07-27..2026-08-02's campaign mix it is $9.71 (1.1%) — the difference between those two is the campaign mix.

The worldwide campaign is the account. 90.7% of spend and 95.9% of impressions, so its CPI and CTR are most of the account's.

The German buy costs what geography said it would. The gap to worldwide is the treatment; its 0.47 within-day return rests on 9 payers.

The earner spent on 08-03 alone and returns the best within-day figure here. Its 1.44 rests on 27 payers; section 6 has the booked side.

It is also the only campaign here comparable with the week before. Nothing about it had separated when it was switched off.

⚠ The mix-neutral line's baseline is not section 4's. Section 4 reads the prior week's account CPM at 6.80 over everything that delivered, the line above at $9.60 over only the campaigns this table carries; the July five-cell tests are the difference, and they bought below the account's own price.

The standing charts for this section plot spend share, CPM and CPI by campaign across the run, on a per-day axis. The period instruments emit no such series, so this section carries none, and the campaign-level comparison above is the whole of what is on offer.

6Per asset, across the account

Every asset the account ran in the period, across all three campaigns. This is the account's own per-asset block; section 7 cuts the same assets by the campaign they belong to.

A. Per asset — delivery

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
E2/pool5$886.96105,8248.387,0686.68%1,38219.55%$0.642
E2/bodysuit$832.0988,2899.425,5376.27%1,39225.14%$0.598
E2/bikini$821.7779,73010.315,5576.97%1,19121.43%$0.690
E2/lounge$647.9353,56312.103,6646.84%66018.01%$0.982
E2/spill2$615.5049,44912.454,1918.48%92522.07%$0.665
E2/mugshot$129.978,06116.127749.60%14418.60%$0.903
E2/spill$109.72182,6480.603,0301.66%752.48%$1.463
earner/bodysuit$88.5910,8258.188017.40%22127.59%$0.401
DEww/bodysuit$76.351,77742.971025.74%3130.39%$2.463
DE/turkish_mature$56.251,03454.40706.77%1420.00%$4.018
earner/bikini$48.164,67010.314529.68%13529.87%$0.357
DE/german_mature$44.381,01143.90757.42%1824.00%$2.466
earner/pool5$39.523,69910.683679.92%8723.71%$0.454
DEww/spill2$23.1831872.894112.89%921.95%$2.576
DE/german$14.8726955.28197.06%631.58%$2.478
DEww/bikini$8.2420540.20167.80%318.75%$2.747
DEww/pool5$6.1030719.87154.89%213.33%$3.050
DE/german_6s$5.2010947.7176.42%342.86%$1.733
DE/latina_true$1.793649.7238.33%133.33%$1.790
DE/turkish_6s$0.39848.7500.00%0——
T3b/utility_6s$0.000—0—0——
T3b/sasian_spice5_15s$0.000—0—0——
T3b/sasian_bodysuit_10s$0.000—0—0——
T3b/sasian_bikini_6s$0.000—0—0——
T3b/sasian_bikini_10s$0.000—0—0——
T1b/utility_6s#2$0.000—0—0——
T1b/utility_15s$0.000—0—0——
T2b/utility_6s#3$0.000—0—0——
T2b/utility_15s#2$0.000—0—0——
T2b/latina_es_bikini_10s$0.000—0—0——
T3b/sasian_slip_dress$0.000—0—0——
T1a/control_sexy$0.000—0—0——
T3a/utility_sexy#2$0.000—0—0——
T2a/control_sexy#2$0.000—0—0——
DE/de_german_mature_6s$0.000—0—0——
T2a/utility_sexy#3$0.000—0—0——
T3b/sasian_fishnet_top_6s$0.000—0—0——
T2b/latina_es_slip_dress$0.000—0—0——
T1b/control_15s$0.000—0—0——
T1b/control_10s#2$0.000—0—0——
T2b/control_6s#2$0.000—0—0——
T2b/control_15s#2$0.000—0—0——
T3b/control_15s#3$0.000—0—0——
T3b/utility_10s#2$0.000—0—0——
T2b/utility_10s#3$0.000—0—0——
T3b/utility_15s#3$0.000—0—0——
T3b/control_6s#3$0.000—0—0——
T3b/sasian_corset_6s$0.000—0—0——
T3b/sasian_offshoulder$0.000—0—0——
T2b/latina_es_offshoulder$0.000—0—0——
T2b/latina_es_bikini_6s$0.000—0—0——
T2b/latina_es_jean_shorts$0.000—0—0——
T3b/sasian_corset_10s$0.000—0—0——
T2b/latina_es_corset_10s$0.000—0—0——

Twenty assets took spend and the rest of the mapped set took none. Those are the July test creatives and the retired German build, and several of them still carry booked revenue in table B against no spend at all, which is the conversion hour landing an old install's payment inside this period.

⚠ E2/spill is one row and a third of the account's impressions, at a 0.60 CPM where nothing else on the account ran below 8.18.

Cost per install separates the worldwide arms by about half, $0.598 for bodysuit against $0.982 for lounge, on spends within a third of each other.

The German assets sit at a different price level, 19.87 to 72.89 CPM and $1.733 to $4.018 an install; nothing there clears a sample bar.

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 period. Report clock UTC.

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
E2/pool5$2,831.833.19 (3.20)$1,721.481.94$2,111.162.38886.0%1.17919.5612.3%
E2/bodysuit$1,638.061.97 (2.29)$944.841.14$1,188.131.43704.7%0.64013.5014.8%
E2/bikini$780.540.95 (1.19)$504.760.61$641.480.78473.6%0.38410.7412.1%
E2/lounge$704.441.09 (1.59)$530.620.82$584.680.90385.6%0.78513.9628.4%
E2/spill2$709.581.15 (1.50)$483.560.79$810.691.32434.5%0.50611.258.8%
E2/mugshot$58.120.45 (0.63)$17.020.13$22.920.1832.0%0.1155.6737.1%
E2/spill$109.821.00 (0.33)$60.050.55$104.190.9522.4%0.73230.0390.2%
earner/bodysuit$1,363.7715.39 (9.09)$144.041.63$176.742.00165.2%0.4659.0019.7%
DEww/bodysuit$75.050.98 (0.84)$24.750.32$24.750.32310.7%0.8848.2537.6%
DE/turkish_mature$5.740.10 (0.10)$0.000.00$0.000.0000.0%0.000——
earner/bikini$455.939.47 (3.33)$86.261.79$86.261.7974.7%0.57512.3248.0%
DE/german_mature$58.741.32 (1.33)$58.741.32$58.741.32419.0%2.79714.6943.2%
earner/pool5$215.815.46 (4.41)$23.580.60$23.580.6043.5%0.2095.8926.8%
DEww/spill2$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/german$21.851.47 (1.47)$21.851.47$21.851.47116.7%3.64121.85100.0%
DEww/bikini$102.4212.43 (0.70)$5.740.70$5.740.70133.3%1.9155.74100.0%
DEww/pool5$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——
DE/latina_true$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————
T3b/utility_6s$117.78— (—)$38.63—$38.63—35.8%0.74312.8875.9%
T3b/sasian_spice5_15s$35.91— (—)$0.00—$0.00—00.0%0.000——
T3b/sasian_bodysuit_10s$58.10— (—)$0.00—$0.00—00.0%0.000——
T3b/sasian_bikini_6s$183.00— (—)$5.76—$5.76—12.0%0.1185.76100.0%
T3b/sasian_bikini_10s$31.62— (—)$0.00—$0.00—00.0%0.000——
T1b/utility_6s#2$9.98— (—)$4.99—$4.99—17.7%0.3844.99100.0%
T1b/utility_15s$4.99— (—)$0.00—$0.00—00.0%0.000——
T2b/utility_6s#3$0.00— (—)$0.00—$0.00—00.0%0.000——
T2b/utility_15s#2$0.00— (—)$0.00—$0.00—00.0%0.000——
T2b/latina_es_bikini_10s$43.25— (—)$0.00—$0.00—00.0%0.000——
T3b/sasian_slip_dress$16.44— (—)$0.00—$0.00—00.0%0.000——
T1a/control_sexy$0.00— (—)$0.00—$0.00—00.0%0.000——
T3a/utility_sexy#2$0.00— (—)$0.00—$0.00—00.0%0.000——
T2a/control_sexy#2$0.00— (—)$0.00—$0.00—00.0%0.000——
DE/de_german_mature_6s$12.86— (—)$0.00—$0.00—00.0%0.000——
T2a/utility_sexy#3$0.00— (—)$0.00—$0.00—00.0%0.000——
T3b/sasian_fishnet_top_6s$0.00— (—)$0.00—$0.00—00.0%0.000——
T2b/latina_es_slip_dress$0.00— (—)$0.00—$0.00—00.0%0.000——
T1b/control_15s$0.00— (—)$0.00—$0.00—00.0%0.000——
T1b/control_10s#2$0.00— (—)$0.00—$0.00—00.0%0.000——
T2b/control_6s#2$0.00— (—)$0.00—$0.00—00.0%0.000——
T2b/control_15s#2$0.00— (—)$0.00—$0.00—00.0%0.000——
T3b/control_15s#3$0.00— (—)$0.00—$0.00—00.0%0.000——
T3b/utility_10s#2$0.00— (—)$0.00—$0.00—00.0%0.000——
T2b/utility_10s#3$0.00— (—)$0.00—$0.00—00.0%0.000——
T3b/utility_15s#3$0.00— (—)$0.00—$0.00—00.0%0.000——
T3b/control_6s#3$0.00— (—)$0.00—$0.00—00.0%0.000——
T3b/sasian_corset_6s$0.00— (—)$0.00—$0.00—00.0%0.000——
T3b/sasian_offshoulder$0.00— (—)$0.00—$0.00—00.0%0.000——
T2b/latina_es_offshoulder$9.11— (—)$0.00—$0.00—00.0%0.000——
T2b/latina_es_bikini_6s$0.00— (—)$0.00—$0.00—00.0%0.000——
T2b/latina_es_jean_shorts$0.00— (—)$0.00—$0.00—00.0%0.000——
T3b/sasian_corset_10s$0.00— (—)$0.00—$0.00—00.0%0.000——
T2b/latina_es_corset_10s$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.

Six assets clear the bar, which no single day on this account has ever managed, earner/bodysuit at exactly 16.

No row above concentrates on one person. The largest single payer runs 8.8% to 14.8% across the five worldwide arms that clear the bar.

pool5 leads on every revenue measure and DECISION_LOG.md #48 still bars ranking on it. The auction chose each arm's audience; table C is the check.

The earner's booked column is the age artefact in its purest form. earner/bodysuit reads 15.39 booked against 1.63 within-day on the same $88.59.

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$922.0617.6%15.2%67.2%32.9%
E2/bodysuit$861.5522.8%13.9%63.3%30.0%
E2/bikini$856.8328.5%10.9%60.6%33.2%
E2/lounge$681.7517.2%12.2%70.5%6.4%
E2/spill2$617.4017.8%12.7%69.5%3.7%
E2/mugshot$130.1831.7%5.4%62.8%29.3%
E2/spill$110.0521.5%4.5%74.0%0.0%
earner/bodysuit$57.1134.3%3.0%62.7%0.0%
DEww/bodysuit$76.630.0%0.0%100.0%0.0%
DE/turkish_mature$56.350.0%0.0%100.0%—
earner/bikini$38.3023.8%9.1%67.1%0.0%
DE/german_mature$44.500.0%0.0%100.0%0.0%
earner/pool5$30.9520.6%6.8%72.6%0.0%
DEww/spill2$23.180.0%0.0%100.0%—
DE/german$14.910.0%0.0%100.0%0.0%
DEww/bikini$8.240.0%0.0%100.0%0.0%
DEww/pool5$6.100.0%0.0%100.0%—
DE/german_6s$5.330.0%0.0%100.0%—
DE/latina_true$1.790.0%0.0%100.0%—
DE/turkish_6s$0.390.0%0.0%100.0%—

The three original arms earn about a third of their money in America on an eighth of their spend. The two newer ones do not, on the same spend share.

India is the mirror of that: the India-heavy arms are the ones below 1.00 within-day in table B.

2026-08-16T16:04:08.491325 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill DEww/bodysuit earner/bodysuit earner/bikini earner/pool5 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-08-03..2026-08-09 (META days) IN US DE MX GB ID other
Where each asset bought: share of its own spend by region
2026-08-16T16:04:08.577349 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill DEww/bodysuit earner/bodysuit earner/bikini earner/pool5 0 1 2 3 4 5 6 USD per install Cost per install by region — every asset, 2026-08-03..2026-08-09 (META days) IN US DE MX GB ID
Cost per install by region, every asset
2026-08-16T16:04:08.649546 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill DEww/bodysuit earner/bodysuit earner/bikini earner/pool5 0 100 200 300 400 500 USD Within-day revenue by region — every asset, 2026-08-03..2026-08-09 (META days) IN US DE MX GB ID
Within-day revenue by region, every asset

The account across the period

2026-08-16T16:04:08.794728 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 day (UTC) 0 2 4 6 8 10 12 payers / installs % Payer rate by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill earner/bodysuit DEww/bodysuit earner/bikini earner/pool5
Payer rate by day, one line per asset
2026-08-16T16:04:08.893272 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 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/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill earner/bodysuit DEww/bodysuit earner/bikini earner/pool5
ARPU by day, one line per asset
2026-08-16T16:04:08.992716 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 day (UTC) 0 5 10 15 20 25 30 35 within-day USD per payer ARPPU by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill earner/bodysuit DEww/bodysuit earner/bikini earner/pool5
ARPPU by day, one line per asset
2026-08-16T16:04:09.085300 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 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 E2/lounge E2/spill2 E2/mugshot E2/spill earner/bodysuit DEww/bodysuit earner/bikini earner/pool5
Within-day ROAS by day, one line per asset
2026-08-16T16:04:09.188947 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 period (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 period are not plotted. Composite — every asset across every measure, 2026-08-03..2026-08-09 E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill earner/bodysuit DEww/bodysuit earner/bikini earner/pool5
Composite: every asset across every measure, normalised across the period

Money-chart markers are hollow where the point sits under 16 payers, and assets under 20 installs in the period are dropped from the composite and the region charts. Delivery is plotted hourly because CTR, click→install, CPI and CPM run on hundreds to thousands of impressions an hour; money is plotted per day, because payers run 0 to 2 per asset per hour and an hourly ARPPU is one person's basket. There is deliberately no hourly revenue chart.

2026-08-16T16:04:08.109819 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 5 6 7 8 9 10 11 12 CTR % hour of day, pooled across the 7 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-08-03..2026-08-09 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot earner/bodysuit earner/bikini earner/pool5
CTR by hour, one line per asset
2026-08-16T16:04:08.257189 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 15 20 25 30 35 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-08-03..2026-08-09 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot earner/bodysuit earner/bikini earner/pool5
Click-to-install by hour, one line per asset
2026-08-16T16:04:08.333511 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.2 0.4 0.6 0.8 1.0 1.2 1.4 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-08-03..2026-08-09 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot earner/bodysuit earner/bikini earner/pool5
Cost per install by hour, one line per asset
2026-08-16T16:04:08.185301 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 USD per 1,000 impressions hour of day, pooled across the 7 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-08-03..2026-08-09 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot earner/bodysuit earner/bikini earner/pool5
CPM by hour, one line per asset

7Inside each campaign

Three campaigns delivered, ordered by spend descending, the largest first. Every tab carries the same sections in the same order, and where a section has nothing behind it for that campaign the tab says so in place. Two things are emitted at account scope only and are not repeated inside a tab: the 24-row hourly table of section 2 and the per-country table of section 3. Table C is each campaign's country reading.

Showing

Worldwide — every section below this line is Worldwide's: the day, the hours, the countries, the campaigns and the assets, counted on Worldwide's own ledger and its own accounts. Use the buttons above to switch.

Structure over the period

The campaign opened at 12:44 UTC on 2026-08-03 holding five ad sets with one creative each. lounge was added on 08-05, spill was capped after its first day and replaced by spill2, and from 08-06 the campaign ran as a five-cell split test. On 08-09 Meta moved spill2 from Active to Not Approved under its adult sexual solicitation standard and that arm stopped for good.

Seven assets delivered, one to an ad set, so the ad-set row is the asset row across this period. That identity is a property of how this campaign was built, and it has to be re-checked whenever two ads deliver from one set.

Hourly

The campaign's own delivery by hour of day, pooled across the seven days. The 24-row table for this grain is emitted at account scope only, in section 2, and on this campaign that costs almost nothing: it is 95.9% of the account's impressions and 90.7% of its spend, so section 2's table is very nearly this campaign's own. The two charts below are scoped to it.

2026-08-16T16:05:01.698692 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0 50 100 150 200 250 300 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 25000 50000 75000 100000 125000 150000 175000 200000 impressions Impressions and installs by hour impressions installs 150 175 200 225 250 275 300 325 installs (Meta Leads) The period's motion — whole account, 2026-08-03..2026-08-09 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:05:01.865677 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 2 3 4 5 6 7 8 CTR % CTR 0 4 8 12 16 20 hour (UTC) 2 4 6 8 10 12 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 7.5 10.0 12.5 15.0 17.5 20.0 22.5 25.0 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) 0.6 0.7 0.8 0.9 1.0 USD Cost per install Delivery by hour — Worldwide, 2026-08-03..2026-08-09 (UTC)
CTR, CPM, click-to-install and CPI by hour, Worldwide

Against the prior period, hour matched to hour

No hour was delivered in by both 2026-07-27..2026-08-02 and 2026-08-03..2026-08-09 above the impression floor, so there is no matched-hours comparison to make.

That is a fact about the campaign's age: it did not exist before 12:44 UTC on 08-03, so there is no prior week to match.

Country

The per-country table is emitted at account scope only, in section 3, where this campaign is 90.7% of the spend behind every row. Table C below is this campaign's own country reading, per asset. The two charts here are scoped to the campaign.

2026-08-16T16:05:02.034653 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US MX GB TR ID AR PH CA FR MY AU 0 200 400 600 800 1000 USD spend and installs are a META-day cut (no hour x country grid exists); revenue is the report period Spend against within-day revenue by country — 2026-08-03..2026-08-09 spend within-day revenue
Spend against within-day revenue, by country
2026-08-16T16:05:02.086962 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US MX GB TR ID AR PH CA FR MY AU 0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 USD per install Cost per install by country — 2026-08-03..2026-08-09 (META days)
Cost per install by country

Aggregate, both periods

No hour was delivered in by both 2026-07-27..2026-08-02 and 2026-08-03..2026-08-09, so there is no matched-hours funnel.

The revenue charts still draw both periods, and the prior period's bars are empty for the same reason: this campaign had not been built yet. Read them as this week's levels with an empty column beside them, never as a movement.

2026-08-16T16:05:02.172165 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 1000 2000 3000 4000 5000 6000 7000 USD 0.00 0.00 0.00 1.69 1.05 1.35 the number above each bar is that measure's ROAS against the same period's spend The three revenue measures, 2026-07-27..2026-08-02 against 2026-08-03..2026-08-09 (UTC) 2026-07-27..2026-08-02 2026-08-03..2026-08-09
The three revenue measures on both periods, ROAS above each bar
2026-08-16T16:05:02.223941 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-07-27..2026-08-02 2026-08-03..2026-08-09 0 1000 2000 3000 4000 5000 6000 7000 USD the bottom segment IS the within-day figure: the same number seen twice Booked revenue by how long its payer had been installed (UTC) paid the day they installed one day after two days after three days after four or more days after
Booked revenue by how long its payer had been installed

A. Per asset — delivery

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
E2/pool5$886.96105,8248.387,0686.68%1,38219.55%$0.642
E2/bodysuit$832.0988,2899.425,5376.27%1,39225.14%$0.598
E2/bikini$821.7779,73010.315,5576.97%1,19121.43%$0.690
E2/lounge$647.9353,56312.103,6646.84%66018.01%$0.982
E2/spill2$615.5049,44912.454,1918.48%92522.07%$0.665
E2/mugshot$129.978,06116.127749.60%14418.60%$0.903
E2/spill$109.72182,6480.603,0301.66%752.48%$1.463

The five arms that spent properly sit inside a 12.45 to 8.38 CPM band and a $0.982 to $0.598 install price. bodysuit bought the most installs on the second-largest budget; lounge bought the fewest per dollar and paid the second-dearest impression. spill's row is the account's distortion and section 6 sets it out.

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 period. Report clock UTC.

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
E2/pool5$2,831.833.19 (3.20)$1,721.481.94$2,111.162.38886.0%1.17919.5612.3%
E2/bodysuit$1,638.061.97 (2.29)$944.841.14$1,188.131.43704.7%0.64013.5014.8%
E2/bikini$780.540.95 (1.19)$504.760.61$641.480.78473.6%0.38410.7412.1%
E2/lounge$704.441.09 (1.59)$530.620.82$584.680.90385.6%0.78513.9628.4%
E2/spill2$709.581.15 (1.50)$483.560.79$810.691.32434.5%0.50611.258.8%
E2/mugshot$58.120.45 (0.63)$17.020.13$22.920.1832.0%0.1155.6737.1%
E2/spill$109.821.00 (0.33)$60.050.55$104.190.9522.4%0.73230.0390.2%

The 16-payer bar (#37): any row above whose payer count is under 16 is a direction and never a magnitude.

Five of these seven clear the bar and the payer rate that separates them is narrow, 3.6% to 6.0%. What separates them is the basket: ARPPU 19.56 for pool5 against 10.74 for bikini. lounge's 28.4% largest payer is the one concentration worth naming, and it is the only arm above the bar whose figure leans on a single person to that degree.

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$922.0617.6%15.2%67.2%32.9%
E2/bodysuit$861.5522.8%13.9%63.3%30.0%
E2/bikini$856.8328.5%10.9%60.6%33.2%
E2/lounge$681.7517.2%12.2%70.5%6.4%
E2/spill2$617.4017.8%12.7%69.5%3.7%
E2/mugshot$130.1831.7%5.4%62.8%29.3%
E2/spill$110.0521.5%4.5%74.0%0.0%

The American spend share runs 10.9% to 15.2% across the five arms that spent properly, so no arm here bought its way into a richer country. bikini's 28.5% India share against pool5's 17.6% is the largest mix difference on the tab, and it runs the same direction as their within-day gap.

2026-08-16T16:05:02.634053 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-08-03..2026-08-09 (META days) IN US MX GB TR ID other
Where each asset bought: share of its own spend by region
2026-08-16T16:05:02.708933 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill 0 1 2 3 4 5 6 USD per install Cost per install by region — every asset, 2026-08-03..2026-08-09 (META days) IN US MX GB TR ID
Cost per install by region, every asset
2026-08-16T16:05:02.778492 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill 0 100 200 300 400 500 USD Within-day revenue by region — every asset, 2026-08-03..2026-08-09 (META days) IN US MX GB TR ID
Within-day revenue by region, every asset

The campaign across the period

2026-08-16T16:05:02.938883 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 day (UTC) 0 2 4 6 8 payers / installs % Payer rate by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill
Payer rate by day, one line per asset
2026-08-16T16:05:03.020579 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 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/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill
ARPU by day, one line per asset
2026-08-16T16:05:03.095532 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 day (UTC) 0 5 10 15 20 25 30 35 within-day USD per payer ARPPU by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill
ARPPU by day, one line per asset
2026-08-16T16:05:03.190232 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 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 E2/lounge E2/spill2 E2/mugshot E2/spill
Within-day ROAS by day, one line per asset
2026-08-16T16:05:03.299618 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 period (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 period are not plotted. Composite — every asset across every measure, 2026-08-03..2026-08-09 E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill
Composite: every asset across every measure, normalised across the period
2026-08-16T16:05:02.294833 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 5 6 7 8 9 10 11 12 CTR % hour of day, pooled across the 7 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-08-03..2026-08-09 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot
CTR by hour, one line per asset
2026-08-16T16:05:02.424538 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 15 20 25 30 35 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-08-03..2026-08-09 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot
Click-to-install by hour, one line per asset
2026-08-16T16:05:02.509821 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.6 0.8 1.0 1.2 1.4 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-08-03..2026-08-09 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot
Cost per install by hour, one line per asset
2026-08-16T16:05:02.360592 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 USD per 1,000 impressions hour of day, pooled across the 7 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-08-03..2026-08-09 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot
CPM by hour, one line per asset

All seven assets clear the 20-install gate, so the composite plots the whole campaign. Money-chart markers are hollow under 16 payers, which on a per-day axis is most points for most arms even where the week's total clears the bar.

German (DE/AT/CH) — every section below this line is German (DE/AT/CH)'s: the day, the hours, the countries, the campaigns and the assets, counted on German (DE/AT/CH)'s own ledger and its own accounts. Use the buttons above to switch.

Structure over the period

The German-speaking buy opened late on 2026-08-04 and had spent nothing after Meta day 08-06, so it covers about three of the period's seven days. Ten assets took spend across two ad sets: the DE/ set built for the region, and the DEww/ set that runs the worldwide creatives into it.

Hourly

The 24-row hourly table is emitted at account scope only and section 2 holds it. It could not be rebuilt here in any case: 5,074 impressions spread across 24 pooled buckets leaves most buckets under the 350 a seven-day period needs before a bucket can be read. The charts below are scoped to the campaign and are read for shape.

2026-08-16T16:05:05.452863 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 100 150 200 250 300 350 400 450 impressions Impressions and installs by hour impressions installs 0 1 2 3 4 5 6 7 8 installs (Meta Leads) The period's motion — whole account, 2026-08-03..2026-08-09 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:05:05.618119 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 5.8 5.9 6.0 6.1 6.2 6.3 CTR % CTR 0 4 8 12 16 20 hour (UTC) 42 43 44 45 46 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 28.0 28.5 29.0 29.5 30.0 30.5 31.0 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) 2.35 2.40 2.45 2.50 2.55 USD Cost per install Delivery by hour — German (DE/AT/CH), 2026-08-03..2026-08-09 (UTC)
CTR, CPM, click-to-install and CPI by hour, German (DE/AT/CH)

Against the prior period, hour matched to hour

No hour was delivered in by both 2026-07-27..2026-08-02 and 2026-08-03..2026-08-09 above the impression floor, so there is no matched-hours comparison to make.

A handful of hours did deliver in both periods, and none of them reaches the impression floor, so there is no paired chart under this heading either. This buy ran at 46.66 per thousand impressions and never accumulated the volume a paired read needs.

Country

The per-country table is emitted at account scope only; section 3's DE row is where this campaign's country economics can be read, at $279.11, $2.269 an install and 0.65 within-day. The charts here are scoped to the campaign and carry only the countries it targets.

2026-08-16T16:05:05.753597 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ DE AT 0 25 50 75 100 125 150 175 200 USD spend and installs are a META-day cut (no hour x country grid exists); revenue is the report period Spend against within-day revenue by country — 2026-08-03..2026-08-09 spend within-day revenue
Spend against within-day revenue, by country
2026-08-16T16:05:05.788513 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ DE AT 0.0 0.5 1.0 1.5 2.0 2.5 USD per install Cost per install by country — 2026-08-03..2026-08-09 (META days)
Cost per install by country

Aggregate, both periods

No hour was delivered in by both 2026-07-27..2026-08-02 and 2026-08-03..2026-08-09, so there is no matched-hours funnel.

The revenue charts draw both periods, because a small German buy did run in the prior week and did earn. What they cannot support is a delivery comparison, which is what the line above refuses.

2026-08-16T16:05:05.863261 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 50 100 150 200 250 300 USD 1.49 1.27 1.45 1.22 0.47 0.47 the number above each bar is that measure's ROAS against the same period's spend The three revenue measures, 2026-07-27..2026-08-02 against 2026-08-03..2026-08-09 (UTC) 2026-07-27..2026-08-02 2026-08-03..2026-08-09
The three revenue measures on both periods, ROAS above each bar
2026-08-16T16:05:05.913258 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-07-27..2026-08-02 2026-08-03..2026-08-09 0 50 100 150 200 250 300 USD the bottom segment IS the within-day figure: the same number seen twice Booked revenue by how long its payer had been installed (UTC) paid the day they installed one day after two days after three days after four or more days after
Booked revenue by how long its payer had been installed

A. Per asset — delivery

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
DEww/bodysuit$76.351,77742.971025.74%3130.39%$2.463
DE/turkish_mature$56.251,03454.40706.77%1420.00%$4.018
DE/german_mature$44.381,01143.90757.42%1824.00%$2.466
DEww/spill2$23.1831872.894112.89%921.95%$2.576
DE/german$14.8726955.28197.06%631.58%$2.478
DEww/bikini$8.2420540.20167.80%318.75%$2.747
DEww/pool5$6.1030719.87154.89%213.33%$3.050
DE/german_6s$5.2010947.7176.42%342.86%$1.733
DE/latina_true$1.793649.7238.33%133.33%$1.790
DE/turkish_6s$0.39848.7500.00%0——
DE/de_german_mature_6s$0.000—0—0——

Two assets took over half the campaign, on 1,777 and 1,034 impressions. Every install count here is under 32, which is under the 20-install gate for most rows and far under anything that could rank one creative against another. Read the spend ordering; the ratios beside it are noise at this size.

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 period. Report clock UTC.

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
DEww/bodysuit$75.050.98 (0.84)$24.750.32$24.750.32310.7%0.8848.2537.6%
DE/turkish_mature$5.740.10 (0.10)$0.000.00$0.000.0000.0%0.000——
DE/german_mature$58.741.32 (1.33)$58.741.32$58.741.32419.0%2.79714.6943.2%
DEww/spill2$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/german$21.851.47 (1.47)$21.851.47$21.851.47116.7%3.64121.85100.0%
DEww/bikini$102.4212.43 (0.70)$5.740.70$5.740.70133.3%1.9155.74100.0%
DEww/pool5$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——
DE/latina_true$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————
DE/de_german_mature_6s$12.86— (—)$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.

Nine payers across the whole campaign, the largest cell holding four. No German cell has ever cleared the 16-payer bar on this account and this week did not change that. DEww/bikini's 12.43 booked against a 0.70 within-day is one basket landing on $8.24 of spend, and DE/german's 1.47 is a single person.

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
DEww/bodysuit$76.630.0%0.0%100.0%0.0%
DE/turkish_mature$56.350.0%0.0%100.0%—
DE/german_mature$44.500.0%0.0%100.0%0.0%
DEww/spill2$23.180.0%0.0%100.0%—
DE/german$14.910.0%0.0%100.0%0.0%
DEww/bikini$8.240.0%0.0%100.0%0.0%
DEww/pool5$6.100.0%0.0%100.0%—
DE/german_6s$5.330.0%0.0%100.0%—
DE/latina_true$1.790.0%0.0%100.0%—
DE/turkish_6s$0.390.0%0.0%100.0%—

Zero India, zero United States and 100% other on every row, which is the targeting doing exactly what it was set to do. The column that carries information for the worldwide arms carries none here.

2026-08-16T16:05:06.204511 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ DEww/bodysuit 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-08-03..2026-08-09 (META days) DE AT other
Where each asset bought: share of its own spend by region
2026-08-16T16:05:06.247183 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ DEww/bodysuit 0.0 0.5 1.0 1.5 2.0 2.5 USD per install Cost per install by region — every asset, 2026-08-03..2026-08-09 (META days) DE AT
Cost per install by region, every asset
2026-08-16T16:05:06.286314 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ DEww/bodysuit 0 2 4 6 8 10 12 14 16 USD Within-day revenue by region — every asset, 2026-08-03..2026-08-09 (META days) DE AT
Within-day revenue by region, every asset

The campaign across the period

2026-08-16T16:05:06.365212 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 day (UTC) 0 2 4 6 8 10 12 payers / installs % Payer rate by day — every asset (UTC) DEww/bodysuit
Payer rate by day, one line per asset
2026-08-16T16:05:06.409274 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 day (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 within-day USD per install ARPU by day — every asset (UTC) DEww/bodysuit
ARPU by day, one line per asset
2026-08-16T16:05:06.459526 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 day (UTC) 0 1 2 3 4 5 6 7 8 within-day USD per payer ARPPU by day — every asset (UTC) DEww/bodysuit
ARPPU by day, one line per asset
2026-08-16T16:05:06.511567 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 day (UTC) 0.375 0.380 0.385 0.390 0.395 0.400 0.405 0.410 0.415 revenue / spend Within-day ROAS by day — every asset (UTC) DEww/bodysuit
Within-day ROAS by day, one line per asset
2026-08-16T16:05:06.574028 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 period (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 period are not plotted. Composite — every asset across every measure, 2026-08-03..2026-08-09 DEww/bodysuit
Composite: every asset across every measure, normalised across the period
2026-08-16T16:05:05.976717 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 0.2 0.4 0.6 0.8 1.0 CTR % hour of day, pooled across the 7 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-08-03..2026-08-09 (UTC)
CTR by hour, one line per asset
2026-08-16T16:05:06.071256 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 0.2 0.4 0.6 0.8 1.0 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-08-03..2026-08-09 (UTC)
Click-to-install by hour, one line per asset
2026-08-16T16:05:06.116323 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 0.2 0.4 0.6 0.8 1.0 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-08-03..2026-08-09 (UTC)
Cost per install by hour, one line per asset
2026-08-16T16:05:06.025822 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 0.2 0.4 0.6 0.8 1.0 USD per 1,000 impressions hour of day, pooled across the 7 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-08-03..2026-08-09 (UTC)
CPM by hour, one line per asset

One asset clears the 20-install gate, so the composite plots a single line and compares it to nothing. That is the honest picture of this campaign at this size, and it is the reason the campaign row in section 5 is the level at which the German buy can be discussed.

Earner (retired 08-03) — every section below this line is Earner (retired 08-03)'s: the day, the hours, the countries, the campaigns and the assets, counted on Earner (retired 08-03)'s own ledger and its own accounts. Use the buttons above to switch.

Structure over the period

This campaign delivered on 2026-08-03 only, in hours 04 to 11 of the UTC day, until it was switched off at 11:20. It was the campaign that carried almost the whole of the prior week. One CBO ad set held its three creatives and all three delivered together, so the ad-set row would be the whole campaign and the level that separates is the ad.

This is the only tab that can compare itself to the week before, because it is the only campaign that ran in both.

Hourly

The 24-row hourly table is emitted at account scope only, in section 2. This campaign delivered in eight hours of the period's 168, so what its own charts show is a single morning laid on a 24-hour axis; the eight buckets that carry anything are the ones to look at.

2026-08-16T16:05:08.557025 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 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 0 500 1000 1500 2000 2500 3000 3500 impressions Impressions and installs by hour impressions installs 0 10 20 30 40 50 60 70 80 installs (Meta Leads) The period's motion — whole account, 2026-08-03..2026-08-09 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:05:08.720677 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 8.0 8.5 9.0 9.5 10.0 10.5 11.0 CTR % CTR 0 4 8 12 16 20 hour (UTC) 8.0 8.5 9.0 9.5 10.0 10.5 11.0 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 20.0 22.5 25.0 27.5 30.0 32.5 35.0 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) 0.25 0.30 0.35 0.40 0.45 0.50 USD Cost per install Delivery by hour — Earner (retired 08-03), 2026-08-03..2026-08-09 (UTC)
CTR, CPM, click-to-install and CPI by hour, Earner (retired 08-03)

Against the prior period, hour matched to hour

Hours both periods delivered in, on the UTC clock: 04, 05, 06, 07, 08, 09, 10, 11. 2026-07-27..2026-08-02 additionally delivered in 00, 01, 02, 03, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23. Only the shared hours are compared. Each bucket pools that hour across the 7 days of the period, so the floor for reading one is 350 impressions, seven days at 50 each.

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

metrichours 2026-08-03..2026-08-09 ran higherhours it ran lowersign test
CPM7 of 81 of 8p = 0.070
CTR5 of 83 of 8p = 0.727
click→install2 of 86 of 8p = 0.289
CPI6 of 82 of 8p = 0.289

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

The full hour-by-hour pairing, 2026-07-27..2026-08-02 → 2026-08-03..2026-08-09

Every shared hour, 2026-07-27..2026-08-02 → 2026-08-03..2026-08-09. 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
045,372 → 5157.53 → 10.978.30% → 11.26%26.0% → 20.7%0.349 → 0.471
055,569 → 2,0098.99 → 9.788.51% → 9.41%29.3% → 20.6%0.360 → 0.504
065,781 → 2,4719.59 → 9.978.82% → 8.98%31.6% → 27.5%0.344 → 0.404
077,149 → 2,8048.04 → 9.938.31% → 8.63%25.9% → 22.3%0.373 → 0.516
0810,074 → 3,4207.46 → 8.817.82% → 7.78%24.7% → 23.7%0.386 → 0.478
0913,310 → 3,7267.75 → 7.987.53% → 7.89%25.4% → 26.5%0.404 → 0.381
1010,907 → 3,2039.15 → 9.228.01% → 7.81%26.0% → 24.4%0.440 → 0.484
114,063 → 1,04610.17 → 8.6810.14% → 9.46%31.1% → 35.4%0.323 → 0.259

Nothing about this campaign had separated when it was switched off. No sign test clears 0.05, and eight buckets cannot carry much power.

The one place it runs against the account is the click rate, up in five of the eight hours here while the pooled account row falls.

2026-08-16T16:05:08.926690 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 4 5 6 7 8 9 10 11 hour (UTC) 8 9 10 11 CTR % CTR 2026-07-27..2026-08-02 2026-08-03..2026-08-09 4 5 6 7 8 9 10 11 hour (UTC) 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 USD per 1,000 impressions CPM 4 5 6 7 8 9 10 11 hour (UTC) 20.0 22.5 25.0 27.5 30.0 32.5 35.0 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 4 5 6 7 8 9 10 11 hour (UTC) 0.25 0.30 0.35 0.40 0.45 0.50 USD Cost per install Delivery by hour — 2026-08-03..2026-08-09 against 2026-07-27..2026-08-02, shared hours only (UTC)
The same four ratios with the prior period laid over the period, shared hours only

Country

The per-country table is emitted at account scope only, in section 3, and this campaign is 4.0% of the spend behind those rows. Table C below is its own country reading. The charts here are scoped to it.

2026-08-16T16:05:09.067675 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US BR ID MY PH AU AR TR GB ZA ES 0 20 40 60 80 USD spend and installs are a META-day cut (no hour x country grid exists); revenue is the report period Spend against within-day revenue by country — 2026-08-03..2026-08-09 spend within-day revenue
Spend against within-day revenue, by country
2026-08-16T16:05:09.118647 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US BR ID MY PH AU AR TR GB ZA ES 0.0 0.2 0.4 0.6 0.8 1.0 1.2 USD per install Cost per install by country — 2026-08-03..2026-08-09 (META days)
Cost per install by country

Aggregate, both periods

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

spendimpressionsCPMclicksCTRinstallsclick→installCPI
2026-07-27..2026-08-02$522.8662,2258.405,1008.20%1,37526.96%$0.380
2026-08-03..2026-08-09$176.2719,1949.181,6208.44%40324.88%$0.437
  • click → install 26.96% → 24.88% (-7.7%, p = 0.098) — did not separate.
  • CTR 8.20% → 8.44% (+3.0%, p = 0.283) — did not separate.

Pooling across hours weights each hour by what it delivered. The hourly pairing is the unweighted read of the same two periods; where they disagree, the mix moved.

The weighted and the unweighted readings agree that nothing separated. Both pooled tests sit above p = 0.09 and no sign test clears 0.05.

The gap between 403 installs here and table A's 443 is the conversion hour: Meta stamps a conversion on the hour it converted.

2026-08-16T16:05:09.192897 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 500 1000 1500 2000 USD 1.66 1.36 1.62 11.55 1.44 1.63 the number above each bar is that measure's ROAS against the same period's spend The three revenue measures, 2026-07-27..2026-08-02 against 2026-08-03..2026-08-09 (UTC) 2026-07-27..2026-08-02 2026-08-03..2026-08-09
The three revenue measures on both periods, ROAS above each bar
2026-08-16T16:05:09.243052 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-07-27..2026-08-02 2026-08-03..2026-08-09 0 500 1000 1500 2000 USD the bottom segment IS the within-day figure: the same number seen twice Booked revenue by how long its payer had been installed (UTC) paid the day they installed one day after two days after three days after four or more days after
Booked revenue by how long its payer had been installed

A. Per asset — delivery

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
earner/bodysuit$88.5910,8258.188017.40%22127.59%$0.401
earner/bikini$48.164,67010.314529.68%13529.87%$0.357
earner/pool5$39.523,69910.683679.92%8723.71%$0.454

These are the cheapest installs on the account and they are one morning old, $0.357 to $0.454 against $0.598 to $0.982 worldwide, on a better click→install.

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 period. Report clock UTC.

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
earner/bodysuit$1,363.7715.39 (9.09)$144.041.63$176.742.00165.2%0.4659.0019.7%
earner/bikini$455.939.47 (3.33)$86.261.79$86.261.7974.7%0.57512.3248.0%
earner/pool5$215.815.46 (4.41)$23.580.60$23.580.6043.5%0.2095.8926.8%

The 16-payer bar (#37): any row above whose payer count is under 16 is a direction and never a magnitude.

Booked here is the whole argument for never ranking on it: the gap to within-day is a fortnight of July installs still paying in August.

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
earner/bodysuit$57.1134.3%3.0%62.7%0.0%
earner/bikini$38.3023.8%9.1%67.1%0.0%
earner/pool5$30.9520.6%6.8%72.6%0.0%

The same three creative names earn nothing in America here. Inside the worldwide campaign they earn 30.0% to 33.2% of their revenue there.

2026-08-16T16:05:09.585174 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/bikini earner/pool5 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-08-03..2026-08-09 (META days) IN US BR ID MY PH other
Where each asset bought: share of its own spend by region
2026-08-16T16:05:09.641995 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/bikini earner/pool5 0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 USD per install Cost per install by region — every asset, 2026-08-03..2026-08-09 (META days) IN US BR ID MY PH
Cost per install by region, every asset
2026-08-16T16:05:09.714283 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/bikini earner/pool5 0 10 20 30 40 50 60 70 USD Within-day revenue by region — every asset, 2026-08-03..2026-08-09 (META days) IN BR ID PH
Within-day revenue by region, every asset

The campaign across the period

2026-08-16T16:05:09.799565 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 day (UTC) 0 1 2 3 4 5 payers / installs % Payer rate by day — every asset (UTC) earner/bodysuit earner/bikini earner/pool5
Payer rate by day, one line per asset
2026-08-16T16:05:09.846921 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 day (UTC) 0.0 0.1 0.2 0.3 0.4 0.5 0.6 within-day USD per install ARPU by day — every asset (UTC) earner/bodysuit earner/bikini earner/pool5
ARPU by day, one line per asset
2026-08-16T16:05:09.898528 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 day (UTC) 0 2 4 6 8 10 12 within-day USD per payer ARPPU by day — every asset (UTC) earner/bodysuit earner/bikini earner/pool5
ARPPU by day, one line per asset
2026-08-16T16:05:09.946718 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-03 08-04 08-05 08-06 08-07 08-08 08-09 day (UTC) 0.6 0.8 1.0 1.2 1.4 1.6 1.8 revenue / spend Within-day ROAS by day — every asset (UTC) earner/bodysuit earner/bikini earner/pool5
Within-day ROAS by day, one line per asset
2026-08-16T16:05:10.060770 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 period (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 period are not plotted. Composite — every asset across every measure, 2026-08-03..2026-08-09 earner/bodysuit earner/bikini earner/pool5
Composite: every asset across every measure, normalised across the period
2026-08-16T16:05:09.311421 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 7 8 9 10 11 12 CTR % hour of day, pooled across the 7 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-08-03..2026-08-09 (UTC) earner/bodysuit earner/bikini earner/pool5
CTR by hour, one line per asset
2026-08-16T16:05:09.426329 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 20 25 30 35 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-08-03..2026-08-09 (UTC) earner/bodysuit earner/bikini earner/pool5
Click-to-install by hour, one line per asset
2026-08-16T16:05:09.479848 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.2 0.3 0.4 0.5 0.6 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-08-03..2026-08-09 (UTC) earner/bodysuit earner/bikini earner/pool5
Cost per install by hour, one line per asset
2026-08-16T16:05:09.370232 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 7 8 9 10 11 12 13 14 USD per 1,000 impressions hour of day, pooled across the 7 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-08-03..2026-08-09 (UTC) earner/bodysuit earner/bikini earner/pool5
CPM by hour, one line per asset

All three assets clear the 20-install gate, so the composite plots the whole campaign. Every line on every per-day chart stops after 08-03, which is the shape of a campaign that was switched off inside the period.

8Caveats

⚠⚠ One hour of one day owns hour 14 of the pooled clock, and with it the account's CTR and CPM lines. On 2026-08-03 the spill build put almost all of its 182,648 impressions into a single hour at a 0.60 CPM, and that hour is pooled with six ordinary hours into bucket 14 of section 2. The bucket reads 198,038 impressions where the rest read 11,167 to 25,054. It is real spent money and it counts against the week's economics in full; what it does not do is describe what the account was buying. Section 2's sign tests give it one vote out of 24 and are the readings to trust; section 4's pooled row weights it by delivery and is the reading that must not be quoted on its own.

The two-proportion tests under section 4's aggregate are not the guard. On a sample of 591,832 impressions they ask only whether a difference that large could be chance.

⚠ The two periods are two different buys, so nothing here isolates the account from the calendar. The prior week was the earner plus the July five-cell tests; this week is a worldwide campaign that did not exist before 12:44 UTC on 08-03. Every account-level comparison on this page therefore mixes a campaign change with whatever the market did, and no part of it can separate them.

⚠ The week is not one budget regime and no comparison in it is regime-matched. A regime is a stretch over which the ad set's daily budget did not change, and the budget is a geography dial on this account, so two creatives measured across a change are compared on different audiences (DECISION_LOG.md #47). Inside these seven days the worldwide campaign opened with five arms at $100 a day, lounge was created and pool5 raised on 08-05, the German buy opened and then stopped, and the split test began on 08-06. Section 6's per-asset block is therefore a description of what the week did and never a ranking of the creatives in it.

The instrument gate reads 1.06 on the ad account's own clock, which is inside the documented 0.91 to 1.06 band and sits on its upper limit. It is not rounded in and it carries no period-specific excuse. It bounds any sentence that sets our numbers against Meta's; it does not touch within-day, which never reads Meta's column.

The country section and table C are the account's own day, seven hours offset from every other table on this page, because Meta serves no hour × country grid. They are read for mix and never for level.

Campaign rows do not add to the account row, in two places. The booking-with-no-delivery campaigns carry $4.99 and $44.39 of within-day revenue that sits inside the account's $4,676.67 and inside no campaign row, because those campaigns are excluded from every rate. And payers are distinct people, so 291, 9 and 27 do not sum to 332.

Two tables exist at account scope only, and section 7's tabs say so in place. The 24-row hourly table and the per-country table are not emitted per campaign; a campaign's country reading is its table C and its hourly reading is its own charts. Everything else inside a tab is that campaign's.

⚠ Every tab's hourly funnel chart is still titled "whole account" although its data is the campaign's. The scoping is in the numbers and the caption lags it. Take the scope from the tab, and the same chart at account level is in section 2.

⚠ The German tab's paired chart draws a comparison its own table refuses. A few hours delivered in both periods and the chart plots them; none reaches the 350-impression floor a seven-day bucket needs, so the table declines to compare and the chart should be read for shape only.

Cohort at 24 hours is 100% covered on both periods. The payment cut falls nearly a week after this one closed, so no cohort figure on this page is a floor and both periods' cohort columns are frozen.

The composite and the region charts drop assets under 20 installs in the period, and the money charts draw a hollow marker under 16 payers. Most of the German tab's assets are below both.

9What would settle the open questions

Whether the new campaign is dearer than the old one or the market got dearer. CPI is higher in 24 of 24 shared hours at p = 0.000, which is as clean a direction as this instrument produces, and it still cannot say which of the two moved, because the campaign changed in the same step. The following week runs the same worldwide campaign against itself, and that comparison answers it at no cost.

Whether the click rate actually fell. The pooled row and the sign test disagree, and the disagreement is one rejected creative's 182,648 impressions. A pooled comparison with spill excluded would settle it in one run, and the instrument already carries the per-asset split that such a run needs.

Whether pool5 and bodysuit differ on revenue. Six assets clear the 16-payer bar for the first time and pool5 leads on every measure, but the arms were not budget-matched across this week and DECISION_LOG.md #48 says revenue cannot resolve a creative test at the volumes this account buys. A regime-matched week, with the budgets left alone from Monday to Sunday, is what would make the question answerable.

Whether the German buy earns its price. $2.721 an install against $0.701 and 9 payers over three delivering days. It stopped on 08-06 and the account has not gone back to it. Either it runs long enough to reach 16 payers or the question stays where it has been since the buy opened.

10What this hands to the next read

The week of 2026-08-10 to 2026-08-16 inherits one campaign carrying the account and one fewer creative than this week began with, spill2 having been rejected and stopped. It is also the first period in this series that cannot be written about one ad account: the two shared Nomad Node accounts began buying this app on 2026-08-11, so that report's section 2 is the portfolio and everything below it is B1 alone, with the reason stated.

The question this report could not answer and that one can is whether the account's install price stays at $0.708 once the campaign stops changing underneath it. The thing to watch while it does is whether the click rate holds where the sign test says it already is.

11Reproduce

Report clock UTC. The ad account's exports are stamped in its own zone (UTC-7), so every delivery row in sections 1, 2, 4, 5, 6 and 7 is restitched across two account days. The country tables and table C are not restitched and are labelled where they appear.

run_runs/2026-08-16_periods/
period2026-08-03 to 2026-08-09 UTC, against 2026-07-27 to 2026-08-02 UTC, both seven days
payment cut2026-08-16 10:59 UTC on the UTC configuration; 2026-08-16 03:59 on the account clock for the instrument gate
measuresmeasures_week_2026-08-03.txt, and measures_meta_gate_week_2026-08-03.txt for the gate
tablestables_week_2026-08-03.md, campaign_table_week_2026-08-03.md, and tables_week_2026-08-03__{ww,de,earner}.md
chartschartblock_week_2026-08-03.md, rendered into figures/week_2026-08-03/
Meta rowsselected by Ad ID, never by ad or ad-set name: this account has run two campaigns whose creatives carry byte-identical names
cohortH=24h, 100% covered on both periods

⚠ The account's own delivery export shows spend in the comparison period that this report does not count, and the exclusion is deliberate. On 07-30 and 07-31 the account also ran 0730_starfall_, which is 代投 for a third party and $71.62 that is not this app's money. The youguqi_ HeiHa test of 07-15 to 07-21 is outside both periods and is excluded for the same reason. Reconciling section 4's $2,946.25 against the account's raw July total will not balance until both are taken out.

One ad account bought this app in both periods. The two shared Nomad Node accounts began on 2026-08-11, after this period closes, so no portfolio section exists here and none is missing.

12Appendix — definitions

The report clock is a UTC day, and a period is a run of them. Adjust reports in UTC, so a UTC-bucketed report lines up with the attribution dashboard with nothing to convert. The ad account is fixed at UTC-7, so a UTC day on it is account day D−1 from 17:00 to 23:59 plus account day D from 00:00 to 16:59. The two clocks are not close: on a measured day the same figures differed by 14.6% on spend and 40.7% on within-day revenue.

What a period report changes, and it is four things. The hourly axis is hour of day pooled across the period, so each of the 24 buckets holds seven hours and reads as a diurnal shape. The impression floor for reading a bucket scales with the period, 50 per day, so 350 here. Booked revenue is split by how long its payer had been installed, which over one day is the same as splitting by install day and over a week is not. And level figures compare only across periods of equal length; these two are both seven days, so spend, impressions and installs compare here as well as the rates do.

Three things the clock does not reach, each labelled where it appears. Table C's per-asset country mix cannot follow it: the rake is per ACCOUNT, against that account's own hourly margin, and an asset has no hourly margin of its own. The instrument check is invalid off the account's own clock, because Meta's conversion value sits on its conversion hour and cannot honestly be restitched. And the estimator runs on Meta's clock deliberately, because its subject is delivery windows and a budget change is an instant on the account's own clock.

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

measurecountsmoves after the period closes?
bookedrevenue that arrived inside the period, whatever day its payer installedsettles about four hours after each midnight, then fixed. Meta's own number is this basis
within-dayinstalled on a day and paid before that day closed, summed over the periodnever. Sealed at each midnight
cohort at Heach 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

A period whose spend is rising against a longer history reads high on booked and lower on the other two, because the inherited cohort keeps paying whatever the buy does. Use within-day for period over period, because it is immutable and needs no horizon. Use cohort at a fixed horizon to compare hours to each other, because within-day censors by hour of day. Booked is what Meta will quote at you, so it is reported to explain the gap and never to rank.

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.

Two install counts exist and they are never crossed. Meta's Leads and our own registrations disagree by 5 to 10%. Meta's is used for the delivery funnel, so CPI and click→install have both numerator and denominator on one instrument. 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 the ad set's daily budget did not change. The budget is a geography dial on this account, so raising it buys wider and cheaper countries and two creatives measured across a change are compared on different audiences. This period contains several changes and is not one regime; the caveats say where.

The 16-payer bar (DECISION_LOG.md #37): below roughly 16 payers a revenue figure is a direction and not a magnitude. Revenue per install on this account is a near-zero vector with rare large entries, so separating two creatives by 20% needs sample sizes no arm here approaches, which is why creatives are ranked on CPM, cost per click and CPI and never on revenue (#48).

Internal — noindex. Not for distribution outside the team.