Clycyo
How-to4 min read

How to Track a Referral Program End to End

Referral links, signups, and the revenue they produce — joined on the visitor record so you can pay rewards on truth, not claims.

Referral programs die two deaths: fraud (rewards paid on fake signups) and fog (real referrals nobody can verify, so advocates stop bothering). Both are measurement failures, and both are solved by the same architecture you already use for campaign attribution — tagged links, persistent first touch, and conversion events joined on one record. Referrals are just UTMs where the source is a person.

The link structure

https://yoursite.com/?ref=USER123
// or equivalently, in pure UTM form:
?utm_source=referral&utm_medium=referral&utm_campaign=USER123

Either works; the essential property is that the referrer's code lands in the visitor's first-touch context and persists there — surviving the days between the friend's click and their eventual signup, exactly like any first-touch attribution.

The event chain

// 1. Referred visitor arrives — automatic (first-touch captured)

// 2. They sign up
track('signup_completed', { ref: getRefFromContext() });
identify(newUser.email);

// 3. They reach the reward criterion — activation or payment,
//    never the bare signup (fraud lives there)
track('referral_qualified', { ref: 'USER123' });

// 4. Reward issued — the audit event
track('referral_rewarded', { ref: 'USER123', reward: 'month_free' });

Design rules learned the expensive way

  1. Qualify on value, not registration. Pay rewards on activation or first payment. Signup-triggered rewards breed throwaway-email farms within weeks of any program worth gaming.
  2. Make the ledger visible to advocates. '3 friends joined, 2 qualified, 1 pending' — shown in-app from these same events — is what keeps referrers referring. Fog kills programs faster than fraud.
  3. Watch referred-cohort retention separately. Referred users typically retain better than any paid channel — confirm it in your own data (cohort basics) and you have the business case for increasing the reward.
  4. Track the share moment too. An event when the advocate copies their link (referral_link_copied) gives you the program's own funnel: invited → shared → clicked → qualified. Most 'dead' programs turn out to have a share-step problem, not an offer problem.

The report that runs the program

Per referrer code: clicks, signups, qualified, rewarded, and — via the revenue join — actual MRR introduced. Top referrers get thanked personally; the program's blended cost-per-qualified-user gets compared against paid channels quarterly. Referrals usually win that comparison, but 'usually' is not your data — now it can be.