Monthly campaign report — August 2026 to date, against July 2026

Two ad accounts spent $9,239.32 on this app in the first fifteen days of August, against $2,455.00 over the nine days of July that precede them; definitions, the report clock and the three revenue measures are in the appendix.

1Overview

Rates first, because they are the part that compares. The level rows are printed because the report has to reconcile, and their change column is empty by construction.

2026-07-23 → 07-31 (9 days)2026-08-01 → 08-15 (15 days)change
rates — comparable
CPM$7.07$8.24+16.5%
CTR5.80%6.02%+3.8%
click→install22.66%19.54%−13.8%
CPI$0.538$0.700+30.1%
bROAS1.272.28+79.5%
wROAS0.950.97+2.1%
cROAS @ 24h1.101.21+10.0%
within-day payer rate (ours)4.60%4.46%−3.0%
within-day ARPU (ours)0.4620.573+24.0%
within-day ARPPU (ours)10.0612.85+27.7%
levels — 9 days against 15, no comparison available
spend$2,455.00$8,798.18—
impressions347,0581,068,023—
clicks20,12464,309—
installs (Meta)4,56112,563—
registrations (ours)5,06914,819—
booked$3,125.48$20,071.29—
within-day$2,344.02$8,491.30—
cohort @ 24h$2,697.93 at 100%$10,680.69 at 97%—
within-day payers233661—

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.6369$0.9734$1.3199$13.07$17.26$21.8716,703

Portfolio spend $9,239.32. B1 95.2%, the shared Nomad Node accounts 4.8% on five days of the fifteen; sections 3 onward are B1 alone.

Campaign split inside B1: Worldwide 83.8% over thirteen days, the retired earner 13.5% over three, the German buy 2.7% — never simultaneously live.

Impressions and installs both got dearer, and the unweighted hour count agrees: CPM higher in 20 of 24 hours, CPI in 22 of 24.

More people clicked and fewer of them installed: CTR +3.8%, click→install −13.8%, and the unweighted count agrees at 18 of 24 hours lower.

The sealed return barely moved; the booked one nearly doubled on age alone. July's nine days were the account's first, with nothing behind them.

The shared buy leads B1 on both comparable measures and trails on booked, which cannot compare — section 2.

2The two ad accounts, side by side

Both accounts are ours: B1, act 1738541847343652, campaigns bailingxia_; and the two shared Nomad Node accounts, acts 835434076171203 and 3267486106793669, whose campaigns for this app are 0811_ and 0814_*. Those two accounts also carry other products and none of that is counted here. Spend comes from each account's own export; DNU, the daily new users, and the three revenue measures are our own records taken across everything each account's campaigns carried, which is why B1's row here sits a little above the ad-id-scoped totals in the sections below.

accountspendshareDNUsharecost per DNU
B1 (ours)$8,798.1895.2%14,81289.7%$0.594
Nomad Node (shared)$441.144.8%1,71010.3%$0.258
Portfolio$9,239.32100%16,522100%$0.559
accountbookedbROASwithin-daywROAScohort@24hcROASwithin-day per DNU
B1 (ours)$20,076.282.28$8,496.290.97$10,685.681.21$0.574
Nomad Node (shared)$921.512.09$669.741.52$825.681.87$0.392
Portfolio$20,997.782.27$9,166.030.99$11,511.361.25$0.555

The shared buy is five days inside fifteen, so its 4.8% is a start date. Its returns compare; its dollar total does not.

UTC dayspendDNUbookedbROASwithin-daywROAScohort@24hcROAS
2026-08-11$31.7790$41.351.30$41.351.30$41.351.30
2026-08-12$92.26479$119.291.29$119.291.29$156.901.70
2026-08-13$58.21278$209.133.59$146.812.52$185.803.19
2026-08-14$92.48354$190.262.06$100.131.08$150.661.63
2026-08-15$166.42509$361.482.17$262.161.58$290.971.75
window$441.141,710$921.512.09$669.741.52$825.681.87

The shared buy is ramping: $31.77 of a $903.50 portfolio day on 08-11, $166.42 of $663.72 on 08-15. The window figures above under-read it.

Rank the two on within-day and cohort@24h, never on booked. Booked puts B1 ahead 2.28 to 2.09; the measures that cannot inherit reverse it.

The shared side buys new users at 43% of B1's price and each is worth less on landing. Cost is the larger effect.

Both accounts' revenue lands in one record, so only the portfolio row is account-blind (DECISION_LOG.md #64).

The shared accounts' export carries no Ad ID, campaign name, link clicks, leads or country, so sections 3 to 7 are B1 alone.

3Hourly, B1, 2026-08-01 to 2026-08-15

B1 alone, on the report clock. The axis is hour of day pooled across the fifteen days: each bucket holds fifteen clock hours, and the chart has 24 of them. Read it for diurnal shape and never as a sequence. Delivery columns are Meta's instrument on both sides of every ratio; payer rate, ARPU and ARPPU are ours on both sides, and the two install counts are never crossed. ours is our registrations in that bucket and cov is the bucket's cohort coverage at H=24.

hrspendimprCPMclicksCTRinstclk→iCPIourscovbookedbROASwithinwROASwPaycohortcROAS
0$239.0422,43810.651,5777.03%33321.1%$0.718375100%$651.652.73$335.621.4028$341.321.43
1$250.4627,6419.061,8926.84%35118.6%$0.714425100%$721.632.88$595.442.3824$595.442.38
2$285.4932,0478.912,2026.87%44720.3%$0.639547100%$796.262.79$343.851.2029$349.831.23
3$302.9934,1298.882,3016.74%46920.4%$0.646537100%$469.781.55$185.220.6122$193.970.64
4$322.2935,7159.022,3556.59%49020.8%$0.658571100%$652.632.02$453.251.4121$462.071.43
5$354.2938,6599.162,5076.48%54521.7%$0.650627100%$1,043.442.95$285.600.8125$295.140.83
6$358.3537,7719.492,5076.64%55922.3%$0.641647100%$883.992.47$376.031.0530$388.901.09
7$409.8242,2039.712,9236.93%54618.7%$0.751683100%$787.861.92$488.121.1933$522.801.28
8$381.5343,6248.752,8666.57%56119.6%$0.680664100%$907.052.38$450.461.1834$469.221.23
9$414.4847,9148.653,0216.31%61820.5%$0.671729100%$829.622.00$503.871.2232$548.861.32
10$436.8545,7649.552,9236.39%59920.5%$0.729712100%$1,033.612.37$371.440.8526$471.621.08
11$349.9535,9659.732,3256.46%46720.1%$0.74956794%$656.651.88$214.540.6123$415.511.19
12$354.5634,24810.352,2806.66%45019.7%$0.78853393%$541.601.53$399.571.1322$402.631.14
13$360.1736,1629.962,5697.10%51920.2%$0.69462494%$827.002.30$299.720.8332$361.391.00
14$500.57215,4182.325,6452.62%60010.6%$0.83468496%$862.021.72$371.200.7430$464.480.93
15$437.6245,3309.653,4337.57%66319.3%$0.66079895%$892.072.04$264.410.6030$302.080.69
16$445.6449,3079.043,4446.98%66219.2%$0.67378594%$953.802.14$260.120.5831$525.691.18
17$478.3653,0909.013,5396.67%68319.3%$0.70083395%$1,051.512.20$399.900.8431$455.210.95
18$452.6346,1269.813,1196.76%64620.7%$0.70175993%$1,084.032.39$376.900.8328$486.791.08
19$413.0137,08111.142,6367.11%56421.4%$0.73267192%$995.292.41$474.801.1539$583.041.41
20$334.2130,14111.092,2877.59%51122.3%$0.65460195%$899.052.69$211.270.6321$444.601.33
21$332.2526,80712.392,1588.05%48122.3%$0.69153795%$882.512.66$283.440.8527$412.171.24
22$305.9425,65711.921,9877.74%40520.4%$0.75545595%$828.352.71$321.541.0522$723.762.37
23$277.6824,78611.201,8137.31%39421.7%$0.70545594%$819.892.95$225.010.8121$464.191.67
all$8,798.181,068,0238.2464,3096.02%12,56319.5%$0.70014,81997%$20,071.292.28$8,491.300.97661$10,680.691.21

⚠ Hour 14 is almost entirely one hour of one day, the rejected spill build on 2026-08-03 (Caveats).

Pooling fifteen days puts 21 to 39 within-day payers in every bucket, above the 16-payer bar (DECISION_LOG.md #37); no daily's hourly table can.

The cheap hours and the paying hours are the same block — 00 to 09 — and the account spends more outside it.

That coincidence is descriptive and not yet an instruction: these buckets pool four different buys, the earner's three days through the single-arm regime from 08-11.

2026-08-16T16:04:24.497963 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0 100 200 300 400 500 USD hour of day, pooled across the 15 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 25000 50000 75000 100000 125000 150000 175000 200000 225000 impressions Impressions and installs by hour impressions installs 350 400 450 500 550 600 650 700 installs (Meta Leads) The period's motion — whole account, 2026-08-01..2026-08-15 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:04:24.677444 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 3 4 5 6 7 8 CTR % CTR 0 4 8 12 16 20 hour (UTC) 2 4 6 8 10 12 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 12 14 16 18 20 22 installs / clicks % hour of day, pooled across the 15 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) 0.65 0.70 0.75 0.80 USD Cost per install Delivery by hour — whole account, 2026-08-01..2026-08-15 (UTC)
CTR, CPM, click-to-install and CPI by hour, whole account

Against the prior period, hour matched to hour

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

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

metrichours 2026-08-01..2026-08-15 ran higherhours it ran lowersign test
CPM20 of 244 of 24p = 0.002
CTR20 of 244 of 24p = 0.002
click→install6 of 2418 of 24p = 0.023
CPI22 of 242 of 24p = 0.000

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

All four move together and all four clear 0.05: impressions dearer, clicks easier, installs per click harder, installs dearer, almost everywhere on the clock.

CPI rose in 22 of 24 hours on a much larger daily scale than July's; raising the budget here has done this before (DECISION_LOG.md #47).

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

Every shared hour, 2026-07-23..2026-07-31 → 2026-08-01..2026-08-15. All columns are Meta's instrument on both sides of each ratio. Revenue is deliberately absent: per-hour payer counts run 0-3, so an hourly revenue column would be one person's basket read as a rate.

hrimpressionsCPMCTRclick→installCPI
006,100 → 22,4388.68 → 10.656.98% → 7.03%12.2% → 21.1%1.018 → 0.718
0111,489 → 27,6416.53 → 9.065.57% → 6.84%17.3% → 18.6%0.676 → 0.714
0212,061 → 32,0477.10 → 8.915.34% → 6.87%24.5% → 20.3%0.542 → 0.639
0312,005 → 34,1296.56 → 8.885.24% → 6.74%20.5% → 20.4%0.610 → 0.646
0415,385 → 35,7155.55 → 9.025.29% → 6.59%16.1% → 20.8%0.652 → 0.658
0518,425 → 38,6595.92 → 9.165.44% → 6.48%19.7% → 21.7%0.551 → 0.650
0621,582 → 37,7715.41 → 9.495.00% → 6.64%23.3% → 22.3%0.465 → 0.641
0718,695 → 42,2035.70 → 9.715.01% → 6.93%23.4% → 18.7%0.486 → 0.751
0821,051 → 43,6245.53 → 8.754.98% → 6.57%21.8% → 19.6%0.508 → 0.680
0919,698 → 47,9145.88 → 8.655.33% → 6.31%22.8% → 20.5%0.485 → 0.671
1018,397 → 45,7646.48 → 9.555.66% → 6.39%22.6% → 20.5%0.505 → 0.729
1116,121 → 35,9657.22 → 9.735.49% → 6.46%24.1% → 20.1%0.546 → 0.749
1213,499 → 34,2487.96 → 10.355.87% → 6.66%23.2% → 19.7%0.584 → 0.788
1314,218 → 36,1627.82 → 9.965.81% → 7.10%23.4% → 20.2%0.576 → 0.694
1414,017 → 215,4189.23 → 2.325.98% → 2.62%22.7% → 10.6%0.681 → 0.834
1517,713 → 45,3307.97 → 9.656.30% → 7.57%23.8% → 19.3%0.531 → 0.660
1623,992 → 49,3076.91 → 9.045.72% → 6.98%23.3% → 19.2%0.518 → 0.673
1721,681 → 53,0906.90 → 9.016.17% → 6.67%24.0% → 19.3%0.466 → 0.700
1818,533 → 46,1267.17 → 9.816.18% → 6.76%26.2% → 20.7%0.443 → 0.701
1912,340 → 37,0817.57 → 11.147.02% → 7.11%27.8% → 21.4%0.388 → 0.732
206,532 → 30,14112.80 → 11.097.90% → 7.59%29.3% → 22.3%0.554 → 0.654
215,008 → 26,80710.42 → 12.397.71% → 8.05%17.6% → 22.3%0.767 → 0.691
223,492 → 25,65713.66 → 11.929.22% → 7.74%19.9% → 20.4%0.745 → 0.755
235,024 → 24,78612.44 → 11.208.10% → 7.31%23.8% → 21.7%0.644 → 0.705

4Country, 2026-08-01 to 2026-08-22

2026-08-23T13:56:11.162078 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US MX GB ID DE TR PH MY AR CA AU 0 500 1000 1500 2000 2500 USD delivery raked onto the report clock against two measured margins; revenue is the report period Spend against within-day revenue by country — 2026-08-01..2026-08-22 spend within-day revenue
Spend against within-day revenue, by country
2026-08-23T13:56:11.202248 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-01..2026-08-22 (report clock)
Cost per install by country

(i) The portfolio by country, 2026-08-01..2026-08-22. 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$2,624.4522.1%461,238$5.695,592$0.469$2,275.080.87394
US$1,773.2114.9%42,416$41.811,045$1.697$2,381.201.34195
MX$421.483.5%65,193$6.47903$0.467$325.320.7767
GB$409.903.4%17,778$23.06443$0.925$464.871.1337
ID$405.033.4%69,484$5.831,349$0.300$305.810.7643
DE$399.573.4%9,796$40.79242$1.651$258.730.6527
TR$327.602.8%18,517$17.69573$0.572$329.811.0140
PH$297.542.5%123,287$2.411,122$0.265$221.770.7537
MY$265.942.2%41,897$6.35515$0.516$179.070.6735
AR$249.642.1%22,711$10.99570$0.438$181.660.7330
CA$215.631.8%8,909$24.20212$1.017$296.271.3728
AU$206.111.7%6,986$29.51150$1.374$156.270.7620

216 further countries are not listed, $4,304.24 between them (36.2% of this block).

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

B1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$2,564.7422.7%455,514$5.635,027$0.510$1,961.950.76361
US$1,419.4212.5%39,697$35.76900$1.577$2,079.571.47166
MX$413.973.7%64,430$6.43748$0.553$254.160.6158
GB$406.713.6%17,714$22.96417$0.975$452.791.1135
DE$396.943.5%9,743$40.74235$1.689$258.730.6527
ID$389.753.4%66,845$5.83994$0.392$262.910.6734
TR$318.912.8%18,206$17.52484$0.659$272.840.8630
PH$291.832.6%122,324$2.39999$0.292$186.920.6436
MY$259.672.3%41,384$6.27458$0.567$168.310.6532
AR$244.532.2%22,230$11.00507$0.482$166.690.6826
CA$212.701.9%8,842$24.06197$1.080$234.761.1024
AU$201.991.8%6,903$29.26142$1.422$121.990.6018

215 further countries are not listed, $4,198.33 between them (37.1% of this block).

Nomad Node

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$27.2317.6%3,333$8.17523$0.052$313.1311.5031
ID$12.558.1%2,419$5.19355$0.035$42.903.429
US$10.506.8%138$76.0973$0.144$149.7814.2619
KR$7.414.8%184$40.2724$0.309$11.811.592
BR$5.993.9%458$13.08225$0.027$44.007.358
TH$5.893.8%882$6.68203$0.029$87.0314.7811
TW$5.593.6%239$23.3945$0.124$115.8320.728
MX$5.293.4%693$7.63154$0.034$71.1713.459
MY$5.143.3%457$11.2557$0.090$10.762.093
CO$4.352.8%270$16.1159$0.074$0.000.000
CL$3.972.6%252$15.7551$0.078$15.423.883
PH$3.832.5%843$4.54122$0.031$34.869.101

135 further countries are not listed, $57.16 between them (36.9% of this block).

KBM1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
US$265.84100.0%1,713$155.1954$4.923$138.880.527

HR1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
US$77.4548.4%868$89.2318$4.303$12.970.173
IN$32.4820.3%2,391$13.5942$0.773$0.000.002
BR$6.023.8%207$29.0713$0.463$5.130.851
TR$5.123.2%95$53.885$1.024$0.000.000
ID$2.741.7%220$12.450—$0.000.000
CL$2.551.6%40$63.751$2.550$0.000.000
MX$2.221.4%70$31.711$2.220$0.000.000
TH$2.001.2%149$13.425$0.400$0.000.000
AU$1.891.2%32$59.050—$0.000.000
PH$1.881.2%120$15.661$1.880$0.000.000
AR$1.831.1%73$25.062$0.915$0.000.000
IT$1.741.1%27$64.430—$0.000.000

95 further countries are not listed, $22.23 between them (13.9% of this block).

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

5Aggregate, both periods, B1

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

spendimpressionsCPMclicksCTRinstallsclick→installCPI
2026-07-23..2026-07-31$2,455.00347,0587.0720,1245.80%4,56122.66%$0.538
2026-08-01..2026-08-15$8,798.181,068,0238.2464,3096.02%12,56319.54%$0.700

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

Both reads agree: CPM up, CTR up, click→install down, CPI up, so the movement is not a mix effect at the hour grain.

The mix-neutral account line, $14.44 → $8.24 held to July's mix at $11.03, is about two campaigns and not the account (Caveats).

The three measures side by side

measure2026-07-23..07-31 (9 days)2026-08-01..08-15 (15 days)moves after the period closes?
booked$3,125.48 (1.27)$20,071.29 (2.28)settled
within-day$2,344.02 (0.95)$8,491.30 (0.97)never
cohort @ 24h$2,697.93 (1.10) at 100%$10,680.69 (1.21) at 97%still rising on August

Only the bracketed returns compare. The dollar figures are fifteen days against nine.

The three measures disagree; read within-day. Booked's 1.27 to 2.28 is barely buying, and the cohort row is a floor 3% short of coverage.

0.95 to 0.97 is not a movement at this account's daily variance: August's own days run 0.57 to 1.44 and July's 0.39 to 1.71.

Booked revenue by how long its payer had been installed

Over one day this is a split by install date. Over a period it is a split by lag, because the same calendar day is a different age for every payer in it. The top row is the within-day total seen from the other side, which is the identity that makes the split worth drawing.

installed2026-07-23..07-312026-08-01..08-15
the same day$2,344.02 (75.0%)$8,491.30 (42.3%)
1 day earlier$349.19 (11.2%)$2,885.75 (14.4%)
2 days earlier$285.86 (9.1%)$1,744.37 (8.7%)
3 days earlier$74.17 (2.4%)$1,240.99 (6.2%)
4 days earlier$45.44 (1.5%)$1,161.25 (5.8%)
5 days earlier$21.04 (0.7%)$839.19 (4.2%)
6 days earlier$5.76 (0.2%)$874.69 (4.4%)
7 days earlier—$961.35 (4.8%)

Booked revenue arriving from its own day fell 75.0% to 42.3%, mostly on the account's age. Within-day survives it, counting only the same-day row.

August's rows stop at seven days and do not sum to its booked total: the remainder installed over a week out.

2026-08-16T16:04:25.230325 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 2500 5000 7500 10000 12500 15000 17500 20000 USD 1.27 0.95 1.10 2.28 0.97 1.21 the number above each bar is that measure's ROAS against the same period's spend The three revenue measures, 2026-07-23..2026-07-31 against 2026-08-01..2026-08-15 (UTC) 2026-07-23..2026-07-31 2026-08-01..2026-08-15
The three revenue measures on both periods, ROAS above each bar
2026-08-16T16:04:25.286517 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-07-23..2026-07-31 2026-08-01..2026-08-15 0 2500 5000 7500 10000 12500 15000 17500 20000 USD the bottom segment IS the within-day figure: the same number seen twice Booked revenue by how long its payer had been installed (UTC) paid the day they installed one day after two days after three days after four or more days after
Booked revenue by how long its payer had been installed

6B1's campaigns, side by side

B1's campaigns alone.

Delivery is Meta's instrument on both sides of every ratio; every revenue measure is ours. Cohort horizon H=24h. Report clock UTC. Rank on CPM, cost per click and CPI only — geography is the treatment here, which is what makes those comparable across campaigns, while revenue still needs 16 payers (DECISION_LOG.md #37, #48) and a campaign under that bar carries only a direction.

campaignspendshareimpressionsimpr shareCPMclicksCTRcost/clickinstallsCPIwithin-daywROASpayers
Worldwide$7,372.9483.8%922,35486.4%7.9951,9735.63%$0.1429,319$0.791$6,791.420.92501
Earner (retired 08-03)$1,188.4913.5%140,59513.2%8.4511,9888.53%$0.0993,151$0.377$1,530.101.29144
German (DE/AT/CH)$236.752.7%5,0740.5%46.663486.86%$0.68087$2.721$111.080.479

Booking with no delivery, and excluded from every rate above: T1 (Jul 23) 0 installs (Meta), 3 registrations (ours), $0.00 within-day; T2 (Jul 23) 0 installs (Meta), 13 registrations (ours), $0.00 within-day; T3 (Jul 23) 0 installs (Meta), 42 registrations (ours), $0.00 within-day; T1 (Jul 25) 0 installs (Meta), 44 registrations (ours), $4.99 within-day; T2 (Jul 25) 1 installs (Meta), 68 registrations (ours), $0.00 within-day; T3 (Jul 25, India/SEA) 5 installs (Meta), 446 registrations (ours), $53.71 within-day. Counting them would put installs into the CPI denominator against spend that never happened.

Account CPM $14.44 → $8.24 (-42.9%). Held to 2026-07-23..2026-07-31's campaign mix it is $11.03 (-23.6%) — the difference between those two is the mix.

The earner's 13.5% is three days of fifteen, never sharing an hour with the worldwide campaign — 11:20 UTC on 08-03 against 12:44 (asset_performance_report_2026-08-03.md).

The earner is the cheapest line in the table, and both campaigns clear the 16-payer bar, so 1.29 and 0.92 read as levels (DECISION_LOG.md #48).

The German buy costs 5.8 times the account's CPM and 3.9 times its CPI, on 0.5% of impressions. Its 9 payers leave 0.47 a direction.

Retired campaigns are still booking, and the largest, T3 (Jul 25, India/SEA), stopped delivering three weeks ago.

The standing charts for this section plot spend share, CPM and CPI by campaign across the run. They are emitted per campaign into the tabs below.

7Inside B1's campaigns

Structure over the period

Twenty assets took spend across the fifteen days, in three campaigns and across several budget regimes: the published dailies name E2-R6 through E2-R10 inside this period alone, and the earner ran its own before them. The tables in this section pool every one of those regimes, and the budget is a geography dial on this account, so no row below is regime-matched and none of them can settle a comparison between two creatives (DECISION_LOG.md #47, #48). What they can do is describe what the account bought and what came back.

The account's shape changed four times inside the period. It opened on the earner's single CBO ad set holding three creatives; on 08-03 a new campaign of five ad sets, one creative each at $100 a day, replaced it; the five-cell split test ran from 08-06; and from 08-11 20:22 UTC the account ran one arm at $450, bodysuit first and pool5 from 08-12 14:18 account time. Meta rejected spill on 08-03 and spill2 on 08-09 at 13:12 UTC, both under the Adult Sexual Solicitation standard, and both rejections are visible in the delivery table as arms whose spend stops.

A. Per asset — delivery

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
E2/pool5$2,655.20328,6568.0821,3586.50%3,45916.20%$0.768
E2/bodysuit$1,692.76161,75410.479,6105.94%2,23423.25%$0.758
E2/bikini$1,177.14106,77111.027,2936.83%1,52420.90%$0.772
E2/lounge$992.6585,01511.685,7176.72%95216.65%$1.043
earner/bodysuit$650.1682,2587.906,7988.26%1,82326.82%$0.357
E2/spill2$615.5049,44912.454,1918.48%93122.21%$0.661
earner/bikini$421.7647,6968.843,8928.16%1,02826.41%$0.410
E2/mugshot$129.978,06116.127749.60%14418.60%$0.903
earner/pool5$116.5710,64110.951,29812.20%30023.11%$0.389
E2/spill$109.72182,6480.603,0301.66%752.48%$1.463
DEww/bodysuit$76.351,77742.971025.74%3130.39%$2.463
DE/turkish_mature$56.251,03454.40706.77%1420.00%$4.018
DE/german_mature$44.381,01143.90757.42%1824.00%$2.466
DEww/spill2$23.1831872.894112.89%921.95%$2.576
DE/german$14.8726955.28197.06%631.58%$2.478
DEww/bikini$8.2420540.20167.80%318.75%$2.747
DEww/pool5$6.1030719.87154.89%213.33%$3.050
DE/german_6s$5.2010947.7176.42%342.86%$1.733
DE/latina_true$1.793649.7238.33%133.33%$1.790
DE/turkish_6s$0.39848.7500.00%0——

E2/spill is here as a record and not as a result: almost all of it is one hour on 08-03, before the build was rejected.

Three arms cost within 1.4 cents of each other per install on CPMs from 8.08 to 11.02; the cheapest-impression arm took the most spend.

E2/lounge is the one arm dearer per install than the pack, $1.043 against $0.758 to $0.772, on the lowest click→install at 16.65%.

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, 97% covered on this period. Report clock UTC.

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
E2/pool5$6,082.022.29 (2.53)$3,345.181.26$4,070.361.532236.0%0.90015.006.3%
E2/bodysuit$3,472.672.05 (2.14)$1,475.380.87$1,863.981.101214.9%0.60112.199.5%
E2/bikini$1,345.761.14 (1.26)$654.190.56$800.400.68563.3%0.38411.6810.5%
E2/lounge$1,633.741.65 (1.94)$756.030.76$853.260.86535.4%0.76414.2619.9%
earner/bodysuit$2,894.644.45 (3.03)$807.561.24$1,066.731.64823.4%0.3389.856.2%
E2/spill2$1,341.572.18 (2.63)$483.560.79$959.001.56434.3%0.48811.258.8%
earner/bikini$1,161.872.75 (1.57)$593.301.41$634.251.50483.9%0.48212.369.6%
E2/mugshot$63.860.49 (0.63)$17.020.13$22.920.1831.9%0.1065.6737.1%
earner/pool5$356.293.06 (2.45)$129.231.11$135.821.17143.6%0.3299.2327.5%
E2/spill$109.821.00 (0.33)$60.050.55$104.190.9522.2%0.67530.0390.2%
DEww/bodysuit$122.231.60 (0.84)$24.750.32$24.750.32310.7%0.8848.2537.6%
DE/german_mature$64.491.45 (1.33)$58.741.32$58.741.32418.2%2.67014.6943.2%
DE/german$66.924.50 (1.47)$21.851.47$21.851.47116.7%3.64121.85100.0%
DEww/bikini$102.4212.43 (0.70)$5.740.70$5.740.70133.3%1.9155.74100.0%
DE/turkish_mature$5.740.10 (0.10)$0.000.00$0.000.0000.0%0.000——
DEww/spill2 · DEww/pool5 · DE/german_6s · DE/latina_true · DE/turkish_6s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——

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

Seven rows clear the bar, which fifteen days of pooling bought and no daily in this series can.

Clearing the bar makes each row readable and does not rank them: the seven ran in different weeks and budgets, on audiences the auction chose.

E2/pool5 is the largest row here and among the least concentrated: 223 payers, top payer 6.3%, the highest payer rate and ARPPU of the seven.

E2/mugshot is the arm the account was right to cut — the only E2 arm whose delivery and revenue both sit at the bottom.

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$2,733.8521.4%14.3%64.3%23.4%
E2/bodysuit$1,701.6027.2%13.5%59.3%29.5%
E2/bikini$1,181.4028.4%11.7%59.9%27.3%
E2/lounge$995.2317.8%11.5%70.7%14.5%
earner/bodysuit$555.7930.4%5.5%64.0%3.1%
E2/spill2$617.4017.8%12.7%69.5%3.7%
earner/bikini$281.5627.4%5.2%67.4%12.1%
E2/mugshot$130.1831.7%5.4%62.8%29.3%
earner/pool5$116.6026.0%4.9%69.0%0.0%
E2/spill$110.0521.5%4.5%74.0%0.0%
DEww/bodysuit$76.630.0%0.0%100.0%0.0%
DE/turkish_mature$56.350.0%0.0%100.0%—
DE/german_mature$44.500.0%0.0%100.0%0.0%
DEww/spill2$23.180.0%0.0%100.0%—
DE/german$14.910.0%0.0%100.0%0.0%
DEww/bikini$8.240.0%0.0%100.0%0.0%
DEww/pool5$6.100.0%0.0%100.0%—
DE/german_6s$5.330.0%0.0%100.0%—
DE/latina_true$1.790.0%0.0%100.0%—
DE/turkish_6s$0.390.0%0.0%100.0%—

The three E2 arms with volume earn about twice as much in the United States as they spend there; the earner's arms do not.

The E2 arms and the earner's cannot be compared on revenue: they bought different countries, and country is most of the return here (DECISION_LOG.md #47).

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

The period across the run

Money is plotted per day and delivery per hour of day. Money-chart markers are hollow where the point sits under 16 payers, and assets under 20 installs are dropped from the composite and the region charts.

2026-08-16T16:04:26.174001 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0 2 4 6 8 10 12 payers / installs % Payer rate by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge earner/bodysuit E2/spill2 earner/bikini E2/mugshot earner/pool5 E2/spill DEww/bodysuit
Payer rate by day, one line per asset
2026-08-16T16:04:26.287300 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 within-day USD per install ARPU by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge earner/bodysuit E2/spill2 earner/bikini E2/mugshot earner/pool5 E2/spill DEww/bodysuit
ARPU by day, one line per asset
2026-08-16T16:04:26.394814 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0 5 10 15 20 25 30 35 within-day USD per payer ARPPU by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge earner/bodysuit E2/spill2 earner/bikini E2/mugshot earner/pool5 E2/spill DEww/bodysuit
ARPPU by day, one line per asset
2026-08-16T16:04:26.491394 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 revenue / spend Within-day ROAS by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge earner/bodysuit E2/spill2 earner/bikini E2/mugshot earner/pool5 E2/spill DEww/bodysuit
Within-day ROAS by day, one line per asset
2026-08-16T16:04:26.625145 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ CTR click→install CPI payer rate * ARPU * wROAS * 0.0 0.2 0.4 0.6 0.8 1.0 normalised across the period (1.0 = best of the pack) * axis sits under the 16-payer bar on most days: direction only, never a level. Assets under 20 installs on the period are not plotted. Composite — every asset across every measure, 2026-08-01..2026-08-15 E2/pool5 E2/bodysuit E2/bikini E2/lounge earner/bodysuit E2/spill2 earner/bikini E2/mugshot earner/pool5 E2/spill DEww/bodysuit
Composite: every asset across every measure, normalised across the period
2026-08-16T16:04:25.378498 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 CTR % hour of day, pooled across the 15 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-08-01..2026-08-15 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge earner/bodysuit E2/spill2 earner/bikini E2/mugshot earner/pool5
CTR by hour, one line per asset
2026-08-16T16:04:25.527549 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 10 15 20 25 30 35 40 installs / clicks % hour of day, pooled across the 15 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-08-01..2026-08-15 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge earner/bodysuit E2/spill2 earner/bikini E2/mugshot earner/pool5
Click-to-install by hour, one line per asset
2026-08-16T16:04:25.610153 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.2 0.4 0.6 0.8 1.0 1.2 1.4 USD hour of day, pooled across the 15 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-08-01..2026-08-15 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge earner/bodysuit E2/spill2 earner/bikini E2/mugshot earner/pool5
Cost per install by hour, one line per asset
2026-08-16T16:04:25.448006 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 USD per 1,000 impressions hour of day, pooled across the 15 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-08-01..2026-08-15 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge earner/bodysuit E2/spill2 earner/bikini E2/mugshot earner/pool5
CPM by hour, one line per asset

Three campaigns delivered in this period and each carries the same battery below, in the same order. The tabs hold depth; every claim this report makes is in sections 1 to 7 above or in Caveats.

Showing

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

$7,372.94, 83.8% of B1's spend, over the thirteen days from 08-03. Seven assets, all E2/*.

Hourly, and against the prior period

Hour of day pooled across the fifteen days of the period.

There is no matched-hours comparison for this campaign, which was built on 08-03: No hour was delivered in by both 2026-07-23..2026-07-31 and 2026-08-01..2026-08-15 above the impression floor, so there is no matched-hours comparison to make.

2026-08-16T16:05:39.702353 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0 100 200 300 400 USD hour of day, pooled across the 15 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 25000 50000 75000 100000 125000 150000 175000 200000 impressions Impressions and installs by hour impressions installs 300 350 400 450 500 550 installs (Meta Leads) The period's motion — whole account, 2026-08-01..2026-08-15 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:05:39.874104 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 3 4 5 6 7 8 CTR % CTR 0 4 8 12 16 20 hour (UTC) 2 4 6 8 10 12 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 8 10 12 14 16 18 20 22 installs / clicks % hour of day, pooled across the 15 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) 0.70 0.75 0.80 0.85 0.90 0.95 1.00 USD Cost per install Delivery by hour — Worldwide, 2026-08-01..2026-08-15 (UTC)
CTR, CPM, click-to-install and CPI by hour, Worldwide

Aggregate, both periods

No pooled funnel either, for the same reason: No hour was delivered in by both 2026-07-23..2026-07-31 and 2026-08-01..2026-08-15, so there is no matched-hours funnel.

2026-08-16T16:05:40.207347 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 2000 4000 6000 8000 10000 12000 14000 USD 0.00 0.00 0.00 1.91 0.92 1.18 the number above each bar is that measure's ROAS against the same period's spend The three revenue measures, 2026-07-23..2026-07-31 against 2026-08-01..2026-08-15 (UTC) 2026-07-23..2026-07-31 2026-08-01..2026-08-15
The three revenue measures on both periods, ROAS above each bar
2026-08-16T16:05:40.257799 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-07-23..2026-07-31 2026-08-01..2026-08-15 0 2000 4000 6000 8000 10000 12000 14000 USD the bottom segment IS the within-day figure: the same number seen twice Booked revenue by how long its payer had been installed (UTC) paid the day they installed one day after two days after three days after four or more days after
Booked revenue by how long its payer had been installed

A. Per asset — delivery

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
E2/pool5$2,655.20328,6568.0821,3586.50%3,45916.20%$0.768
E2/bodysuit$1,692.76161,75410.479,6105.94%2,23423.25%$0.758
E2/bikini$1,177.14106,77111.027,2936.83%1,52420.90%$0.772
E2/lounge$992.6585,01511.685,7176.72%95216.65%$1.043
E2/spill2$615.5049,44912.454,1918.48%93122.21%$0.661
E2/mugshot$129.978,06116.127749.60%14418.60%$0.903
E2/spill$109.72182,6480.603,0301.66%752.48%$1.463

Spend concentrates in one arm and the concentration grew: E2/pool5 took more than the next two together, and has run alone since 08-12.

E2/spill2 bought the cheapest installs of the surviving arms, at $0.661 and the highest CTR, and Meta stopped it on 08-09.

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, 96% covered on this period. Report clock UTC.

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
E2/pool5$6,082.022.29 (2.53)$3,345.181.26$4,070.361.532236.0%0.90015.006.3%
E2/bodysuit$3,472.672.05 (2.14)$1,475.380.87$1,863.981.101214.9%0.60112.199.5%
E2/bikini$1,345.761.14 (1.26)$654.190.56$800.400.68563.3%0.38411.6810.5%
E2/lounge$1,633.741.65 (1.94)$756.030.76$853.260.86535.4%0.76414.2619.9%
E2/spill2$1,341.572.18 (2.63)$483.560.79$959.001.56434.3%0.48811.258.8%
E2/mugshot$63.860.49 (0.63)$17.020.13$22.920.1831.9%0.1065.6737.1%
E2/spill$109.821.00 (0.33)$60.050.55$104.190.9522.2%0.67530.0390.2%

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

Payer rate separates these arms and cost per install does not: 6.0% down to 3.3%, against CPIs within a few cents of each other.

That is a description and not a creative verdict: the arms ran at different budgets in different weeks, and the budget selects the country mix.

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$2,733.8521.4%14.3%64.3%23.4%
E2/bodysuit$1,701.6027.2%13.5%59.3%29.5%
E2/bikini$1,181.4028.4%11.7%59.9%27.3%
E2/lounge$995.2317.8%11.5%70.7%14.5%
E2/spill2$617.4017.8%12.7%69.5%3.7%
E2/mugshot$130.1831.7%5.4%62.8%29.3%
E2/spill$110.0521.5%4.5%74.0%0.0%

India share and payer rate run opposite here: bikini buys the most India and pays least often, against section 4's India at 0.74 within-day.

2026-08-16T16:05:40.055118 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US MX GB ID TR PH AR MY CA AU FR 0 250 500 750 1000 1250 1500 1750 USD spend and installs are a META-day cut (no hour x country grid exists); revenue is the report period Spend against within-day revenue by country — 2026-08-01..2026-08-15 spend within-day revenue
Spend against within-day revenue, by country
2026-08-16T16:05:40.113756 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US MX GB ID TR PH AR MY CA AU FR 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 country — 2026-08-01..2026-08-15 (META days)
Cost per install by country
2026-08-16T16:05:40.662608 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-08-01..2026-08-15 (META days) IN US MX GB ID TR other
Where each asset bought: share of its own spend by region
2026-08-16T16:05:40.728030 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill 0 1 2 3 4 5 6 USD per install Cost per install by region — every asset, 2026-08-01..2026-08-15 (META days) IN US MX GB ID TR
Cost per install by region, every asset
2026-08-16T16:05:40.796772 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill 0 100 200 300 400 500 600 700 800 USD Within-day revenue by region — every asset, 2026-08-01..2026-08-15 (META days) IN US MX GB ID TR
Within-day revenue by region, every asset

The campaign across the period

2026-08-16T16:05:41.016965 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0 2 4 6 8 10 payers / installs % Payer rate by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill
Payer rate by day, one line per asset
2026-08-16T16:05:41.114659 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 within-day USD per install ARPU by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill
ARPU by day, one line per asset
2026-08-16T16:05:41.197872 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0 5 10 15 20 25 30 35 within-day USD per payer ARPPU by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill
ARPPU by day, one line per asset
2026-08-16T16:05:41.284331 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 revenue / spend Within-day ROAS by day — every asset (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill
Within-day ROAS by day, one line per asset
2026-08-16T16:05:41.396863 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ CTR click→install CPI payer rate * ARPU * wROAS * 0.0 0.2 0.4 0.6 0.8 1.0 normalised across the period (1.0 = best of the pack) * axis sits under the 16-payer bar on most days: direction only, never a level. Assets under 20 installs on the period are not plotted. Composite — every asset across every measure, 2026-08-01..2026-08-15 E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot E2/spill
Composite: every asset across every measure, normalised across the period
2026-08-16T16:05:40.336749 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 5 6 7 8 9 10 11 12 CTR % hour of day, pooled across the 15 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-08-01..2026-08-15 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot
CTR by hour, one line per asset
2026-08-16T16:05:40.463565 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 10 15 20 25 30 installs / clicks % hour of day, pooled across the 15 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-08-01..2026-08-15 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot
Click-to-install by hour, one line per asset
2026-08-16T16:05:40.528699 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.6 0.8 1.0 1.2 1.4 USD hour of day, pooled across the 15 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-08-01..2026-08-15 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot
Cost per install by hour, one line per asset
2026-08-16T16:05:40.399347 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 8 10 12 14 16 USD per 1,000 impressions hour of day, pooled across the 15 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-08-01..2026-08-15 (UTC) E2/pool5 E2/bodysuit E2/bikini E2/lounge E2/spill2 E2/mugshot
CPM by hour, one line per asset

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

$1,188.49, 13.5% of B1's spend, over three days. Three assets in one CBO ad set, all delivering together, which is why the ad is the level that separates here and the ad-set row would be the whole campaign.

Hourly, and against the prior period

Hour of day pooled across the fifteen days of the period. This campaign delivered on three of those fifteen days, so its buckets hold three clock hours each, and they are the first three days of the month.

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

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

metrichours 2026-08-01..2026-08-15 ran higherhours it ran lowersign test
CPM1 of 2221 of 22p = 0.000
CTR2 of 2220 of 22p = 0.000
click→install4 of 2218 of 22p = 0.004
CPI13 of 229 of 22p = 0.523

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

The one campaign in both periods says the opposite of the account: cheaper impressions against the account's dearer. The account rate is what August bought.

Cheaper impressions bought worse ones, and the two cancel: CPI is the one row of the four that does not separate.

2026-08-16T16:05:43.474256 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0 20 40 60 80 100 120 USD hour of day, pooled across the 15 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 2000 4000 6000 8000 10000 12000 14000 16000 impressions Impressions and installs by hour impressions installs 50 100 150 200 250 300 installs (Meta Leads) The period's motion — whole account, 2026-08-01..2026-08-15 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:05:43.671517 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 7 8 9 10 11 CTR % CTR 0 4 8 12 16 20 hour (UTC) 7 8 9 10 11 12 13 14 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 20 25 30 35 40 installs / clicks % hour of day, pooled across the 15 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) 0.25 0.30 0.35 0.40 0.45 USD Cost per install Delivery by hour — Earner (retired 08-03), 2026-08-01..2026-08-15 (UTC)
CTR, CPM, click-to-install and CPI by hour, Earner (retired 08-03)
2026-08-16T16:05:43.847192 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 5 10 15 20 hour (UTC) 8 10 12 14 CTR % CTR 2026-07-23..2026-07-31 2026-08-01..2026-08-15 0 5 10 15 20 hour (UTC) 8 10 12 14 16 USD per 1,000 impressions CPM 0 5 10 15 20 hour (UTC) 20 25 30 35 40 45 installs / clicks % hour of day, pooled across the 15 days of the period — a pooling, not a timeline Click → install 0 5 10 15 20 hour (UTC) 0.25 0.30 0.35 0.40 0.45 USD Cost per install Delivery by hour — 2026-08-01..2026-08-15 against 2026-07-23..2026-07-31, shared hours only (UTC)
The same four ratios with the prior period laid over the period, shared hours only
The full hour-by-hour pairing, 2026-07-23..2026-07-31 → 2026-08-01..2026-08-15

Every shared hour, 2026-07-23..2026-07-31 → 2026-08-01..2026-08-15. 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
00684 → 1,16913.23 → 10.1415.06% → 11.12%36.9% → 34.6%0.238 → 0.263
01823 → 3,44711.62 → 7.5613.12% → 9.66%32.4% → 19.8%0.273 → 0.395
02794 → 5,32412.91 → 6.9611.96% → 9.39%35.8% → 24.8%0.301 → 0.299
03623 → 5,33412.10 → 7.3813.00% → 9.00%28.4% → 25.2%0.328 → 0.325
06998 → 7,25411.96 → 9.3912.32% → 8.40%34.1% → 29.6%0.284 → 0.378
07700 → 9,25314.13 → 8.1514.71% → 7.92%35.0% → 23.5%0.275 → 0.438
08699 → 12,79512.93 → 7.5312.59% → 7.55%34.1% → 23.6%0.301 → 0.422
09893 → 16,14312.74 → 7.5312.88% → 7.32%38.3% → 24.5%0.259 → 0.420
10871 → 13,23916.08 → 8.7112.40% → 7.67%32.4% → 24.9%0.400 → 0.456
11944 → 4,16514.42 → 8.8412.50% → 9.44%30.5% → 32.3%0.378 → 0.290
121,075 → 3,64613.73 → 10.7311.63% → 9.27%36.0% → 29.9%0.328 → 0.387
131,142 → 5,22113.95 → 9.259.89% → 9.96%37.2% → 26.0%0.379 → 0.358
141,369 → 5,75313.74 → 8.7310.96% → 9.89%34.0% → 28.5%0.369 → 0.310
151,841 → 6,12212.63 → 8.3110.43% → 9.64%30.2% → 24.9%0.401 → 0.346
162,940 → 7,2017.97 → 7.918.98% → 9.30%27.7% → 23.4%0.321 → 0.363
173,319 → 7,1378.60 → 7.149.40% → 8.11%25.6% → 28.0%0.357 → 0.314
182,480 → 5,01110.12 → 7.709.40% → 6.71%26.2% → 31.0%0.411 → 0.371
191,795 → 2,96811.72 → 11.3212.03% → 10.31%33.3% → 26.1%0.292 → 0.420
201,319 → 2,00812.90 → 13.5313.80% → 8.86%33.0% → 32.6%0.284 → 0.468
211,233 → 1,72015.30 → 13.7613.14% → 11.69%30.2% → 34.3%0.385 → 0.343
221,240 → 1,30214.53 → 13.8912.82% → 10.75%30.2% → 27.9%0.375 → 0.464
231,424 → 1,30414.85 → 10.3413.83% → 9.89%44.7% → 40.3%0.240 → 0.259

Aggregate, both periods

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

spendimpressionsCPMclicksCTRinstallsclick→installCPI
2026-07-23..2026-07-31$352.1829,20612.063,34711.46%1,08032.27%$0.326
2026-08-01..2026-08-15$1,078.72127,5168.4610,8978.55%2,87126.35%$0.376
  • click → install 32.27% → 26.35% (-18.3%, p = 0.000) — fell.
  • CTR 11.46% → 8.55% (-25.4%, p = 0.000) — fell.

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

Both reads agree and both fall, so this is not a mix effect — more impressions for less money, worse response from each.

2026-08-16T16:05:44.125886 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 1000 2000 3000 4000 USD 1.65 1.65 1.92 3.71 1.29 1.55 the number above each bar is that measure's ROAS against the same period's spend The three revenue measures, 2026-07-23..2026-07-31 against 2026-08-01..2026-08-15 (UTC) 2026-07-23..2026-07-31 2026-08-01..2026-08-15
The three revenue measures on both periods, ROAS above each bar
2026-08-16T16:05:44.169721 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-07-23..2026-07-31 2026-08-01..2026-08-15 0 1000 2000 3000 4000 USD the bottom segment IS the within-day figure: the same number seen twice Booked revenue by how long its payer had been installed (UTC) paid the day they installed one day after two days after three days after four or more days after
Booked revenue by how long its payer had been installed

A. Per asset — delivery

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
earner/bodysuit$650.1682,2587.906,7988.26%1,82326.82%$0.357
earner/bikini$421.7647,6968.843,8928.16%1,02826.41%$0.410
earner/pool5$116.5710,64110.951,29812.20%30023.11%$0.389

CBO put 55% of the set's money on one ad and 10% on another, in CPM order: pool5 had the best CTR, the worst CPM.

Cost per install is flat across the three at $0.357 to $0.410, so the concentration is not separating them on the metric the account buys.

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, 99% covered on this period. Report clock UTC.

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
earner/bodysuit$2,894.644.45 (3.03)$807.561.24$1,066.731.64823.4%0.3389.856.2%
earner/bikini$1,161.872.75 (1.57)$593.301.41$634.251.50483.9%0.48212.369.6%
earner/pool5$356.293.06 (2.45)$129.231.11$135.821.17143.6%0.3299.2327.5%

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

Two of the three clear the bar at 1.24 and 1.41 within-day, above every worldwide arm except pool5. earner/pool5, at 14 payers, is a direction.

The widest gap between our booked column and Meta's sits here: these three days are the oldest and inherit payments from before the period opened.

C. Per asset — country mix

⚠ This table is cut on the META day, while every other table on this page is on the UTC clock. Meta serves no hour × country grid, so per-country delivery exists only on the ad account's own UTC-7 day and cannot be restitched. It is a seven-hour-offset window against tables A and B above; read it for mix, never for level against them.

The last column is the share of that asset's own within-day revenue that came from the United States: where it far exceeds the US spend share, the return is a property of the geography the asset bought.

assetspendIndia %US %other %US % of its revenue
earner/bodysuit$555.7930.4%5.5%64.0%3.1%
earner/bikini$281.5627.4%5.2%67.4%12.1%
earner/pool5$116.6026.0%4.9%69.0%0.0%

This campaign bought almost no United States and earned almost nothing there. Its returns came from a cheaper, more India-weighted mix than the worldwide arms'.

2026-08-16T16:05:43.985099 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US BR ID TR MY GB PH MX DE IT PL 0 50 100 150 200 250 300 350 USD spend and installs are a META-day cut (no hour x country grid exists); revenue is the report period Spend against within-day revenue by country — 2026-08-01..2026-08-15 spend within-day revenue
Spend against within-day revenue, by country
2026-08-16T16:05:44.037851 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US BR ID TR MY GB PH MX DE IT PL 0.0 0.2 0.4 0.6 0.8 USD per install Cost per install by country — 2026-08-01..2026-08-15 (META days)
Cost per install by country
2026-08-16T16:05:44.519432 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/bikini earner/pool5 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-08-01..2026-08-15 (META days) IN US BR ID TR MY other
Where each asset bought: share of its own spend by region
2026-08-16T16:05:44.574888 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/bikini earner/pool5 0.0 0.2 0.4 0.6 0.8 USD per install Cost per install by region — every asset, 2026-08-01..2026-08-15 (META days) IN US BR ID TR MY
Cost per install by region, every asset
2026-08-16T16:05:44.634307 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/bikini earner/pool5 0 25 50 75 100 125 150 175 200 USD Within-day revenue by region — every asset, 2026-08-01..2026-08-15 (META days) IN US BR ID TR MY
Within-day revenue by region, every asset

The campaign across the period

2026-08-16T16:05:44.796230 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0 1 2 3 4 5 payers / installs % Payer rate by day — every asset (UTC) earner/bodysuit earner/bikini earner/pool5
Payer rate by day, one line per asset
2026-08-16T16:05:44.858758 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0.0 0.1 0.2 0.3 0.4 0.5 0.6 within-day USD per install ARPU by day — every asset (UTC) earner/bodysuit earner/bikini earner/pool5
ARPU by day, one line per asset
2026-08-16T16:05:44.921307 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0 2 4 6 8 10 12 14 within-day USD per payer ARPPU by day — every asset (UTC) earner/bodysuit earner/bikini earner/pool5
ARPPU by day, one line per asset
2026-08-16T16:05:44.985043 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0.6 0.8 1.0 1.2 1.4 1.6 1.8 revenue / spend Within-day ROAS by day — every asset (UTC) earner/bodysuit earner/bikini earner/pool5
Within-day ROAS by day, one line per asset
2026-08-16T16:05:45.067747 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ CTR click→install CPI payer rate * ARPU * wROAS * 0.0 0.2 0.4 0.6 0.8 1.0 normalised across the period (1.0 = best of the pack) * axis sits under the 16-payer bar on most days: direction only, never a level. Assets under 20 installs on the period are not plotted. Composite — every asset across every measure, 2026-08-01..2026-08-15 earner/bodysuit earner/bikini earner/pool5
Composite: every asset across every measure, normalised across the period
2026-08-16T16:05:44.236091 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 8 10 12 14 16 CTR % hour of day, pooled across the 15 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-08-01..2026-08-15 (UTC) earner/bodysuit earner/bikini earner/pool5
CTR by hour, one line per asset
2026-08-16T16:05:44.352716 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 20 25 30 35 40 installs / clicks % hour of day, pooled across the 15 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-08-01..2026-08-15 (UTC) earner/bodysuit earner/bikini earner/pool5
Click-to-install by hour, one line per asset
2026-08-16T16:05:44.410330 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.25 0.30 0.35 0.40 0.45 0.50 0.55 USD hour of day, pooled across the 15 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-08-01..2026-08-15 (UTC) earner/bodysuit earner/bikini earner/pool5
Cost per install by hour, one line per asset
2026-08-16T16:05:44.294596 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 6 7 8 9 10 11 12 13 14 USD per 1,000 impressions hour of day, pooled across the 15 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-08-01..2026-08-15 (UTC) earner/bodysuit earner/bikini earner/pool5
CPM by hour, one line per asset

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

$236.75, 2.7% of B1's spend, 5,074 impressions, 87 installs. Two ad sets, DE/ and DEww/, and eleven assets between them.

Hourly, and against the prior period

Hour of day pooled across the fifteen days of the period.

No matched-hours comparison here either, and the reason is size: 5,074 impressions across fifteen days leave every bucket under the 750-impression floor. No hour was delivered in by both 2026-07-23..2026-07-31 and 2026-08-01..2026-08-15 above the impression floor, so there is no matched-hours comparison to make.

2026-08-16T16:05:46.991801 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0 USD hour of day, pooled across the 15 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 100 150 200 250 300 350 400 450 impressions Impressions and installs by hour impressions installs 0 1 2 3 4 5 6 7 8 installs (Meta Leads) The period's motion — whole account, 2026-08-01..2026-08-15 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:05:47.153091 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) −0.04 −0.02 0.00 0.02 0.04 CTR % CTR 0 4 8 12 16 20 hour (UTC) −0.04 −0.02 0.00 0.02 0.04 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) −0.04 −0.02 0.00 0.02 0.04 installs / clicks % hour of day, pooled across the 15 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) −0.04 −0.02 0.00 0.02 0.04 USD Cost per install Delivery by hour — German (DE/AT/CH), 2026-08-01..2026-08-15 (UTC)
CTR, CPM, click-to-install and CPI by hour, German (DE/AT/CH)

Aggregate, both periods

No pooled funnel either, for the same reason: No hour was delivered in by both 2026-07-23..2026-07-31 and 2026-08-01..2026-08-15, so there is no matched-hours funnel.

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

A. Per asset — delivery

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

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

Every row here is under twenty installs except the top one at 31 — read it for what Meta chose to deliver.

The cheapest impressions here are 2.4 times the account's CPM, and the rest run 40.20 to 72.89.

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, 99% covered on this period. Report clock UTC.

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

No row clears the bar, and neither does the campaign at 9 payers: no German cell has ever cleared it in this account's history.

DEww/bikini reads 12.43 booked against Meta's 0.70: the smallest denominator in the report meeting an inherited payment, on $8.24 of spend.

C. Per asset — country mix

⚠ This table is cut on the META day, while every other table on this page is on the UTC clock. Meta serves no hour × country grid, so per-country delivery exists only on the ad account's own UTC-7 day and cannot be restitched. It is a seven-hour-offset window against tables A and B above; read it for mix, never for level against them.

The last column is the share of that asset's own within-day revenue that came from the United States: where it far exceeds the US spend share, the return is a property of the geography the asset bought.

assetspendIndia %US %other %US % of its revenue
DEww/bodysuit$76.630.0%0.0%100.0%0.0%
DE/turkish_mature$56.350.0%0.0%100.0%—
DE/german_mature$44.500.0%0.0%100.0%0.0%
DEww/spill2$23.180.0%0.0%100.0%—
DE/german$14.910.0%0.0%100.0%0.0%
DEww/bikini$8.240.0%0.0%100.0%0.0%
DEww/pool5$6.100.0%0.0%100.0%—
DE/german_6s$5.330.0%0.0%100.0%—
DE/latina_true$1.790.0%0.0%100.0%—
DE/turkish_6s$0.390.0%0.0%100.0%—

Every row reads 0.0% India, 0.0% US, 100.0% other, which is the geo targeting working and leaves no mix comparison to make.

2026-08-16T16:05:47.300485 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ DE AT 0 25 50 75 100 125 150 175 200 USD spend and installs are a META-day cut (no hour x country grid exists); revenue is the report period Spend against within-day revenue by country — 2026-08-01..2026-08-15 spend within-day revenue
Spend against within-day revenue, by country
2026-08-16T16:05:47.335264 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ DE AT 0.0 0.5 1.0 1.5 2.0 2.5 USD per install Cost per install by country — 2026-08-01..2026-08-15 (META days)
Cost per install by country
2026-08-16T16:05:47.767446 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ DEww/bodysuit 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-08-01..2026-08-15 (META days) DE AT other
Where each asset bought: share of its own spend by region
2026-08-16T16:05:47.801474 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ DEww/bodysuit 0.0 0.5 1.0 1.5 2.0 2.5 USD per install Cost per install by region — every asset, 2026-08-01..2026-08-15 (META days) DE AT
Cost per install by region, every asset
2026-08-16T16:05:47.837057 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ DEww/bodysuit 0 2 4 6 8 10 12 14 16 USD Within-day revenue by region — every asset, 2026-08-01..2026-08-15 (META days) DE AT
Within-day revenue by region, every asset

The campaign across the period

2026-08-16T16:05:47.942093 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0 2 4 6 8 10 12 payers / installs % Payer rate by day — every asset (UTC) DEww/bodysuit
Payer rate by day, one line per asset
2026-08-16T16:05:47.994230 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 within-day USD per install ARPU by day — every asset (UTC) DEww/bodysuit
ARPU by day, one line per asset
2026-08-16T16:05:48.049614 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0 1 2 3 4 5 6 7 8 within-day USD per payer ARPPU by day — every asset (UTC) DEww/bodysuit
ARPPU by day, one line per asset
2026-08-16T16:05:48.112299 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 08-05 08-06 08-07 08-08 08-09 08-10 08-11 08-12 08-13 08-14 08-15 day (UTC) 0.375 0.380 0.385 0.390 0.395 0.400 0.405 0.410 0.415 revenue / spend Within-day ROAS by day — every asset (UTC) DEww/bodysuit
Within-day ROAS by day, one line per asset
2026-08-16T16:05:48.187545 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ CTR click→install CPI payer rate * ARPU * wROAS * 0.0 0.2 0.4 0.6 0.8 1.0 normalised across the period (1.0 = best of the pack) * axis sits under the 16-payer bar on most days: direction only, never a level. Assets under 20 installs on the period are not plotted. Composite — every asset across every measure, 2026-08-01..2026-08-15 DEww/bodysuit
Composite: every asset across every measure, normalised across the period
2026-08-16T16:05:47.536938 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 CTR % hour of day, pooled across the 15 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-08-01..2026-08-15 (UTC)
CTR by hour, one line per asset
2026-08-16T16:05:47.637433 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 installs / clicks % hour of day, pooled across the 15 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-08-01..2026-08-15 (UTC)
Click-to-install by hour, one line per asset
2026-08-16T16:05:47.681833 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 USD hour of day, pooled across the 15 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-08-01..2026-08-15 (UTC)
Cost per install by hour, one line per asset
2026-08-16T16:05:47.586758 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 USD per 1,000 impressions hour of day, pooled across the 15 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-08-01..2026-08-15 (UTC)
CPM by hour, one line per asset

8Caveats

⚠⚠ The two periods are fifteen days and nine days long, and no level figure on this page compares to any other. Spend, impressions, clicks, installs, registrations and all three revenue totals are sums over unequal windows. August spending more than July is a statement about the calendar. Every comparison this report draws is a rate: CPM, CTR, click→install, CPI, the three returns, payer rate, ARPU and ARPPU, plus the sign tests, which give each hour one vote.

⚠ This is fifteen days of a thirty-one-day month. Nothing here is a monthly figure. The page will be reissued after 08-31 on the same sections, and its rates will move as the remaining sixteen days land.

⚠ The instrument gate reads 1.07 and is outside the documented 0.91 to 1.06 band. On B1's own clock over 08-01 to 08-15, Meta booked $18,775.98 against our $20,062.31, and our records are 1.07 of its number. It is quoted as measured and not rounded in. What it bounds is any sentence that sets our revenue against Meta's, including the bracketed bROAS figures in tables B and in section 4. It does not touch within-day or cohort at 24 hours, which never read Meta's revenue column at all, and every period-over-period claim on this page rests on those two.

⚠ The instrument gate is B1-scoped on both sides and that is what makes it a real reading. measures.py selects Meta rows by Ad ID against the run config's ads map and the shared accounts' ads are not in that map, so the 1.07 is B1's own revenue against B1's own Meta column. Dividing two accounts' revenue by one account's Meta figure is the error DECISION_LOG.md #64 records, and it is not present here.

⚠ Hour 14 of the pooled hourly table is dominated by one hour of one day. On 2026-08-03 the rejected spill build put 181,927 of its 182,648 impressions into a single account hour that maps to that bucket, at $95.44 of its $109.72 spend and returning nothing (DECISION_LOG.md #50). The bucket's CPM of 2.32, its CTR of 2.62% and its click→install of 10.6% are that hour and not the account's 14:00 behaviour. The sign tests are unaffected, because each hour counts once whatever it delivered.

⚠ The period spans several budget regimes and every per-asset table pools all of them. The dailies name E2-R6 through E2-R10 inside it, and the earner ran its own before those. The budget is a geography dial on this account, so two creatives measured across a budget change were compared on different audiences (DECISION_LOG.md #47). No row in section 7 is regime-matched, no comparison between two arms in it is decidable, and the regime-matched reads live in the dailies for the individual days.

⚠ The two accounts are on different clocks and neither offset is assumed. B1 is fixed at UTC-7, so its UTC day is stitched from two account days. The Nomad Node accounts run on UTC+0, so their reporting day is the UTC day and nothing is stitched; stitching them on B1's offset would move their spend seven hours. Both offsets were recovered from data, by correlating each account's hourly impressions against our own registrations from its campaigns, which are true UTC: B1 lands on seven hours at r = 0.878 and the shared accounts land on zero at r = 0.744.

The two accounts are ranked on within-day and cohort@24h, and never on booked. Booked counts everyone who paid inside the period whatever day they installed, so it credits B1 with a month of accumulated cohort and the shared buy, which opened on 08-11, with almost none.

The shared accounts enter section 2 and no other table on this page. Their export carries no Ad ID, no campaign name, no link clicks, no leads and no country, so no funnel, country or per-asset cut can be built from it. The only join key their files offer is the ad set name, which this report does not select on. Every table from section 3 down scopes to the ad ids in the run config and their traffic is not among them.

⚠ This page is measured entirely on the repaired payment instrument, and the dailies for 08-01 to 08-13 were not. The measure had been discarding any payment it could not tie to a person, which on some days was a fifth of them; joining the payment record to the registration feed on the account UUID both feeds carry recovers them, and that repair landed on 2026-08-16. Every within-day and cohort figure on this page is on the repaired basis. Comparing a figure here against one in a daily published before 08-14 is a comparison against a measurement defect. What remains unrecoverable is payments from people who registered before the registration push began on 2026-08-13 18:52 UTC.

⚠ The cohort figure is 97% covered and is a floor. Installs from the last hours of 08-15 had not lived 24 hours at the 2026-08-16 10:59 UTC payment cut. The 1.21 on this page can only rise. Every period-over-period claim above rests on within-day, which is sealed at midnight and needs no horizon.

The country section and table C are B1's own account day, seven hours offset from every other table. They are read for mix, never for level.

Section 4's Germany line, $350.84 at 0.62 within-day, is the closest thing to a German result the page carries, and it mixes the German campaign with German traffic the worldwide buy paid for.

The mix-neutral account line under the campaign table compares two campaigns and not the account. Its July side, $14.44, is the earner and the German buy alone, because the worldwide campaign did not exist in July and the July split-test campaigns did not deliver in August. The account's own July CPM was $7.07.

The FX table predates almost everything it prices. Revenue in 33 currencies is converted at rates pulled on 2026-08-02 and this period runs to 08-15. It is the last named candidate in the instrument reconciliation and it has never been tested.

Section 7's assets ran in three different campaign shapes and two of them were stopped by Meta. spill on 08-03 and spill2 on 08-09 were rejected under the Adult Sexual Solicitation standard. Their rows are truncated by an enforcement event, and neither is a result about the creative.

9What would settle the open questions

Whether the account's return actually moved between the two periods. Within-day went 0.95 to 0.97, against daily figures that ran 0.57 to 1.44 inside August alone, on periods that differ in length, campaign structure, creative set, budget and the number of ad accounts buying. The remaining sixteen days of August answer it on a single campaign shape and a single arm, which is the first stretch this account has ever had where nothing else changes.

Whether the diurnal money shape belongs to the hour or to the calendar. Hours 00 to 09 return 0.61 to 2.38 within-day and hours 10 to 23 return 0.58 to 1.15, but the fifteen days pooled into those buckets ran four different buys. Re-cutting the same hourly table inside the single-arm regime alone separates the two, and it costs one query against exports already on disk.

Whether the shared buy's 1.52 holds past five days. It is 4.8% of the period's spend on 1,710 new users, it leads B1 on both comparable returns, and it more than quintupled its daily spend across the five days, from $31.77 to $166.42. Five more days at the current split answer whether the return is the buy or its novelty, and its cost per new user of $0.258 makes the test cheap.

Whether the German buy is worth its price. Fifteen days produced 87 installs at $2.721 and 9 payers, so the campaign has not yet generated enough of a sample to fail, let alone to pass. Either it gets enough budget to reach the payer bar inside a month, or it stops; running it at 2.7% of spend costs little and settles nothing.

Nothing about ranking one creative against another. Seven assets cleared the payer bar over these fifteen days and not one of them shares a regime with another. The account's own decidability requirement, recorded in DECISION_LOG.md #48, sits far above the largest arm here at 3,459 installs.

This is fifteen days of a thirty-one-day month, and the two periods it compares are different lengths. August is measured to 2026-08-15 and this page will be reissued when the month closes. The comparison period is nine days against these fifteen, so every total here is arithmetic about the calendar and carries no comparison at all. What compares is the rates: CPM, CTR, click→install, CPI, the three returns, payer rate, ARPU and ARPPU.

10What this hands to the next read

The August close inherits sixteen more days on one campaign, one arm and one budget, which is the cleanest stretch this account has had. It can answer whether $0.700 per install and 0.97 within-day are where the account settles at this volume, and the monthly reissue should quote 08-15's frozen cohort figure, because this page's 1.21 at 97% coverage is still rising.

It also inherits a second ad account that will be a full month old. At that point booked stops flattering B1 for its age and the two accounts become comparable on all three measures, which is the first time a portfolio ranking will mean what it appears to mean.

11Reproduce

Report clock UTC. B1's exports are stamped in its own account zone (UTC-7), so every B1 delivery row is restitched from two Meta days; the Nomad Node exports are stamped UTC+0 and are not restitched. The country tables and table C are not restitched and are labelled where they appear.

⚠ B1's own delivery export shows July spend this report does not count. From 07-15 to 07-21 the account ran the youguqi_ HeiHa test, $477.52, and on 07-30 and 07-31 it ran 0730_starfall_, 代投 for a third party, $71.62. Neither is this app's money. The comparison period 07-23 to 07-31 overlaps the second of those, so anyone reconciling this page against the raw account export will find $71.62 more spend inside the window than the tables carry.

run_runs/2026-08-16_periods/, generated by generate.sh
config_runs/2026-08-16_receipt_series/run_config_full.json
period2026-08-01 → 2026-08-15 UTC, against 2026-07-23 → 2026-07-31 UTC
the account split, section 2_runs/2026-08-16_receipt_series/portfolio_split.py; the shared accounts' hourly exports under acct2/
payment cut2026-08-16 10:59 UTC on the repaired join, and 2026-08-16 03:59 on the account's clock for the instrument gate
Meta exportsday and country×day pulled as one range; hourly per day, all 24 buckets verified on each
registrationsadjust_sink push merged onto the Telegram-parsed ledger; carries the account UUID the payment join needs
paymentsin-app-purchase API, full history, repaired on the account UUID
FX_runs/2026-08-02_today_read/fx_rates.json
instrument gatemeasures_meta_gate_month_2026-08.txt, run on tz=META because the gate is invalid on any other clock
bash _runs/2026-08-16_periods/generate.sh

The script runs measures, report_tables and report_charts over --from/--to in place of --day, once for the account and once per campaign tab, on the same config the dailies use. Nothing in this report computes anything: the instruments carry the gates, and a number that is wrong here is wrong in one of them.

12Appendix — definitions

The report clock is a UTC day, and a period is a run of them. Adjust reports in UTC, so a UTC-bucketed report lines up with the attribution dashboard 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.

The hourly axis is hour of day pooled across the period. Fifteen days hold 360 hours and the table has 24 rows, so each bucket pools fifteen of them. An hour bucket must clear 50 impressions per day of the period to be compared, which is 750 here and 450 in the nine-day comparison period. Read the buckets for diurnal shape and never as a sequence.

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

A period whose spend is falling reads high on booked and low on the other two, purely because yesterday's buyers are still paying. Use within-day for period-over-period, because it is immutable and needs no horizon. Use cohort at a fixed horizon to compare hours to each other, because within-day censors by hour of day. Booked is what Meta will quote at you, so it is reported to explain the gap and never to rank.

Over a period, the booked split is keyed on lag in days. Within-day is still exactly the lag-0 row of it, which is the identity that makes the split worth drawing at all; the difference is that over one day a lag and a calendar date are the same thing and over fifteen days they are not.

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. Section 1's payer rate is within-day payers over our registrations and section 2's cost per new user is Meta's spend over our registrations, because the shared accounts' export carries no Meta install count at all.

A regime is a stretch over which the ad set's daily budget did not change. The budget is a geography dial on this account, so two creatives measured across a budget change were compared on different audiences. This period holds several of them, E2-R6 through E2-R10 among them, and every table in section 7 pools across all of them.

The 16-payer bar (DECISION_LOG.md #37): below roughly 16 payers a revenue figure is a direction and not a magnitude. Revenue per install on this account is a near-zero vector with rare large entries, so separating two creatives by 20% needs an arm far larger than any this account has run.

Internal — noindex. Not for distribution outside the team.