Creator-code cannibalisation of organic payers: labelled holdout math

A synthetic holdout worksheet separates code-driven discounted payers from players who would have paid full price. Pair with AppsFlyer organic vs non-organic definitions—do not invent redemption averages.
Creator codes discount checkouts that might otherwise clear at full price. Attribution of the install (organic vs non-organic) does not answer the margin question—holdout design does.
Define the calculation before using it
Enter code redemptions, estimated incremental share, full price, discounted price and payment fees. Cannibalised units = redemptions × (1 − incremental_share). Margin gap = cannibalised_units × (full − discount) plus any fee delta. Incremental share is a labelled scenario input, not a measured uplift.
Work through the synthetic example
| Input | Synthetic value |
|---|---|
| Code redemptions | 1,000 |
| Labelled incremental share | 0.40 |
| Full price | 49.99 |
| Code price | 39.99 |
| Payment fee rate | 0.05 |
| Output | Result |
|---|---|
| Cannibalised units | 600 |
| Gross margin gap (price only) | 6,000.00 |
| Fee on cannibalised at code price | 1,199.70 |
AppsFlyer still classifies installs without a media source as organic (organic vs non-organic). A code used by an organic payer can therefore look “free” in UA while destroying margin. Xsolla’s chargeback docs remind operators that disputes are separate from discount design.
Evidence and limits
| Field | Evidence or limit |
|---|---|
| Organic definition | AppsFlyer |
| Incremental share | Illustrative — replace with holdout |
| Industry code cannibalisation rate | Not asserted |
| Xsolla chargeback mechanics | Vendor primary docs; not a discount study |


