{
  "slug": "gross-revenue-retention",
  "title": "Gross Revenue Retention (GRR) Calculator",
  "heading": "Gross Revenue Retention Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/gross-revenue-retention",
  "summary": "Measure how much revenue you'd keep with zero upsell, ever.",
  "description": "GRR strips out all expansion revenue and answers a blunt question: if you never upsold another customer again, how much of this cohort's revenue would still be here in twelve months? It's capped at 100% by definition, since it only accounts for contraction and churn. Investors treat GRR as the truer read on product-market fit and pricing durability because it can't be inflated by a hot expansion motion covering for a leaky base. A healthy enterprise SaaS company runs 90-95%+ GRR; consumer-adjacent or SMB-heavy businesses often sit at 80-88% because smaller accounts churn more easily and have thinner switching costs. If your NRR looks great but GRR is mediocre, you have a concentration risk: growth depends on a small number of expanding accounts rather than broad base health, and losing a couple of whales could tank both numbers together.",
  "formula": "GRR = (Starting ARR − Contraction − Churn) ÷ Starting ARR × 100 (capped at 100%)",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=gross-revenue-retention",
  "inputs": [
    {
      "id": "startArr",
      "label": "Starting ARR",
      "kind": "number",
      "hint": null,
      "default": 1000000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "contraction",
      "label": "Contraction (downgrades)",
      "kind": "number",
      "hint": null,
      "default": 40000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "churned",
      "label": "Churned revenue",
      "kind": "number",
      "hint": null,
      "default": 90000,
      "unit": "$",
      "min": 0,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "grr",
      "label": "Gross Revenue Retention",
      "format": "percent",
      "hint": null,
      "primary": true
    },
    {
      "id": "revenueAtRisk",
      "label": "Revenue lost to contraction + churn",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "retainedArr",
      "label": "ARR retained without expansion",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "annualDollarLoss",
      "label": "Annualized dollar loss",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Starting ARR: 1000000 $",
      "Contraction (downgrades): 40000 $",
      "Churned revenue: 90000 $"
    ],
    "outputs": [
      "Gross Revenue Retention: 87.0%",
      "Revenue lost to contraction + churn: $130,000",
      "ARR retained without expansion: $870,000",
      "Annualized dollar loss: $130,000"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter starting arr ($).",
      "Enter contraction (downgrades) ($).",
      "Enter churned revenue ($).",
      "Read your gross revenue retention 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": {
        "startArr": 600000,
        "contraction": 25000,
        "churned": 55000
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "startArr": 1000000,
        "contraction": 40000,
        "churned": 90000
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "startArr": 1600000,
        "contraction": 65000,
        "churned": 145000
      }
    }
  ],
  "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": "Why does GRR cap at 100%?",
      "a": "By construction it only subtracts contraction and churn from starting ARR — it never adds anything. Expansion is deliberately excluded so the metric answers one clean question: how sticky is the base on its own, independent of any upsell motion."
    },
    {
      "q": "What's a healthy GRR benchmark?",
      "a": "Enterprise SaaS with annual contracts and high switching costs typically runs 92-97%. SMB and transactional or month-to-month products often land 80-88%. Below 80% usually means either weak product fit or a pricing/packaging mismatch with the segment you're selling to."
    },
    {
      "q": "Can GRR and NRR tell different stories?",
      "a": "Yes, and it's a useful diagnostic. High NRR with mediocre GRR means growth is concentrated in a few expanding accounts — a risk if those accounts churn. Low NRR with decent GRR means the base is stable but you aren't monetizing it further, often a packaging or account-management gap."
    },
    {
      "q": "Does GRR include price increases as expansion?",
      "a": "No — if a price increase raises what an existing customer pays for the same seats/usage without them contracting, most finance teams classify that as expansion, not part of GRR's contraction/churn calc. Keep the definitions consistent across reporting periods so trend lines are comparable."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/net-revenue-retention",
    "https://www.revenuelab.fyi/toolbox/logo-vs-revenue-churn",
    "https://www.revenuelab.fyi/toolbox/expansion-revenue-rate"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Gross Revenue Retention (GRR) Calculator (https://www.revenuelab.fyi/toolbox/gross-revenue-retention)"
}