Daily campaign report — 2026-08-19, against 2026-08-18

The four ad accounts spent $508.92 on 2026-08-19 against $561.15 the day before, and bought 639 registrations against 690. B1 took $399.75 of it, KBM1 $63.03, HR1 $25.83 and the two shared Nomad Node accounts $20.31 between them. The portfolio spent 9.3% less, bought 4.1% more impressions and sealed 30.2% more revenue inside the day — definitions, the report clock and the three revenue measures are in the appendix.

1Overview

(i) The portfolio, both days.

2026-08-182026-08-19change
spend$561.15$508.92−9.3%
impressions54,88457,122+4.1%
CPM$10.22$8.91−12.8%
registrations (ours)690639−7.4%
cost per registration$0.813$0.796−2.1%
booked$1,791.97 (3.19)$1,866.87 (3.67)+4.2%
within-day$458.50 (0.82)$597.16 (1.17)+30.2%
cohort @ 24h$701.19 (1.25) at 100%$863.62 (1.70) at 100%+23.2%
booked payers137143+6
payer rate19.9%22.4%+2.5 pts
ARPU$2.597$2.922+12.5%
ARPPU$13.08$13.06−0.2%

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$1.3050$2.6476$3.8258$13.19$23.00$31.28556
Sinai AI$0.0000$0.0000$0.0000—$0.00$0.0031

Cohort is comparable here and was not on the last two pages: both days frozen at 100%, against 79% and 89% there.

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

2026-08-18

accountspendshareimpressionsCPMregistrationscost/regbooked (bROAS)within-day (wROAS)cohort@24h (cROAS)payerspayer%ARPUARPPU
Portfolio$561.15100%54,884$10.22690$0.813$1,791.97 (3.19)$458.50 (0.82)$701.19 (1.25)13719.9%$2.597$13.08
B1$383.3168%48,715$7.87616$0.622$1,308.70 (3.41)$348.28 (0.91)$537.99 (1.40)11518.7%$2.125$11.38
Nomad Node$49.559%5,145$9.6361$0.812$418.29 (8.44)$45.25 (0.91)$58.24 (1.18)2032.8%$6.857$20.91
KBM1$102.5018%667$153.6710$10.250$64.97 (0.63)$64.97 (0.63)$104.96 (1.02)220.0%$6.497$32.48
HR1$25.795%357$72.243$8.597$0.00 (0.00)$0.00 (0.00)$0.00 (0.00)00.0%$0.000—

2026-08-19

accountspendshareimpressionsCPMregistrationscost/regbooked (bROAS)within-day (wROAS)cohort@24h (cROAS)payerspayer%ARPUARPPU
Portfolio$508.92100%57,122$8.91639$0.796$1,866.87 (3.67)$597.16 (1.17)$863.62 (1.70)14322.4%$2.922$13.06
B1$399.7579%54,323$7.36596$0.671$1,475.97 (3.69)$511.92 (1.28)$778.37 (1.95)12120.3%$2.476$12.20
Nomad Node$20.314%2,175$9.3428$0.725$292.97 (14.42)$27.29 (1.34)$27.29 (1.34)1864.3%$10.463$16.28
KBM1$63.0312%358$176.0611$5.730$92.95 (1.47)$52.96 (0.84)$52.96 (0.84)327.3%$8.450$30.98
HR1$25.835%266$97.114$6.458$4.99 (0.19)$4.99 (0.19)$4.99 (0.19)125.0%$1.248$4.99

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

B1

2026-08-182026-08-19change
spend$383.31$399.75+4.3%
impressions48,71554,323+11.5%
CPM$7.87$7.36−6.5%
registrations (ours)616596−3.2%
cost per registration$0.622$0.671+7.9%
booked$1,308.70 (3.41)$1,475.97 (3.69)+12.8%
within-day$348.28 (0.91)$511.92 (1.28)+47.0%
cohort @ 24h$537.99 (1.40) at 100%$778.37 (1.95) at 100%+44.7%
booked payers115121+6
payer rate18.7%20.3%+1.6 pts
ARPU$2.125$2.476+16.5%
ARPPU$11.38$12.20+7.2%

Nomad Node

2026-08-182026-08-19change
spend$49.55$20.31−59.0%
impressions5,1452,175−57.7%
CPM$9.63$9.34−3.0%
registrations (ours)6128−54.1%
cost per registration$0.812$0.725−10.7%
booked$418.29 (8.44)$292.97 (14.42)−30.0%
within-day$45.25 (0.91)$27.29 (1.34)−39.7%
cohort @ 24h$58.24 (1.18) at 100%$27.29 (1.34) at 100%−53.1%
booked payers2018−2
payer rate (d0)11.5%7.1%−4.3 pts
ARPU (d0)$0.9548$0.9748+2.1%
ARPPU (d0)$8.32$13.65+64.0%

KBM1

2026-08-182026-08-19change
spend$102.50$63.03−38.5%
impressions667358−46.3%
CPM$153.67$176.06+14.6%
registrations (ours)1011+10.0%
cost per registration$10.250$5.730−44.1%
booked$64.97 (0.63)$92.95 (1.47)+43.1%
within-day$64.97 (0.63)$52.96 (0.84)−18.5%
cohort @ 24h$104.96 (1.02) at 100%$52.96 (0.84) at 100%−49.5%
booked payers23+1
payer rate (d0)20.0%18.2%−1.8 pts
ARPU (d0)$10.4960$4.8145−54.1%
ARPPU (d0)$52.48$26.48−49.5%

HR1

2026-08-182026-08-19change
spend$25.79$25.83+0.2%
impressions357266−25.5%
CPM$72.24$97.11+34.4%
registrations (ours)34+33.3%
cost per registration$8.597$6.458−24.9%
booked$0.00 (0.00)$4.99 (0.19)new
within-day$0.00 (0.00)$4.99 (0.19)new
cohort @ 24h$0.00 (0.00) at 100%$4.99 (0.19) at 100%new
booked payers01+1
payer rate0.0%25.0%+25.0 pts
ARPU$0.000$1.248new
ARPPU—$4.99new

A row reading new had no revenue on the prior day, so there is no base to take a percentage against.

B1's campaign split: Worldwide 100% both days, the German buy and the retired earner at zero on each, so no mix change inside B1.

⚠ The day got dearer above the install and better below it, the inverse of 08-18. Installs fell 445 to 428 at 8.5% more each.

⚠ The portfolio CPM fell 12.8%, almost none of it price. B1's impression share went 88.8% to 95.1%; the two US-only accounts 1.9% to 1.1%.

Both measures that can carry a day-over-day comparison rose together — within-day and cohort@24h, different populations, same direction and close in size.

The portfolio is now one account plus two US experiments: B1 at 79% of spend and 95% of impressions, against 68% and 88.8% on 08-18.

2Hourly, 2026-08-19

(i) The portfolio, hour by hour, 2026-08-19. 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$16.931,938$8.7416$1.058$90.305.33$66.473.93$66.473.939
01$17.501,679$10.4218$0.972$115.636.61$41.032.34$41.032.347
02$22.682,182$10.3935$0.648$12.160.54$9.320.41$12.720.562
03$23.342,690$8.6826$0.898$29.001.24$47.972.06$47.972.066
04$22.803,355$6.8035$0.651$99.604.37$0.000.00$0.000.009
05$25.703,190$8.0632$0.803$226.888.83$14.690.57$14.690.5710
06$15.902,336$6.8122$0.723$38.582.43$19.351.22$54.343.428
07$14.511,373$10.5716$0.907$58.164.01$4.990.34$4.990.348
08$11.741,653$7.1022$0.534$20.961.79$30.212.57$122.3510.423
09$17.662,265$7.8019$0.929$64.913.68$7.980.45$7.980.4510
10$17.432,246$7.7619$0.917$17.170.98$76.074.36$106.996.143
11$25.052,751$9.1128$0.895$49.321.97$15.360.61$15.360.615
12$17.802,458$7.2417$1.047$90.925.11$0.000.00$0.000.008
13$21.972,263$9.7124$0.915$70.263.20$0.000.00$12.990.599
14$22.421,454$15.4227$0.830$36.431.62$61.562.75$61.562.758
15$21.682,314$9.3730$0.723$122.875.67$19.670.91$19.670.9110
16$25.332,572$9.8534$0.745$78.903.12$20.560.81$20.560.816
17$32.653,405$9.5938$0.859$82.712.53$6.040.19$21.500.6615
18$23.033,118$7.3939$0.591$66.172.87$74.323.23$74.323.236
19$28.202,662$10.5936$0.783$98.733.50$0.000.00$15.180.5413
20$23.662,504$9.4526$0.910$147.926.25$46.101.95$55.072.3317
21$23.392,470$9.4728$0.835$40.741.74$0.000.00$16.550.715
22$17.192,061$8.3427$0.637$146.958.55$25.831.50$45.332.6412
23$20.362,183$9.3325$0.814$61.613.03$9.660.47$26.011.286

(ii) The same 24 hours per account, 2026-08-19.

B1 — $399.75 on this day

hrspendimpressionsCPMregistrationscost/regbookedbROASwithin-daywROAScohort@24hcROASbooked payers
00$13.481,776$7.5915$0.899$39.982.97$66.474.93$66.474.937
01$11.451,518$7.5414$0.818$67.285.88$32.672.85$32.672.855
02$15.311,975$7.7529$0.528$12.160.79$9.320.61$12.720.832
03$17.702,465$7.1824$0.737$19.431.10$2.990.17$2.990.174
04$17.253,101$5.5629$0.595$47.512.75$0.000.00$0.000.007
05$18.882,879$6.5628$0.674$206.5710.94$14.690.78$14.690.788
06$12.262,082$5.8919$0.645$33.592.74$11.370.93$46.363.787
07$11.501,163$9.8913$0.885$53.174.62$0.000.00$0.000.007
08$10.011,552$6.4522$0.455$20.962.09$30.213.02$122.3512.223
09$14.952,183$6.8519$0.787$43.942.94$7.980.53$7.980.538
10$14.222,153$6.6018$0.790$17.171.21$57.144.02$88.056.193
11$19.492,683$7.2628$0.696$44.092.26$15.360.79$15.360.794
12$14.502,369$6.1217$0.853$90.926.27$0.000.00$0.000.008
13$17.042,204$7.7324$0.710$67.273.95$0.000.00$12.990.768
14$19.651,410$13.9425$0.786$36.431.85$61.563.13$61.563.138
15$16.852,252$7.4829$0.581$109.246.48$19.671.17$19.671.179
16$19.392,528$7.6732$0.606$31.571.63$20.561.06$20.561.065
17$27.563,349$8.2336$0.766$53.191.93$6.040.22$21.500.7810
18$19.983,054$6.5437$0.540$66.173.31$74.323.72$74.323.726
19$21.222,585$8.2135$0.606$77.663.66$0.000.00$15.180.7211
20$20.342,458$8.2825$0.814$141.356.95$46.102.27$55.072.7115
21$18.952,438$7.7728$0.677$40.742.15$0.000.00$16.550.875
22$12.892,017$6.3927$0.477$133.9610.39$25.832.00$45.333.5211
23$14.882,129$6.9923$0.647$21.621.45$9.660.65$26.011.755

Nomad Node — $20.31 on this day

hrspendimpressionsCPMregistrationscost/regbookedbROASwithin-daywROAScohort@24hcROASbooked payers
00$1.99151$13.181$1.990$50.3225.29$0.000.00$0.000.002
01$1.23147$8.373$0.410$8.366.80$8.366.80$8.366.801
02$1.67192$8.705$0.334$0.000.00$0.000.00$0.000.000
03$1.67217$7.701$1.670$9.585.73$0.000.00$0.000.002
04$2.00223$8.976$0.333$7.123.56$0.000.00$0.000.001
05$2.75276$9.962$1.375$20.307.38$0.000.00$0.000.002
06$1.88241$7.802$0.940$0.000.00$0.000.00$0.000.000
07$1.63201$8.112$0.815$0.000.00$0.000.00$0.000.000
08$1.0686$12.330—$0.000.00$0.000.00$0.000.000
09$1.1974$16.080—$20.9717.62$0.000.00$0.000.002
10$0.6875$9.071$0.680$0.000.00$18.9327.84$18.9327.840
11$0.5040$12.500—$5.2310.46$0.000.00$0.000.001
12$0.2459$4.070—$0.000.00$0.000.00$0.000.000
13$0.3842$9.050—$0.000.00$0.000.00$0.000.000
14$0.5422$24.551$0.540$0.000.00$0.000.00$0.000.000
15$0.2730$9.001$0.270$13.6350.47$0.000.00$0.000.001
16$0.0819$4.210—$47.33591.65$0.000.00$0.000.001
17$0.0315$2.002$0.015$29.51983.81$0.000.00$0.000.005
18$0.1328$4.641$0.130$0.000.00$0.000.00$0.000.000
19$0.2117$12.350—$21.07100.31$0.000.00$0.000.002
20$0.1110$11.000—$6.5759.69$0.000.00$0.000.002
21$0.035$6.000—$0.000.00$0.000.00$0.000.000
22$0.045$8.000—$12.99324.75$0.000.00$0.000.001
23$0.000—0—$39.99—$0.00—$0.00—1

KBM1 — $63.03 on this day

hrspendimpressionsCPMregistrationscost/regbookedbROASwithin-daywROAScohort@24hcROASbooked payers
00$1.4611$132.730—$0.000.00$0.000.00$0.000.000
01$4.8214$344.291$4.820$39.998.30$0.000.00$0.000.001
02$5.7015$380.001$5.700$0.000.00$0.000.00$0.000.000
03$3.917$558.571$3.910$0.000.00$44.9811.50$44.9811.500
04$1.069$117.780—$44.9842.43$0.000.00$0.000.001
05$1.788$222.502$0.890$0.000.00$0.000.00$0.000.000
06$1.254$312.501$1.250$4.993.99$7.986.38$7.986.381
07$1.303$433.330—$0.000.00$0.000.00$0.000.000
08$0.272$135.000—$0.000.00$0.000.00$0.000.000
09$0.333$110.000—$0.000.00$0.000.00$0.000.000
10$1.655$330.000—$0.000.00$0.000.00$0.000.000
11$0.643$213.330—$0.000.00$0.000.00$0.000.000
12$0.448$55.000—$0.000.00$0.000.00$0.000.000
13$3.7010$370.000—$2.990.81$0.000.00$0.000.001
14$1.139$125.560—$0.000.00$0.000.00$0.000.000
15$2.9311$266.360—$0.000.00$0.000.00$0.000.000
16$3.6414$260.002$1.820$0.000.00$0.000.00$0.000.000
17$3.9129$134.830—$0.000.00$0.000.00$0.000.000
18$2.0625$82.401$2.060$0.000.00$0.000.00$0.000.000
19$5.5743$129.531$5.570$0.000.00$0.000.00$0.000.000
20$2.3923$103.910—$0.000.00$0.000.00$0.000.000
21$4.2823$186.090—$0.000.00$0.000.00$0.000.000
22$3.8633$116.970—$0.000.00$0.000.00$0.000.000
23$4.9546$107.611$4.950$0.000.00$0.000.00$0.000.000

HR1 — $25.83 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.061$60.000—$0.000.00$0.000.00$0.000.000
04$2.4922$113.180—$0.000.00$0.000.00$0.000.000
05$2.2927$84.810—$0.000.00$0.000.00$0.000.000
06$0.519$56.670—$0.000.00$0.000.00$0.000.000
07$0.086$13.331$0.080$4.9962.38$4.9962.38$4.9962.381
08$0.4013$30.770—$0.000.00$0.000.00$0.000.000
09$1.195$238.000—$0.000.00$0.000.00$0.000.000
10$0.8813$67.690—$0.000.00$0.000.00$0.000.000
11$4.4225$176.800—$0.000.00$0.000.00$0.000.000
12$2.6222$119.090—$0.000.00$0.000.00$0.000.000
13$0.857$121.430—$0.000.00$0.000.00$0.000.000
14$1.1013$84.621$1.100$0.000.00$0.000.00$0.000.000
15$1.6321$77.620—$0.000.00$0.000.00$0.000.000
16$2.2211$201.820—$0.000.00$0.000.00$0.000.000
17$1.1512$95.830—$0.000.00$0.000.00$0.000.000
18$0.8611$78.180—$0.000.00$0.000.00$0.000.000
19$1.2017$70.590—$0.000.00$0.000.00$0.000.000
20$0.8213$63.081$0.820$0.000.00$0.000.00$0.000.000
21$0.134$32.500—$0.000.00$0.000.00$0.000.000
22$0.406$66.670—$0.000.00$0.000.00$0.000.000
23$0.538$66.251$0.530$0.000.00$0.000.00$0.000.000

Absent from the table above: nothing. All four accounts carry a derived offset and sit inside the portfolio's hourly sum.

2026-08-20T18:23:23.385966 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 USD Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 1500 2000 2500 3000 impressions Impressions and installs by hour impressions installs 10 15 20 25 30 installs (Meta Leads) The day's motion — whole account, 2026-08-19 (UTC)
The day's motion: spend by hour, and impressions against installs
2026-08-20T18:23:23.512560 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 5 6 7 8 9 10 CTR % CTR 0 4 8 12 16 20 hour (UTC) 6 8 10 12 14 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 6 8 10 12 14 16 18 installs / clicks % Click → install 0 4 8 12 16 20 hour (UTC) 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 USD Cost per install Delivery by hour — whole account, 2026-08-19 (UTC)
CTR, CPM, click-to-install and CPI by hour, whole account

B1's full-funnel hourly table, the one account whose hours the renderer reads as a funnel. Delivery is Meta's on both sides of every ratio.

hrspendimprCPMclicksCTRinstclk→instCPIourscovbookedbROASwithin-daywROAScohort@24hcROASpayers
00$13.481,776$7.59844.73%89.5%$1.68515100%$39.982.97$66.474.93$66.474.937
01$11.451,518$7.54825.40%1113.4%$1.04114100%$67.285.88$32.672.85$32.672.855
02$15.311,975$7.751185.97%2117.8%$0.72928100%$12.160.79$9.320.61$12.720.832
03$17.702,465$7.181425.76%2014.1%$0.88523100%$15.870.90$2.990.17$2.990.173
04$17.253,101$5.561605.16%1911.9%$0.90826100%$32.331.87$0.000.00$0.000.006
05$18.882,879$6.561705.90%2615.3%$0.72628100%$206.5710.94$14.690.78$14.690.788
06$12.262,082$5.89984.71%1414.3%$0.87618100%$30.192.46$11.370.93$46.363.786
07$11.501,163$9.89958.17%99.5%$1.27812100%$53.174.62$0.000.00$0.000.007
08$10.011,552$6.45946.06%1819.1%$0.55622100%$20.962.09$30.213.02$122.3512.223
09$14.952,183$6.851044.76%1110.6%$1.35919100%$43.942.94$7.980.53$7.980.538
10$14.222,153$6.601115.16%1513.5%$0.94818100%$17.171.21$57.144.02$88.056.193
11$19.492,683$7.261435.33%2114.7%$0.92826100%$44.092.26$15.360.79$15.360.794
12$14.502,369$6.121446.08%74.9%$2.07114100%$90.926.27$0.000.00$0.000.008
13$17.042,204$7.731607.26%1710.6%$1.00224100%$60.153.53$0.000.00$12.990.767
14$19.651,410$13.9414310.14%1913.3%$1.03425100%$36.431.85$61.563.13$61.563.138
15$16.852,252$7.481677.42%169.6%$1.05326100%$109.246.48$19.671.17$19.671.179
16$19.392,528$7.671736.84%2313.3%$0.84328100%$31.571.63$20.561.06$20.561.065
17$27.563,349$8.232467.35%3012.2%$0.91935100%$43.881.59$6.040.22$21.500.788
18$19.983,054$6.541936.32%2513.0%$0.79936100%$66.173.31$74.323.72$74.323.726
19$21.222,585$8.211636.31%2012.3%$1.06134100%$77.663.66$0.000.00$15.180.7211
20$20.342,458$8.281747.08%1910.9%$1.07123100%$141.356.95$46.102.27$55.072.7115
21$18.952,438$7.771516.19%1912.6%$0.99728100%$40.742.15$0.000.00$16.550.875
22$12.892,017$6.391155.70%2219.1%$0.58626100%$133.9610.39$25.832.00$45.333.5211
23$14.882,129$6.991155.40%1815.7%$0.82723100%$21.621.45$9.660.65$26.011.755
ALL$399.7554,323$7.363,3456.16%42812.8%$0.934571100%$1,437.393.60$511.921.28$778.371.95117

Against the prior day, hour matched to hour

This pairing is B1's, read off the hourly loader and scoped to the run config's asset map; portfolio_split renders none for the other three accounts.

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-19 ran higherhours it ran lowersign test
CPM9 of 2415 of 24p = 0.307
CTR12 of 2412 of 24p = 1.000
click→install10 of 2414 of 24p = 0.541
CPI12 of 2412 of 24p = 1.000

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

The full hour-by-hour pairing, 2026-08-18 → 2026-08-19

Every shared hour, 2026-08-18 → 2026-08-19. 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,383 → 1,7767.35 → 7.595.58% → 4.73%15.8% → 9.5%0.834 → 1.685
012,214 → 1,5189.77 → 7.544.88% → 5.40%16.7% → 13.4%1.201 → 1.041
022,315 → 1,9757.65 → 7.755.14% → 5.97%16.8% → 17.8%0.886 → 0.729
032,428 → 2,4656.43 → 7.185.64% → 5.76%16.8% → 14.1%0.679 → 0.885
042,460 → 3,1016.53 → 5.566.06% → 5.16%16.1% → 11.9%0.669 → 0.908
052,170 → 2,8797.28 → 6.566.27% → 5.90%12.5% → 15.3%0.929 → 0.726
061,849 → 2,0826.65 → 5.896.11% → 4.71%8.0% → 14.3%1.366 → 0.876
071,812 → 1,1638.44 → 9.896.84% → 8.17%15.3% → 9.5%0.805 → 1.278
081,492 → 1,5527.45 → 6.457.24% → 6.06%17.6% → 19.1%0.585 → 0.556
091,242 → 2,1838.26 → 6.855.72% → 4.76%16.9% → 10.6%0.855 → 1.359
101,690 → 2,1539.93 → 6.606.21% → 5.16%15.2% → 13.5%1.049 → 0.948
112,235 → 2,6837.26 → 7.265.68% → 5.33%13.4% → 14.7%0.955 → 0.928
122,103 → 2,3697.97 → 6.126.47% → 6.08%19.1% → 4.9%0.645 → 2.071
132,251 → 2,2047.75 → 7.735.82% → 7.26%13.7% → 10.6%0.969 → 1.002
141,239 → 1,4109.71 → 13.945.89% → 10.14%17.8% → 13.3%0.925 → 1.034
151,850 → 2,2527.96 → 7.487.03% → 7.42%7.7% → 9.6%1.472 → 1.053
162,478 → 2,5286.92 → 7.676.38% → 6.84%11.4% → 13.3%0.953 → 0.843
172,850 → 3,3497.08 → 8.236.49% → 7.35%16.2% → 12.2%0.673 → 0.919
182,521 → 3,0548.15 → 6.546.58% → 6.32%11.4% → 13.0%1.082 → 0.799
192,177 → 2,5858.95 → 8.215.97% → 6.31%10.8% → 12.3%1.392 → 1.061
201,667 → 2,4587.76 → 8.286.72% → 7.08%14.3% → 10.9%0.809 → 1.071
211,535 → 2,4388.86 → 7.777.04% → 6.19%17.6% → 12.6%0.716 → 0.997
221,764 → 2,01710.33 → 6.395.84% → 5.70%18.4% → 19.1%0.959 → 0.586
231,990 → 2,1297.00 → 6.995.28% → 5.40%26.7% → 15.7%0.497 → 0.827
2026-08-20T18:23:23.659006 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 5 10 15 20 hour (UTC) 5 6 7 8 9 10 CTR % CTR 2026-08-18 2026-08-19 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) 5 10 15 20 25 installs / clicks % Click → install 0 5 10 15 20 hour (UTC) 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 USD Cost per install Delivery by hour — 2026-08-19 against 2026-08-18, shared hours only (UTC)
The same four ratios with the prior day laid over the day, shared hours only

Not one sign test separates, and click→install contradicts the pooled read below: where pooled and unweighted disagree, the mix moved inside the clock.

Five hours hold the whole of it. Hours 00, 07, 09, 12 and 23 clicked flat at 569 against 542 while their installs went 106 to 53, converting 18.63% against 9.78%; the other nineteen read 14.14% against 13.38% on 16.9% more clicks and 10.6% more installs.

Hour 12 is the largest cell, hour 14 the day's oddity: 12's click-to-install collapsed, while 14 bought the smallest, dearest block and clicked it hardest.

3Country, 2026-08-19

2026-08-23T12:43:22.794907 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ US IN MX ID GB PH TR AU MY CL UA DE 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-19 spend within-day revenue
Spend against within-day revenue, by country
2026-08-23T12:43:22.846289 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-19 (report clock)
Cost per install by country

(i) The portfolio by country, 2026-08-19. 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$155.5731.8%3,395$45.8258$2.682$113.810.7323
IN$78.0816.0%10,068$7.76142$0.550$63.970.8216
MX$21.784.5%5,231$4.1647$0.463$12.510.5713
ID$17.683.6%3,349$5.2843$0.411$42.512.405
GB$13.902.8%1,072$12.9620$0.695$73.505.297
PH$11.522.4%7,136$1.6143$0.268$20.251.766
TR$10.382.1%852$12.1719$0.546$43.764.224
AU$9.662.0%464$20.827$1.379$31.573.275
MY$8.881.8%1,947$4.5614$0.635$10.761.213
CL$8.291.7%566$14.676$1.382$0.000.001
UA$7.151.5%581$12.327$1.022$50.067.001
DE$7.131.5%246$28.943$2.375$7.111.006

184 further countries are not listed, $138.79 between them (28.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) $106.33 from Meta 2026-08-18 and $293.62 from Meta 2026-08-19, a measured UTC-day total of $399.95; KBM1 (UTC-7) $19.98 from Meta 2026-08-18 and $43.05 from Meta 2026-08-19, a measured UTC-day total of $63.03; HR1 (UTC+0) needed none, its Meta day IS the UTC day at $25.83. The 1 UTC+0 account above is the control: raking one returns its country export unchanged, and that identity held here. Meta days this run did not pull were taken from the country archive at ad_ops/_data/country_archive/ — HR1 Meta 2026-08-19; KBM1 Meta 2026-08-18, 2026-08-19 — because a UTC-7 day reaches back into the Meta day before it and the run window did not.

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

B1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$78.0819.5%10,068$7.76141$0.554$63.970.8216
US$66.7116.7%2,771$24.0743$1.551$55.860.8417
MX$21.785.4%5,231$4.1646$0.473$12.510.5712
ID$17.684.4%3,349$5.2838$0.465$42.512.404
GB$13.903.5%1,072$12.9620$0.695$73.505.297
PH$11.522.9%7,136$1.6141$0.281$20.251.766
TR$10.382.6%852$12.1717$0.610$24.822.391
AU$9.662.4%464$20.827$1.379$31.573.274
MY$8.882.2%1,947$4.5614$0.635$10.761.212
CL$8.292.1%566$14.676$1.382$0.000.000
UA$7.151.8%581$12.327$1.022$50.067.001
DE$7.131.8%246$28.943$2.375$7.111.006

183 further countries are not listed, $138.79 between them (34.7% of this block).

Nomad Node

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
AR$0.000.0%0—2$0.000$0.00—0
AU$0.000.0%0—0—$0.00—1
AZ$0.000.0%0—0—$0.00—1
BD$0.000.0%0—1$0.000$0.00—0
BR$0.000.0%0—3$0.000$0.00—0
CL$0.000.0%0—0—$0.00—1
ES$0.000.0%0—1$0.000$0.00—0
HU$0.000.0%0—1$0.000$0.00—0
ID$0.000.0%0—5$0.000$0.00—1
IN$0.000.0%0—1$0.000$0.00—0
JO$0.000.0%0—1$0.000$0.00—0
KR$0.000.0%0—1$0.000$0.00—0

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

KBM1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
US$63.03100.0%358$176.0611$5.730$52.960.843

HR1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
US$25.83100.0%266$97.114$6.457$4.990.191

The prior day, 2026-08-18, the same two tables.

(i) The portfolio by country, 2026-08-18. 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$190.9137.3%3,501$54.5349$3.896$137.900.7230
IN$74.8314.6%8,888$8.42168$0.445$127.091.7025
MX$20.113.9%4,583$4.3942$0.479$15.920.795
ID$15.133.0%2,585$5.8540$0.378$12.970.867
GB$14.422.8%1,025$14.0720$0.721$0.000.000
TR$13.422.6%754$17.7918$0.746$0.000.002
MY$11.832.3%2,127$5.5616$0.739$5.380.461
PH$10.402.0%6,585$1.5843$0.242$0.000.002
CL$8.761.7%638$13.7410$0.876$10.671.222
CA$6.961.4%611$11.4012$0.580$4.990.722
FR$6.801.3%510$13.336$1.133$0.000.000
AR$6.721.3%842$7.9812$0.560$0.000.001

181 further countries are not listed, $131.32 between them (25.7% of this block).

Reconciliation, what is measured and what is fitted. Every per-country cell is an allocation across hours; every total is measured. B1 (UTC-7) $116.60 from Meta 2026-08-17 and $266.71 from Meta 2026-08-18, a measured UTC-day total of $383.31; KBM1 (UTC-7) $29.68 from Meta 2026-08-17 and $72.82 from Meta 2026-08-18, a measured UTC-day total of $102.50; HR1 (UTC+0) needed none, its Meta day IS the UTC day at $25.79. The 1 UTC+0 account above is the control: raking one returns its country export unchanged, and that identity held here. Meta days this run did not pull were taken from the country archive at ad_ops/_data/country_archive/ — HR1 Meta 2026-08-18; KBM1 Meta 2026-08-17, 2026-08-18 — because a UTC-7 day reaches back into the Meta day before it and the run window did not.

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

B1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$74.8319.5%8,888$8.42164$0.456$127.091.7023
US$62.6216.3%2,477$25.2835$1.789$67.941.0825
MX$20.115.2%4,583$4.3941$0.490$15.920.794
ID$15.133.9%2,585$5.8528$0.540$0.000.005
GB$14.423.8%1,025$14.0719$0.759$0.000.000
TR$13.423.5%754$17.7917$0.789$0.000.001
MY$11.833.1%2,127$5.5614$0.845$5.380.461
PH$10.402.7%6,585$1.5841$0.254$0.000.002
CL$8.762.3%638$13.748$1.095$10.671.222
CA$6.961.8%611$11.4011$0.633$4.990.722
FR$6.801.8%510$13.336$1.133$0.000.000
AR$6.721.8%842$7.9811$0.611$0.000.001

178 further countries are not listed, $131.32 between them (34.3% of this block).

Nomad Node

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
AR$0.000.0%0—1$0.000$0.00—0
AZ$0.000.0%0—0—$0.00—1
BR$0.000.0%0—5$0.000$5.13—3
CA$0.000.0%0—1$0.000$0.00—0
CL$0.000.0%0—2$0.000$0.00—0
CO$0.000.0%0—3$0.000$0.00—0
CR$0.000.0%0—2$0.000$0.00—0
CZ$0.000.0%0—1$0.000$6.18—1
DK$0.000.0%0—1$0.000$0.00—0
EC$0.000.0%0—1$0.000$0.00—0
GB$0.000.0%0—1$0.000$0.00—0
GT$0.000.0%0—1$0.000$0.00—0

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

KBM1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
US$102.50100.0%667$153.6710$10.250$64.970.632

HR1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
US$25.79100.0%357$72.243$8.597$0.000.000

4Aggregate, both days

(i) The delivery funnel, pooled over both days, B1's only. Every account's export carries the funnel columns; portfolio_split does not read them.

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

spendimpressionsCPMclicksCTRinstallsclick→installCPI
2026-08-18$383.3148,7157.872,9676.09%44515.00%$0.861
2026-08-19$399.7554,3237.363,3456.16%42812.80%$0.934

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

The three measures, portfolio, both days:

measure2026-08-182026-08-19moves?
booked$1,791.97 (3.19)$1,866.87 (3.67)settled
within-day$458.50 (0.82)$597.16 (1.17)never
cohort @ 24h$701.19 (1.25), 100% covered$863.62 (1.70), 100% coveredfrozen, both days
2026-08-20T18:23:23.888024 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 200 400 600 800 1000 1200 1400 USD 3.19 0.87 1.36 3.60 1.28 1.95 the number above each bar is that measure's ROAS against the same day's spend The three revenue measures, 2026-08-18 against 2026-08-19 (UTC) 2026-08-18 2026-08-19
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-19share
2026-08-19$511.9235.6%
2026-08-18$199.9213.9%
2026-08-17$25.861.8%
2026-08-16$42.813.0%
2026-08-15$103.617.2%
2026-08-14$33.352.3%
2026-08-20T18:23:23.934315 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-08-18 2026-08-19 0 200 400 600 800 1000 1200 1400 USD the bottom segment IS the within-day figure: the same number seen twice Booked revenue by the day its payer installed (UTC) the day itself one day earlier two days earlier three days earlier four or more
Booked revenue by the day its payer installed

The six rows above account for 63.8% of B1's booked revenue; the remaining 36.2% came from people who installed before 08-14. That residue is why booked reads 3.69 on an account whose sealed return was 1.28.

(ii) Each measure per account, both days.

2026-08-18 (prior day) — the three measures

accountbookedbROASwithin-daywROAScohort@24hcROASpayerspayer%ARPUARPPU
Portfolio$1,791.973.19$458.500.82$701.191.2513719.9%$2.597$13.08
B1$1,308.703.41$348.280.91$537.991.4011518.7%$2.125$11.38
Nomad Node$418.298.44$45.250.91$58.241.182032.8%$6.857$20.91
KBM1$64.970.63$64.970.63$104.961.02220.0%$6.497$32.48
HR1$0.000.00$0.000.00$0.000.0000.0%$0.000—

2026-08-19 (the day) — the three measures

accountbookedbROASwithin-daywROAScohort@24hcROASpayers (d0)payer% (d0)ARPU (d0)ARPPU (d0)
Portfolio$1,866.873.67$597.161.17$863.621.70558.6%$1.3515$15.70
B1$1,475.973.69$511.921.28$778.371.95508.4%$1.3060$15.57
Nomad Node$292.9714.42$27.291.34$27.291.3427.1%$0.9748$13.65
KBM1$92.951.47$52.960.84$52.960.84218.2%$4.8145$26.48
HR1$4.990.19$4.990.19$4.990.19125.0%$1.2475$4.99

Ranked on within-day the order is the shared buy 1.34, B1 1.28, KBM1 0.84, HR1 0.19; ranked on booked it is the shared buy 14.42, B1 3.69, KBM1 1.47, HR1 0.19. Rank on within-day or cohort@24h, never on booked. The shared buy's 14.42 is $292.97 of booked revenue against $20.31 of spend it had almost stopped making, which is a fortnight of accumulated cohort paying on a day it quit buying. Its 1.34 on within-day rests on $27.29, and only B1's row clears the 16-payer bar, so the ranking above is a direction and the three rows under B1 are not separable from each other.

The mix-neutral account line. Held to 08-18's impression mix the portfolio CPM is $10.18, not $8.91: $1.27 of the $1.31 fall is mix, $0.04 price.

Both proportion tests are on B1's funnel and only one moved: click-to-install fell, CTR did not, and section 2 puts the fall in five hours.

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, because 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 seam section 3 also carries. It bites on B1 and KBM1 at UTC-7 and not on the Nomad pair or HR1 at UTC+0. The payer column is booked payers.

(i) Every campaign the portfolio ran, 2026-08-19.

campaignaccountspendshareimpressionsCPMregistrationscost/regwithin-daywROASpayers
bailingxia_meituan_ww_cvr_260802B1$419.5877.5%56,086$7.48532$0.789$496.741.18103
bailingxia_srfhjyd_ww_cvr_260814KBM1$75.5514.0%547$138.1211$6.868$52.960.703
bailingxia_srfhjyd_ww_cvr_260816HR1$25.834.8%266$97.114$6.458$4.990.191
0814_vl_bailingxia_srfhjyd_maimaiNomad Node$11.912.2%1,373$8.6720$0.596$8.360.703
0818_vl_bailingxia_srfhjyd_maimaiNomad Node$8.401.6%802$10.476$1.400$0.000.001
bailingxia_meituan_ww_cvr_260730B1$0.000.0%0—39$0.000$15.18—13
bailingxia_meituan_t3_cvr_260725B1$0.000.0%0—20$0.000$0.00—3
bailingxia_meituan_t1_cvr_260725B1$0.000.0%0—2$0.000$0.00—0
0814_vl_bailingxia_srfhjyd-rain-chuvaNomad Node$0.000.0%0—1$0.000$0.00—4
bailingxia_meituan_t2_cvr_260725B1$0.000.0%0—1$0.000$0.00—1
bailingxia_meituan_t3_cvr_260723B1$0.000.0%0—1$0.000$0.00—0
0811_vl_bailingxia_srfhjyd-rain-chuvaNomad Node$0.000.0%0—1$0.000$18.93—10
bailingxia_meituan_dach_cvr_260729B1$0.000.0%0—1$0.000$0.00—1

The two rain-chuva campaigns are at exactly $0.00 and both still book, $18.93 on 10 payers and nothing on 4, excluded from every rate above.

Both maimai campaigns roughly halved, $24.83 to $11.91 and $22.87 to $8.40, so the shared buy's fall is spend decisions across four campaigns.

B1's worldwide buy is the cheapest CPM in the portfolio, and the two US-only campaigns belong against its US cell at $25.30, not its $7.48.

(ii) The same, per account, 2026-08-19. B1's own campaign row carries the funnel columns, and sits on the UTC clock.

B1, the funnel version

campaignspendshareimpressionsimpr shareCPMclicksCTRcost/clickinstallsCPIwithin-daywROASpayers
Worldwide$399.75100.0%54,323100.0%7.363,3456.16%$0.120428$0.934$496.741.2439

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

Account CPM $7.87 → $7.36 (-6.5%). Held to 2026-08-18's campaign mix it is $7.36 (-6.5%) — the difference between those two is the campaign mix.

Nomad Node

campaignaccountspendshareimpressionsCPMregistrationscost/regwithin-daywROASpayers
0814_vl_bailingxia_srfhjyd_maimaiNomad Node$11.9158.6%1,373$8.6720$0.596$8.360.703
0818_vl_bailingxia_srfhjyd_maimaiNomad Node$8.4041.4%802$10.476$1.400$0.000.001
0811_vl_bailingxia_srfhjyd-rain-chuvaNomad Node$0.000.0%0—1$0.000$18.93—10
0814_vl_bailingxia_srfhjyd-rain-chuvaNomad Node$0.000.0%0—1$0.000$0.00—4

KBM1

campaignaccountspendshareimpressionsCPMregistrationscost/regwithin-daywROASpayers
bailingxia_srfhjyd_ww_cvr_260814KBM1$75.55100.0%547$138.1211$6.868$52.960.703

HR1

campaignaccountspendshareimpressionsCPMregistrationscost/regwithin-daywROASpayers
bailingxia_srfhjyd_ww_cvr_260816HR1$25.83100.0%266$97.114$6.458$4.990.191

This section carries no chart and no cost-per-click or CPI column: report_charts.py emits nothing for section 5 and portfolio_split renders neither column.

6Every asset, and every campaign

The join is the ad NAME, allowed only because the account is already fixed by campaign_id on our side and by the export on Meta's.

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

assetaccountspendimpressionsCPMregistrationscost/regwithin-daywROAScohort@24hpayers
vid_ww_pool5_15s_9x16_v1B1$419.5856,086$7.48469$0.895$486.941.16$708.8375
vid_ww_pool5_15s_9x16_v2KBM1$75.55547$138.1211$6.868$52.960.70$52.963
vid_ww_bodysuit_10s_9x16_v2HR1$22.42237$94.604$5.605$4.990.22$4.991
nomad-0814-03-maimaiNomad Node$11.911,373$8.6720$0.596$8.360.70$8.363
nomad-0818-03-maimaiNomad Node$8.40802$10.476$1.400$0.000.00$0.001
vid_ww_pool5_15s_9x16_v1HR1$1.7418$96.670—$0.000.00$0.000
vid_ww_pool5_15s_9x16_v2HR1$1.679$185.560—$0.000.00$0.000
vid_ww_bodysuit_10s_9x16_v1B1$0.000—45$0.000$18.17—$33.3523
vid_ww_bikini_10s_9x16_v1B1$0.000—27$0.000$0.00—$12.998
vid_ww_lounge_8s_9x16_v1B1$0.000—16$0.000$6.81—$10.217
vid_ww_spill_8s_9x16_v1 - CopyB1$0.000—12$0.000$0.00—$12.993
vid_utility_6s_9x16_v1B1$0.000—5$0.000$0.00—$0.000
vid_sasian_fishnet_top_6s_9x16_v1B1$0.000—5$0.000$0.00—$0.000
vid_sasian_bikini_6s_9x16_v1B1$0.000—4$0.000$0.00—$0.001
vid_sasian_bodysuit_10s_9x16_v1B1$0.000—3$0.000$0.00—$0.001
vid_sasian_spice5_15s_9x16_v1B1$0.000—3$0.000$0.00—$0.001
nomad-0814-03-rain-chuva-video-01Nomad Node$0.000—1$0.000$0.00—$0.004
vid_de_german_mature_6s_9x16_v1B1$0.000—1$0.000$0.00—$0.000
vid_ww_spill_8s_9x16_v1B1$0.000—1$0.000$0.00—$0.000
vid_control_10s_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_utility_sexy_9x16_v1B1$0.000—1$0.000$0.00—$0.000
vid_ww_mugshot_15s_9x16_v1B1$0.000—1$0.000$0.00—$0.000
nomad-0811-03-rain-chuva-video-01Nomad Node$0.000—1$0.000$18.93—$18.9310
vid_sasian_bikini_10s_9x16_v1B1$0.000—1$0.000$0.00—$0.000
vid_de_german_10s_9x16_v1B1$0.000—0—$0.00—$0.001
vid_latina_es_offshoulder_9x16_v1B1$0.000—0—$0.00—$0.001

The same creative runs in three accounts at four prices — geography, not a creative comparison (DECISION_LOG.md #48).

B1's zero-spend rows still book revenue, the retired tail paying today: vid_ww_bodysuit_10s_9x16_v1 alone took 45 registrations and $18.17 on no spend at all.

⚠ The biggest cohort number is one payer on an ad dark since 08-09: E2/spill2's 08-18 cohort reads $288.08, $145.99 of it inside 24 hours.

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

B1

assetaccountspendimpressionsCPMregistrationscost/regwithin-daywROAScohort@24hpayers
vid_ww_pool5_15s_9x16_v1B1$419.5856,086$7.48469$0.895$486.941.16$708.8375
vid_ww_bodysuit_10s_9x16_v1B1$0.000—45$0.000$18.17—$33.3523
vid_ww_bikini_10s_9x16_v1B1$0.000—27$0.000$0.00—$12.998
vid_ww_lounge_8s_9x16_v1B1$0.000—16$0.000$6.81—$10.217
vid_ww_spill_8s_9x16_v1 - CopyB1$0.000—12$0.000$0.00—$12.993
vid_utility_6s_9x16_v1B1$0.000—5$0.000$0.00—$0.000
vid_sasian_fishnet_top_6s_9x16_v1B1$0.000—5$0.000$0.00—$0.000
vid_sasian_bikini_6s_9x16_v1B1$0.000—4$0.000$0.00—$0.001
vid_sasian_spice5_15s_9x16_v1B1$0.000—3$0.000$0.00—$0.001
vid_sasian_bodysuit_10s_9x16_v1B1$0.000—3$0.000$0.00—$0.001
vid_utility_sexy_9x16_v1B1$0.000—1$0.000$0.00—$0.000
vid_de_german_mature_6s_9x16_v1B1$0.000—1$0.000$0.00—$0.000
vid_ww_spill_8s_9x16_v1B1$0.000—1$0.000$0.00—$0.000
vid_control_10s_9x16_v1B1$0.000—1$0.000$0.00—$0.000
vid_ww_mugshot_15s_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_sasian_bikini_10s_9x16_v1B1$0.000—1$0.000$0.00—$0.000
vid_de_german_10s_9x16_v1B1$0.000—0—$0.00—$0.001
vid_latina_es_offshoulder_9x16_v1B1$0.000—0—$0.00—$0.001

Nomad Node

assetaccountspendimpressionsCPMregistrationscost/regwithin-daywROAScohort@24hpayers
nomad-0814-03-maimaiNomad Node$11.911,373$8.6720$0.596$8.360.70$8.363
nomad-0818-03-maimaiNomad Node$8.40802$10.476$1.400$0.000.00$0.001
nomad-0814-03-rain-chuva-video-01Nomad Node$0.000—1$0.000$0.00—$0.004
nomad-0811-03-rain-chuva-video-01Nomad Node$0.000—1$0.000$18.93—$18.9310

KBM1

assetaccountspendimpressionsCPMregistrationscost/regwithin-daywROAScohort@24hpayers
vid_ww_pool5_15s_9x16_v2KBM1$75.55547$138.1211$6.868$52.960.70$52.963

HR1

assetaccountspendimpressionsCPMregistrationscost/regwithin-daywROAScohort@24hpayers
vid_ww_bodysuit_10s_9x16_v2HR1$22.42237$94.604$5.605$4.990.22$4.991
vid_ww_pool5_15s_9x16_v1HR1$1.7418$96.670—$0.000.00$0.000
vid_ww_pool5_15s_9x16_v2HR1$1.679$185.560—$0.000.00$0.000

The delivering campaigns, one tab each

Four campaigns get a tab, one does not: the bar is 2% of spend ($10.18) and 20 installs, and section 5 names what misses it.

Every funnel below is read off its account's export, because portfolio_split renders no clicks, CTR or Meta installs; they sit on each account's own day.

Showing

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

Structure on this day

One ad set delivered and one ad inside it: ww_broad_purchase_adv_d100_pool5 carrying vid_ww_pool5_15s_9x16_v1, which is E2/pool5, on the eighth day of the single-arm buy. The campaign holds six ad sets and seven ads. The ad-set row is therefore the ad row on this day, a fact about this day's delivery, read off the hourly export by counting ads per ad set for this campaign: 08-19 returns one ad in one ad set across all 24 buckets, where 08-18's export still carried a second row at zero spend.

Delivery, and the funnel

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
E2/pool5$399.7554,3237.363,3456.16%42812.80%$0.934
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/spill$0.000—0—0——
E2/spill2$0.000—0—0——
E2/lounge$0.000—0—0——
2026-08-20T18:23:23.980698 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 CTR % CTR by hour — every asset, 2026-08-19 (UTC) E2/pool5
CTR by hour, one line per asset
2026-08-20T18:23:24.066383 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 installs / clicks % Click → install by hour — every asset, 2026-08-19 (UTC) E2/pool5
Click-to-install by hour, one line per asset
2026-08-20T18:23:24.113377 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 1.6 1.8 2.0 USD Cost per install by hour — every asset, 2026-08-19 (UTC) E2/pool5
Cost per install by hour, one line per asset
2026-08-20T18:23:24.022400 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 USD per 1,000 impressions CPM by hour — every asset, 2026-08-19 (UTC) E2/pool5
CPM by hour, one line per asset

Country

⚠ 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$419.5819.5%16.4%64.1%10.9%
2026-08-20T18:23:24.202215 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-19 (META day) IN US MX ID GB PH other
Where each asset bought: share of its own spend by region
2026-08-20T18:23:24.244364 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 2.00 USD per install Cost per install by region — every asset, 2026-08-19 (META day) IN US MX ID GB PH
Cost per install by region, every asset
2026-08-20T18:23:24.287736 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 0 10 20 30 40 50 60 70 USD Within-day revenue by region — every asset, 2026-08-19 (META day) IN US MX ID GB PH
Within-day revenue by region, every asset

The three 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$894.562.24 (2.87)$486.941.22$708.831.77429.0%1.52416.8810.6%
earner/bodysuit$82.81— (—)$15.18—$30.36—29.5%1.44615.18100.0%
earner/bikini$14.36— (—)$0.00—$12.99—17.1%0.92812.99—
earner/pool5$0.00— (—)$0.00—$0.00—00.0%0.000——
E2/bikini$46.49— (—)$0.00—$0.00—00.0%0.000——
E2/bodysuit$152.47— (—)$2.99—$2.99—14.2%0.1252.99100.0%
E2/mugshot$0.00— (—)$0.00—$0.00—00.0%0.000——
E2/spill$0.00— (—)$0.00—$0.00—00.0%0.000——
E2/spill2$152.54— (—)$0.00—$12.99—18.3%1.08312.99—
E2/lounge$88.41— (—)$6.81—$10.21—318.8%0.6383.4050.0%

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

E2/pool5 is the one row here whose revenue move is a magnitude. Within-day 0.77 → 1.22 on 30 payers against 36; payer rate 6.0% → 7.7%, ARPPU $9.85 → $13.53, cohort@24h ARPU $0.673 → $1.524; largest payer's share 23.0% → 10.6%.

2026-08-20T18:23:24.378671 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-16 08-17 08-18 08-19 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/lounge
Payer rate by day, one line per asset
2026-08-20T18:23:24.426017 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-16 08-17 08-18 08-19 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) E2/pool5 earner/bodysuit E2/bikini E2/bodysuit E2/lounge
ARPU by day, one line per asset
2026-08-20T18:23:24.473230 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-16 08-17 08-18 08-19 day (UTC) 0 2 4 6 8 10 12 14 within-day USD per payer ARPPU by day — every asset (UTC) E2/pool5 earner/bodysuit E2/bikini E2/bodysuit E2/lounge
ARPPU by day, one line per asset
2026-08-20T18:23:24.515060 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-16 08-17 08-18 08-19 day (UTC) 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 revenue / spend Within-day ROAS by day — every asset (UTC) E2/pool5
Within-day ROAS by day, one line per asset
2026-08-20T18:23:24.567099 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-19 E2/pool5
Composite: every asset across every measure, normalised across the day

Delivery is plotted hourly, because CTR, click-to-install, CPI and CPM are single-clock quantities on hundreds to thousands of impressions an hour and the shape is real. 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.

One arm delivered, so no arm comparison exists here. Separating arms by 20% needs 13,000 installs each and the largest here is 8% of that.

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

Structure on this day

bailingxia_srfhjyd_ww_cvr_260814, the account's only campaign, so this tab is also its account block. One ad set delivered and no other appears on the export at all: ww_broad_purchase_adv_d100_pool5_v2 (52630000662887), the rebuild onto the consolidated Hasan1 dataset, carrying vid_ww_pool5_15s_9x16_v2. On 08-18 the older ..._pool5 - Copy still took $1.98; here it takes nothing and returns no row. The pixel cutover this account began on 08-18 is complete.

Delivery, and the funnel

ad setadspendimpressionsCPMclicksCTRinstallsclick→installCPI
..._pool5_v2 (Hasan1)vid_ww_pool5_15s_9x16_v2$75.55547$138.125810.60%1220.7%$6.296
campaign$75.55547$138.125810.60%1220.7%$6.296

Its click rate is 10.60% against B1's 6.23%, its click-to-install 20.7% against 12.79%, on 58 clicks against 3,496. On 08-18 it read 8.80% and 31.9%.

Country

⚠ This campaign's country cut is a META-day cut, while the rest of this page is on the UTC clock. The reconstruction that puts the country section on the report clock is raked per ACCOUNT, against that account's own hourly margin; a campaign has no hourly margin of its own, so this grain cannot follow it. Read it for mix against the sections above, never for level.

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
US$75.55100.0%547$138.1211$6.868$52.960.703

One country, by design: Inclusion: United States. Against B1's US cell at $25.30 it pays 5.5×, where on 08-18 it paid 6.8×.

The three measures

On the UTC day, where the account's spend is $63.03; its own day reads $75.55.

bookedbROASwithin-daywROAScohort@24hcROASpayerspayer%ARPUARPPU
..._ww_cvr_260814$92.951.47$52.960.84$52.960.84327.3%$8.450$30.98

Three payers, and the return fell on the measure that ranks days: within-day rose only because spend fell 38.5%, while revenue went $64.97 to $52.96.

No per-asset charts for this tab: report_charts.py draws its battery from the run config's ads map, which holds B1's ads only. A generator gap.

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

Structure on this day

bailingxia_srfhjyd_ww_cvr_260816, the account's only campaign. All four ad sets still appear on the export, split across two datasets: the two originals on the retired Adjust HR and the two _v2 rebuilds on the consolidated Hasan1.

Delivery, and the funnel

ad setdatasetadspendimpressionsCPMclicksCTRinstallsclick→installCPI
..._bodysuit_v2 6993899602397Hasan1vid_ww_bodysuit_10s_9x16_v2$22.42237$94.602410.13%520.8%$4.484
..._pool5 6993104151797Adjust HR (retired)vid_ww_pool5_15s_9x16_v1$1.7418$96.67738.89%0——
..._pool5_v2 6993898744197Hasan1vid_ww_pool5_15s_9x16_v2$1.679$185.56111.11%0——
..._bodysuit 6993120469997Adjust HR (retired)vid_ww_bodysuit_10s_9x16_v1$0.002$0.00150.00%0——
campaign$25.83266$97.113312.41%515.2%$5.166

⚠ The retired dataset took 85.2% of HR1's money on 08-18 and 6.7% here, leaving $24.09 on Hasan1: the first day it mostly reads there.

Country

⚠ This campaign's country cut is a META-day cut, while the rest of this page is on the UTC clock. The reconstruction that puts the country section on the report clock is raked per ACCOUNT, against that account's own hourly margin; a campaign has no hourly margin of its own, so this grain cannot follow it. Read it for mix against the sections above, never for level.

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
US$25.83100.0%266$97.114$6.458$4.990.191

One country, by design, as in KBM1. Against B1's US cell at $25.30 it pays 3.8×, where on 08-18 it paid 2.9×.

The three measures

bookedbROASwithin-daywROAScohort@24hcROASpayerspayer%ARPUARPPU
..._ww_cvr_260816$4.990.19$4.990.19$4.990.19125.0%$1.248$4.99

Its first payer ever, and one is all there is: $4.99 on $25.83 of spend, $51.62 across two delivering days.

No per-asset charts for this tab, for the same reason as KBM1's: the generator is scoped to B1's ads map.

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

Structure on this day

0814_vl_bailingxia_srfhjyd_maimai, in the shared Nomad Node pair, running one ad, nomad-0814-03-maimai. That campaign is not ours to steer. It is again the largest of the four for this app, and on this day it is one of only two that spent anything.

Delivery, and the funnel

adspendimpressionsCPMclicksCTRinstallsclick→installCPI
nomad-0814-03-maimai$11.911,373$8.671198.67%1714.3%$0.701

⚠ It buys dearer impressions than B1 and cheaper installs, CPM $8.67 against $7.48 and $0.701 an install against $0.939, both worldwide, on 17 installs.

Country

No country cut at campaign grain: this pair's export keys campaigns by Ad set name and country is pulled per account; section 3 carries it.

The three measures

bookedbROASwithin-daywROAScohort@24hcROASpayers
0814_..._maimai——$8.360.70$8.360.703

Three payers, and within-day went 1.37 to 0.70 as spend halved. Booked is not split to campaign grain here; the empty column is not zero.

No per-asset charts for this tab — the chart generator is scoped to B1's ads map.

The campaign with no tab: 0818_vl_bailingxia_srfhjyd_maimai, $8.40 on 62 clicks at a CPM of $10.47 and $1.400 an install, the portfolio's dearest worldwide buy.

7Caveats

⚠⚠ The instrument gate came in from 1.35 to 1.22 and is still outside the 0.91 to 1.06 band, and the movement was again on Meta's side. On the account's own clock, where the check is valid, our records read 1.35 of Meta's booked value on 08-18 and 1.22 on 08-19. Meta's own number went $934.24 to $1,309.53, up 40.2%, while ours went $1,263.59 to $1,596.70, up 26.4%. So 08-18 was a dip in Meta's column, which answers the question the 08-18 page handed forward and leaves a second one standing: no reading since 08-15 has been inside the band at all. Taken one run each, the series reads 0.96 on 08-13, 0.96 on 08-14, 1.01 on 08-15, 1.15 on 08-16, 1.08 on 08-17, 1.35 on 08-18 and 1.22 here. Those were taken at seven different payment cuts and are therefore not strictly comparable to each other, which is the whole reason the recalibration keeps being asked for; 08-18's 1.35 is the exception, having read the same at two cuts a day apart.

⚠ The repurchase-tail explanation now fails in both directions and should be retired. It predicts that a day leaning less on its own fresh cohort reads further from Meta. On the account clock the share of booked revenue coming from the day's own installs went 36.4% on 08-17 to 36.9% on 08-18 to 32.5% here, while the ratio went 1.08 to 1.35 to 1.22. The share fell and the ratio fell with it, which is the opposite of what the account predicts, having already failed on 08-18 by predicting no move at all. No figure in this report depends on the gate, which touches only statements setting our revenue against Meta's; within-day never touches Meta's column.

Both days sit in one budget regime on B1 and the other three accounts are not certified. B1's campaign activity history was re-read for 2026-08-17_2026-08-21 and the rendered range asserted as Aug 17, 2026 – Aug 20, 2026 before any row was read, so the day and its comparison day are both inside the window the page actually rendered. The window returns five rows and all five fall on Aug 20 between 12:11 and 12:15 PT, after the report day, and all five are edits to one ad, with no budget change among them. The estimator names the regime E2-R10 at $450 a day and carries both days inside it. The other three accounts' activity histories were not re-read in this run, so KBM1's 38.5% fall in spend and HR1's flat $25.83 are not certified as regime-matched and nothing here attributes either of them.

The cohort figure is comparable on this page and was not on the last two. The payment cut is 2026-08-21 01:18 UTC, 25.3 hours after 08-19's last install and 49.3 hours after 08-18's, so both cohorts are complete at H=24 and both figures are frozen. A fixed horizon does not drift once covered, which is the point of fixing it. Every day-over-day claim above still rests on within-day first, which is sealed at midnight and needs no horizon at all.

⚠ Two instruments produce B1's figures and they count different populations on purpose, so every figure here has to be read with its label. The per-account tables select on campaign_id and cover every B1 campaign; sections 2, 4 and 6's B1-scoped tables select on Ad ID against the run config's asset map and cover only mapped ads. On this day that is 596 registrations against 571 and $1,475.97 of booked revenue against $1,437.39, the narrower instrument inside the wider one. Within-day is identical either way at $511.92. Neither is wrong and they must not be quoted against each other.

Sections 2 and 4 still carry a B1-only funnel, and the renderer is why. All twenty exports in this run were pulled with the column list pinned onto the request URL and all twenty came back carrying Ad ID, Campaign ID, Link clicks, CTR (link click-through rate) and Leads, verified per file. portfolio_split's hourly, campaign and matched-hours renderers do not read them. Each account's own funnel is therefore in its tab in section 6, read straight off its export, and the pooled funnel and the matched-hours pairing exist for B1 alone. It is the same class of gap as section 5's missing charts.

⚠⚠ 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 read Inclusion: United States in their ad sets and 100% of their delivery resolves there, against roughly 4% for B1 and 3% for the shared pair. B1's own US cell runs a CPM of $25.30 on this day against its account figure of $7.36, 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. Their campaign names say ww; the names are wrong and the ad set is the authority.

⚠ Four new campaign ids appear in our records that belong to no known account, and none of them touches this day. 6994259377597 is bailingxia_srfhjyd_ww_cvr_260819 with 40 rows, 6994329932197 and 120251228633760364 are both bailingxia_srfhjyd_sn_ww_cvr_260820 with 81 and 54, and 52630569815687 is bailingxia_srfhjyd_sn_us_cvr_260820 with 5. Every one of those registrations is stamped 08-20 or 08-21. On 08-19 itself exactly one registration falls outside every account, under 1873306944531618, the same id the 08-18 page named. So this page is unaffected and the next one is not: unless the four are added to ACCOUNTS, the 08-20 report's per-account rows will sum to less than its records hold and will not say by how much.

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, so those cuts cannot be restitched. Read them for mix, never for level. The payer column on those tables counts booked payers, a different population from the one behind the within-day figure beside it.

What clears the 16-payer bar on this page. The portfolio's 143 booked payers and B1's 121; B1's 40 within-day payers and its 50 at cohort@24h. Below the account level, two country cells clear it, the United States at 23 and India at 16, and nothing else does. One asset clears it, E2/pool5 at 36 within-day payers, and one campaign, B1's worldwide buy. Every other revenue figure on the page is a direction.

⚠ 28% of the day's registrations enter no B1-scoped table and 20% enter no account row. The merged ledger holds 797 registrations stamped 2026-08-19. 639 of them resolve to a campaign in a known account, which is the population every per-account table divides by, and 571 resolve to a mapped B1 ad, which is the population sections 2, 4 and 6's B1 tables use. Both are internally consistent, because each divides its payers by the same population it counted its installs from.

The FX table is eighteen days old. Revenue in 33 currencies is converted at rates pulled on 2026-08-02. Two payments on this cut are attributable but unconvertible at that table and the estimator drops seven more for want of a rate. It remains the only named candidate in the instrument reconciliation that has never been tested.

Two of the five hourly exports came back with fewer than 24 buckets, in both cases for hours the account did not deliver in: HR1 returns no row before 03:00 on its own clock and the second Nomad account none at 23:00. B1's two hourly exports carry all 24 buckets each, which is the assertion the account-clock instrument gate depends on.

The five hours named in section 2 were picked by the outcome. That block describes where the pooled click-to-install move sits and does not test it; a subset chosen for falling will fall.

The two rain-chuva campaigns' spend trail: $84.07 and $72.76 on 08-17, $0.91 and $0.93 on 08-18, nothing on this day.

What sits behind the decidability gate on B1's single arm. Regime E2-R10 at $450 a day carries 1,011 installs matured to H=6 and 64 payers, at a coefficient of variation of 5.77. Nothing on this page is a creative read, and nothing will be until a second ad delivers beside pool5.

8What would settle the open questions

Why our records have read above Meta's on every day since 08-16. The 08-18 spike is explained as far as it can be from the page: Meta's own booked value dipped on that one day and came back. The level is not. The recalibration the last four reports have deferred is now the only one of the three named checks that can still discriminate, because the repurchase-tail account has failed in both directions: recompute the ratio across the whole series at one payment cut, restricted to payments from cohorts inside Meta's 7-day click window. Re-pulling the eighteen-day-old FX table is cheaper and worth doing on its own account. Reading Meta's attribution setting on the campaign is the third and costs nothing.

Whether the click-to-install fall is a fact about five hours or about the day. Pooled it is −14.7% at p = 0.011; unweighted across the clock it is 10 of 24 at p = 0.541; and hours 00, 07, 09, 12 and 23 hold all of the difference, on clicks that barely moved. Those five hours were picked because they fell, so the only thing that settles it is whether the same hours fall again on 08-20 and 08-21. If they do, it is a delivery window; if they do not, this was one day.

Whether the United States is worth buying directly, which is now four days old and no clearer. KBM1 has spent $211.74 across 08-16 to 08-19 and its per-day booked payer count has run 0, 0, 2, 3; HR1 has spent $51.62 across two delivering days for seven registrations and a single payer. Over the same four days B1 reached the same country inside a worldwide buy at a within-day return of 1.28, 0.79, 1.09 and 0.81, and at a CPM between a third and a fifth of what the two US-only accounts pay. What would settle it is a payer count, and neither account is close to sixteen. The decision worth making before then is whether to keep paying for the wait.

Whether HR1 on the consolidated pixel is worth anything, which this day still cannot say but the next one can. 6.7% of its money now runs through the retired dataset against 85.2% on 08-18, so the account is nearly clean; but the two retired ad sets are still on and still delivering impressions, and one payer is one payer. Switching those two off is the step that makes 08-20 an unmixed reading. It remains the cheapest open item on the page and the only purely operational one.

Whether this app is being wound down on the shared pair. Spend on it there has gone $183.98 to $49.55 to $20.31 over three days, from four delivering campaigns to two, with both rain-chuva buys now at exactly nothing. Those accounts are not ours to steer, and the answer will not come from an inference off their spend.

The three questions the 08-18 report handed forward all have answers, and two of them are operational. The shared buy did not come back: it fell again, $49.55 to $20.31, and both rain-chuva campaigns are now at exactly $0.00. HR1's ad sets were switched over in substance, the two on the retired Adjust HR dataset having taken $21.98 of $25.79 on 08-18 and $1.74 of $25.83 here, so 93.3% of that account's money now runs on the consolidated pixel. And the instrument gate did not stay at 1.35; it came in to 1.22, which makes 08-18 a spike and leaves the elevated level itself unexplained.

9What this hands to the next read

The 08-20 report inherits a portfolio that is B1 plus two United States experiments: 79% of the spend and 95% of the impressions in one account, a shared buy that has fallen by nine tenths in three days, and two US-only accounts that have between them produced four booked payers on $88.86. It also inherits a day whose sealed return rose 30.2% while its click-to-install fell, and both of those need a second day before either is a trend.

Three things it can settle that this one cannot. Whether hours 00, 07, 09, 12 and 23 fall again, which decides whether the click-to-install move is a delivery window or a single day. Whether the gate keeps coming in from 1.22 or settles above the band, which decides whether the elevated level is separate from the 08-18 spike. And what the three new campaigns do: bailingxia_srfhjyd_ww_cvr_260819 and two _260820 buys, one worldwide and one US, are already producing registrations from 08-20, and bailingxia_srfhjyd_sn_ww_cvr_260820 shows partial delivery with $15.29 spent on the campaign list rendered for Aug 17 – Aug 20. None of their campaign ids is in ACCOUNTS yet.

One more thing lands on 08-20. vid_ww_bodysuit_10s_9x16_v1 had its audience changed at 12:11 PT on 08-20 and Meta returned it to Active at 12:15. It has sat inside B1's worldwide campaign throughout the single-arm buy without taking spend, so whether the account gets a second delivering ad for the first time in eight days is a question for the next page.

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, because those run at UTC+0, where the account day already is the UTC day. The country, campaign and asset tables cannot be restitched at all and are labelled where they appear.

run_runs/2026-08-21_2026-08-19_daily_auto/
the per-account breakdownpython -m ad_ops.portfolio_split --run <run> --day 2026-08-19 --prev 2026-08-18, block portfolio.md; the pull's own status in portfolio_pull.txt, which reports every account exported at every grain
payment cut2026-08-21 01:18 UTC, on the repaired join
Meta exports20 files, all pulled 2026-08-20 18:10–18:21 PT with the column list pinned on every request; all 20 verified per file to carry Ad ID, Campaign ID, Link clicks, CTR (link click-through rate) and Leads. B1 day over 2026-07-01_2026-08-21 returning Jul 1 to Aug 20 and country×day returning Jul 14 to Aug 20; hourly for 08-18 and 08-19 with all 24 buckets asserted on both. KBM1, HR1, Nomad Node ×1 and ×2 each at three grains — day over the same range, country×day over 08-18 to 08-19, hourly for both days
registrationsadjust_sink push merged onto the previous run's ledger — 30,852 rows; 797 stamped 08-19 against 897 on 08-18
paymentsin-app-purchase API, full history, joined onto the export base and repaired on the account UUID. 240 payments on 08-19, 72.9% carrying a payer before repair and 94.6% after; 4,353 in the merged ledger
FX_runs/2026-08-02_today_read/fx_rates.json, pulled 2026-08-02
regimescampaign activity history re-read for 2026-08-17_2026-08-21, rendered range asserted as Aug 17, 2026 – Aug 20, 2026; five rows in the window, all on Aug 20 and all ad edits rather than budget changes, so both days sat in one unchanged regime on B1
python -m ad_ops.daily_pipeline --day 2026-08-19
python -m ad_ops.portfolio_split --run _runs/2026-08-21_2026-08-19_daily_auto \\
    --day 2026-08-19 --prev 2026-08-18

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 it 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. 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 and KBM1 are fixed at UTC-7, so a UTC day on either is Meta day D−1 17:00 to 23:59 plus Meta day D 00:00 to 16:59; the Nomad Node pair and HR1 run at UTC+0, where the reporting day already is the UTC day. 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.

An offset is a setting to be read off the campaign object, and correlation is only the check on it. B1's seven hours are confirmed by correlating its hourly impressions against our own registrations, which recovers k=7 at r = 0.878. KBM1's and HR1's cannot be recovered that way, because the correlation needs an account's own volume and neither has it, so both were read directly off their campaign objects, which Ads Manager stamps in the account's own zone.

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, which is what this day does at booked 3.67 against within-day 1.17. 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.

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 per-account tables print cost/reg rather than CPI for exactly this reason: they divide by our registrations, and the delivery tables divide by Meta's installs.

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, pixvoo and motion 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 regime E2-R10 at $450 a day on B1, whose activity history returns no budget change anywhere in 2026-08-17_2026-08-21. The other three accounts' histories were not re-read in this run and their day-over-day figures are not certified either way.

Internal — noindex. Not for distribution outside the team.