K-Factor Measurement
Measure the viral coefficient k = (invites per user) × (signup rate per invite) to know if your product is genuinely viral.
Why
The k-factor is the single number that tells you whether organic growth is exponential (k > 1), linear (k = 1), or decaying (k < 1) — it is the growth team's north star for the viral channel. When k > 1, each user brings more than one user, and growth compounds without paid spend; when k < 1, paid acquisition must fill the gap or growth stalls. Measuring k honestly (per cohort, per channel, with a time window) prevents the common self-deception of counting invites sent but not signups converted, which inflates k by 3-5x. The k-factor also decomposes into its two factors, telling you whether to optimize invite frequency (more invites per user) or invite quality (higher signup rate) — these require completely different experiments.
When
When you have a referral mechanic live and 4+ weeks of data. Measure continuously, report in every growth review.
How
1. Define the time window: k is measured per user-cohort over a fixed window (e.g. 30 days from signup) — without a window, the number is meaningless 2. Factor 1 — invites per user (i): count invites sent by each user in the cohort within the window; average across the cohort 3. Factor 2 — signup rate per invite (c): count invites that resulted in a signup ÷ total invites sent; use a unique code per inviter to attribute 4. k = i × c; report k per cohort, per channel, and per week so you see the trend, not a single misleading number 5. Decompose: if k = 0.3 with i = 2.0 and c = 0.15, the lever is c (signup rate) — improve invite quality/preview/landing 6. If k = 0.3 with i = 0.6 and c = 0.5, the lever is i (invite frequency) — improve trigger placement/motivation 7. Set a target k and size experiments to hit it: to reach k = 1.0 from 0.3, you need ~3x on one factor or ~1.7x on both 8. Report k alongside paid CAC: when k rises, paid spend can fall; when k falls, paid must rise to hold growth
Example
# k-factor for the July cohort (30-day window) Cohort: 1,000 users who signed up in July Invites sent by cohort (within 30d): 1,800 Invites that resulted in signup: 216 i = 1800 / 1000 = 1.80 invites per user c = 216 / 1800 = 0.12 signup rate per invite k = 1.80 × 0.12 = 0.216 (decaying — paid must fill the gap) # Decomposition → next experiments Lever is c (0.12 is low): invite preview/landing underperforms Exp A: render artifact preview in invite (target c: 0.18) Exp B: deep-link to shared artifact, not homepage (target c: 0.20) If both hit: k = 1.80 × 0.20 = 0.36 (still <1, but +66%) # Trend (weekly k) W1: 0.18 W2: 0.21 W3: 0.22 W4: 0.24 → improving but still <1 # Decision: keep optimizing c; paid CAC holds at $14 until k > 0.5
Common Problems
- ⚠Counting invites sent as 'k' instead of invites that converted to signups — this inflates k by 3-5x and hides that the channel is broken.
- ⚠Measuring k without a time window, so late-converting invites from old cohorts inflate the current week's number.
- ⚠Reporting a single blended k instead of per-cohort/per-channel, which hides that one channel is viral and another is dead.
- ⚠Treating k > 1 as the only goal; for most B2B products k = 0.3-0.5 is a healthy viral supplement to paid acquisition.
Best Practices
- ✓Measure k as (invites sent) × (signups converted) per cohort in a fixed window; counting only sends inflates the number 3-5x.
- ✓Decompose k into i (invites/user) and c (signup rate) to know which lever to pull; the two require different experiments.
- ✓Report k per cohort and per channel, not as a single blended number; one viral channel can hide three dead ones.
- ✓Set a realistic k target for your category — B2B k of 0.3-0.5 is healthy; expecting k > 1 in B2B usually leads to broken mechanics.