Daily campaign report — 2026-08-16, against 2026-08-15

Four ad accounts now buy this app and three of them delivered on 2026-08-16, spending $708.97 between them against $684.17 the day before. B1 took $484.57, the two shared Nomad Node accounts $190.50 and KBM1 $33.90; HR1 was built and did not deliver. The portfolio put 3.6% more money out and sealed 29.5% less inside the day, and the whole of that fall is B1's. Definitions, the report clock and the three revenue measures are in the appendix.

1Overview

(i) The portfolio, both days.

2026-08-152026-08-16change
spend$684.17$708.97+3.6%
impressions114,419101,493−11.3%
CPM$5.98$6.99+16.9%
registrations (ours)1,3481,361+1.0%
cost per registration$0.508$0.521+2.6%
booked$1,782.78 (2.61)$1,869.11 (2.64)+4.8%
within-day$819.52 (1.20)$578.01 (0.82)−29.5%
cohort @ 24h$1,168.18 (1.71)$740.86 (1.04)−36.6%
booked payers146133−13
payer rate10.8%9.8%−1.0 pts
ARPU$1.323$1.373+3.8%
ARPPU$12.21$14.05+15.1%

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.5809$0.7892$1.1388$10.69$12.78$17.511,215

(ii) Every account side by side, on one table. 2026-08-15 first, then 2026-08-16. This is the table the accounts are compared against each other on.

2026-08-15

accountspendshareimpressionsCPMregistrationscost/regbooked (bROAS)within-day (wROAS)cohort@24h (cROAS)payerspayer%ARPUARPPU
Portfolio$684.17100%114,419$5.981,348$0.508$1,782.78 (2.61)$819.52 (1.20)$1,168.18 (1.71)14610.8%$1.323$12.21
B1$497.4773%67,463$7.37837$0.594$1,416.31 (2.85)$552.37 (1.11)$872.22 (1.75)11313.5%$1.692$12.53
Nomad Node$166.4824%46,738$3.56509$0.327$361.48 (2.17)$262.16 (1.57)$290.97 (1.75)326.3%$0.710$11.30
KBM1$20.223%218$92.752$10.110$4.99 (0.25)$4.99 (0.25)$4.99 (0.25)150.0%$2.495$4.99
HR1$0.000%0—0—$0.00$0.00$0.000———

2026-08-16

accountspendshareimpressionsCPMregistrationscost/regbooked (bROAS)within-day (wROAS)cohort@24h (cROAS)payerspayer%ARPUARPPU
Portfolio$708.97100%101,493$6.991,361$0.521$1,869.11 (2.64)$578.01 (0.82)$740.86 (1.04)1339.8%$1.373$14.05
B1$484.5768%59,005$8.21825$0.587$1,316.94 (2.72)$261.02 (0.54)$277.13 (0.57)9111.0%$1.596$14.47
Nomad Node$190.5027%42,216$4.51529$0.360$552.17 (2.90)$316.99 (1.66)$463.74 (2.43)427.9%$1.044$13.15
KBM1$33.905%272$124.637$4.843$0.00 (0.00)$0.00 (0.00)$0.00 (0.00)00.0%$0.000—
HR1$0.000%0—0—$0.00$0.00$0.000———

(iii) The same table, once per account. Same rows, same columns, same two days.

B1

2026-08-152026-08-16change
spend$497.47$484.57−2.6%
impressions67,46359,005−12.5%
CPM$7.37$8.21+11.4%
registrations (ours)837825−1.4%
cost per registration$0.594$0.587−1.2%
booked$1,416.31 (2.85)$1,316.94 (2.72)−7.0%
within-day$552.37 (1.11)$261.02 (0.54)−52.7%
cohort @ 24h$872.22 (1.75)$277.13 (0.57)−36.6%
booked payers11391−22
payer rate (d0)5.3%4.0%−1.3 pts
ARPU (d0)$1.0421$0.3359−67.8%
ARPPU (d0)$19.82$8.40−57.6%

Nomad Node

2026-08-152026-08-16change
spend$166.48$190.50+14.4%
impressions46,73842,216−9.7%
CPM$3.56$4.51+26.7%
registrations (ours)509529+3.9%
cost per registration$0.327$0.360+10.1%
booked$361.48 (2.17)$552.17 (2.90)+52.8%
within-day$262.16 (1.57)$316.99 (1.66)+20.9%
cohort @ 24h$290.97 (1.75)$463.74 (2.43)−36.6%
booked payers3242+10
payer rate (d0)5.3%5.9%+0.6 pts
ARPU (d0)$0.5716$0.8766+53.4%
ARPPU (d0)$10.78$14.96+38.8%

KBM1

2026-08-152026-08-16change
spend$20.22$33.90+67.7%
impressions218272+24.8%
CPM$92.75$124.63+34.4%
registrations (ours)27+250.0%
cost per registration$10.110$4.843−52.1%
booked$4.99 (0.25)$0.00 (0.00)−100.0%
within-day$4.99 (0.25)$0.00 (0.00)−100.0%
cohort @ 24h$4.99 (0.25)$0.00 (0.00)−36.6%
booked payers10−1
payer rate (d0)50.0%0.0%−50.0 pts
ARPU (d0)$2.4950$0.0000−100.0%
ARPPU (d0)$4.99$0.00−100.0%

HR1

2026-08-152026-08-16change
spend$0.00$0.00—
impressions00—
CPM———
registrations (ours)00—
cost per registration———
booked$0.00$0.00—
within-day$0.00$0.00—
cohort @ 24h$0.00$0.00−36.6%
booked payers00+0
payer rate———
ARPU———
ARPPU———

Campaign spend split inside B1: Worldwide 100% on 08-15 and on 08-16 alike. Nothing in sections 2 to 6 carries a campaign mix change.

The accounts moved in opposite directions. Spend rose 4.5%, within-day fell 29.5%: B1's halved $552.37 → $261.02, the shared buy's rose $262.16 → $316.99.

B1 bought fewer, dearer impressions and converted them better. CPM +11.4%, impressions −12.5%, CTR −7.2%, click→install +18.0%, installs −4.3% at CPI +1.8%.

The shared buy improved on every measure: portfolio share 24% to 27%, within-day 1.57 to 1.66, cohort@24h 1.75 to 2.43, 42 payers against 32.

KBM1 raised its spend and returned nothing on it. $33.90 on this UTC day against $20.22, seven registrations against two, zero payers.

2Hourly, 2026-08-16

(i) The portfolio, hour by hour. Every account placeable on the report clock, summed; delivery on the delivery hour, our columns on the hour the appendix names.

hrspendimpressionsCPMregistrationscost/regbookedbROASwithin-daywROAScohort@24hcROASbooked payers
00$18.222,853$6.3936$0.506$27.071.49$4.990.27$4.990.273
01$18.222,983$6.1142$0.434$11.700.64$5.170.28$5.170.283
02$14.452,629$5.5032$0.452$151.0610.45$26.601.84$26.601.8410
03$17.722,790$6.3549$0.362$38.592.18$44.072.49$59.253.346
04$17.243,003$5.7450$0.345$59.303.44$20.891.21$20.891.218
05$15.643,420$4.5760$0.261$29.671.90$11.580.74$11.580.745
06$22.074,446$4.9650$0.441$77.493.51$28.951.31$28.951.317
07$32.705,639$5.8072$0.454$49.441.51$28.320.87$28.320.877
08$27.444,698$5.8456$0.490$238.368.69$17.700.65$17.700.657
09$33.085,079$6.5158$0.570$56.611.71$18.630.56$18.630.567
10$35.255,716$6.1772$0.490$28.570.81$5.740.16$5.740.167
11$35.216,134$5.7487$0.405$19.650.56$34.420.98$34.420.983
12$42.525,605$7.5966$0.644$74.361.75$35.720.84$75.661.788
13$35.034,924$7.1163$0.556$252.447.21$53.481.53$53.481.5311
14$26.792,394$11.1953$0.505$45.001.68$21.120.79$21.120.7910
15$36.274,681$7.7559$0.615$79.502.19$15.250.42$15.250.428
16$35.934,805$7.4853$0.678$76.302.12$41.351.15$41.351.157
17$39.495,081$7.7765$0.608$133.063.37$8.900.23$8.900.2314
18$40.195,233$7.6873$0.551$81.722.03$24.500.61$24.500.6110
19$44.154,638$9.5272$0.613$120.102.72$31.290.71$40.120.9112
20$30.903,766$8.2043$0.719$102.913.33$44.021.42$49.011.597
21$34.133,638$9.3850$0.683$29.490.86$19.430.57$35.541.046
22$31.853,999$7.9658$0.549$57.601.81$30.890.97$95.713.007
23$24.483,339$7.3342$0.583$29.101.19$4.990.20$17.980.734

Absent from the table above, by name: HR1. Left out only when it cannot be placed on the report clock; its money is still in every day-grain table.

(ii) The same 24 hours per account. Only B1's export carries clicks, CTR and Meta's installs, so its block is the wide one.

B1 — $484.57 on this day, and the only account whose hours can be read as a funnel

hrspendimpressionsCPMclicksCTRinstallsclick→installCPIregistrationscoveragebookedbROASwithin-daywROAScohort@24hcROASbooked payers
00$10.921,375$7.94956.91%1111.6%$0.99317100%$27.072.48$4.990.46$4.990.463
01$12.691,479$8.58835.61%1315.7%$0.97619100%$11.700.92$5.170.41$5.170.413
02$8.001,128$7.09686.03%1623.5%$0.50020100%$140.4517.56$20.982.62$20.982.628
03$11.751,314$8.94997.53%1313.1%$0.90422100%$32.662.78$23.131.97$23.131.975
04$10.841,519$7.14946.19%1819.1%$0.60228100%$42.803.95$10.140.94$10.140.945
05$8.811,378$6.39815.88%1214.8%$0.73422100%$16.211.84$6.320.72$6.320.724
06$13.592,288$5.941476.42%1510.2%$0.90618100%$35.212.59$2.990.22$2.990.224
07$26.033,816$6.822296.00%3917.0%$0.66745100%$28.181.08$22.420.86$22.420.865
08$20.843,008$6.931504.99%1812.0%$1.15831100%$232.6011.16$11.940.57$11.940.576
09$24.473,014$8.121886.24%2211.7%$1.11235100%$19.120.78$9.320.38$9.320.384
10$23.463,282$7.152166.58%3717.1%$0.63445100%$17.070.73$0.000.00$0.000.005
11$23.623,352$7.052016.00%2813.9%$0.84444100%$4.990.21$0.000.00$0.000.001
12$28.443,268$8.701905.81%3015.8%$0.94837100%$33.001.16$7.980.28$7.980.285
13$23.862,949$8.091705.76%2816.5%$0.85240100%$195.528.19$5.740.24$5.740.246
14$16.981,464$11.601228.33%2520.5%$0.67936100%$26.921.59$5.760.34$5.760.346
15$25.992,955$8.801846.23%3016.3%$0.86639100%$63.422.44$5.760.22$5.760.225
16$25.263,060$8.251886.14%2814.9%$0.90233100%$23.320.92$41.351.64$41.351.646
17$27.903,283$8.502286.94%2912.7%$0.96241100%$94.633.39$8.900.32$8.900.3211
18$24.262,983$8.131916.40%3116.2%$0.78346100%$40.671.68$0.000.00$0.000.006
19$33.102,907$11.391796.16%2212.3%$1.50538100%$86.412.61$10.720.32$10.720.328
20$19.972,579$7.741445.58%2013.9%$0.99827100%$56.732.84$37.981.90$37.981.904
21$23.512,348$10.011456.18%2920.0%$0.81133100%$26.551.13$19.430.83$35.541.515
22$23.272,380$9.781305.46%2620.0%$0.89540100%$26.641.14$0.000.00$0.000.003
23$17.011,876$9.071125.97%2320.5%$0.74026100%$0.000.00$0.000.00$0.000.000
ALL$484.5759,005$8.213,6346.16%56315.5%$0.861782100%$1281.872.65$261.020.54$277.130.5789

Delivery columns (CPM, CTR, click→install, CPI) are Meta's: numerator and denominator both from its instrument. Registrations, the payer count and every revenue column are ours. The two install counts are never crossed. booked sits on the payment hour; within-day and cohort@24h sit on the install hour.

⚠ Payer counts per hour run 0 to 8 and most buckets sit under the 16-payer bar. An hourly ROAS on three payers is an average of three baskets. Read the ALL row for level and the hours for shape.

The account's own motion across the clock, and the four delivery ratios:

2026-08-18T11:40:06.087020 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 Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 1000 1500 2000 2500 3000 3500 impressions Impressions and installs by hour impressions installs 10 15 20 25 30 35 40 installs (Meta Leads) The day's motion — whole account, 2026-08-16 (UTC)
The day's motion: spend by hour, and impressions against installs
2026-08-18T11:40:06.304529 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 CTR % CTR 0 4 8 12 16 20 hour (UTC) 6 7 8 9 10 11 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 10 12 14 16 18 20 22 24 installs / clicks % Click → install 0 4 8 12 16 20 hour (UTC) 0.6 0.8 1.0 1.2 1.4 USD Cost per install Delivery by hour — whole account, 2026-08-16 (UTC)
CTR, CPM, click-to-install and CPI by hour, whole account

The other accounts, hour by hour.

Nomad Node — $190.50 on this day

hrspendimpressionsCPMregistrationscost/regbookedbROASwithin-daywROAScohort@24hcROASbooked payers
00$7.301,478$4.9417$0.429$0.000.00$0.000.00$0.000.000
01$5.531,504$3.6822$0.251$0.000.00$0.000.00$0.000.000
02$6.451,501$4.3012$0.537$10.611.65$5.620.87$5.620.872
03$5.971,476$4.0424$0.249$5.930.99$20.943.51$36.126.051
04$6.401,484$4.3119$0.337$16.512.58$10.751.68$10.751.683
05$6.832,042$3.3435$0.195$13.451.97$5.260.77$5.260.771
06$8.482,158$3.9330$0.283$12.971.53$25.963.06$25.963.062
07$6.671,823$3.6625$0.267$21.263.19$5.910.89$5.910.892
08$6.601,690$3.9125$0.264$5.760.87$5.760.87$5.760.871
09$7.822,057$3.8021$0.372$37.494.79$9.321.19$9.321.193
10$9.642,406$4.0124$0.402$5.740.60$5.740.60$5.740.601
11$9.792,770$3.5339$0.251$14.661.50$34.423.52$34.423.522
12$10.102,315$4.3627$0.374$41.374.10$27.742.75$67.686.703
13$8.721,949$4.4722$0.396$56.926.53$47.735.47$47.735.475
14$6.79903$7.5216$0.424$18.082.66$15.362.26$15.362.264
15$7.891,701$4.6416$0.493$16.082.04$9.491.20$9.491.203
16$7.651,724$4.4419$0.403$52.986.93$0.000.00$0.000.001
17$8.871,776$4.9922$0.403$38.434.33$0.000.00$0.000.003
18$12.712,229$5.7024$0.530$41.053.23$24.501.93$24.501.934
19$9.061,716$5.2831$0.292$33.693.72$20.572.27$29.403.254
20$7.861,172$6.7114$0.561$46.195.88$6.040.77$11.031.403
21$8.291,276$6.5015$0.553$2.940.36$0.000.00$0.000.001
22$8.261,609$5.1314$0.590$30.963.75$30.893.74$95.7111.594
23$6.821,457$4.6816$0.426$29.104.27$4.990.73$17.982.644

KBM1 — $33.90 on this day

hrspendimpressionsCPMregistrationscost/regbookedbROASwithin-daywROAScohort@24hcROASbooked payers
00$0.000—0—$0.00—$0.00—$0.00—0
01$0.000—0—$0.00—$0.00—$0.00—0
02$0.000—0—$0.00—$0.00—$0.00—0
03$0.000—0—$0.00—$0.00—$0.00—0
04$0.000—0—$0.00—$0.00—$0.00—0
05$0.000—0—$0.00—$0.00—$0.00—0
06$0.000—0—$0.00—$0.00—$0.00—0
07$0.000—0—$0.00—$0.00—$0.00—0
08$0.000—0—$0.00—$0.00—$0.00—0
09$0.798$98.750—$0.000.00$0.000.00$0.000.000
10$2.1528$76.791$2.150$0.000.00$0.000.00$0.000.000
11$1.8012$150.000—$0.000.00$0.000.00$0.000.000
12$3.9822$180.911$3.980$0.000.00$0.000.00$0.000.000
13$2.4526$94.231$2.450$0.000.00$0.000.00$0.000.000
14$3.0227$111.850—$0.000.00$0.000.00$0.000.000
15$2.3925$95.601$2.390$0.000.00$0.000.00$0.000.000
16$3.0221$143.811$3.020$0.000.00$0.000.00$0.000.000
17$2.7222$123.640—$0.000.00$0.000.00$0.000.000
18$3.2221$153.330—$0.000.00$0.000.00$0.000.000
19$1.9915$132.671$1.990$0.000.00$0.000.00$0.000.000
20$3.0715$204.670—$0.000.00$0.000.00$0.000.000
21$2.3314$166.431$2.330$0.000.00$0.000.00$0.000.000
22$0.3210$32.000—$0.000.00$0.000.00$0.000.000
23$0.656$108.330—$0.000.00$0.000.00$0.000.000

HR1 — no hourly block: it delivered nothing on this day. Its export returned No data available, a measured zero, and the zero row is in the day-grain tables.

Against the prior day, hour matched to hour

Hours both days delivered in, on the UTC clock: 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 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:

metrichours 2026-08-16 ran higherhours it ran lowersign test
CPM15 of 249 of 24p = 0.307
CTR6 of 2418 of 24p = 0.023
click→install18 of 246 of 24p = 0.023
CPI14 of 2410 of 24p = 0.541

The two funnel rates moved in opposite directions on the same hours: fewer people clicked, and more of the ones who did installed.

CPM and CPI have no direction. CPM rose 11.4% pooled with no majority of hours agreeing: the day bought a different clock and geography.

The full hour-by-hour pairing, 2026-08-15 → 2026-08-16

Every shared hour, 2026-08-15 → 2026-08-16. 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
002,532 → 1,3759.60 → 7.948.06% → 6.91%9.8% → 11.6%1.216 → 0.993
012,511 → 1,4797.81 → 8.586.85% → 5.61%13.4% → 15.7%0.853 → 0.976
022,839 → 1,1287.70 → 7.097.40% → 6.03%10.0% → 23.5%1.040 → 0.500
032,961 → 1,3145.47 → 8.946.42% → 7.53%13.7% → 13.1%0.623 → 0.904
043,099 → 1,5196.07 → 7.146.91% → 6.19%9.8% → 19.1%0.896 → 0.602
053,314 → 1,3786.56 → 6.396.37% → 5.88%10.9% → 14.8%0.945 → 0.734
063,349 → 2,2886.21 → 5.945.64% → 6.42%15.3% → 10.2%0.718 → 0.906
073,157 → 3,8166.27 → 6.826.15% → 6.00%12.9% → 17.0%0.792 → 0.667
082,259 → 3,0087.79 → 6.935.98% → 4.99%8.1% → 12.0%1.599 → 1.158
092,784 → 3,0146.59 → 8.126.57% → 6.24%14.2% → 11.7%0.706 → 1.112
103,623 → 3,2827.93 → 7.155.77% → 6.58%10.5% → 17.1%1.306 → 0.634
113,159 → 3,3527.70 → 7.055.86% → 6.00%13.0% → 13.9%1.014 → 0.844
123,040 → 3,2687.84 → 8.706.02% → 5.81%13.1% → 15.8%0.993 → 0.948
133,011 → 2,9496.04 → 8.097.17% → 5.76%13.9% → 16.5%0.606 → 0.852
141,743 → 1,46413.68 → 11.607.86% → 8.33%13.9% → 20.5%1.255 → 0.679
153,089 → 2,9556.82 → 8.806.99% → 6.23%14.4% → 16.3%0.680 → 0.866
163,218 → 3,0606.62 → 8.256.93% → 6.14%13.9% → 14.9%0.687 → 0.902
173,741 → 3,2837.83 → 8.506.42% → 6.94%13.8% → 12.7%0.887 → 0.962
183,336 → 2,9837.93 → 8.137.79% → 6.40%14.6% → 16.2%0.696 → 0.783
193,080 → 2,9077.57 → 11.396.43% → 6.16%15.7% → 12.3%0.752 → 1.505
202,288 → 2,5798.09 → 7.746.91% → 5.58%16.5% → 13.9%0.712 → 0.998
211,930 → 2,3487.47 → 10.016.74% → 6.18%16.9% → 20.0%0.655 → 0.811
221,772 → 2,3807.10 → 9.786.15% → 5.46%13.8% → 20.0%0.839 → 0.895
231,628 → 1,8767.67 → 9.076.88% → 5.97%15.2% → 20.5%0.734 → 0.740
2026-08-18T11:40:06.542264 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 5 10 15 20 hour (UTC) 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 CTR % CTR 2026-08-15 2026-08-16 0 5 10 15 20 hour (UTC) 6 8 10 12 14 USD per 1,000 impressions CPM 0 5 10 15 20 hour (UTC) 8 10 12 14 16 18 20 22 24 installs / clicks % Click → install 0 5 10 15 20 hour (UTC) 0.6 0.8 1.0 1.2 1.4 1.6 USD Cost per install Delivery by hour — 2026-08-16 against 2026-08-15, shared hours only (UTC)
The same four ratios with the prior day laid over the day, shared hours only

The day rebuilt its clock: hours 00–05 delivered roughly half the day before's, 07–09 and 21–23 more. That is the whole 12.5% impression fall.

3Country, 2026-08-16

2026-08-23T12:43:21.876351 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ US IN GB MX ID PH TR FR CA MY AR IT 0 20 40 60 80 100 120 140 160 USD delivery raked onto the report clock against two measured margins; revenue is the report day Spend against within-day revenue by country — 2026-08-16 spend within-day revenue
Spend against within-day revenue, by country
2026-08-23T12:43:21.928888 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-16 (report clock)
Cost per install by country

(i) The portfolio by country, 2026-08-16. 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
US$83.7017.3%3,536$23.6776$1.101$91.881.1020
IN$80.9916.7%9,891$8.19245$0.331$155.051.9127
GB$24.215.0%1,476$16.4035$0.692$12.080.505
MX$21.074.3%4,345$4.8562$0.340$35.811.706
ID$17.683.6%3,536$5.00108$0.164$4.990.283
PH$15.053.1%7,364$2.0464$0.235$0.000.002
TR$14.172.9%876$16.1937$0.383$11.780.834
FR$11.332.3%833$13.6122$0.515$5.740.511
CA$10.912.3%575$18.9611$0.992$35.653.271
MY$10.552.2%2,424$4.3527$0.391$5.380.512
AR$9.201.9%1,158$7.9540$0.230$4.990.541
IT$9.141.9%662$13.809$1.015$0.000.003

185 further countries are not listed, $176.57 between them (36.4% of this block).

Reconciliation, what is measured and what is fitted. Every per-country cell is an allocation across hours; every total is measured. B1 (UTC-7) $76.60 from Meta 2026-08-15 and $407.97 from Meta 2026-08-16, a measured UTC-day total of $484.57.

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

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

B1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
US$83.7017.3%3,536$23.6764$1.308$86.891.0418
IN$80.9916.7%9,891$8.19166$0.488$67.940.8415
GB$24.215.0%1,476$16.4027$0.897$0.000.003
MX$21.074.3%4,345$4.8534$0.620$14.820.705
ID$17.683.6%3,536$5.0044$0.402$0.000.002
PH$15.053.1%7,364$2.0450$0.301$0.000.002
TR$14.172.9%876$16.1922$0.644$5.890.421
FR$11.332.3%833$13.6117$0.667$5.740.511
CA$10.912.3%575$18.9610$1.091$0.000.000
MY$10.552.2%2,424$4.3518$0.586$5.380.511
AR$9.201.9%1,158$7.9525$0.368$0.000.000
IT$9.141.9%662$13.808$1.142$0.000.003

184 further countries are not listed, $176.57 between them (36.4% of this block).

Nomad Node

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
AE$0.000.0%0—6$0.000$0.00—0
AL$0.000.0%0—1$0.000$0.00—0
AM$0.000.0%0—0—$0.00—1
AR$0.000.0%0—15$0.000$4.99—1
AU$0.000.0%0—3$0.000$28.67—1
AZ$0.000.0%0—3$0.000$0.00—0
BA$0.000.0%0—1$0.000$0.00—0
BD$0.000.0%0—2$0.000$0.00—0
BG$0.000.0%0—1$0.000$5.74—1
BN$0.000.0%0—1$0.000$0.00—0
BO$0.000.0%0—3$0.000$0.00—0
BR$0.000.0%0—38$0.000$0.00—0

70 further countries are not listed, $0.00 between them (0.0% of this block).

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-15, the same two tables.

(i) The portfolio by country, 2026-08-15. 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$112.1522.5%13,678$8.20294$0.381$66.060.5927
US$73.7514.8%2,765$26.6766$1.117$179.702.4424
MX$19.834.0%4,723$4.2080$0.248$51.732.6111
ID$18.463.7%4,448$4.15116$0.159$12.970.704
GB$17.753.6%1,368$12.9818$0.986$116.796.588
PH$16.543.3%9,672$1.7172$0.230$46.122.794
TR$12.852.6%791$16.2439$0.329$66.265.165
CL$11.642.3%926$12.5830$0.388$0.000.004
CA$10.622.1%621$17.096$1.770$8.040.762
AR$10.412.1%1,171$8.8930$0.347$4.990.481
MY$9.742.0%2,858$3.4119$0.513$0.000.002
AU$9.661.9%517$18.6811$0.878$0.000.000

180 further countries are not listed, $174.05 between them (35.0% 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) $143.35 from Meta 2026-08-14 and $354.12 from Meta 2026-08-15, a measured UTC-day total of $497.47.

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

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

B1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$112.1522.5%13,678$8.20208$0.539$38.110.3421
US$73.7514.8%2,765$26.6749$1.505$90.811.2316
MX$19.834.0%4,723$4.2054$0.367$46.022.328
ID$18.463.7%4,448$4.1547$0.393$7.980.433
GB$17.753.6%1,368$12.9817$1.044$116.796.588
PH$16.543.3%9,672$1.7154$0.306$11.270.683
TR$12.852.6%791$16.2423$0.559$45.023.502
CL$11.642.3%926$12.5817$0.685$0.000.004
CA$10.622.1%621$17.096$1.770$8.040.762
AR$10.412.1%1,171$8.8916$0.651$0.000.000
MY$9.742.0%2,858$3.4112$0.812$0.000.002
AU$9.661.9%517$18.6811$0.878$0.000.000

179 further countries are not listed, $174.05 between them (35.0% of this block).

Nomad Node

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
AE$0.000.0%0—6$0.000$0.00—0
AM$0.000.0%0—1$0.000$0.00—0
AR$0.000.0%0—14$0.000$4.99—1
BD$0.000.0%0—3$0.000$0.00—0
BG$0.000.0%0—1$0.000$0.00—0
BO$0.000.0%0—1$0.000$0.00—0
BR$0.000.0%0—46$0.000$10.26—2
CD$0.000.0%0—1$0.000$0.00—0
CL$0.000.0%0—13$0.000$0.00—0
CO$0.000.0%0—3$0.000$0.00—0
CR$0.000.0%0—1$0.000$0.00—0
CZ$0.000.0%0—2$0.000$0.00—0

56 further countries are not listed, $0.00 between them (0.0% of this block).

KBM1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
US$0.000.0%0—2$0.000$4.99—1

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

4Aggregate, both days

(i) The delivery funnel, both days, B1 only. Its column preset alone carries clicks, CTR and Meta's installs; the revenue tables below are portfolio-wide.

spendimpressionsCPMclicksCTRinstallsclick→installCPI
2026-08-15$497.4767,4637.374,4786.64%58813.13%$0.846
2026-08-16$484.5759,0058.213,6346.16%56315.49%$0.861

Pooling across hours is a mix comparison. It weights each hour by how much it delivered, so a day that bought differently across the clock can move these rows without any hour changing. The hour-by-hour pairing in section 2 is the unweighted read of the same two days; here the two agree on both funnel rates and disagree on CPM, which locates the CPM move in the mix.

The three measures, portfolio, both days:

measure2026-08-152026-08-16moves?
booked$1,782.78 (2.61)$1,869.11 (2.64)settled
within-day$819.52 (1.20)$578.01 (0.82)never
cohort @ 24h$1,168.18 (1.71)$740.86 (1.04)frozen, 100% covered
2026-08-18T11:40:06.868169 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 200 400 600 800 1000 1200 USD 2.58 1.11 1.75 2.65 0.54 0.57 the number above each bar is that measure's ROAS against the same day's spend The three revenue measures, 2026-08-15 against 2026-08-16 (UTC) 2026-08-15 2026-08-16
The three revenue measures on both days, ROAS above each bar

Booked revenue by the day its payer installed, B1, whose top row is the within-day figure:

installedbooked on 08-16share
2026-08-16$261.0220.4%
2026-08-15$370.4528.9%
2026-08-14$28.042.2%
2026-08-13$13.771.1%
2026-08-11$163.3412.7%
2026-08-10$8.750.7%
2026-08-18T11:40:06.934894 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-08-15 2026-08-16 0 200 400 600 800 1000 1200 USD the bottom segment IS the within-day figure: the same number seen twice Booked revenue by the day its payer installed (UTC) the day itself one day earlier two days earlier three days earlier four or more
Booked revenue by the day its payer installed

(ii) Each measure per account, both days.

2026-08-15

accountbookedbROASwithin-daywROAScohort@24hcROASpayerspayer%ARPUARPPU
Portfolio$1,782.782.61$819.521.20$1,168.181.7114610.8%$1.323$12.21
B1$1,416.312.85$552.371.11$872.221.7511313.5%$1.692$12.53
Nomad Node$361.482.17$262.161.57$290.971.75326.3%$0.710$11.30
KBM1$4.990.25$4.990.25$4.990.25150.0%$2.495$4.99
HR1$0.00—$0.00—$0.00—0———

2026-08-16

accountbookedbROASwithin-daywROAScohort@24hcROASpayers (d0)payer% (d0)ARPU (d0)ARPPU (d0)
Portfolio$1,869.112.64$578.010.82$740.861.04644.7%$0.5444$11.58
B1$1,316.942.72$261.020.54$277.130.57334.0%$0.3359$8.40
Nomad Node$552.172.90$316.991.66$463.742.43315.9%$0.8766$14.96
KBM1$0.000.00$0.000.00$0.000.0000.0%$0.0000—
HR1$0.00—$0.00—$0.00—0———

Rank these rows on within-day or cohort@24h, never on booked, which credits B1's accumulated cohort against KBM1's two days. Within-day: 1.66 against 0.54.

The mix-neutral account line. One delivering campaign on both days, so the mix-held CPM is the $8.21 B1 read and the move is inside Worldwide.

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. 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 only a direction.

⚠ Spend here is each account's OWN day and our columns are the UTC day, the same seam section 3 carries and for the same reason: only B1's export has the Ad ID an hourly restitch needs. It bites on B1 and KBM1 at UTC-7 and not on the Nomad pair or HR1 at UTC+0.

(i) Every campaign the portfolio ran.

campaignaccountspendshareimpressionsCPMregistrationscost/regwithin-daywROASpayers
bailingxia_meituan_ww_cvr_260802B1$540.1470.1%64,935$8.32714$0.756$261.020.4881
0811_vl_bailingxia_srfhjyd-rain-chuvaNomad Node$85.9811.2%16,257$5.29229$0.375$110.601.2922
0814_vl_bailingxia_srfhjyd-rain-chuvaNomad Node$78.0010.1%22,792$3.42264$0.295$152.191.9514
bailingxia_srfhjyd_ww_cvr_260814KBM1$39.735.2%350$113.517$5.676$0.000.000
0814_vl_bailingxia_srfhjyd_maimaiNomad Node$26.523.4%3,167$8.3736$0.737$54.202.046
bailingxia_meituan_ww_cvr_260730B1$0.000.0%0—67$0.000$0.00—6
bailingxia_meituan_t3_cvr_260725B1$0.000.0%0—29$0.000$0.00—2
bailingxia_meituan_t2_cvr_260725B1$0.000.0%0—6$0.000$0.00—0
bailingxia_meituan_t1_cvr_260725B1$0.000.0%0—5$0.000$0.00—0
bailingxia_meituan_t3_cvr_260723B1$0.000.0%0—2$0.000$0.00—0
bailingxia_meituan_dach_cvr_260729B1$0.000.0%0—1$0.000$0.00—2
New Sales CampaignB1$0.000.0%0—1$0.000$0.00—0

(ii) The same, per account. B1's own campaign row carries the funnel columns the others cannot.

B1, the funnel version

campaignspendshareimpressionsimpr shareCPMclicksCTRcost/clickinstallsCPIwithin-daywROASpayers
Worldwide$484.57100.0%59,005100.0%8.213,6346.16%$0.133563$0.861$261.020.5433

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

Account CPM $7.37 → $8.21 (11.4%). Held to 2026-08-15's campaign mix it is $8.21 (11.4%) — the gap between those two is what the campaign mix contributed.

This section is B1's. Nomad Node's export carries no Campaign ID, only Ad set name; KBM1 and HR1 each run a single campaign.

This section carries no chart. One campaign delivered, so a spend-share or CPM-by-campaign chart would plot a single flat line at 100%.

The other accounts' campaigns.

Nomad Node

campaignaccountspendshareimpressionsCPMregistrationscost/regwithin-daywROASpayers
0811_vl_bailingxia_srfhjyd-rain-chuvaNomad Node$85.9845.1%16,257$5.29229$0.375$110.601.2922
0814_vl_bailingxia_srfhjyd-rain-chuvaNomad Node$78.0040.9%22,792$3.42264$0.295$152.191.9514
0814_vl_bailingxia_srfhjyd_maimaiNomad Node$26.5213.9%3,167$8.3736$0.737$54.202.046

KBM1

campaignaccountspendshareimpressionsCPMregistrationscost/regwithin-daywROASpayers
bailingxia_srfhjyd_ww_cvr_260814KBM1$39.73100.0%350$113.517$5.676$0.000.000

HR1

nothing delivered or registered.

6Every asset, and inside B1's worldwide campaign

(i) Every asset the portfolio ran. One row per ad, the account named on it.

assetaccountspendimpressionsCPMregistrationscost/regwithin-daywROAScohort@24hpayers
vid_ww_pool5_15s_9x16_v1B1$540.1464,935$8.32638$0.847$240.320.44$256.4249
nomad-0811-03-rain-chuva-video-01Nomad Node$85.9816,257$5.29229$0.375$110.601.29$134.6121
nomad-0814-03-rain-chuva-video-01Nomad Node$54.5720,114$2.71209$0.261$77.251.42$168.0310
vid_ww_pool5_15s_9x16_v1KBM1$39.73350$113.517$5.676$0.000.00$0.000
nomad-0814-03-maimaiNomad Node$26.523,167$8.3736$0.737$54.202.04$73.176
nomad-0814-03-rain-chuva-video-02Nomad Node$23.432,678$8.7555$0.426$74.933.20$87.924
vid_ww_bodysuit_10s_9x16_v1B1$0.000—73$0.000$8.75—$8.7513
vid_ww_bikini_10s_9x16_v1B1$0.000—35$0.000$0.00—$0.0011
vid_ww_lounge_8s_9x16_v1B1$0.000—21$0.000$11.96—$11.9611
vid_ww_spill_8s_9x16_v1 - CopyB1$0.000—12$0.000$0.00—$0.003
vid_sasian_bikini_6s_9x16_v1B1$0.000—10$0.000$0.00—$0.000
vid_utility_6s_9x16_v1B1$0.000—6$0.000$0.00—$0.001
vid_sasian_spice5_15s_9x16_v1B1$0.000—5$0.000$0.00—$0.001
vid_utility_15s_9x16_v1B1$0.000—4$0.000$0.00—$0.000
vid_sasian_bodysuit_10s_9x16_v1B1$0.000—4$0.000$0.00—$0.000
vid_sasian_bikini_10s_9x16_v1B1$0.000—3$0.000$0.00—$0.000
vid_ww_mugshot_15s_9x16_v1B1$0.000—2$0.000$0.00—$0.000
vid_control_15s_9x16_v1B1$0.000—2$0.000$0.00—$0.000
vid_sasian_slip_dress_9x16_v1B1$0.000—2$0.000$0.00—$0.000
vid_utility_sexy_9x16_v1B1$0.000—2$0.000$0.00—$0.000
vid_control_10s_9x16_v1B1$0.000—1$0.000$0.00—$0.000
New Sales AdB1$0.000—1$0.000$0.00—$0.000
vid_de_turkish_mature_6s_9x16_v1B1$0.000—1$0.000$0.00—$0.000
vid_utility_10s_9x16_v1B1$0.000—1$0.000$0.00—$0.000
vid_latina_es_slip_dress_9x16_v1B1$0.000—1$0.000$0.00—$0.000
vid_control_6s_9x16_v1B1$0.000—1$0.000$0.00—$0.000
nomad-0811-03-rain-chuva-video-02Nomad Node$0.000—0—$0.00—$0.001
vid_ww_bodysuit_10s_9x16_v1 - CopyB1$0.000—0—$0.00—$0.002

Nothing here is a controlled comparison — different accounts, ad sets and audiences, and Meta chose every allocation (DECISION_LOG.md #48).

Every asset, per account.

B1

campaignaccountspendshareimpressionsCPMregistrationscost/regwithin-daywROASpayers
bailingxia_meituan_ww_cvr_260802B1$540.14100.0%64,935$8.32714$0.756$261.020.4881
bailingxia_meituan_ww_cvr_260730B1$0.000.0%0—67$0.000$0.00—6
bailingxia_meituan_t3_cvr_260725B1$0.000.0%0—29$0.000$0.00—2
bailingxia_meituan_t2_cvr_260725B1$0.000.0%0—6$0.000$0.00—0
bailingxia_meituan_t1_cvr_260725B1$0.000.0%0—5$0.000$0.00—0
bailingxia_meituan_t3_cvr_260723B1$0.000.0%0—2$0.000$0.00—0
bailingxia_meituan_dach_cvr_260729B1$0.000.0%0—1$0.000$0.00—2
New Sales CampaignB1$0.000.0%0—1$0.000$0.00—0

Nomad Node

campaignaccountspendshareimpressionsCPMregistrationscost/regwithin-daywROASpayers
0811_vl_bailingxia_srfhjyd-rain-chuvaNomad Node$85.9845.1%16,257$5.29229$0.375$110.601.2922
0814_vl_bailingxia_srfhjyd-rain-chuvaNomad Node$78.0040.9%22,792$3.42264$0.295$152.191.9514
0814_vl_bailingxia_srfhjyd_maimaiNomad Node$26.5213.9%3,167$8.3736$0.737$54.202.046

KBM1

campaignaccountspendshareimpressionsCPMregistrationscost/regwithin-daywROASpayers
bailingxia_srfhjyd_ww_cvr_260814KBM1$39.73100.0%350$113.517$5.676$0.000.000

HR1

nothing delivered or registered.

Inside B1's worldwide campaign

#### Structure on this day

One ad set delivered and one ad inside it: E2/pool5, the fifth day of the single-arm buy. The campaign holds six ad sets and seven ads; five ad sets and six ads spent nothing. The ad-set row is therefore the ad row on this day. That identity belongs to the daily cut, and it is checked against the hourly export each time it is claimed.

#### A. Per asset — delivery

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
E2/pool5$484.5759,0058.213,6346.16%56315.49%$0.861
earner/bodysuit$0.000—0—0——
earner/bikini$0.000—0—0——
earner/pool5$0.000—0—0——
E2/bikini$0.000—0—0——
E2/bodysuit$0.000—0—0——
E2/mugshot$0.000—0—0——
E2/spill2$0.000—0—0——
E2/lounge$0.000—0—0——
DE/turkish_mature$0.000—0—0——

#### B. Per asset — the three revenue measures

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

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayers (d0)payer% (d0)ARPU (d0)ARPPU (d0)largest payer
E2/pool5$699.421.44 (2.05)$240.320.50$256.420.53274.3%0.4099.5017.2%
earner/bodysuit$50.53— (—)$0.00—$0.00—00.0%0.000——
earner/bikini$23.98— (—)$0.00—$0.00—00.0%0.000——
earner/pool5$3.56— (—)$0.00—$0.00—00.0%0.000——
E2/bikini$55.19— (—)$0.00—$0.00—00.0%0.000——
E2/bodysuit$182.66— (—)$8.75—$8.75—26.5%0.2824.3765.8%
E2/mugshot$0.00— (—)$0.00—$0.00—00.0%0.000——
E2/spill2$156.86— (—)$0.00—$0.00—00.0%0.000——
E2/lounge$64.68— (—)$11.96—$11.96—419.0%0.5702.9925.0%
DE/turkish_mature$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. E2/pool5 at 27 payers is the only row on this table that clears it.

Every retired asset still books revenue and none of it is delivery. E2/bodysuit booked $182.66 and E2/spill2 $156.86 on zero spend and zero impressions.

#### 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$540.1416.3%18.1%65.6%34.9%

pool5's US concentration is down to a ratio under two: 18.1% of its spend there, 34.9% of its revenue, against 3.7 on 2026-08-04.

2026-08-18T11:40:07.340606 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/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-16 (META day) US IN GB MX ID PH other
Where each asset bought: share of its own spend by region
2026-08-18T11:40:07.402591 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 USD per install Cost per install by region — every asset, 2026-08-16 (META day) US IN GB MX ID PH
Cost per install by region, every asset
2026-08-18T11:40:07.455999 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 0 10 20 30 40 50 60 70 80 USD Within-day revenue by region — every asset, 2026-08-16 (META day) US IN MX
Within-day revenue by region, every asset

#### The day across the run

2026-08-18T11:40:07.588691 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-13 08-14 08-15 08-16 day (UTC) 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0 payers / installs % Payer rate by day — every asset (UTC) E2/pool5 earner/bodysuit E2/bikini E2/bodysuit E2/spill2 E2/lounge
Payer rate by day, one line per asset
2026-08-18T11:40:07.676253 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-13 08-14 08-15 08-16 day (UTC) 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 within-day USD per install ARPU by day — every asset (UTC) E2/pool5 earner/bodysuit E2/bikini E2/bodysuit E2/spill2 E2/lounge
ARPU by day, one line per asset
2026-08-18T11:40:07.750196 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-13 08-14 08-15 08-16 day (UTC) 0 2 4 6 8 10 12 within-day USD per payer ARPPU by day — every asset (UTC) E2/pool5 earner/bodysuit E2/bodysuit E2/lounge
ARPPU by day, one line per asset
2026-08-18T11:40:07.802093 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-13 08-14 08-15 08-16 day (UTC) 0.5 0.6 0.7 0.8 0.9 1.0 revenue / spend Within-day ROAS by day — every asset (UTC) E2/pool5
Within-day ROAS by day, one line per asset
2026-08-18T11:40:07.880662 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ CTR click→install CPI payer rate * ARPU * wROAS * 0.0 0.2 0.4 0.6 0.8 1.0 normalised across the day (1.0 = best of the pack) * axis sits under the 16-payer bar on most days: direction only, never a level. Assets under 20 installs on the day are not plotted. Composite — every asset across every measure, 2026-08-16 E2/pool5
Composite: every asset across every measure, normalised across the day

7Caveats

⚠⚠ The instrument gate breached its band on this day: our records read 1.15 of Meta's booked value on B1's own clock, against a documented 0.91 to 1.06. The three days before it read 0.99, 1.05 and 1.01. This is the widest reading since the payment record was repaired on 08-16, and it is not a repeat of the defect that repair closed. The join rate is healthy and the hourly exports carry all 24 buckets on both days.

What the breach most likely is. The day's booked revenue carries a long repurchase tail: $203.37 came from people who installed on 08-08, $181.13 from 08-11, $79.01 from 08-09, and roughly $477 in total from cohorts older than Meta's own attribution window of 7-day click, 1-day view. Our records key a payment to the person who made it and never expire; Meta's window does. As the account ages, the share of a day's revenue that Meta structurally cannot attribute grows, and the ratio drifts upward for a reason that is not a measurement fault on either side. That direction is explained; the exact $167.75 gap is not, and the band was calibrated when this account was three weeks younger. It should be recalibrated on a cohort-limited basis, and until it is, a reading in this range is not evidence of a broken instrument.

Within-day is the measure every day-over-day claim on this page rests on, and it is sealed at midnight and needs no horizon. Cohort@24h is 100% covered on both days, so the two are comparable here, which is not true of every report in this series.

B1's 33 within-day payers clear the 16-payer bar; nothing below the account level does. The portfolio's 133 booked payers clear it. KBM1's zero and HR1's zero do not, and neither does any single country cell.

⚠⚠ KBM1 AND HR1 BUY THE UNITED STATES ONLY, AND B1 AND THE SHARED PAIR BUY WORLDWIDE, SO NO BLENDED FIGURE IS COMPARABLE ACROSS THE ACCOUNT ROWS. Both new accounts read Inclusion: United States in their ad sets, and 19 of 19 KBM1 registrations and 3 of 3 HR1 registrations resolve to US IPs, against 4% for B1 and 3% for the shared pair. A US impression costs this portfolio about three times a blended one, and B1's own US cell runs CPM $23.87 on this day against its account figure of $8.32, so the CPM and cost-per-registration columns in section 1 compare a US buy with a worldwide one wherever a new account sits beside an old one. The per-account rows are correct as figures and must not be ranked on those two columns. The comparison that is like-for-like is against B1's US cell, and the country export carries it.

⚠ The United States targeting is deliberate, and it is what these two accounts exist to test. Inside B1's worldwide buy pool5 has repeatedly earned a share of revenue in the United States far above its share of spend there: 13.7% of spend against 50.5% of revenue on 2026-08-04, and 18.1% against 34.9% on this day, with B1's US cell returning a booked 3.86 against the account's 2.65. KBM1 and HR1 buy the United States directly, to find out whether that concentration survives a deliberate country buy. Their ad sets read Inclusion: United States; B1's read Worldwide minus Singapore and Taiwan, the shape DECISION_LOG.md #45 fixes. They are a test arm against a control, and the ww the campaign names carry is wrong about that.

What the test returned on these two days: nothing. KBM1 spent $85.75 on United States traffic across 2026-08-16 and 2026-08-17 for 11 registrations and no payers at all, while B1's own US cell returned a within-day 0.89 and then 1.28 on comparable money. Two days is two days and this page does not read a verdict off them; the account is four days old and the reading that matters is the one it has after a run long enough to carry a payer count.

One operational note on changing it. Both campaigns are Advantage+ Sales, whose ad-set creation form exposes no Locations section, so the geography cannot be tuned the way B1's is. The live ad sets do render a Locations block with an Edit control, so the geography can probably be changed on an ad set already running. That is an affordance and not a proven write, and nothing here has been changed.

⚠ HR1 spent $0.00 on both days and its zero rows are measured. Its export was pulled successfully and reads zero across the whole window; the account published its first two ads late on 08-17. Distinguish that from an account whose file failed to arrive, which this report would say.

⚠ The Nomad Node account 3267486106793669 was nearly mis-staged, and the check that caught it is new. Its export URL, carrying B1's business_id, was silently rewritten by Ads Manager to B1's own account and returned B1's 2.4 MB day export under the shared account's filename. The range assertion passed and the file parsed. It was caught by byte count, the URL is now sent without a business_id, and the export tool now asserts both the account the page resolved to and the account the downloaded file is named for. The figures on this page are from the corrected pull.

Every account's clock is now read off the account itself, and one of them was wrong on the last cut of this page. B1 and KBM1 run at UTC-7, so a UTC day on either is stitched from two account days; the Nomad Node pair and HR1 run at UTC+0, where the reporting day is the UTC day. B1's seven hours are confirmed by correlating its hourly impressions against our registrations, which recovers k=7 at r = 0.878 against 0.702 and 0.697 either side. KBM1's and HR1's could not be recovered that way — the correlation needs an account's own volume and KBM1 has seven registrations on its best day — so they were read directly off each account's campaign objects, which Ads Manager stamps in the account's own zone: KBM1 2026-08-15T01:33:28-0700, HR1 2026-08-17T08:25:57+0000. An offset is a setting, and waiting for volume to correlate one is what kept KBM1 on its own reporting day inside a UTC portfolio total. ⚠ On 2026-08-15 KBM1 is still on its own day and its $20.22 there is not restitched, because the stitch needs the account day before it and no hourly export exists for 08-14.

⚠ What a column preset actually costs, now that it has been measured. Only B1's account has Full View; the Nomad Node preset is not ours to change, and KBM1's popover offers Performance, Performance and clicks, Engagement and Delivery with no Full View to pick. That costs four columns — Ad ID, Link clicks, CTR, Leads — and so the click→install funnel, which is why every funnel table on this page says B1 on it. It costs nothing else: hour, country, campaign and asset are breakdowns, set on the export URL by whoever pulls it, and they were verified on a shared account at 24 of 24 hourly buckets and 3,146 country rows. Reading that preset as a limit on the GRAIN is what published sections 2 and 3 as B1-only for a week.

The country, campaign and asset sections carry Meta's figures on each account's own day, seven hours offset from the UTC tables on B1 and KBM1 and identical on the Nomad pair and HR1. Meta serves no hour × country grid and no ad-level hourly without Ad ID, so those cuts cannot be restitched. They are read for mix, never for level.

The FX table is sixteen days old. Revenue in 33 currencies is converted at rates pulled on 2026-08-02. With the join rate resolved it is the only named candidate left in the instrument reconciliation that has never been tested, and this day's breach makes testing it worth more than it was.

One draft sits unpublished on B1. The manage view reads Review and publish (1). Nothing on this page depends on it and it was not touched.

37% of registrations never enter a revenue measure and that is true of every day in this series. Every "ours" figure from section 2 down means registrations attributable to a mapped Meta ad. It is internally consistent, because the payer rate divides our payers by that same population.

⚠ Two instruments produce B1's figures and they count different populations on purpose, so read each figure with the label on it. The per-account tables select on campaign_id and cover every B1 campaign; sections 2 to 6 select on Ad ID against the run config's asset map and cover only mapped ads. On this day that is 825 registrations against 782, and $1,316.94 of booked revenue against $1,281.87: the narrower instrument inside the wider one, in the direction the scope difference predicts. Neither is wrong and they must not be quoted against each other. They agree exactly where it matters most: both read within-day $261.02 and cohort@24h $277.13, because both make the install-day join the same way.

⚠ The hourly table's booked-payer column was summing hours until this report, and it is fixed here. A person who pays twice in a day lands in two hour buckets, so adding the buckets counts payer-hours and labels them people: the 08-16 column read 118 where the distinct count is 89, a 30% overstatement, and it has read that way in every daily this instrument has produced. within-day and cohort@24h were never affected, because both key on the install hour and a person installs once. That is precisely the coincidence that let the booked column stay wrong while sitting beside two right ones. The fix takes the union of the hourly sets. No published page quoted the wrong figure in prose; it appeared only in the hourly table's own ALL row, and the earlier pages have not been reissued for it.

One column changed name for the same reason. The per-account tables print cost/reg: they divide by our registrations while every delivery table divides by Meta's installs, and the two disagree by 5 to 10% by construction. It was labelled CPI until this report.

One registration on this day came through a B1 campaign that has never delivered. New Sales Campaign carries $0.00 and zero impressions across the whole seven-week export and still holds a live tracker. It is counted in B1, and it is one install in 824.

KBM1 sits far under the 16-payer bar, so the only figure on it with a sample behind it is the price of an impression, $124.63. Set that against B1's own US cell at $23.87, not against B1's blended $8.21: KBM1 is targeted United States only and B1 buys worldwide at 4% US, so the account-to-account ratio of 15.2 is mostly geography, and on a like-for-like US comparison KBM1 pays 5.2 times what B1 pays.

The standing chart set has no campaign block at all. report_charts.py emits nineteen figures across the hourly, country, aggregate and per-asset sections and none for section 5, so no report in this series has ever carried one — a gap between the format document and the generator.

⚠ The per-asset tables join on the ad NAME. That is allowed here only because the account is already fixed — by campaign_id on our side and by which export the row came from on Meta's — so the name separates assets inside one known account and never decides which account a row belongs to.

8What would settle the open questions

Whether B1's fall from 1.11 to 0.54 is the buy or the geography. The country mix moved $34 into the United States and $10 out of India between the two days, and the US costs $1.877 an install against India's $0.773. A day at 08-15's country mix would separate the two, and the campaign is broad-targeted, so the honest version of that test is to wait for the mix to move back.

Whether the instrument band survives recalibration. Compute the ratio over payments from cohorts inside Meta's 7-day window only, across the whole series. If the band holds on that basis and drifts on the current one, the gate needs redefining. It is an afternoon and it closes a file that has now been opened three times.

Nothing about pool5 against any other asset. One arm delivered on this day, as on the four before it. The comparison this report can make is against the same arm on a different day, and that is the only one it makes.

This is the first report written to the four-account format. Section-order rule 4 puts two tables under every section: the portfolio, then the accounts it is made of. The standalone "the accounts side by side" section that ran from 08-11 to 08-16 is retired, because it answered in one place a question this day raises in all of them.

KBM1's figures here differ from an earlier cut of this page, and the difference is the clock they are read on. That account runs on UTC-7 and its money was being read off its own reporting day while B1's was being stitched onto UTC — so a portfolio total was adding two different 24-hour windows. KBM1 now reads $33.90 on this UTC day against the $39.73 its own day shows, and the portfolio $708.97 against $714.80. B1 and the shared pair do not move. 2026-08-15 is the exception: KBM1 cannot be stitched onto that day, because the stitch needs the account day before it and no hourly export exists for 08-14. Its $20.22 there is its own day.

9What this hands to the next read

The 08-17 report inherits a single-arm buy in its sixth day, a within-day return that has now printed 0.59, 1.11 and 0.54 on three consecutive days, and an instrument ratio outside its band for the first time since the payment repair. The question it can answer that this one cannot is whether 0.54 or 1.11 is the outlier.

It also inherits the first four-account page. The shared buy has now beaten B1 on within-day for two days running while taking a quarter of the money, and if that holds for a third the allocation question stops being hypothetical.

10Reproduce

Report clock UTC. Every account's export is stamped in its own account zone, so B1's and KBM1's delivery rows are restitched from two Meta days each and the Nomad Node pair's and HR1's are not — those two run at UTC+0, where the account day already is the UTC day. ⚠ KBM1 on 2026-08-15 is the one figure that could not be restitched, because 08-14 has no hourly export. The country, campaign and asset tables cannot be restitched at all and are labelled where they appear.

run_runs/2026-08-18_2026-08-16_daily_auto/
the per-account breakdownpython -m ad_ops.portfolio_split --run <run> --day 2026-08-16 --prev 2026-08-15, block portfolio.md; the pull's own status in portfolio_pull.txt
payment cut2026-08-18 18:35 UTC, on the repaired join
Meta exportsB1 day and country×day 2026-07-01_2026-08-19 pulled 2026-08-18 18:32 UTC; hourly per day, all 24 buckets verified. KBM1, HR1, Nomad Node ×1 and ×2 each at three grains pulled 2026-08-19 00:2x UTC — day over the same range, country×day over 2026-08-15_2026-08-17, and hourly for 08-16 and 08-15
registrationsadjust_sink push, merged onto the Telegram-parsed ledger. Carries the account UUID, which is what the payment join needs
paymentsin-app-purchase API, full history, joined onto the export base and repaired on the account UUID
FX_runs/2026-08-02_today_read/fx_rates.json
regimescampaign activity history re-read for 2026-08-14_2026-08-18; rendered range Aug 14 to Aug 17; no rows in the window, so both days sat in one unchanged regime
python -m ad_ops.daily_pipeline --day 2026-08-16
python -m ad_ops.portfolio_split --run _runs/2026-08-18_2026-08-16_daily_auto \
    --day 2026-08-16 --prev 2026-08-15
python -m ad_ops.portfolio_split --run _runs/2026-08-18_2026-08-16_daily_auto \
    --calibrate --calibrate-from 2026-08-10 --calibrate-to 2026-08-15

The pipeline pulls B1's day, country×day and two hourly exports, then four exports per other account — day, country×day and hourly on each of the two days — then the payments and registrations, then runs measures, day_compare, cohort_arpu, asset_estimator, portfolio_split, report_tables and report_charts in the fixed order, on both the UTC and the META configs it writes. portfolio_split rebuilds each account's hourly archive by globbing every run directory, because a UTC day on a UTC-7 account needs the account day before it and a single night's pull holds only two. It chains the payment and registration ledgers forward from the previous run and repairs the payer on the account UUID after merging them.

11Appendix — definitions

The report clock is a UTC day. Adjust reports in UTC, so a UTC-bucketed report lines up with the attribution dashboard without anyone converting in their head. B1 is fixed at UTC-7, so a UTC day on that account is Meta day D−1 17:00 to 23:59 plus Meta day D 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.

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 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 day closes?
bookedrevenue that arrived inside the day, whatever day its payer installedsettles about four hours after midnight, then fixed. Meta's own number is this basis
within-dayinstalled that day and paid before that day closednever. Sealed at midnight
cohort at Hthat day's installs, counted within H hours of each person's own install. House horizon H=24rises until every install has lived H hours, then frozen. Always state coverage

A day whose spend is falling reads high on booked and low on the other two, purely because yesterday's buyers are still paying. Use within-day for day-over-day, 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, and all three count only payments the record can tie to a person who installed through one of our mapped ads. That tie is made on the numeric user id where the payment carries one and on the account UUID where it does not. 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.

The four ad accounts, what each buys, and how each is identified. B1 and the shared Nomad Node pair buy worldwide; KBM1 and HR1 buy the United States only. That difference governs which figures may be set against each other at all, and it is not visible in the campaign names, which say ww on all four. Accounts are keyed on campaign_id and never on the campaign name: the cloaker requires the key bailingxia in every campaign name, so a name test returns B1 for all four. B1 is 1738541847343652; the shared Nomad Node pair is 835434076171203 and 3267486106793669, whose campaigns for this app are 0811_, 0814_ and 0818_ and whose greenvid and pixvoo campaigns are not ours to count; KBM1 is 1533358924738693; HR1 is 1598814841849780. Two campaigns inside B1's own account are excluded on purpose: youguqi_, agreed as tuition, and 0730_starfall_*, run for a third party.

A regime is a stretch over which the ad set's daily budget did not change. The budget is a decision and delivery is a response to it, so a comparison that crosses a budget change is comparing two different buys. Both days on this page sit in one regime: the campaign's own activity history returns no rows for 2026-08-14 to 2026-08-17.

Internal — noindex. Not for distribution outside the team.