How to calculate Gross Revenue Retention (GRR)
Gross revenue retention is the share of starting recurring revenue you keep, ignoring any expansion. It cannot exceed 100%.
Formula
GRR = (opening MRR − churn − contraction) ÷ opening MRR × 100SQL query
This example assumes: monthly_mrr(customer_id, month, mrr). It is written in PostgreSQL syntax; date functions differ slightly in MySQL, BigQuery and SQLite, and your column names will differ from these.
WITH cohort AS (
SELECT customer_id, mrr AS mrr_start
FROM monthly_mrr WHERE month = DATE '2025-10-01' AND mrr > 0
)
SELECT SUM(LEAST(COALESCE(n.mrr, 0), c.mrr_start)) * 100.0
/ NULLIF(SUM(c.mrr_start), 0) AS grr_pct
FROM cohort c
LEFT JOIN monthly_mrr n
ON n.customer_id = c.customer_id AND n.month = DATE '2026-10-01';Common mistakes that make Gross Revenue Retention (GRR) wrong
- Cap each customer at their starting MRR (the LEAST above); otherwise expansion leaks in and the figure can pass 100%.
- Customers with a paused subscription may appear as zero MRR; decide how to treat pauses.
- Compare the same cohort window every time.
Ask for Gross Revenue Retention (GRR) in plain English
Instead of writing the query yourself, you can type the question. SchemaChat turns it into SQL against your connected database or uploaded file, runs it, and shows the SQL and the figures it used so you can check the answer before you share it. It does not replace your judgement about the definition: check that the query matches the formula your business uses.
- What is our gross revenue retention for the last 12 months?
- How does GRR differ between monthly and annual plans?