Acquisition
Cost per user comes from your own ad platform credentials. Attribution is deterministic on Android and Apple Ads, cohort-level everywhere else on iOS. Payback and margin are derived, not fetched.
Meta and Google Ads on iOS report installs via SKAdNetwork postbacks: cohort-level, not per user. Treat those rows as directional, not individually attributable.
6 campaigns carrying $48,000 of 30-day spend are not assigned to a property.
Unmapped spend is missing from every cost-per-user, payback and margin figure on this page. The numbers above are understating your cost until this is cleared. Map each campaign below.
Campaign mapping
Suggestions are read off campaign naming patterns. Nothing is applied until you confirm it.
| Campaign | Platform | Spend 30 d | Suggested from | Property | Action |
|---|---|---|---|---|---|
| WF_AND_AAA_broad_0912 | Meta Ads | $18,400 | prefix WF_ + AND token confidence 92% | ||
| wordfall-ios-t2-retarget | Google Ads | $12,100 | contains 'wordfall' + 'ios' confidence 88% | ||
| NL_web_display_sept | Google Ads | $6,900 | prefix NL_ + web token confidence 74% | ||
| TT_test_creative_batch4 | TikTok | $4,600 | platform default only, no property token confidence 41% | ||
| influencer_q3_upload.csv | CSV upload | $3,200 | no naming pattern to read needs a human | ||
| brand_awareness_global | Meta Ads | $2,800 | no property token needs a human |
Suggestions above 70% confidence are pre-selected but still need confirming. A wrong mapping is worse than an unmapped campaign, because it looks correct.
71% of active users are on an app version carrying the SDK. Per-user figures cover those users only.
Channel performance, last 30 days
Sort any column. Loss-making rows are flagged in red.
| Channel↕ | Platform↕ | Spend 30d↕ | Users↕ | Cost / user↕ | Revenue / user (60d)↕ | Payback↕ | Margin▲ | Attribution |
|---|---|---|---|---|---|---|---|---|
| Influencer (CSV upload) | Android | $38,000 | 12,100 | $3.140 | $1.860 | never | -40.8% | CSV, no per-user join |
| Meta — Advantage+ app | iOS | $186,400 | 71,200 | $2.618 | $2.180 | never | -16.7% | cohort-level (SKAdNetwork) |
| TikTok — App install | Android | $94,100 | 62,400 | $1.508 | $1.280 | never | -15.1% | deterministic |
| TikTok — App install | iOS | $76,900 | 24,100 | $3.191 | $2.740 | never | -14.1% | cohort-level (SKAdNetwork) |
| Web — Google Ads display | Web | $41,200 | 96,800 | $0.426 | $0.380 | never | -10.7% | CSV, no per-user join |
| Google Ads — App campaigns | iOS | $121,600 | 41,800 | $2.909 | $2.620 | never | -9.9% | cohort-level (SKAdNetwork) |
| Google Ads — App campaigns | Android | $168,200 | 102,400 | $1.643 | $1.940 | 35 d | 18.1% | deterministic |
| Apple Ads — Search results | iOS | $62,400 | 21,900 | $2.849 | $3.420 | 34 d | 20.0% | deterministic |
| Meta — Advantage+ app | Android | $214,800 | 118,900 | $1.807 | $2.410 | 27 d | 33.4% | deterministic |
| Organic / unattributed No spend. Not a channel you can buy more of. | All | — | 486,200 | — | $1.620 | n/a | n/a — no cost | identified by elimination |
Organic is not a channel
How the organic row above is produced, and why its margin means nothing.
Organic is not detected. It is what is left when nothing else claims the install: no Google Play install referrer on Android, no Apple AdServices token and no SKAdNetwork postback on iOS, no UTM on web. Every user we cannot attribute lands here.
Organic inherits every attribution gap in the system. It is overstated early on and shrinks as coverage improves — a falling organic count usually means attribution got better, not that organic traffic dropped.
Cost is zero, so organic always wins on margin. That comparison is meaningless. The comparison worth making is organic revenue per user against paid revenue per user: if paid users are worth less, you are buying worse users, whatever the margin column says.
Organic is excluded from the spend headroom table below. There is no bid to raise.
Spend headroom
How much more you could pay per user today, given measured revenue and a target payback window.
Modelled improvement to revenue per user, applied to every channel equally.
Maximum days you're willing to wait to recover acquisition cost.
affordable cost per user = (revenue per user by target day) x (1 + yield uplift %). Revenue in the window is read off the measured 60-day accrual curve, applied equally to every channel — a simplification, not a per-channel curve fit. Treat the headline budget as modelled.
Summed across 3 of 9 channels with positive headroom at 12.0% uplift and a 45-day window. Modelled from the measured 60-day accrual curve, not fetched.
| Channel | Cost / user today | Max affordable cost / user | Headroom | Headroom % |
|---|---|---|---|---|
| Meta — Advantage+ app · Android | $1.807 | $2.503 | +$0.697 | +38.6% |
| Meta — Advantage+ app · iOS | $2.618 | $2.264 | $-0.354 | -13.5% |
| Google Ads — App campaigns · Android | $1.643 | $2.015 | +$0.372 | +22.7% |
| Google Ads — App campaigns · iOS | $2.909 | $2.721 | $-0.188 | -6.5% |
| TikTok — App install · Android | $1.508 | $1.329 | $-0.179 | -11.8% |
| TikTok — App install · iOS | $3.191 | $2.846 | $-0.345 | -10.8% |
| Apple Ads — Search results · iOS | $2.849 | $3.552 | +$0.703 | +24.7% |
| Influencer (CSV upload) · Android | $3.140 | $1.932 | $-1.209 | -38.5% |
| Web — Google Ads display · Web | $0.426 | $0.395 | $-0.031 | -7.3% |
Organic is excluded from this table — there is no bid to raise. Negative headroom means you already pay more than the window supports at this uplift — those channels overpay today, not a projection error.
Revenue curve since install
Cumulative revenue per user, day 1 to 90. Basis for the 60-day figures used above.
Cost data comes from Meta Marketing API, Google Ads API, TikTok Business API and Apple Ads API, using your own read-only credentials. Channels with no API — influencer, offline — go through CSV upload and never get a per-user join. An MMP (AppsFlyer, Adjust, Singular) can upgrade iOS attribution beyond SKAdNetwork cohorts, but it's optional, not required to use this page.