Weekly campaign report — 2026-07-27 to 2026-08-02, against 2026-07-20 to 2026-07-26

One Meta ad account bought this app across 2026-07-27 to 2026-08-02 and spent $2,946.25 on it, against $520.97 in the week before; the second ad account did not begin buying until 2026-08-11 and enters no table here. The week took 6,686 installs at $0.441 against 589 at $0.884, booked $4,852.38 and sealed $3,369.01 inside the days that bought it. Our records read 1.05 of Meta's booked value on the account's own clock, inside the documented 0.91 to 1.06 band. Definitions, the report clock, the three revenue measures and what changes when the report covers a week are in the appendix.

1Overview

2026-07-20..2026-07-262026-07-27..2026-08-02change
spend$520.97$2,946.25+465.5%
impressions35,281433,178+1,127.8%
CPM$14.77$6.80−54.0%
clicks3,02427,468+808.3%
CTR8.57%6.34%−26.0%
installs (Meta)5896,686+1,035.1%
click→install19.48%24.34%+25.0%
CPI$0.884$0.441−50.1%
registrations (ours)6497,375+1,036.2%
booked$274.13 (0.53)$4,852.38 (1.65)+1,670.1%
within-day$246.87 (0.47)$3,369.01 (1.14)+1,264.7%
cohort @ 24h$285.65 (0.55) at 100%$3,954.81 (1.34) at 100%+1,284.5%
within-day payers26323+297

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.4868$0.6562$0.8135$11.06$12.76$14.368,068

The week before's campaign split: Jul 25 arms T2 26.2%, T3 25.1%, T1 16.4%; Jul 23 arms T1 13.9%, T2 10.6%, T3 7.8%.

Not like for like: the earlier week bought on four of its seven days, so the levels carry a ramp and only the rates compare.

Impressions halved in price and most of that is mix. CPM $13.88 → $6.80; held to the earlier week's mix, $11.52. Section 5 decomposes it.

The account cleared break-even for the first time. Within-day return went 0.47 to 1.14, on 26 payers and then 323.

The largest buy did not exist a week earlier. The worldwide campaign took $1,370.42 in three days at a return of 1.36.

2Hourly, 2026-07-27 to 2026-08-02

The axis is hour of day pooled across the seven days, 168 hours into 24 rows: read it for diurnal shape, never as a timeline.

ours is our registrations in that hour, cov that hour's cohort coverage at H=24.

hrspendimprCPMclicksCTRinstclk→iCPIourscovbookedbROASwithinwROASwPaycohortcROAS
0$43.046,2416.904567.31%9220.2%$0.46899100%$75.231.75$32.610.764$32.610.76
1$83.9613,7636.108826.41%17519.8%$0.480192100%$138.541.65$101.521.2113$101.521.21
2$103.8216,1186.441,0496.51%28226.9%$0.368300100%$160.611.55$132.951.2812$132.951.28
3$103.7516,0306.471,0366.46%24823.9%$0.418264100%$188.651.82$183.861.7718$189.621.83
4$115.6719,7885.851,1916.02%23419.6%$0.494256100%$180.841.56$156.101.3515$165.411.43
5$137.0222,5806.071,3045.78%30223.2%$0.454326100%$203.791.49$243.051.7723$261.751.91
6$146.4825,2085.811,3345.29%33825.3%$0.433368100%$226.941.55$154.371.0517$158.151.08
7$140.2923,9885.851,3295.54%31623.8%$0.444349100%$331.352.36$251.281.7923$271.271.93
8$171.4329,6075.791,6715.64%38022.7%$0.451422100%$255.371.49$207.051.2119$229.371.34
9$194.3431,1606.241,8425.91%42923.3%$0.453481100%$207.011.07$161.860.8312$177.960.92
10$194.6027,6147.051,7206.23%40723.7%$0.478460100%$141.300.73$103.410.5313$120.790.62
11$132.9918,3987.231,0965.96%28425.9%$0.468316100%$251.551.89$238.001.7918$368.452.77
12$134.1316,3258.221,0496.43%26225.0%$0.512292100%$117.620.88$136.601.0213$155.231.16
13$143.3718,3087.831,2246.69%29624.2%$0.484318100%$279.241.95$178.981.2519$178.981.25
14$153.7917,9618.561,2677.05%32125.3%$0.479347100%$335.172.18$274.641.7917$302.081.96
15$158.1121,5657.331,5147.02%35523.4%$0.445394100%$337.212.13$144.230.9115$150.850.95
16$190.6728,7456.631,8846.55%43122.9%$0.442478100%$189.871.00$129.680.6810$140.440.74
17$162.4525,7586.311,6846.54%42225.1%$0.385480100%$303.611.87$212.831.3119$255.121.57
18$131.6519,7646.661,1876.01%32527.4%$0.405363100%$197.441.50$46.390.358$122.400.93
19$96.9912,9927.479477.29%25526.9%$0.380290100%$176.921.82$68.370.709$74.240.77
20$64.126,7089.565187.72%15830.5%$0.406179100%$109.861.71$29.610.464$34.600.54
21$55.705,6529.854958.76%13026.3%$0.428144100%$171.123.07$103.911.8712$214.433.85
22$42.653,91310.903719.48%9926.7%$0.431100100%$158.223.71$61.101.437$94.202.21
23$45.234,9929.064188.37%14534.7%$0.312157100%$114.902.54$16.640.373$22.400.50
all$2,946.25433,1786.8027,4686.34%6,68624.3%$0.4417,375100%$4,852.381.65$3,369.011.14323$3,954.811.34

⚠ Payer counts per bucket run 3 to 23, seven days of that hour pooled into each. That is enough to read direction and not enough to read an hourly ARPPU as a rate. Read the all row for level and the buckets for shape.

Cohort coverage is 100% in every bucket. The youngest install had lived 325.4 hours at the payment cut, so the column is settled.

Volume peaks where price is lowest, buckets 4 to 10 holding the peak spend and the four cheapest CPMs of the UTC day.

Click rate and install rate both peak in the thin late buckets, and CPI still comes out flat, $0.312 to $0.512 across all 24.

Revenue by bucket shows shape only. Booked sits on the payment hour, so bucket 22's 3.71 counts payments made in that hour.

2026-08-16T16:04:01.178046 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0 25 50 75 100 125 150 175 200 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 5000 10000 15000 20000 25000 30000 impressions Impressions and installs by hour impressions installs 100 150 200 250 300 350 400 installs (Meta Leads) The period's motion — whole account, 2026-07-27..2026-08-02 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:04:01.339433 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 6 7 8 9 CTR % CTR 0 4 8 12 16 20 hour (UTC) 6 7 8 9 10 11 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 20.0 22.5 25.0 27.5 30.0 32.5 35.0 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) 0.35 0.40 0.45 0.50 USD Cost per install Delivery by hour — whole account, 2026-07-27..2026-08-02 (UTC)
CTR, CPM, click-to-install and CPI by hour, whole account

Against the prior week, hour matched to hour

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

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

metrichours 2026-07-27..2026-08-02 ran higherhours it ran lowersign test
CPM0 of 2424 of 24p = 0.000
CTR4 of 2420 of 24p = 0.002
click→install19 of 245 of 24p = 0.007
CPI2 of 2119 of 21p = 0.000

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

The full hour-by-hour pairing, 2026-07-20..2026-07-26 → 2026-07-27..2026-08-02

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

hrimpressionsCPMCTRclick→installCPI
001,028 → 6,24121.18 → 6.909.73% → 7.31%0.0% → 20.2%— → 0.468
011,173 → 13,76314.57 → 6.107.76% → 6.41%0.0% → 19.8%— → 0.480
021,267 → 16,11814.86 → 6.447.50% → 6.51%1.1% → 26.9%18.830 → 0.368
031,309 → 16,03010.95 → 6.475.58% → 6.46%0.0% → 23.9%— → 0.418
04901 → 19,7889.94 → 5.855.99% → 6.02%5.6% → 19.6%2.987 → 0.494
051,096 → 22,58015.86 → 6.0710.22% → 5.78%17.9% → 23.2%0.869 → 0.454
061,157 → 25,20811.96 → 5.8111.41% → 5.29%24.2% → 25.3%0.432 → 0.433
071,156 → 23,98811.95 → 5.858.56% → 5.54%21.2% → 23.8%0.658 → 0.444
08819 → 29,60713.54 → 5.799.52% → 5.64%19.2% → 22.7%0.739 → 0.451
09955 → 31,16013.92 → 6.249.95% → 5.91%22.1% → 23.3%0.633 → 0.453
10819 → 27,61412.74 → 7.0510.74% → 6.23%25.0% → 23.7%0.474 → 0.478
11842 → 18,39813.19 → 7.239.86% → 5.96%25.3% → 25.9%0.529 → 0.468
12820 → 16,32515.23 → 8.229.88% → 6.43%21.0% → 25.0%0.735 → 0.512
131,131 → 18,30814.22 → 7.8310.79% → 6.69%22.1% → 24.2%0.596 → 0.484
141,809 → 17,96114.25 → 8.567.74% → 7.05%20.7% → 25.3%0.889 → 0.479
152,270 → 21,56514.94 → 7.338.46% → 7.02%29.7% → 23.4%0.595 → 0.445
162,448 → 28,74513.14 → 6.636.50% → 6.55%27.7% → 22.9%0.731 → 0.442
173,060 → 25,75812.44 → 6.317.61% → 6.54%25.3% → 25.1%0.645 → 0.385
183,780 → 19,76410.53 → 6.667.80% → 6.01%26.1% → 27.4%0.517 → 0.405
192,316 → 12,99212.98 → 7.479.72% → 7.29%28.9% → 26.9%0.463 → 0.380
201,832 → 6,70825.48 → 9.569.61% → 7.72%27.8% → 30.5%0.953 → 0.406
211,076 → 5,65218.70 → 9.858.55% → 8.76%4.3% → 26.3%5.030 → 0.428
22881 → 3,91326.24 → 10.9010.33% → 9.48%4.4% → 26.7%5.780 → 0.431
231,336 → 4,99223.02 → 9.068.83% → 8.37%0.8% → 34.7%30.750 → 0.312

Impressions got cheaper in all twenty-four shared buckets, unweighted, and CPI fell in 19 of 21.

The click rate fell and the install rate more than made up for it: a wider, cheaper impression that gets clicked less and converts better.

The unweighted read agrees with the pooled one on all four, and neither separates mix from buying. Section 5's mix-neutral line does.

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

3Country

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

(i) The portfolio by country, 2026-07-27..2026-08-02. On the report clock. Meta serves no hour x country grid, so each country cut is raked from its own Meta day onto UTC; our own columns were already there.

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$1,645.8355.9%349,134$4.714,107$0.401$1,643.431.00251
MX$173.125.9%12,411$13.95240$0.721$110.560.6422
US$119.614.1%1,695$70.58148$0.808$223.671.8718
DE$76.362.6%1,444$52.8647$1.625$101.661.333
BR$66.432.3%5,713$11.63334$0.199$128.671.949
GB$57.472.0%1,188$48.3862$0.927$0.000.000
ID$51.141.7%8,185$6.25262$0.195$55.541.095
TR$47.821.6%2,428$19.69107$0.447$51.961.097
CH$45.031.5%1,099$40.975$9.007$69.291.542
MY$35.991.2%3,392$10.61107$0.336$48.191.344
AR$32.501.1%2,015$16.1397$0.335$45.881.416
AU$31.051.1%508$61.0824$1.294$22.080.711

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

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

(ii) The same cut per account, 2026-07-27..2026-08-02.

B1

ccspendshareimpressionsCPMregistrations (ours)cost/regwithin-daywROASpayers
IN$1,645.8355.9%349,134$4.714,107$0.401$1,643.431.00251
MX$173.125.9%12,411$13.95240$0.721$110.560.6422
US$119.614.1%1,695$70.58148$0.808$223.671.8718
DE$76.362.6%1,444$52.8647$1.625$101.661.333
BR$66.432.3%5,713$11.63334$0.199$128.671.949
GB$57.472.0%1,188$48.3862$0.927$0.000.000
ID$51.141.7%8,185$6.25262$0.195$55.541.095
TR$47.821.6%2,428$19.69107$0.447$51.961.097
CH$45.031.5%1,099$40.975$9.007$69.291.542
MY$35.991.2%3,392$10.61107$0.336$48.191.344
AR$32.501.1%2,015$16.1397$0.335$45.881.416
AU$31.051.1%508$61.0824$1.294$22.080.711

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

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

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

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

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 $2,946.25. The per-day reconciliations, naming the Meta days each figure was raked from, are on the daily pages.

4Aggregate, both weeks

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-20..2026-07-26$520.9735,28114.773,0248.57%58919.48%$0.884
2026-07-27..2026-08-02$2,946.25433,1786.8027,4686.34%6,68624.34%$0.441

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 tests print p = 0.000 on 433,178 impressions against 35,281, and both agree with the unweighted sign tests in section 2. On samples this size a two-proportion test will separate differences that carry no operational meaning, so the number to look at is the size of the move: click→install rose 25.0% and CTR fell 26.0%.

The three measures side by side

measure2026-07-20..2026-07-262026-07-27..2026-08-02moves after the period closes?
booked$274.13 (0.53)$4,852.38 (1.65)settled
within-day$246.87 (0.47)$3,369.01 (1.14)never
cohort @ 24h$285.65 (0.55) at 100%$3,954.81 (1.34) at 100%frozen on both

All three measures agree, and roughly tripled as returns. Both weeks are old enough that nothing in this table is still moving.

The gap between booked and within-day is the inherited cohort. The earlier week's buy was three days old and had almost none to inherit.

Booked revenue by how long its payer had been installed

Over a single day this split is the same thing as splitting by install date. Over a week it is not, so the rows below count how long each payer had been installed at the moment they paid.

installed2026-07-20..2026-07-262026-07-27..2026-08-02
the same day$246.87 (90.1%)$3,369.01 (69.4%)
one day earlier$23.70 (8.6%)$698.50 (14.4%)
two days earlier$3.56 (1.3%)$343.59 (7.1%)
three days earlier—$135.10 (2.8%)
four days earlier—$127.62 (2.6%)
five days earlier—$92.50 (1.9%)
six days earlier—$65.67 (1.4%)
seven days earlier—$14.51 (0.3%)

The top row of this table is the within-day total, seen from the other side. That is what makes the split worth drawing: the gap between booked and within-day is exactly the rest of the column.

The earlier week's split stops at two days: the buy was three days old, so its 90.1% same-day share is the account's age.

This week is the first with a tail. 69.4% of its booked revenue is same-day and the rest reaches out to seven days.

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

5The campaigns, side by side

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

campaignspendshareimpressionsimpr shareCPMclicksCTRcost/clickinstallsCPIwithin-daywROASpayers
Earner (retired 08-03)$1,370.4246.5%150,99334.9%9.0813,7919.13%$0.0993,814$0.359$1,857.421.36176
T3 (Jul 25, India/SEA)$1,225.0141.6%268,87562.1%4.5612,8214.77%$0.0962,584$0.474$1,188.170.97126
T2 (Jul 25)$132.114.5%9,8082.3%13.475655.76%$0.234182$0.726$95.730.7212
T1 (Jul 25)$118.734.0%1,3620.3%87.1720815.27%$0.57182$1.448$82.890.705
German (DE/AT/CH)$99.983.4%2,1400.5%46.72833.88%$1.20523$4.347$127.001.272

Booking with no delivery, and excluded from every rate above: T1 (Jul 23) 0 installs (Meta), 0 registrations (ours), $0.00 within-day; T2 (Jul 23) 0 installs (Meta), 1 registrations (ours), $0.00 within-day; T3 (Jul 23) 1 installs (Meta), 19 registrations (ours), $17.80 within-day. Counting them would put installs into the CPI denominator against spend that never happened.

Account CPM $13.88 → $6.80 (-51.0%). Held to 2026-07-20..2026-07-26's campaign mix it is $11.52 (-17.0%) — the difference between those two is the campaign mix.

Two thirds of the CPM fall is where the money went, and a third is cheaper buying inside the campaigns.

T3 and the earner differ twofold on impression price and not at all on cost per click, so their returns part after the click.

T1 is the account's price outlier and it is buying a country. Its tab shows where the money went.

Three of the five rows are under the 16-payer bar. The German 1.27 sits above T3's 0.97 in this table and does not beat it.

The standing chart set this build emits carries no campaign-level panel, so this section is its table alone. Spend share, CPM and CPI by campaign across the run are drawn per campaign inside the tabs below.

6Per campaign

Five campaigns delivered. Tabs are ordered by spend descending and the largest is open by default. Every tab carries the same sections in the same order, and a campaign too thin for one says so in place.

Showing

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

Structure over the week

The worldwide campaign bailingxia_meituan_ww_cvr_260730: one CBO ad set holding three ads, all delivering together, worldwide, Android, optimised to Purchase. It went live on 2026-07-30 at 15:00 account time, so it took the largest share of the week's money in the last three of its seven days. The ad-set row here would be the whole campaign, so the level that separates is the ad and the tables below are per ad.

Hourly

The campaign did not exist in the week before, so no hour is shared with it: there is no matched-hours comparison and no paired chart. Its own two hourly panels below are on the pooled hour-of-day axis, seven days to a bucket.

2026-08-16T16:04:45.859872 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 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 2000 4000 6000 8000 10000 12000 impressions Impressions and installs by hour impressions installs 75 100 125 150 175 200 225 250 installs (Meta Leads) The period's motion — whole account, 2026-07-27..2026-08-02 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:04:46.023317 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 8 9 10 11 12 CTR % CTR 0 4 8 12 16 20 hour (UTC) 8 9 10 11 12 13 14 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 25 30 35 40 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) 0.25 0.30 0.35 0.40 USD Cost per install Delivery by hour — Earner (retired 08-03), 2026-07-27..2026-08-02 (UTC)
CTR, CPM, click-to-install and CPI by hour, Earner (retired 08-03)

Country

The campaign's country cut is table C below, on the account's own day. All three ads bought between 27.8% and 31.2% India and between 4.7% and 5.4% United States, the only three-way mix any campaign on the account ran this week.

2026-08-16T16:04:46.167696 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US BR ID TR MY GB AR MX PH DE IT 0 100 200 300 400 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-07-27..2026-08-02 spend within-day revenue
Spend against within-day revenue, by country
2026-08-16T16:04:46.217021 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US BR ID TR MY GB AR MX PH DE IT 0.0 0.2 0.4 0.6 0.8 USD per install Cost per install by country — 2026-07-27..2026-08-02 (META days)
Cost per install by country

Aggregate over the week

campaignspendshareimpressionsimpr shareCPMclicksCTRcost/clickinstallsCPIwithin-daywROASpayers
Earner (retired 08-03)$1,370.4246.5%150,99334.9%9.0813,7919.13%$0.0993,814$0.359$1,857.421.36176

With no shared hour there is no matched-hours funnel for this campaign either. The row above is its whole week, and 176 payers puts it far above the 16-payer bar, which makes it the only campaign on the page whose return can be read as a magnitude.

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

A. Per asset — delivery

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
earner/bodysuit$874.5097,5928.968,9659.19%2,53628.29%$0.345
earner/bikini$382.2443,7228.743,5238.06%92126.14%$0.415
earner/pool5$113.689,67911.751,30313.46%35727.40%$0.318

pool5 has the highest click rate in this campaign at 13.46% and its cheapest install at $0.318, on the smallest spend of the three. bodysuit took $874.50 of the campaign's $1,370.42; bikini bought the cheapest impressions at 8.74 and turned the smallest share of its clicks into installs, 26.14%.

B. Per asset — the three revenue measures

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

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
earner/bodysuit$1,534.081.75 (1.94)$1,169.031.34$1,486.791.701154.2%0.42610.174.3%
earner/bikini$542.271.42 (1.32)$504.961.32$545.911.43414.1%0.50412.3211.3%
earner/pool5$197.881.74 (1.68)$183.431.61$190.021.67205.2%0.4809.1719.4%

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

All three clear the payer bar, and bodysuit is the least concentrated row on the page at 4.3% in its largest basket, against pool5's 19.4%.

⚠ The three cannot be ranked on this week. The budget moved inside it (Caveats), and the 08-02 daily's regime-matched cut orders them differently.

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$907.6731.2%5.3%63.5%5.9%
earner/bikini$393.5928.4%4.7%66.9%14.2%
earner/pool5$122.2827.8%5.4%66.8%2.7%

None of the three is a geography purchase. Their American revenue shares sit close to their American spend shares.

Across the week

2026-08-16T16:04:46.391377 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 7 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-07-27..2026-08-02 (UTC) earner/bodysuit earner/bikini earner/pool5
CTR by hour, one line per asset
2026-08-16T16:04:46.506590 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 15 20 25 30 35 40 45 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-07-27..2026-08-02 (UTC) earner/bodysuit earner/bikini earner/pool5
Click-to-install by hour, one line per asset
2026-08-16T16:04:46.564624 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.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-07-27..2026-08-02 (UTC) earner/bodysuit earner/bikini earner/pool5
Cost per install by hour, one line per asset
2026-08-16T16:04:46.451423 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 7 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-07-27..2026-08-02 (UTC) earner/bodysuit earner/bikini earner/pool5
CPM by hour, one line per asset
2026-08-16T16:04:46.671849 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-07-27..2026-08-02 (META days) IN US BR ID TR MY other
Where each asset bought: share of its own spend by region
2026-08-16T16:04:46.720340 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-07-27..2026-08-02 (META days) IN US BR ID TR MY
Cost per install by region, every asset
2026-08-16T16:04:46.769997 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/bikini earner/pool5 0 50 100 150 200 250 300 USD Within-day revenue by region — every asset, 2026-07-27..2026-08-02 (META days) IN US BR ID TR MY
Within-day revenue by region, every asset
2026-08-16T16:04:46.855990 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0 1 2 3 4 5 6 7 8 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:04:46.909669 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 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:04:46.966758 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 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:04:47.032133 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0.5 1.0 1.5 2.0 2.5 3.0 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:04:47.104505 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-07-27..2026-08-02 earner/bodysuit earner/bikini earner/pool5
Composite: every asset across every measure, normalised across the period

Delivery is plotted hourly, because CTR, click-to-install, CPI and CPM sit on hundreds to thousands of impressions an hour and carry shape. Money is plotted per day, because payers run 0 to 2 per asset per hour. There is deliberately no hourly revenue chart.

T3 (Jul 25, India/SEA) — every section below this line is T3 (Jul 25, India/SEA)'s: the day, the hours, the countries, the campaigns and the assets, counted on T3 (Jul 25, India/SEA)'s own ledger and its own accounts. Use the buttons above to switch.

Structure over the week

The India and South-East Asia tier of the _260725 test, restructured on the evening of 2026-07-26 into one pooled ad set carrying a twelve-creative geo-matched pack (asset_performance_report_2026-07-27.md). Eighteen creatives are mapped to it, thirteen took spend in the week and three booked conversions on none. In a pooled ad set the optimiser chooses the allocation, so the per-asset cost columns below are contaminated by that choice and are not a test.

Hourly

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

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

metrichours 2026-07-27..2026-08-02 ran higherhours it ran lowersign test
CPM0 of 1818 of 18p = 0.000
CTR0 of 1818 of 18p = 0.000
click→install8 of 1810 of 18p = 0.815
CPI10 of 155 of 15p = 0.302

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

The full hour-by-hour pairing, 2026-07-20..2026-07-26 → 2026-07-27..2026-08-02

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

hrimpressionsCPMCTRclick→installCPI
01562 → 8,79310.34 → 4.207.12% → 4.51%0.0% → 16.1%— → 0.577
02441 → 9,1519.12 → 4.109.07% → 4.26%0.0% → 27.9%— → 0.344
05447 → 16,2386.06 → 4.3210.07% → 4.88%15.6% → 17.9%0.387 → 0.494
06694 → 18,9257.64 → 4.2710.81% → 4.17%28.0% → 21.5%0.252 → 0.475
07559 → 16,2868.59 → 4.289.48% → 4.25%17.0% → 20.8%0.533 → 0.484
08397 → 19,21110.93 → 4.4711.34% → 4.47%22.2% → 20.2%0.434 → 0.497
09481 → 17,61410.56 → 4.637.69% → 4.68%18.9% → 20.4%0.726 → 0.486
10359 → 16,3368.91 → 4.8910.03% → 5.05%33.3% → 21.3%0.267 → 0.454
11409 → 13,44910.29 → 4.708.56% → 4.74%22.9% → 22.1%0.526 → 0.448
13435 → 10,9988.48 → 4.8710.34% → 4.93%17.8% → 19.7%0.461 → 0.501
14703 → 9,9017.07 → 4.948.11% → 4.83%12.3% → 18.4%0.710 → 0.556
151,091 → 12,6267.33 → 4.588.62% → 5.31%29.8% → 19.3%0.286 → 0.448
161,237 → 17,6429.05 → 4.467.44% → 5.09%21.7% → 20.2%0.560 → 0.435
171,913 → 14,5287.21 → 4.727.68% → 5.13%27.2% → 23.4%0.345 → 0.394
182,513 → 11,5407.21 → 4.637.92% → 4.92%26.6% → 24.6%0.342 → 0.381
19985 → 8,1938.26 → 5.1310.76% → 5.18%32.1% → 24.3%0.239 → 0.408
20514 → 3,3819.05 → 5.9010.70% → 4.67%38.2% → 25.3%0.221 → 0.499
23442 → 2,2647.26 → 4.698.82% → 4.06%0.0% → 8.7%— → 1.326

Price and click rate both fell in all eighteen shared buckets and neither downstream rate moved: halving both leaves the install costing what it did.

2026-08-16T16:04:49.014117 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 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 2500 5000 7500 10000 12500 15000 17500 20000 impressions Impressions and installs by hour impressions installs 0 25 50 75 100 125 150 175 installs (Meta Leads) The period's motion — whole account, 2026-07-27..2026-08-02 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:04:49.167320 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 4.2 4.4 4.6 4.8 5.0 5.2 CTR % CTR 0 4 8 12 16 20 hour (UTC) 4.0 4.5 5.0 5.5 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 10 15 20 25 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) 0.4 0.6 0.8 1.0 1.2 USD Cost per install Delivery by hour — T3 (Jul 25, India/SEA), 2026-07-27..2026-08-02 (UTC)
CTR, CPM, click-to-install and CPI by hour, T3 (Jul 25, India/SEA)
2026-08-16T16:04:49.358547 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 5 10 15 20 hour (UTC) 4 5 6 7 8 9 10 11 CTR % CTR 2026-07-20..2026-07-26 2026-07-27..2026-08-02 0 5 10 15 20 hour (UTC) 4 5 6 7 8 9 10 11 USD per 1,000 impressions CPM 0 5 10 15 20 hour (UTC) 0 10 20 30 40 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 0 5 10 15 20 hour (UTC) 0.2 0.4 0.6 0.8 1.0 1.2 USD Cost per install Delivery by hour — 2026-07-27..2026-08-02 against 2026-07-20..2026-07-26, shared hours only (UTC)
The same four ratios with the prior period laid over the period, shared hours only

Country

The campaign's country cut is table C below, on the account's own day. Every asset in it that took enough spend to have a mix bought 100.0% India, so there is no country comparison to make inside this campaign; the geography is the campaign.

2026-08-16T16:04:49.482067 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN 0 200 400 600 800 1000 1200 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-07-27..2026-08-02 spend within-day revenue
Spend against within-day revenue, by country
2026-08-16T16:04:49.512010 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN 0.0 0.1 0.2 0.3 0.4 0.5 USD per install Cost per install by country — 2026-07-27..2026-08-02 (META days)
Cost per install by country

Aggregate over the week

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

spendimpressionsCPMclicksCTRinstallsclick→installCPI
2026-07-20..2026-07-26$115.2414,1828.131,2408.74%28522.98%$0.404
2026-07-27..2026-08-02$1,039.24227,0764.5810,7824.75%2,25720.93%$0.460
  • click → install 22.98% → 20.93% (-8.9%, p = 0.094) — did not separate.
  • CTR 8.74% → 4.75% (-45.7%, 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.

campaignspendshareimpressionsimpr shareCPMclicksCTRcost/clickinstallsCPIwithin-daywROASpayers
T3 (Jul 25, India/SEA)$1,225.0141.6%268,87562.1%4.5612,8214.77%$0.0962,584$0.474$1,188.170.97126

On the shared hours the install got dearer as the impression got cheaper. The account's CPI fall comes from money moving, not from inside T3.

126 payers clears the bar, so 0.97 is a magnitude, against 1.03 for the same campaign a week earlier.

2026-08-16T16:04:49.586515 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 250 500 750 1000 1250 1500 1750 2000 USD 1.11 1.03 1.22 1.73 0.97 1.13 the number above each bar is that measure's ROAS against the same period's spend The three revenue measures, 2026-07-20..2026-07-26 against 2026-07-27..2026-08-02 (UTC) 2026-07-20..2026-07-26 2026-07-27..2026-08-02
The three revenue measures on both periods, ROAS above each bar
2026-08-16T16:04:49.646430 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-07-20..2026-07-26 2026-07-27..2026-08-02 0 250 500 750 1000 1250 1500 1750 2000 USD the bottom segment IS the within-day figure: the same number seen twice Booked revenue by how long its payer had been installed (UTC) paid the day they installed one day after two days after three days after four or more days after
Booked revenue by how long its payer had been installed

A. Per asset — delivery

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
T3b/utility_6s$284.1046,0246.172,4045.22%45318.84%$0.627
T3b/sasian_spice5_15s$282.7767,0514.222,1823.25%45220.71%$0.626
T3b/sasian_bodysuit_10s$273.9853,2955.142,7115.09%49018.07%$0.559
T3b/sasian_bikini_6s$188.6857,9493.263,1385.42%75524.06%$0.250
T3b/sasian_bikini_10s$119.7434,2603.501,8355.36%32917.93%$0.364
T3b/sasian_fishnet_top_6s$22.813,8585.911433.71%4027.97%$0.570
T3b/sasian_slip_dress$21.472,6848.002228.27%3716.67%$0.580
T3b/sasian_bodysuit_6s$12.741,4528.77453.10%1226.67%$1.062
T3b/sasian_offshoulder$7.527929.49546.82%23.70%$3.760
T3b/sasian_corset_6s$6.741,0956.16706.39%912.86%$0.749
T3b/sasian_fishnet_top_10s$3.5231511.17123.81%325.00%$1.173
T3b/sasian_corset_10s$0.898310.7256.02%120.00%$0.890
T3b/sasian_jean_shorts$0.05172.9400.00%0——
T3b/control_15s#3$0.000—0—1—$0.000
T3b/utility_15s#3$0.000—0—0——
T3b/control_10s#3$0.000—0—0——

sasian_bikini_6s bought the cheapest impressions and the cheapest installs on the whole account, 3.26 and $0.250, and turned 24.06% of its clicks into installs. utility_6s, the incumbent clip the pack was built to beat, took the most money of any asset here and returned the dearest install of the five that matter, $0.627.

B. Per asset — the three revenue measures

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

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
T3b/utility_6s$471.361.66 (1.19)$190.580.67$272.760.96254.8%0.3697.6212.4%
T3b/sasian_spice5_15s$357.311.26 (1.02)$217.760.77$243.620.86315.9%0.4177.025.9%
T3b/sasian_bodysuit_10s$381.801.39 (1.40)$259.210.95$295.231.08305.3%0.4558.6416.0%
T3b/sasian_bikini_6s$485.032.57 (2.29)$283.401.50$316.271.68182.2%0.34215.7433.1%
T3b/sasian_bikini_10s$107.520.90 (1.12)$79.460.66$79.460.6671.9%0.21511.3552.0%
T3b/sasian_fishnet_top_6s$100.294.40 (5.79)$88.783.89$88.783.89815.1%1.67511.1046.6%
T3b/sasian_slip_dress$84.073.92 (1.90)$35.181.64$44.492.0748.0%0.7048.7943.2%
T3b/sasian_bodysuit_6s$33.812.65 (2.35)$5.760.45$15.081.1818.3%0.4805.76100.0%
T3b/sasian_offshoulder$0.000.00 (2.63)$0.000.00$0.000.0000.0%0.000——
T3b/sasian_corset_6s$39.685.89 (1.37)$24.503.63$24.503.6319.1%2.22724.50100.0%
T3b/sasian_fishnet_top_10s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
T3b/sasian_corset_10s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
T3b/sasian_jean_shorts$0.000.00 (0.00)$0.000.00$0.000.000————
T3b/control_15s#3$0.00— (—)$0.00—$0.00—00.0%0.000——
T3b/utility_15s#3$8.75— (—)$0.00—$0.00—00.0%0.000——
T3b/control_10s#3$12.88— (—)$3.56—$3.56—150.0%1.7803.56100.0%

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

Four rows clear the payer bar and they order the pack: all three geo-matched clips beat utility_6s, the incumbent the pack was built to test.

⚠ The winner's revenue is a third of one person. sasian_bikini_6s bought the most installs in the pack and converted the smallest share of them.

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
T3b/utility_6s$271.18100.0%0.0%0.0%0.0%
T3b/sasian_spice5_15s$275.01100.0%0.0%0.0%0.0%
T3b/sasian_bodysuit_10s$253.11100.0%0.0%0.0%0.0%
T3b/sasian_bikini_6s$182.76100.0%0.0%0.0%0.0%
T3b/sasian_bikini_10s$119.26100.0%0.0%-0.0%0.0%
T3b/sasian_fishnet_top_6s$14.85100.0%0.0%0.0%0.0%
T3b/sasian_slip_dress$18.43100.0%0.0%0.0%0.0%
T3b/sasian_bodysuit_6s$8.94100.0%0.0%0.0%0.0%
T3b/sasian_offshoulder$7.44100.0%0.0%0.0%—
T3b/sasian_fishnet_top_10s$2.95100.0%0.0%0.0%—

Every asset here bought one country, which is what makes them comparable: geography held at 100.0% India, so a row difference is a creative difference.

Across the week

2026-08-16T16:04:49.724156 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 2 3 4 5 6 7 8 CTR % hour of day, pooled across the 7 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-07-27..2026-08-02 (UTC) T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s T3b/sasian_fishnet_top_6s
CTR by hour, one line per asset
2026-08-16T16:04:49.859241 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 5 10 15 20 25 30 35 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-07-27..2026-08-02 (UTC) T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s T3b/sasian_fishnet_top_6s
Click-to-install by hour, one line per asset
2026-08-16T16:04:49.928134 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.5 1.0 1.5 2.0 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-07-27..2026-08-02 (UTC) T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s T3b/sasian_fishnet_top_6s
Cost per install by hour, one line per asset
2026-08-16T16:04:49.788162 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 3 4 5 6 7 USD per 1,000 impressions hour of day, pooled across the 7 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-07-27..2026-08-02 (UTC) T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s T3b/sasian_fishnet_top_6s
CPM by hour, one line per asset
2026-08-16T16:04:50.047131 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ T3b/sasian_spice5_15s T3b/utility_6s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s T3b/sasian_slip_dress T3b/sasian_fishnet_top_6s 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-07-27..2026-08-02 (META days) IN ID PH other
Where each asset bought: share of its own spend by region
2026-08-16T16:04:50.102956 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ T3b/sasian_spice5_15s T3b/utility_6s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s T3b/sasian_slip_dress T3b/sasian_fishnet_top_6s 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 USD per install Cost per install by region — every asset, 2026-07-27..2026-08-02 (META days) IN
Cost per install by region, every asset
2026-08-16T16:04:50.151293 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ T3b/sasian_spice5_15s T3b/utility_6s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s T3b/sasian_slip_dress T3b/sasian_fishnet_top_6s 0 50 100 150 200 250 USD Within-day revenue by region — every asset, 2026-07-27..2026-08-02 (META days) IN
Within-day revenue by region, every asset
2026-08-16T16:04:50.270712 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0 2 4 6 8 10 12 14 16 payers / installs % Payer rate by day — every asset (UTC) T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s T3b/sasian_fishnet_top_6s T3b/sasian_slip_dress
Payer rate by day, one line per asset
2026-08-16T16:04:50.341216 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 within-day USD per install ARPU by day — every asset (UTC) T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s T3b/sasian_fishnet_top_6s T3b/sasian_slip_dress
ARPU by day, one line per asset
2026-08-16T16:04:50.406539 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0 5 10 15 20 25 within-day USD per payer ARPPU by day — every asset (UTC) T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s T3b/sasian_fishnet_top_6s T3b/sasian_slip_dress
ARPPU by day, one line per asset
2026-08-16T16:04:50.475396 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0 1 2 3 4 revenue / spend Within-day ROAS by day — every asset (UTC) T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s T3b/sasian_fishnet_top_6s T3b/sasian_slip_dress
Within-day ROAS by day, one line per asset
2026-08-16T16:04:50.560915 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-07-27..2026-08-02 T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s T3b/sasian_fishnet_top_6s T3b/sasian_slip_dress
Composite: every asset across every measure, normalised across the period

Assets under 20 installs in the week are dropped from the composite and the region charts, and money-chart markers are hollow where the point sits under 16 payers.

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

Structure over the week

The Mexico tier of the _260725 test, rebuilt on the evening of 2026-07-26 as three equal ABO arms alongside a Spanish-language pack (asset_performance_report_2026-07-27.md). Eighteen creatives are mapped to it, four took spend in the week and one booked a conversion on none. This is the campaign that shrank: it was the largest by spend in the week before at 26.2% and is third here at 4.5%.

Hourly

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

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

metrichours 2026-07-27..2026-08-02 ran higherhours it ran lowersign test
CPM2 of 53 of 5p = 1.000
CTR2 of 53 of 5p = 1.000
click→install3 of 52 of 5p = 1.000
CPI0 of 55 of 5p = 0.062

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

The full hour-by-hour pairing, 2026-07-20..2026-07-26 → 2026-07-27..2026-08-02

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

hrimpressionsCPMCTRclick→installCPI
14678 → 41815.74 → 14.234.72% → 6.94%21.9% → 27.6%1.524 → 0.744
15675 → 60617.24 → 10.837.26% → 5.28%24.5% → 34.4%0.970 → 0.596
16755 → 59513.38 → 15.193.84% → 5.04%44.8% → 43.3%0.777 → 0.695
17789 → 67818.64 → 11.706.08% → 5.01%29.2% → 26.5%1.051 → 0.881
18874 → 66714.20 → 14.846.41% → 6.15%25.0% → 34.1%0.886 → 0.707

Only five hours are shared. CPI fell in all five and still reads p = 0.062: five buckets cannot reach 0.05 however cleanly they point.

2026-08-16T16:04:52.438761 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0 2 4 6 8 10 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 0 100 200 300 400 500 600 700 impressions Impressions and installs by hour impressions installs 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 installs (Meta Leads) The period's motion — whole account, 2026-07-27..2026-08-02 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:04:52.589522 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 4 5 6 7 8 CTR % CTR 0 4 8 12 16 20 hour (UTC) 11 12 13 14 15 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 20 30 40 50 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) 0.6 0.8 1.0 1.2 1.4 1.6 USD Cost per install Delivery by hour — T2 (Jul 25), 2026-07-27..2026-08-02 (UTC)
CTR, CPM, click-to-install and CPI by hour, T2 (Jul 25)
2026-08-16T16:04:52.775614 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 14.0 14.5 15.0 15.5 16.0 16.5 17.0 17.5 18.0 hour (UTC) 4.0 4.5 5.0 5.5 6.0 6.5 7.0 CTR % CTR 2026-07-20..2026-07-26 2026-07-27..2026-08-02 14.0 14.5 15.0 15.5 16.0 16.5 17.0 17.5 18.0 hour (UTC) 12 14 16 18 USD per 1,000 impressions CPM 14.0 14.5 15.0 15.5 16.0 16.5 17.0 17.5 18.0 hour (UTC) 25 30 35 40 45 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 14.0 14.5 15.0 15.5 16.0 16.5 17.0 17.5 18.0 hour (UTC) 0.6 0.8 1.0 1.2 1.4 USD Cost per install Delivery by hour — 2026-07-27..2026-08-02 against 2026-07-20..2026-07-26, shared hours only (UTC)
The same four ratios with the prior period laid over the period, shared hours only

Country

The campaign's country cut is table C below, on the account's own day. Every asset in it bought 0.0% India and 0.0% United States, so all of its money went to the countries the Mexico tier targets and none of it can be compared against the India or worldwide tabs on geography.

2026-08-16T16:04:52.897645 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ MX 0 20 40 60 80 100 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-07-27..2026-08-02 spend within-day revenue
Spend against within-day revenue, by country
2026-08-16T16:04:52.931234 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ MX 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 USD per install Cost per install by country — 2026-07-27..2026-08-02 (META days)
Cost per install by country

Aggregate over the week

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

spendimpressionsCPMclicksCTRinstallsclick→installCPI
2026-07-20..2026-07-26$59.533,77115.792145.67%6028.04%$0.992
2026-07-27..2026-08-02$39.382,96413.291665.60%5533.13%$0.716
  • click → install 28.04% → 33.13% (+18.2%, p = 0.284) — did not separate.
  • CTR 5.67% → 5.60% (-1.3%, p = 0.896) — did not separate.

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

campaignspendshareimpressionsimpr shareCPMclicksCTRcost/clickinstallsCPIwithin-daywROASpayers
T2 (Jul 25)$132.114.5%9,8082.3%13.475655.76%$0.234182$0.726$95.730.7212

This campaign's pooled row is the only one on the page that moves down, and its whole-week CPI is $0.726 against the earlier week's $1.167.

Twelve payers is under the bar, so the 0.72 is a direction, up from 0.35 on four payers a week earlier.

2026-08-16T16:04:53.000153 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 25 50 75 100 125 150 175 USD 0.35 0.35 0.35 1.34 0.72 0.78 the number above each bar is that measure's ROAS against the same period's spend The three revenue measures, 2026-07-20..2026-07-26 against 2026-07-27..2026-08-02 (UTC) 2026-07-20..2026-07-26 2026-07-27..2026-08-02
The three revenue measures on both periods, ROAS above each bar
2026-08-16T16:04:53.052228 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-07-20..2026-07-26 2026-07-27..2026-08-02 0 25 50 75 100 125 150 175 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
T2b/utility_6s#3$48.712,52419.301546.10%5636.36%$0.870
T2b/latina_es_bikini_10s$40.274,4729.002746.13%9032.85%$0.447
T2b/utility_15s#2$39.472,42716.261204.94%2924.17%$1.361
T2b/latina_es_bikini_6s$3.663859.51174.42%635.29%$0.610
T2b/latina_es_slip_dress$0.000—0—1—$0.000

The Spanish-language pack buys impressions at roughly half the incumbent's price, and the tab's cheapest install is the pack's.

B. Per asset — the three revenue measures

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

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
T2b/utility_6s#3$5.710.12 (0.12)$5.710.12$5.710.1211.8%0.1025.71100.0%
T2b/latina_es_bikini_10s$108.252.69 (2.67)$68.401.70$71.801.78910.0%0.7607.6033.2%
T2b/utility_15s#2$28.430.72 (0.86)$21.630.55$25.030.6326.9%0.74610.8173.6%
T2b/latina_es_bikini_6s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
T2b/latina_es_slip_dress$0.00— (—)$0.00—$0.00—00.0%0.000——

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

Nothing here clears the payer bar. latina_es_bikini_10s carries the campaign's revenue almost by itself, a direction worth another week of budget.

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
T2b/utility_6s#3$28.730.0%0.0%100.0%0.0%
T2b/latina_es_bikini_10s$25.300.0%0.0%100.0%0.0%
T2b/utility_15s#2$21.110.0%0.0%100.0%0.0%
T2b/latina_es_bikini_6s$1.220.0%0.0%100.0%—

No American money in or out, so nothing in this tab is the effect the last column exists to catch.

Across the week

2026-08-16T16:04:53.110430 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 CTR % hour of day, pooled across the 7 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-07-27..2026-08-02 (UTC)
CTR by hour, one line per asset
2026-08-16T16:04:53.209498 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-07-27..2026-08-02 (UTC)
Click-to-install by hour, one line per asset
2026-08-16T16:04:53.255050 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-07-27..2026-08-02 (UTC)
Cost per install by hour, one line per asset
2026-08-16T16:04:53.158650 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 USD per 1,000 impressions hour of day, pooled across the 7 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-07-27..2026-08-02 (UTC)
CPM by hour, one line per asset
2026-08-16T16:04:53.340724 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ T2b/utility_6s#3 T2b/latina_es_bikini_10s 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-07-27..2026-08-02 (META days) MX other
Where each asset bought: share of its own spend by region
2026-08-16T16:04:53.382339 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ T2b/utility_6s#3 T2b/latina_es_bikini_10s 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 USD per install Cost per install by region — every asset, 2026-07-27..2026-08-02 (META days) MX
Cost per install by region, every asset
2026-08-16T16:04:53.420628 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ T2b/utility_6s#3 T2b/latina_es_bikini_10s 0 10 20 30 40 50 60 70 USD Within-day revenue by region — every asset, 2026-07-27..2026-08-02 (META days) MX
Within-day revenue by region, every asset
2026-08-16T16:04:53.498673 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0 2 4 6 8 10 payers / installs % Payer rate by day — every asset (UTC) T2b/utility_6s#3 T2b/latina_es_bikini_10s T2b/utility_15s#2
Payer rate by day, one line per asset
2026-08-16T16:04:53.552688 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 within-day USD per install ARPU by day — every asset (UTC) T2b/utility_6s#3 T2b/latina_es_bikini_10s T2b/utility_15s#2
ARPU by day, one line per asset
2026-08-16T16:04:53.624144 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0 2 4 6 8 10 within-day USD per payer ARPPU by day — every asset (UTC) T2b/utility_6s#3 T2b/latina_es_bikini_10s T2b/utility_15s#2
ARPPU by day, one line per asset
2026-08-16T16:04:53.674501 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 revenue / spend Within-day ROAS by day — every asset (UTC) T2b/utility_6s#3 T2b/latina_es_bikini_10s T2b/utility_15s#2
Within-day ROAS by day, one line per asset
2026-08-16T16:04:53.741335 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-07-27..2026-08-02 T2b/utility_6s#3 T2b/latina_es_bikini_10s T2b/utility_15s#2
Composite: every asset across every measure, normalised across the period

Assets under 20 installs in the week are dropped from the composite and the region charts, and money-chart markers are hollow where the point sits under 16 payers.

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

Structure over the week

The premium-country tier of the _260725 test. It was switched back on late on 2026-07-26 with four of its six arms cut and the surviving two raised from $15 to $60 a day, to test whether its impression price would fall once it was funded at real volume (asset_performance_report_2026-07-27.md). Six creatives are mapped and two delivered.

Hourly

No hour was delivered in by both 2026-07-20..2026-07-26 and 2026-07-27..2026-08-02 above the impression floor, so there is no matched-hours comparison to make. On 1,362 impressions for the whole week, a bucket that pools seven days still averages under 60. There is no paired chart under this heading for the same reason there is no paired table.

2026-08-16T16:04:55.744076 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0 2 4 6 8 10 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 0 20 40 60 80 100 120 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-07-27..2026-08-02 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:04:55.886010 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 7 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 — T1 (Jul 25), 2026-07-27..2026-08-02 (UTC)
CTR, CPM, click-to-install and CPI by hour, T1 (Jul 25)

Country

The campaign's country cut is table C below, on the account's own day. This is the only tab on the page whose assets bought a large share of the United States, 46.4% and 42.4% of their own spend.

2026-08-16T16:04:56.024026 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ US GB AU CA NZ 0 10 20 30 40 50 60 70 80 USD spend and installs are a META-day cut (no hour x country grid exists); revenue is the report period Spend against within-day revenue by country — 2026-07-27..2026-08-02 spend within-day revenue
Spend against within-day revenue, by country
2026-08-16T16:04:56.064728 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ US GB AU CA 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 USD per install Cost per install by country — 2026-07-27..2026-08-02 (META days)
Cost per install by country

Aggregate over the week

No hour was delivered in by both 2026-07-20..2026-07-26 and 2026-07-27..2026-08-02, so there is no matched-hours funnel for this campaign. Its whole week is the row below, and the campaign's own row from the earlier week's table is quoted under it in prose.

campaignspendshareimpressionsimpr shareCPMclicksCTRcost/clickinstallsCPIwithin-daywROASpayers
T1 (Jul 25)$118.734.0%1,3620.3%87.1720815.27%$0.57182$1.448$82.890.705

Funding it did not make its impressions cheaper. A week earlier: $85.20, 1,229 impressions, CPM 69.32. More money bought about as many at 87.17.

Everything after the impression improved. CTR went 11.88% to 15.27% and installs 20 to 82, so cost per install fell from $4.260 to $1.448.

2026-08-16T16:04:56.129338 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 20 40 60 80 USD 0.06 0.06 0.06 0.79 0.70 0.70 the number above each bar is that measure's ROAS against the same period's spend The three revenue measures, 2026-07-20..2026-07-26 against 2026-07-27..2026-08-02 (UTC) 2026-07-20..2026-07-26 2026-07-27..2026-08-02
The three revenue measures on both periods, ROAS above each bar
2026-08-16T16:04:56.176509 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-07-20..2026-07-26 2026-07-27..2026-08-02 0 20 40 60 80 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
T1b/utility_6s#2$59.9667488.9611717.36%5244.44%$1.153
T1b/utility_15s$58.7768885.429113.23%2931.87%$2.027

The account's dearest impressions, and its best click-to-install rates above $50 of spend. The premium geography converts better and costs far more to reach.

B. Per asset — the three revenue measures

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

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
T1b/utility_6s#2$77.901.30 (1.12)$66.931.12$66.931.1235.8%1.28722.3152.3%
T1b/utility_15s$15.960.27 (0.27)$15.960.27$15.960.2726.7%0.5327.9868.8%

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

Five payers across the tab, and the larger row's revenue is half one person. Its ARPPU of 22.31 is the page's highest above two payers.

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
T1b/utility_6s#2$38.900.0%46.4%53.6%100.0%
T1b/utility_15s$37.630.0%42.4%57.6%68.8%

⚠ This is the clearest geography purchase on the page. Whatever these two rows say about the creative, they say first which country was bought.

Across the week

2026-08-16T16:04:56.238527 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 CTR % hour of day, pooled across the 7 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-07-27..2026-08-02 (UTC)
CTR by hour, one line per asset
2026-08-16T16:04:56.337901 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-07-27..2026-08-02 (UTC)
Click-to-install by hour, one line per asset
2026-08-16T16:04:56.384557 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-07-27..2026-08-02 (UTC)
Cost per install by hour, one line per asset
2026-08-16T16:04:56.286834 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 USD per 1,000 impressions hour of day, pooled across the 7 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-07-27..2026-08-02 (UTC)
CPM by hour, one line per asset
2026-08-16T16:04:56.476845 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ T1b/utility_6s#2 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-07-27..2026-08-02 (META days) US GB AU CA NZ other
Where each asset bought: share of its own spend by region
2026-08-16T16:04:56.514727 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ T1b/utility_6s#2 0.0 0.5 1.0 1.5 2.0 2.5 USD per install Cost per install by region — every asset, 2026-07-27..2026-08-02 (META days) US GB AU CA
Cost per install by region, every asset
2026-08-16T16:04:56.552492 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ T1b/utility_6s#2 0 10 20 30 40 50 60 70 USD Within-day revenue by region — every asset, 2026-07-27..2026-08-02 (META days) US
Within-day revenue by region, every asset
2026-08-16T16:04:56.626647 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0 1 2 3 4 5 6 7 payers / installs % Payer rate by day — every asset (UTC) T1b/utility_6s#2 T1b/utility_15s
Payer rate by day, one line per asset
2026-08-16T16:04:56.671933 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 1.2 within-day USD per install ARPU by day — every asset (UTC) T1b/utility_6s#2 T1b/utility_15s
ARPU by day, one line per asset
2026-08-16T16:04:56.714720 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0 5 10 15 20 within-day USD per payer ARPPU by day — every asset (UTC) T1b/utility_6s#2 T1b/utility_15s
ARPPU by day, one line per asset
2026-08-16T16:04:56.757471 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0.4 0.6 0.8 1.0 revenue / spend Within-day ROAS by day — every asset (UTC) T1b/utility_6s#2 T1b/utility_15s
Within-day ROAS by day, one line per asset
2026-08-16T16:04:56.820732 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-07-27..2026-08-02 T1b/utility_6s#2 T1b/utility_15s
Composite: every asset across every measure, normalised across the period

Assets under 20 installs in the week are dropped from the composite and the region charts, and money-chart markers are hollow where the point sits under 16 payers.

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

Structure over the week

The _260729 German-area campaign, opened on 2026-07-30 with two ad sets at $75 a day each: DE and AT together, and Switzerland on its own (asset_performance_report_2026-07-30.md). Twenty-nine creatives are mapped and twenty-four delivered, five of them taking more than $4 for the week. This is the account's smallest buy and the source of its most expensive installs.

Hourly

No hour was delivered in by both 2026-07-20..2026-07-26 and 2026-07-27..2026-08-02 above the impression floor, so there is no matched-hours comparison to make and no paired chart: the campaign did not exist in the earlier week, and 2,140 impressions across seven days leaves every pooled bucket far under the 350 floor.

2026-08-16T16:04:58.754403 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 hour of day, pooled across the 7 days of the period — a pooling, not a timeline Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 0 100 200 300 400 500 impressions Impressions and installs by hour impressions installs 0 2 4 6 8 installs (Meta Leads) The period's motion — whole account, 2026-07-27..2026-08-02 (UTC)
The period's motion: spend by hour, and impressions against installs
2026-08-16T16:04:58.908274 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 3 4 5 6 CTR % CTR 0 4 8 12 16 20 hour (UTC) 37.5 40.0 42.5 45.0 47.5 50.0 52.5 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 26.5 27.0 27.5 28.0 28.5 29.0 29.5 30.0 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install 0 4 8 12 16 20 hour (UTC) 3.0 3.5 4.0 4.5 USD Cost per install Delivery by hour — German (DE/AT/CH), 2026-07-27..2026-08-02 (UTC)
CTR, CPM, click-to-install and CPI by hour, German (DE/AT/CH)

Country

The campaign's country cut is table C below, on the account's own day. Its countries are the account-level table's DE at $77.22 and CH at $45.19, and section 3 records that all of each one's revenue is a single payer.

2026-08-16T16:04:59.040299 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ DE CH AT 0 20 40 60 80 USD spend and installs are a META-day cut (no hour x country grid exists); revenue is the report period Spend against within-day revenue by country — 2026-07-27..2026-08-02 spend within-day revenue
Spend against within-day revenue, by country
2026-08-16T16:04:59.074811 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ DE CH AT 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0 USD per install Cost per install by country — 2026-07-27..2026-08-02 (META days)
Cost per install by country

Aggregate over the week

No hour was delivered in by both 2026-07-20..2026-07-26 and 2026-07-27..2026-08-02, so there is no matched-hours funnel for this campaign. Its whole week is the row below.

campaignspendshareimpressionsimpr shareCPMclicksCTRcost/clickinstallsCPIwithin-daywROASpayers
German (DE/AT/CH)$99.983.4%2,1400.5%46.72833.88%$1.20523$4.347$127.001.272

⚠ Two payers. The 1.27 is two people. It takes section 5's second-highest return on the page's smallest sample, at its highest cost per install.

A click rate of 3.88% is the lowest of the five campaigns, and with impressions at $46.72 that is what produces a $4.347 install.

2026-08-16T16:04:59.143768 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 20 40 60 80 100 120 140 USD 0.00 0.00 0.00 1.49 1.27 1.45 the number above each bar is that measure's ROAS against the same period's spend The three revenue measures, 2026-07-20..2026-07-26 against 2026-07-27..2026-08-02 (UTC) 2026-07-20..2026-07-26 2026-07-27..2026-08-02
The three revenue measures on both periods, ROAS above each bar
2026-08-16T16:04:59.194978 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-07-20..2026-07-26 2026-07-27..2026-08-02 0 20 40 60 80 100 120 140 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
DE/de_german_mature_6s$27.4045660.09296.36%827.59%$3.425
DE/ch_arab_gulf_6s$21.7549843.67122.41%18.33%$21.750
DE/de_arab_gulf_10s$5.798369.7656.02%120.00%$5.790
DE/ch_german_10s$5.2010250.9821.96%00.00%—
DE/ch_latina_true_6s$5.1710648.7710.94%00.00%—
DE/de_turkish_mature_10s$4.7112637.3853.97%360.00%$1.570
DE/german_6s$4.0710040.7066.00%00.00%—
DE/ch_german_mature_6s$4.0210339.0300.00%0——
DE/turkish_mature$3.955769.3047.02%4100.00%$0.987
DE/ch_arab_gulf_10s$3.6614625.0710.68%1100.00%$3.660
DE/german_mature$3.018933.8266.74%233.33%$1.505
DE/de_arab_gulf_6s$2.512696.5427.69%150.00%$2.510
DE/german$1.906031.6700.00%0——
DE/latina_true$1.362164.7614.76%00.00%—
DE/de_turkish_10s$1.163038.67620.00%233.33%$0.580
DE/de_pool5_15s$1.042149.5200.00%0——
DE/de_asian_mature_6s$0.993726.7600.00%0——
DE/ch_german_mature_10s$0.763025.3313.33%00.00%—
DE/turkish_6s$0.542422.5014.17%00.00%—
DE/ch_latina_mature_10s$0.42760.0000.00%0——
DE/de_latina_true_6s$0.25550.0000.00%0——
DE/ch_german_6s$0.14435.0000.00%0——
DE/ch_asian_mature_6s$0.11336.67133.33%00.00%—
DE/ch_pool5_15s$0.07417.5000.00%0——

Twenty-four creatives share $99.98 and two take half of it. Every rate below those two runs on double-digit impressions and none is readable.

The Swiss arm's most expensive install is $21.750, and that row is the campaign's second-largest by spend.

B. Per asset — the three revenue measures

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

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
DE/de_german_mature_6s$101.663.71 (3.36)$92.363.37$98.103.58112.5%11.54592.36100.0%
DE/ch_arab_gulf_6s$47.022.16 (2.15)$34.651.59$47.022.16150.0%17.32334.65100.0%
DE/de_arab_gulf_10s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/ch_german_10s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/ch_latina_true_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/de_turkish_mature_10s$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.000————
DE/ch_german_mature_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/turkish_mature$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/ch_arab_gulf_10s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/german_mature$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/de_arab_gulf_6s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/german$0.000.00 (0.00)$0.000.00$0.000.000————
DE/latina_true$0.000.00 (0.00)$0.000.00$0.000.000————
DE/de_turkish_10s$0.000.00 (4.30)$0.000.00$0.000.0000.0%0.000——
DE/de_pool5_15s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/de_asian_mature_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/ch_german_mature_10s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/turkish_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/ch_latina_mature_10s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/de_latina_true_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/ch_german_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/ch_asian_mature_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/ch_pool5_15s$0.000.00 (0.00)$0.000.00$0.000.000————

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

Two rows have revenue and each is one person at 100.0%. Those two baskets are the campaign's entire $127.00; twenty-two creatives returned nothing.

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
DE/de_german_mature_6s$27.400.0%0.0%100.0%0.0%
DE/ch_arab_gulf_6s$21.750.0%0.0%100.0%0.0%
DE/de_arab_gulf_10s$5.790.0%0.0%100.0%—
DE/ch_german_10s$5.200.0%0.0%100.0%—
DE/ch_latina_true_6s$5.170.0%0.0%100.0%—
DE/de_turkish_mature_10s$4.710.0%0.0%100.0%—
DE/german_6s$4.070.0%0.0%100.0%—
DE/ch_german_mature_6s$4.020.0%0.0%100.0%—
DE/turkish_mature$3.950.0%0.0%100.0%—
DE/ch_arab_gulf_10s$3.660.0%0.0%100.0%—
DE/german_mature$3.010.0%0.0%100.0%—
DE/de_arab_gulf_6s$2.510.0%0.0%100.0%—
DE/german$1.900.0%0.0%100.0%—
DE/latina_true$1.360.0%0.0%100.0%—
DE/de_turkish_10s$1.160.0%0.0%100.0%—
DE/de_pool5_15s$1.040.0%0.0%100.0%—
DE/de_asian_mature_6s$0.990.0%0.0%100.0%—
DE/ch_german_mature_10s$0.760.0%0.0%100.0%—
DE/turkish_6s$0.540.0%0.0%100.0%—
DE/ch_latina_mature_10s$0.420.0%0.0%100.0%—
DE/de_latina_true_6s$0.250.0%0.0%100.0%—
DE/ch_german_6s$0.140.0%0.0%100.0%—
DE/ch_asian_mature_6s$0.110.0%0.0%100.0%—
DE/ch_pool5_15s$0.070.0%0.0%100.0%—

This table's working column is blank. The campaign targets neither India nor the United States, and DE against CH is not a column here.

Across the week

2026-08-16T16:04:59.268551 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 CTR % hour of day, pooled across the 7 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-07-27..2026-08-02 (UTC)
CTR by hour, one line per asset
2026-08-16T16:04:59.363050 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-07-27..2026-08-02 (UTC)
Click-to-install by hour, one line per asset
2026-08-16T16:04:59.409717 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-07-27..2026-08-02 (UTC)
Cost per install by hour, one line per asset
2026-08-16T16:04:59.317305 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 USD per 1,000 impressions hour of day, pooled across the 7 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-07-27..2026-08-02 (UTC)
CPM by hour, one line per asset
2026-08-16T16:04:59.495513 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-07-27..2026-08-02 (META days) DE CH AT other
Where each asset bought: share of its own spend by region
2026-08-16T16:04:59.524263 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0.0 0.2 0.4 0.6 0.8 1.0 USD per install Cost per install by region — every asset, 2026-07-27..2026-08-02 (META days)
Cost per install by region, every asset
2026-08-16T16:04:59.547704 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0.0 0.2 0.4 0.6 0.8 1.0 USD Within-day revenue by region — every asset, 2026-07-27..2026-08-02 (META days)
Within-day revenue by region, every asset
2026-08-16T16:04:59.614708 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 payers / installs % Payer rate by day — every asset (UTC)
Payer rate by day, one line per asset
2026-08-16T16:04:59.656956 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 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)
ARPU by day, one line per asset
2026-08-16T16:04:59.695224 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 within-day USD per payer ARPPU by day — every asset (UTC)
ARPPU by day, one line per asset
2026-08-16T16:04:59.731951 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 revenue / spend Within-day ROAS by day — every asset (UTC)
Within-day ROAS by day, one line per asset
2026-08-16T16:04:59.788164 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-07-27..2026-08-02
Composite: every asset across every measure, normalised across the period

No asset in this campaign reached 20 installs in the week, so the composite and the region charts have nothing to draw and the money-chart markers are hollow throughout.

7Every asset the account ran

The account's whole creative inventory for the week, across all five campaigns, in the three standing tables. A row here can be ranked against another row in the same campaign and not against a row in a different one: inside a campaign the geography is held, so cost columns compare; across campaigns the geography is the treatment and the auction chose the audience, which is what DECISION_LOG.md

#48 bars ranking creatives on.

A. Per asset — delivery

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

assetspendimpressionsCPMclicksCTRinstallsclick→installCPI
earner/bodysuit$874.5097,5928.968,9659.19%2,53628.29%$0.345
earner/bikini$382.2443,7228.743,5238.06%92126.14%$0.415
T3b/utility_6s$284.1046,0246.172,4045.22%45318.84%$0.627
T3b/sasian_spice5_15s$282.7767,0514.222,1823.25%45220.71%$0.626
T3b/sasian_bodysuit_10s$273.9853,2955.142,7115.09%49018.07%$0.559
T3b/sasian_bikini_6s$188.6857,9493.263,1385.42%75524.06%$0.250
T3b/sasian_bikini_10s$119.7434,2603.501,8355.36%32917.93%$0.364
earner/pool5$113.689,67911.751,30313.46%35727.40%$0.318
T1b/utility_6s#2$59.9667488.9611717.36%5244.44%$1.153
T1b/utility_15s$58.7768885.429113.23%2931.87%$2.027
T2b/utility_6s#3$48.712,52419.301546.10%5636.36%$0.870
T2b/latina_es_bikini_10s$40.274,4729.002746.13%9032.85%$0.447
T2b/utility_15s#2$39.472,42716.261204.94%2924.17%$1.361
DE/de_german_mature_6s$27.4045660.09296.36%827.59%$3.425
T3b/sasian_fishnet_top_6s$22.813,8585.911433.71%4027.97%$0.570
DE/ch_arab_gulf_6s$21.7549843.67122.41%18.33%$21.750
T3b/sasian_slip_dress$21.472,6848.002228.27%3716.67%$0.580
T3b/sasian_bodysuit_6s$12.741,4528.77453.10%1226.67%$1.062
T3b/sasian_offshoulder$7.527929.49546.82%23.70%$3.760
T3b/sasian_corset_6s$6.741,0956.16706.39%912.86%$0.749
DE/de_arab_gulf_10s$5.798369.7656.02%120.00%$5.790
DE/ch_german_10s$5.2010250.9821.96%00.00%—
DE/ch_latina_true_6s$5.1710648.7710.94%00.00%—
DE/de_turkish_mature_10s$4.7112637.3853.97%360.00%$1.570
DE/german_6s$4.0710040.7066.00%00.00%—
DE/ch_german_mature_6s$4.0210339.0300.00%0——
DE/turkish_mature$3.955769.3047.02%4100.00%$0.987
DE/ch_arab_gulf_10s$3.6614625.0710.68%1100.00%$3.660
T2b/latina_es_bikini_6s$3.663859.51174.42%635.29%$0.610
T3b/sasian_fishnet_top_10s$3.5231511.17123.81%325.00%$1.173
DE/german_mature$3.018933.8266.74%233.33%$1.505
DE/de_arab_gulf_6s$2.512696.5427.69%150.00%$2.510
DE/german$1.906031.6700.00%0——
DE/latina_true$1.362164.7614.76%00.00%—
DE/de_turkish_10s$1.163038.67620.00%233.33%$0.580
DE/de_pool5_15s$1.042149.5200.00%0——
DE/de_asian_mature_6s$0.993726.7600.00%0——
T3b/sasian_corset_10s$0.898310.7256.02%120.00%$0.890
DE/ch_german_mature_10s$0.763025.3313.33%00.00%—
DE/turkish_6s$0.542422.5014.17%00.00%—
DE/ch_latina_mature_10s$0.42760.0000.00%0——
DE/de_latina_true_6s$0.25550.0000.00%0——
DE/ch_german_6s$0.14435.0000.00%0——
DE/ch_asian_mature_6s$0.11336.67133.33%00.00%—
DE/ch_pool5_15s$0.07417.5000.00%0——
T3b/sasian_jean_shorts$0.05172.9400.00%0——
T3a/utility_sexy#2$0.000—0—1—$0.000
T2a/control_sexy#2$0.000—0—0——
T2b/latina_es_slip_dress$0.000—0—1—$0.000
T3b/control_15s#3$0.000—0—1—$0.000
T3b/utility_15s#3$0.000—0—0——
T3b/control_10s#3$0.000—0—0——

Impression price runs 3.26 to 88.96 here and geography is what moves it. Click-to-install, 3.70% to 100.00%, is a country before it is a clip.

Eight assets took more than $100 and they set the account's shape. Below them the impression counts are two digits and the rates are noise.

B. Per asset — the three revenue measures

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

assetbookedbROAS (Meta)within-daywROAScohort@HcROASpayerspayer%ARPUARPPUlargest payer
earner/bodysuit$1,534.081.75 (1.94)$1,169.031.34$1,486.791.701154.2%0.42610.174.3%
earner/bikini$542.271.42 (1.32)$504.961.32$545.911.43414.1%0.50412.3211.3%
T3b/utility_6s$471.361.66 (1.19)$190.580.67$272.760.96254.8%0.3697.6212.4%
T3b/sasian_spice5_15s$357.311.26 (1.02)$217.760.77$243.620.86315.9%0.4177.025.9%
T3b/sasian_bodysuit_10s$381.801.39 (1.40)$259.210.95$295.231.08305.3%0.4558.6416.0%
T3b/sasian_bikini_6s$485.032.57 (2.29)$283.401.50$316.271.68182.2%0.34215.7433.1%
T3b/sasian_bikini_10s$107.520.90 (1.12)$79.460.66$79.460.6671.9%0.21511.3552.0%
earner/pool5$197.881.74 (1.68)$183.431.61$190.021.67205.2%0.4809.1719.4%
T1b/utility_6s#2$77.901.30 (1.12)$66.931.12$66.931.1235.8%1.28722.3152.3%
T1b/utility_15s$15.960.27 (0.27)$15.960.27$15.960.2726.7%0.5327.9868.8%
T2b/utility_6s#3$5.710.12 (0.12)$5.710.12$5.710.1211.8%0.1025.71100.0%
T2b/latina_es_bikini_10s$108.252.69 (2.67)$68.401.70$71.801.78910.0%0.7607.6033.2%
T2b/utility_15s#2$28.430.72 (0.86)$21.630.55$25.030.6326.9%0.74610.8173.6%
DE/de_german_mature_6s$101.663.71 (3.36)$92.363.37$98.103.58112.5%11.54592.36100.0%
T3b/sasian_fishnet_top_6s$100.294.40 (5.79)$88.783.89$88.783.89815.1%1.67511.1046.6%
DE/ch_arab_gulf_6s$47.022.16 (2.15)$34.651.59$47.022.16150.0%17.32334.65100.0%
T3b/sasian_slip_dress$84.073.92 (1.90)$35.181.64$44.492.0748.0%0.7048.7943.2%
T3b/sasian_bodysuit_6s$33.812.65 (2.35)$5.760.45$15.081.1818.3%0.4805.76100.0%
T3b/sasian_offshoulder$0.000.00 (2.63)$0.000.00$0.000.0000.0%0.000——
T3b/sasian_corset_6s$39.685.89 (1.37)$24.503.63$24.503.6319.1%2.22724.50100.0%
DE/de_arab_gulf_10s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/ch_german_10s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/ch_latina_true_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/de_turkish_mature_10s$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.000————
DE/ch_german_mature_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/turkish_mature$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/ch_arab_gulf_10s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
T2b/latina_es_bikini_6s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
T3b/sasian_fishnet_top_10s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/german_mature$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/de_arab_gulf_6s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/german$0.000.00 (0.00)$0.000.00$0.000.000————
DE/latina_true$0.000.00 (0.00)$0.000.00$0.000.000————
DE/de_turkish_10s$0.000.00 (4.30)$0.000.00$0.000.0000.0%0.000——
DE/de_pool5_15s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/de_asian_mature_6s$0.000.00 (0.00)$0.000.00$0.000.000————
T3b/sasian_corset_10s$0.000.00 (0.00)$0.000.00$0.000.0000.0%0.000——
DE/ch_german_mature_10s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/turkish_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/ch_latina_mature_10s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/de_latina_true_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/ch_german_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/ch_asian_mature_6s$0.000.00 (0.00)$0.000.00$0.000.000————
DE/ch_pool5_15s$0.000.00 (0.00)$0.000.00$0.000.000————
T3b/sasian_jean_shorts$0.000.00 (0.00)$0.000.00$0.000.000————
T3a/utility_sexy#2$36.43— (—)$17.80—$17.80—210.5%0.9378.9080.0%
T2a/control_sexy#2$0.00— (—)$0.00—$0.00—00.0%0.000——
T2b/latina_es_slip_dress$0.00— (—)$0.00—$0.00—00.0%0.000——
T3b/control_15s#3$0.00— (—)$0.00—$0.00—00.0%0.000——
T3b/utility_15s#3$8.75— (—)$0.00—$0.00—00.0%0.000——
T3b/control_10s#3$12.88— (—)$3.56—$3.56—150.0%1.7803.56100.0%

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 payer bar and all seven belong to the two campaigns that carried the week. The 08-15 daily, for comparison, had one.

Concentration falls as the payer count rises. Every row under the bar that has revenue sits between 33.2% and 100.0% in its largest basket.

Payer rate does not order return: sasian_bikini_6s converts at 2.2% and returns 1.50, utility_6s at 4.8% and 0.67, because its ARPPU is twice as high.

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$907.6731.2%5.3%63.5%5.9%
earner/bikini$393.5928.4%4.7%66.9%14.2%
T3b/utility_6s$271.18100.0%0.0%0.0%0.0%
T3b/sasian_spice5_15s$275.01100.0%0.0%0.0%0.0%
T3b/sasian_bodysuit_10s$253.11100.0%0.0%0.0%0.0%
T3b/sasian_bikini_6s$182.76100.0%0.0%0.0%0.0%
T3b/sasian_bikini_10s$119.26100.0%0.0%-0.0%0.0%
earner/pool5$122.2827.8%5.4%66.8%2.7%
T1b/utility_6s#2$38.900.0%46.4%53.6%100.0%
T1b/utility_15s$37.630.0%42.4%57.6%68.8%
T2b/utility_6s#3$28.730.0%0.0%100.0%0.0%
T2b/latina_es_bikini_10s$25.300.0%0.0%100.0%0.0%
T2b/utility_15s#2$21.110.0%0.0%100.0%0.0%
DE/de_german_mature_6s$27.400.0%0.0%100.0%0.0%
T3b/sasian_fishnet_top_6s$14.85100.0%0.0%0.0%0.0%
DE/ch_arab_gulf_6s$21.750.0%0.0%100.0%0.0%
T3b/sasian_slip_dress$18.43100.0%0.0%0.0%0.0%
T3b/sasian_bodysuit_6s$8.94100.0%0.0%0.0%0.0%
T3b/sasian_offshoulder$7.44100.0%0.0%0.0%—
DE/de_arab_gulf_10s$5.790.0%0.0%100.0%—
DE/ch_german_10s$5.200.0%0.0%100.0%—
DE/ch_latina_true_6s$5.170.0%0.0%100.0%—
DE/de_turkish_mature_10s$4.710.0%0.0%100.0%—
DE/german_6s$4.070.0%0.0%100.0%—
DE/ch_german_mature_6s$4.020.0%0.0%100.0%—
DE/turkish_mature$3.950.0%0.0%100.0%—
DE/ch_arab_gulf_10s$3.660.0%0.0%100.0%—
T2b/latina_es_bikini_6s$1.220.0%0.0%100.0%—
T3b/sasian_fishnet_top_10s$2.95100.0%0.0%0.0%—
DE/german_mature$3.010.0%0.0%100.0%—
DE/de_arab_gulf_6s$2.510.0%0.0%100.0%—
DE/german$1.900.0%0.0%100.0%—
DE/latina_true$1.360.0%0.0%100.0%—
DE/de_turkish_10s$1.160.0%0.0%100.0%—
DE/de_pool5_15s$1.040.0%0.0%100.0%—
DE/de_asian_mature_6s$0.990.0%0.0%100.0%—
DE/ch_german_mature_10s$0.760.0%0.0%100.0%—
DE/turkish_6s$0.540.0%0.0%100.0%—
DE/ch_latina_mature_10s$0.420.0%0.0%100.0%—
DE/de_latina_true_6s$0.250.0%0.0%100.0%—
DE/ch_german_6s$0.140.0%0.0%100.0%—
DE/ch_asian_mature_6s$0.110.0%0.0%100.0%—
DE/ch_pool5_15s$0.070.0%0.0%100.0%—

The account ran three geographies this week: the earner's worldwide mix, the T3 pack's 100.0% India, and everything else neither.

Across the week

2026-08-16T16:04:01.932617 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 2 4 6 8 10 12 14 16 CTR % hour of day, pooled across the 7 days of the period — a pooling, not a timeline CTR by hour — every asset, 2026-07-27..2026-08-02 (UTC) earner/bodysuit earner/bikini T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s earner/pool5 T3b/sasian_fishnet_top_6s
CTR by hour, one line per asset
2026-08-16T16:04:02.089978 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 10 20 30 40 50 installs / clicks % hour of day, pooled across the 7 days of the period — a pooling, not a timeline Click → install by hour — every asset, 2026-07-27..2026-08-02 (UTC) earner/bodysuit earner/bikini T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s earner/pool5 T3b/sasian_fishnet_top_6s
Click-to-install by hour, one line per asset
2026-08-16T16:04:02.162666 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.5 1.0 1.5 2.0 USD hour of day, pooled across the 7 days of the period — a pooling, not a timeline Cost per install by hour — every asset, 2026-07-27..2026-08-02 (UTC) earner/bodysuit earner/bikini T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s earner/pool5 T3b/sasian_fishnet_top_6s
Cost per install by hour, one line per asset
2026-08-16T16:04:02.012788 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 2 4 6 8 10 12 14 16 USD per 1,000 impressions hour of day, pooled across the 7 days of the period — a pooling, not a timeline CPM by hour — every asset, 2026-07-27..2026-08-02 (UTC) earner/bodysuit earner/bikini T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s earner/pool5 T3b/sasian_fishnet_top_6s
CPM by hour, one line per asset
2026-08-16T16:04:02.336094 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/bikini T3b/sasian_spice5_15s T3b/utility_6s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s earner/pool5 T3b/sasian_bikini_10s T1b/utility_6s#2 T2b/utility_6s#3 T2b/latina_es_bikini_10s T3b/sasian_slip_dress T3b/sasian_fishnet_top_6s 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-07-27..2026-08-02 (META days) IN MX US DE BR ID other
Where each asset bought: share of its own spend by region
2026-08-16T16:04:02.414737 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/bikini T3b/sasian_spice5_15s T3b/utility_6s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s earner/pool5 T3b/sasian_bikini_10s T1b/utility_6s#2 T2b/utility_6s#3 T2b/latina_es_bikini_10s T3b/sasian_slip_dress T3b/sasian_fishnet_top_6s 0.0 0.2 0.4 0.6 0.8 1.0 USD per install Cost per install by region — every asset, 2026-07-27..2026-08-02 (META days) IN MX US DE BR ID
Cost per install by region, every asset
2026-08-16T16:04:02.517025 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/bikini T3b/sasian_spice5_15s T3b/utility_6s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s earner/pool5 T3b/sasian_bikini_10s T1b/utility_6s#2 T2b/utility_6s#3 T2b/latina_es_bikini_10s T3b/sasian_slip_dress T3b/sasian_fishnet_top_6s 0 50 100 150 200 250 300 USD Within-day revenue by region — every asset, 2026-07-27..2026-08-02 (META days) IN MX US DE BR ID
Within-day revenue by region, every asset
2026-08-16T16:04:02.662754 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0 2 4 6 8 10 12 14 16 payers / installs % Payer rate by day — every asset (UTC) earner/bodysuit earner/bikini T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s earner/pool5 T1b/utility_6s#2 T1b/utility_15s T2b/utility_6s#3 T2b/latina_es_bikini_10s T2b/utility_15s#2 T3b/sasian_fishnet_top_6s T3b/sasian_slip_dress
Payer rate by day, one line per asset
2026-08-16T16:04:02.753611 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0.00 0.25 0.50 0.75 1.00 1.25 1.50 1.75 within-day USD per install ARPU by day — every asset (UTC) earner/bodysuit earner/bikini T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s earner/pool5 T1b/utility_6s#2 T1b/utility_15s T2b/utility_6s#3 T2b/latina_es_bikini_10s T2b/utility_15s#2 T3b/sasian_fishnet_top_6s T3b/sasian_slip_dress
ARPU by day, one line per asset
2026-08-16T16:04:02.849868 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0 5 10 15 20 25 within-day USD per payer ARPPU by day — every asset (UTC) earner/bodysuit earner/bikini T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s earner/pool5 T1b/utility_6s#2 T1b/utility_15s T2b/utility_6s#3 T2b/latina_es_bikini_10s T2b/utility_15s#2 T3b/sasian_fishnet_top_6s T3b/sasian_slip_dress
ARPPU by day, one line per asset
2026-08-16T16:04:02.946012 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 07-27 07-28 07-29 07-30 07-31 08-01 08-02 day (UTC) 0 1 2 3 4 revenue / spend Within-day ROAS by day — every asset (UTC) earner/bodysuit earner/bikini T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s earner/pool5 T1b/utility_6s#2 T1b/utility_15s T2b/utility_6s#3 T2b/latina_es_bikini_10s T2b/utility_15s#2 T3b/sasian_fishnet_top_6s T3b/sasian_slip_dress
Within-day ROAS by day, one line per asset
2026-08-16T16:04:03.076185 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-07-27..2026-08-02 earner/bodysuit earner/bikini T3b/utility_6s T3b/sasian_spice5_15s T3b/sasian_bodysuit_10s T3b/sasian_bikini_6s T3b/sasian_bikini_10s earner/pool5 T1b/utility_6s#2 T1b/utility_15s T2b/utility_6s#3 T2b/latina_es_bikini_10s T2b/utility_15s#2 T3b/sasian_fishnet_top_6s T3b/sasian_slip_dress
Composite: every asset across every measure, normalised across the period

Delivery is plotted hourly and money per day, on the same reasoning as inside the tabs. Assets under 20 installs in the week are dropped from the composite and the region charts, and money-chart markers are hollow where the point sits under 16 payers.

8Caveats

⚠⚠ The comparison week is a partial week's buying inside a full week's window. The account's first spend on this app was 2026-07-23, so 2026-07-20, 07-21 and 07-22 carry none of it. The two windows are the same seven days long, which is what makes CPM, CTR, click→install, CPI, payer rate, ARPU, ARPPU and every return column comparable between them. It is also why every level in section 1 moved by hundreds of percent, and why none of those level changes is a result.

⚠ The week spans a budget change on the campaign that spent the most. The worldwide buy ran at $875 a day and then $500 from 04:10 account time on 08-01 (asset_performance_report_2026-08-02.md). The budget is a geography dial on this account (DECISION_LOG.md #47), so its three ads were bought different audiences inside the week and the per-asset table in the earner tab is not regime-matched. Ranking the three on it would be ranking the budget.

⚠ Two campaigns' entire revenue is a handful of people. The German buy's $127.00 is two payers, one for each of its two earning creatives at 100.0% of that creative's total, and T1's $82.89 is five. Both sit under the 16-payer bar and both appear in section 5 alongside campaigns carrying 176 and 126 payers.

The cohort figure is complete on both weeks, and that is a property of their age. Coverage is 100% throughout, so nothing in the cohort column can still rise. A daily report written a day after its day cannot say this, and comparisons drawn here against a daily's cohort figure would be comparing a settled number against a floor.

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

The instrument gate is quoted on the META clock and only there. Our records read 1.05 of Meta's booked value over the account's own days, inside the 0.91 to 1.06 band. The UTC run prints a ratio too and marks it CROSS-CLOCK, NOT A VALID CHECK, because Meta files its conversion value on the conversion hour and that column cannot honestly be restitched.

Section 5 carries no charts. The standing chart set in this build has no campaign-level entry in its section map, so spend share, CPM and CPI by campaign across the run are not drawn at account level. They exist per campaign inside the tabs.

Two tabs carry eighteen charts and three carry nineteen. A campaign that did not deliver in the comparison week has no paired hourly chart to draw, so the earner and German tabs are one short. Every tab still carries every section, and the section says in place what is missing from it.

The page is heavy. One hundred and twelve charts are inlined as SVG at publish time, roughly three megabytes before the markup. The format's rule is not to fix that by moving charts out of tabs, which would rebuild the chart appendix this format deleted.

Registrations run ahead of Meta's installs by about a tenth, 7,375 against 6,686. Both counts are correct on their own instrument and neither is divided by the other anywhere on this page: the funnel is Meta's on both sides and the payer rate is ours on both sides.

CPI's sign test in section 2 runs on 21 buckets, not 24. Buckets 00, 01 and 03 took no install in the earlier week, so they cannot be paired.

Section 5's $13.88 base is not section 2's $14.77. $13.88 is the earlier week's price over the five campaigns that delivered in this one, the like-for-like base; $14.77 is the whole earlier account, including the three Jul 23 campaigns that have since stopped.

9What would settle the open questions

Whether the worldwide buy's 1.36 is the format or the creative. It ran three days at two budgets, with 176 payers, and it was retired on 08-03, the day after this week closed. A regime-held read of its three ads over a single budget is the comparison this week cannot supply, and the 08-02 daily has already run it on part of the span.

Whether the India pack can be pushed over 1.00. T3 returned 0.97 on 126 payers, and section 3 puts India itself at 1.04, so the campaign is running at roughly the country's own level. The four pack creatives that clear the payer bar spread from 0.67 to 1.50, and one more week at this budget would say whether that spread survives.

Whether T1's premium geography is worth $87.17 per thousand impressions. Funding it four-fold raised its price and cut its cost per install to a third. Five payers cannot answer what it earns, and its ARPPU of 22.31 is high enough that the question is worth a budget.

Whether the German buy is anything at all. 23 installs and two payers for $99.98 over three days. It needs either enough budget to reach a readable payer count or a decision to stop, and this week supports neither reading.

10What this hands to the next read

The week of 08-03 inherits an account that has crossed 1.00 on within-day revenue for the first time, and it inherits it from a campaign that was retired on the first day of that week. The question it can answer that this one cannot is whether the account holds 1.14 once the buy that produced 46.5% of this week's spend is gone.

It also inherits the mix question. Two thirds of this week's CPM improvement was money moving to cheaper campaigns, and that move has run out of room: T3 and the earner already held 41.6% and 46.5% of the spend. A further fall in the account's impression price would have to come from inside the campaigns, which is a different and harder thing to buy.

11Reproduce

Report clock UTC. The ad account's exports are stamped in its own zone (UTC-7), so every delivery row is restitched from two account days. The country tables and table C are not restitched and are labelled where they appear. Each hourly bucket on this page pools that hour of the day across the seven days of the period.

⚠ The account's own delivery export shows spend this report does not count, on four days inside these two windows. On 2026-07-20 and 07-21 the account ran the youguqi_ HeiHa test, and on 07-30 and 07-31 it ran 0730_starfall_, media bought on behalf of a third party. Neither is this app's money and neither is in any table here. Rows are selected by Ad ID against the run config's ads map, which is what keeps them out.

run_runs/2026-08-16_periods/, from _runs/2026-08-16_receipt_series/run_config_full.json
period2026-07-27 to 2026-08-02 UTC, against 2026-07-20 to 2026-07-26 UTC
payment cut2026-08-16 10:59 UTC; the META-clock gate run is cut at 2026-08-16 03:59 account time
cohortH=24h, 100% covered on both periods, 7,375 installs aged 325.4 to 489.6 hours at the cut
instrument gateours ÷ Meta booked = 1.05 on the META clock, band 0.91 to 1.06
regimesread from the dailies published inside the period: asset_performance_report_2026-07-27.md, _2026-07-30.md, _2026-08-01.md, _2026-08-02.md
python -m ad_ops.measures       --config <cfg> --from 2026-07-27 --to 2026-08-02 \
                                --prev-from 2026-07-20 --prev-to 2026-07-26
python -m ad_ops.report_tables  --config <cfg> --from 2026-07-27 --to 2026-08-02 \
                                --prev-from 2026-07-20 --prev-to 2026-07-26
python -m ad_ops.report_tables  --config <cfg> --from 2026-07-27 --to 2026-08-02 \
                                --prev-from 2026-07-20 --prev-to 2026-07-26 --campaign-table
python -m ad_ops.report_charts  --config <cfg> --from 2026-07-27 --to 2026-08-02 \
                                --prev-from 2026-07-20 --prev-to 2026-07-26 \
                                --out ad_ops/figures/week_2026-07-27 --relpath figures/week_2026-07-27

Each tab is the same three commands with --campaign &lt;key&gt; and its own --out directory, for the keys earner, t3_0725, t2_0725, t1_0725 and de. The filenames do not carry the campaign, so two campaigns written to one directory overwrite each other.

12Appendix — definitions

The report clock is a UTC day, and this report covers seven of them. Adjust reports in UTC, so a UTC-bucketed report lines up with the attribution dashboard without anyone converting in their head. The ad account is fixed at UTC-7, so a UTC day on it is account day D−1 17:00 to 23:59 plus account day D 00:00 to 16:59.

Four things change when the report covers a week.

  1. The hourly axis is hour of day pooled across the period. Seven days of a twenty-four-hour table means each bucket holds seven of that hour. Read the buckets for diurnal shape and never as a timeline.
  2. The impression floor scales with the period. A bucket must clear 50 impressions per day of the period to be compared, so a seven-day week's floor is 350. A campaign whose buckets fall under it gets no matched-hours comparison, and its section says so in place.
  3. Booked revenue is split by how long its payer had been installed. Over one day that is the same as splitting by install date. Over a week it is not, and the lag-0 row is exactly the within-day total, which is the identity that makes the split worth drawing.
  4. Levels compare here because both periods are seven days long. Where a report's two periods are different lengths only rates compare. These two are equal, so spend, impressions, installs and revenue can be set against each other as well as CPM, CTR, click→install, CPI, payer rate, ARPU and ARPPU. What that does not fix is that one of the two weeks bought on four days.

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 of the period and paid before that day closednever. Sealed at each midnight
cohort at Hthe period'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 earlier 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.

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. Meta can express only booked, so it appears bracketed beside that column and never as a row of its own.

Two install counts exist and they are never crossed. Meta's Leads and our own registrations disagree by 5 to 10%. Meta's is used for the delivery funnel, so CPI and click→install have both numerator and denominator on one instrument. Ours is used for payer rate and every revenue measure, so the payers and the installs they came from are the same population.

A regime is a stretch over which the ad set's daily budget did not change. The budget is a geography dial on this account, so two creatives measured across a budget change were compared on different audiences. Regimes are hand-recorded and go stale silently, so nothing on this page asserts one that is not sourced from a daily published inside the period.

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 a cell with few payers is describing whoever happened to be in it. Seven asset rows on this page clear the bar and forty-five do not.

Internal — noindex. Not for distribution outside the team.