{
  "slug": "incrementality-lift-calculator",
  "title": "Incrementality & Lift Test Calculator",
  "heading": "Incrementality Lift Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/incrementality-lift-calculator",
  "summary": "Convert a holdout or geo test result into true incremental revenue and iROAS.",
  "description": "Platform-reported conversions almost always overstate what an ad channel actually causes, because they credit purchases that would have happened anyway. An incrementality test — a geo holdout, PSA/ghost-ad test, or matched-market pair — measures the real difference between an exposed group and an unexposed control. This calculator takes the conversion or revenue rate in your test group versus your control group, computes the lift, and translates that into incremental revenue and incremental return on ad spend (iROAS), which is almost always lower than platform-attributed ROAS. It also derives the 'incrementality factor' — the ratio of true incremental conversions to platform-reported conversions — which you can apply as a haircut to that channel's reported numbers going forward until you re-test. A factor of 0.4, for example, means only 40% of what the platform claims is actually incremental; the rest is conversions you'd have gotten anyway from brand search, direct traffic, or other channels picking up the slack. Use this after any properly randomized holdout, not on unmatched before/after comparisons, which conflate seasonality and trend with the channel's real effect.",
  "formula": "Lift = (test rate − control rate) ÷ control rate; incremental conversions = lift × control rate × test group size; iROAS = incremental revenue ÷ spend.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=incrementality-lift-calculator",
  "inputs": [
    {
      "id": "testSize",
      "label": "Test (exposed) group size",
      "kind": "number",
      "hint": null,
      "default": 50000,
      "unit": null,
      "min": 1,
      "max": null
    },
    {
      "id": "testConv",
      "label": "Conversions in test group",
      "kind": "number",
      "hint": null,
      "default": 1150,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "controlSize",
      "label": "Control (holdout) group size",
      "kind": "number",
      "hint": null,
      "default": 50000,
      "unit": null,
      "min": 1,
      "max": null
    },
    {
      "id": "controlConv",
      "label": "Conversions in control group",
      "kind": "number",
      "hint": null,
      "default": 1000,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "aov",
      "label": "Average order value",
      "kind": "number",
      "hint": null,
      "default": 85,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "spend",
      "label": "Media spend on test group",
      "kind": "number",
      "hint": null,
      "default": 18000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "reportedConv",
      "label": "Platform-attributed conversions",
      "kind": "number",
      "hint": null,
      "default": 1400,
      "unit": null,
      "min": 0,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "liftPct",
      "label": "Relative lift from exposure",
      "format": "percent",
      "hint": null,
      "primary": true
    },
    {
      "id": "incrementalConversions",
      "label": "Incremental conversions",
      "format": "number",
      "hint": null,
      "primary": false
    },
    {
      "id": "incrementalRevenue",
      "label": "Incremental revenue",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "iroas",
      "label": "Incremental ROAS (iROAS)",
      "format": "decimal",
      "hint": null,
      "primary": false
    },
    {
      "id": "incFactor",
      "label": "Incrementality factor vs. platform-reported",
      "format": "percent",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Test (exposed) group size: 50000",
      "Conversions in test group: 1150",
      "Control (holdout) group size: 50000",
      "Conversions in control group: 1000",
      "Average order value: 85 $",
      "Media spend on test group: 18000 $",
      "Platform-attributed conversions: 1400"
    ],
    "outputs": [
      "Relative lift from exposure: 15.0%",
      "Incremental conversions: 150",
      "Incremental revenue: $12,750",
      "Incremental ROAS (iROAS): 0.71",
      "Incrementality factor vs. platform-reported: 11%"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter test (exposed) group size.",
      "Enter conversions in test group.",
      "Enter control (holdout) group size.",
      "Enter conversions in control group.",
      "Enter average order value ($).",
      "Enter media spend on test group ($).",
      "Enter platform-attributed conversions.",
      "Read your relative lift from exposure on the right — it updates as you type.",
      "Hit Share to keep the scenario or send it to someone."
    ]
  },
  "scenarios": [
    {
      "name": "Conservative",
      "description": "Lower-end numbers — what if things land soft?",
      "values": {
        "testSize": 30000,
        "testConv": 690,
        "controlSize": 30000,
        "controlConv": 600,
        "aov": 50,
        "spend": 10800,
        "reportedConv": 840
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "testSize": 50000,
        "testConv": 1150,
        "controlSize": 50000,
        "controlConv": 1000,
        "aov": 85,
        "spend": 18000,
        "reportedConv": 1400
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "testSize": 80000,
        "testConv": 1840,
        "controlSize": 80000,
        "controlConv": 1600,
        "aov": 135,
        "spend": 28800,
        "reportedConv": 2240
      }
    }
  ],
  "limitations": [
    "Results are estimates before tax, fees, and inflation unless an input explicitly covers them.",
    "Rates are treated as fixed for the whole period — variable-rate products will drift from this projection.",
    "This is educational maths, not financial advice. Check anything contractual with the lender or your accountant."
  ],
  "faq": [
    {
      "q": "How big does the control group need to be?",
      "a": "Big enough to detect the lift you expect with confidence, same logic as an A/B test. For most brand or upper-funnel channels expect lifts of 5-20%, which typically needs tens of thousands of users per arm. Use the A/B test sample size calculator with your expected lift to size it properly before launching."
    },
    {
      "q": "Why is iROAS almost always lower than platform ROAS?",
      "a": "Platforms credit any conversion within their attribution window that touched their ad, including people who would have bought anyway through organic search, direct navigation, or another channel. iROAS only counts the conversions caused by the exposure, which by definition is a subset of what's attributed."
    },
    {
      "q": "What's a normal incrementality factor?",
      "a": "Brand search commonly runs 10-30% incremental because most of that traffic would convert anyway. Prospecting and upper-funnel video tends to run higher, 40-70%, since it's driving people who wouldn't otherwise have found you. Retargeting varies wildly, 20-60%, depending on how tightly it's scoped to recent high-intent visitors."
    },
    {
      "q": "Can I run this without a true randomized holdout?",
      "a": "You'll get a directional number from a geo or time-based comparison, but it will be contaminated by seasonality, competitor activity, and macro trends. Randomized user-level or matched-market holdouts are the only way to isolate the channel's true causal effect."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/ab-test-sample-size-calculator",
    "https://www.revenuelab.fyi/toolbox/attribution-window-shift-calculator"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Incrementality & Lift Test Calculator (https://www.revenuelab.fyi/toolbox/incrementality-lift-calculator)"
}