Build a Referral Program That Actually Drives Signups
Referral Program for Your New SaaS
Goal: Ship a referral program that turns happy customers into a measurable, attributable acquisition channel — without the typical referral-program tax of fraud, gaming, and the "give $20, get $20" coupon spam that erodes margin and produces low-LTV customers.
Process: Follow this chat pattern with your AI coding tool such as Claude or v0.app. Pay attention to the notes in [brackets] and replace the bracketed text with your own content.
Timeframe: V1 program live in 2 days. First measurable referral signups in week 4 of launch (you need active customers before referrals make sense). Quarterly review of incentive structure baked into the calendar.
When Referral Programs Actually Work
A referral program is not a launch tactic. It is a multiplier on a working acquisition channel that already exists. Plug it in too early and you spend hours on a feature nobody uses; plug it in at the right moment and it becomes one of your highest-margin acquisition channels.
The right time to ship a referral program:
- You have at least 50 paying customers, ideally 100+
- A measurable share of customers have already self-reported "I heard about you from [a friend / a colleague]" in onboarding or support — proving organic referrals are happening without incentive
- Your product has a clear multi-user moment (a project to share, a team to invite, a result worth showing)
- Your activation rate is reasonable. If new users do not hit the aha moment, referrals just bring in churners.
If any of those is missing, the channel is not ready. Build the rest first; referrals are the multiplier, not the primer.
This guide pairs with Activation Funnel Diagnosis (without activation, referred users churn) and Onboarding Email Sequence (the referral ask is one of the highest-converting emails in the lifecycle).
1. Pick the Right Incentive Model
There are five common referral incentive structures. The choice has more impact than the visual design or the share copy.
I'm building [your product] at [your-domain.com]. The product is priced at [$X/month for the main tier]. My ICP is [role / industry / company size]. My typical customer LTV is [estimate].
Help me choose a referral incentive model from these five:
1. **Two-sided cash/credit** — referrer gets $X credit, referred gets $Y discount. The classic. Most common, easiest to communicate, but attracts coupon-hunters and fraud risk if not gated.
2. **Two-sided product feature unlock** — referrer gets [feature: extra seats / extended trial / pro feature], referred gets [discounted first month or extended trial]. Less prone to fraud, costs you nothing in cash, but harder to communicate value.
3. **One-sided cash to referrer only** — referrer gets $X when their friend pays. Referred gets nothing. Direct, simple, no coupon-hunters on the receiving end. Higher referrer fraud risk, lower receiver activation.
4. **Charitable / mission-driven** — referrer triggers a $X donation when friend signs up. Works well for products with a values-aligned audience; weaker for cash-motivated buyers.
5. **Referral leaderboard / status** — public ranking of top referrers, with a tangible prize for the top N each quarter (cash, swag, founder-call, custom feature). Drives community-style power-user behaviour. Best for products with prosumer / creator-economy audiences.
For my specific case ([describe pricing, ICP, current customer base]):
- Recommend ONE primary model
- Tell me the specific numbers — exact reward amount for both sides if applicable
- Explain why this model fits my LTV and price point. The reward should be 5–15% of first-year LTV; below 5%, nobody refers; above 15%, you destroy margin and attract gaming.
- Tell me what fraud risks I should plan for given this model
Default if I haven't decided: two-sided product feature unlock for SaaS with a clear premium tier, two-sided cash credit only if the LTV justifies a $50+ reward and I have anti-fraud guards (Section 4) in place.
Two heuristics worth internalising:
- Cash creates fraud, product creates loyalty. A $50 cash reward attracts people who will create fake accounts to claim it. A "you get an extra seat free" reward is harder to gamify because the seat is only valuable to a real user.
- The reward should be visible during the action, not just in the FAQ. When the referred user enters their card, the credit they got should appear right there: "$10 off your first month courtesy of Sarah." That is what makes the reward feel real and the relationship feel acknowledged.
2. Build the Reward Mechanics
Once the model is chosen, the implementation lives in three places: a referrer dashboard inside the app, a tracked share link, and a credit-applying flow at checkout.
Build the referral program for [your product]. I'm using [Stripe / Polar / Lemon Squeezy] for billing and [Clerk / Supabase Auth / Auth.js] for auth.
The reward model from Section 1 is: [chosen model with specific amounts].
Implementation:
1. **Referrer dashboard at /settings/referrals**:
- Big number: total earned (credits / dollars / unlocked seats)
- The referrer's unique share link, copy-to-clipboard with one click
- A list of pending referrals (signed up, not yet activated/converted)
- A list of completed referrals (qualified for reward)
- Share buttons for X, LinkedIn, email, copy-link
- Pre-written share copy the referrer can edit — three different angles (technical, story, casual)
2. **Unique share link format**:
- `https://[your-domain.com]/invite/[short-token]` (NOT `?ref=user_id` — leaks user IDs and screams "marketing tracking")
- Token maps to user ID server-side via a `referral_codes` table
- Stores: code, referrer_id, created_at, max_uses (null = unlimited or set per-user), expires_at (optional)
3. **Tracking the journey**:
- Click on link → set first-party cookie `ref_code` (90-day expiry)
- Pageview → log `referral_link_clicked` event with code (for analytics)
- Signup → resolve the cookie, attach `referrer_id` and `referral_code` to the new user record. NEVER overwrite if the user already has a referrer set (last-touch attribution causes the most fraud).
- Activation event → mark referral as `activated` in your tracking table
- First payment → mark as `qualified`, fire reward issuance to referrer
4. **Reward issuance**:
- For credit/cash: call [Stripe / billing tool] to apply credit to referrer's customer record. Use idempotency keys so a duplicate webhook doesn't double-credit.
- For feature unlock: update referrer's user record (extra seats, extended trial, pro flag for N days). Notify in-app and via email.
- For donation: call your charity webhook with the referral_id; never issue a reward twice for the same referral_id.
5. **Webhook on the receiving side**:
- When the referred user signs up, send the referrer an in-app notification: "Sarah just joined! You'll earn your reward when they upgrade."
- When the referred user activates: "Sarah activated [product]. You're one step away from your reward."
- When the referred user pays: reward issued + congratulations email.
6. **Reset / cancellation logic**:
- If the referred user refunds within 30 days, the referrer's reward is clawed back. Communicate this in the FAQ.
- If the referrer's account is canceled, their pending referrals continue (the relationship was already established) but new shares are disabled.
Output the database schema, the React components for the dashboard, the API routes for tracking, the webhook handlers, and the test cases that prove the math is correct end-to-end. Don't ship without item 3's "never overwrite" rule — it's the most common bug in referral-program implementations.
The "never overwrite the referrer" rule is non-negotiable. The most common scam in referral programs: a user pretends to refer themselves through a side account, then later visits a friend's link to overwrite the credit. The first-touch wins rule defeats this without complicated fraud detection.
3. Make the Ask at the Right Moments
A referral program that lives only on /settings/referrals produces single-digit referrals per quarter. The programs that actually move acquisition embed the ask at the moments customers are most likely to share.
Build referral asks into my product lifecycle. The ask should appear at five specific moments:
1. **Aha-moment celebration** — when a user hits the activation event, a one-time modal: "Nice work! [Specific thing they just did]. Want to share [your product] with [colleague / friend]? Here's your link, plus you'll both get [reward]." Single dismiss-able modal, no follow-up nag.
2. **Day 14 onboarding email** — in the [onboarding email sequence](onboarding-email-sequence-chat.md), the day 14 email becomes a soft referral nudge: "By now you've used [product] for two weeks. Know anyone with the same problem? Here's your link — pass it on, both of you get [reward]." Single CTA.
3. **Post-success notification** — when the user completes a high-value outcome ([generated their 10th report / saved a big chunk of time / hit a usage milestone]), the success notification includes a one-line referral nudge: "Want to bring [colleague] on board?"
4. **Power-user moment** — when a user crosses a usage threshold (30+ sessions, multi-day streak), trigger a personal-feeling email from the founder: "You've been using [product] for [time] — would love your help spreading the word. Here's your referral link with a custom message I can add."
5. **Plan upgrade celebration** — when a free user upgrades to Pro, the success page mentions: "Pro unlocks referral rewards too — here's your link." Catches users at peak satisfaction.
For each moment:
- Show me the trigger logic (what event fires this)
- The exact copy of the ask
- The fallback behaviour if the user has already been asked at this moment (don't double-ask)
- The opt-out path (user can disable referral asks site-wide in settings)
Don't make this aggressive. Five well-timed asks per year per user beats a daily nag bar. The default should err toward respectful — if a user is annoyed, they don't refer, they churn.
The opt-out is critical. A user who feels nagged by the referral system will not just stop sharing — they will tell others not to. One annoying ask flow can negate the goodwill of the whole program.
4. Stop the Fraud Before It Starts
Every cash-incentivised referral program attracts fraud within 30 days of going live. Plan for it before launching, not after.
Add anti-fraud controls to my referral program. Implement at five layers:
1. **Self-referral block**: same email domain (for personal addresses, exact match; for company domains, gated by company size — small companies often share domains legitimately). Same payment method (Stripe customer fingerprint). Same IP cluster within 7 days.
2. **Velocity caps**:
- Max [N] successful referrals per referrer per 30 days. Past N, additional referrals still attribute but are flagged for manual review before reward issuance.
- Max [N] referrer signups from the same IP / device fingerprint per 24 hours. New referred accounts beyond this trigger manual review.
3. **Reward gating at qualification**:
- Reward only fires after the referred user has both ACTIVATED and made their FIRST PAYMENT. Free trial does not count. Activation alone does not count. Both gates must pass.
- This single rule eliminates ~70% of fraud — most fraud-generated accounts cannot or will not pay.
4. **Manual review queue**:
- Any referral flagged (high velocity, suspicious pattern, refund-then-re-signup) lands in an admin queue
- A simple admin route at /admin/referrals/queue showing flagged referrals with: referrer details, referred details, why it was flagged, approve/reject buttons
- Reject = no reward, no churn impact on the referred (they keep their account, just no credit applied)
5. **Refund clawback**:
- When a referred user refunds within 30 days, automatically deduct the corresponding reward from the referrer's balance
- When the deduction would result in negative balance, freeze further reward issuance and ping me to investigate
- Communicate this clearly in the FAQ — surprise clawbacks tank trust
Implementation:
- Build a `referral_fraud_signals` table that scores each referral from 0–100 on the five layers above
- Anything above [threshold, e.g., 60] auto-routes to manual review
- Log every fraud signal with reason, so when I tune the threshold I can see what would have changed
Output: the schema, the scoring logic, the admin queue UI, and a unit test that proves the self-referral block catches the obvious case where I create a second account from the same Stripe customer.
Don't skip the manual review queue. The first time someone games my program, I want to see exactly how — that intel improves the rest of the system.
The reward-after-payment rule is the single most important fraud control. It also incidentally improves quality: people who refer to claim cash without expecting their friends to actually pay represent the lowest-LTV referral cohort even when not fraudulent.
5. Track What's Actually Working
Most referral programs report on the wrong metrics. "We've issued 200 referral links!" is not the same as "Referrals drive 8% of paid signups."
Build a referral program dashboard tracking the metrics that actually matter.
Daily / weekly metrics:
1. **Referred-signup rate**: % of total signups attributable to referrals. Target: 5-15% by month 6.
2. **Referred-to-paid conversion**: of referred signups, what % become paying customers. Compare to non-referred conversion — referrals should convert at 1.5-3× the baseline.
3. **Referred-customer retention**: 30/60/90 day retention vs. non-referred. If referred customers churn faster, the incentive is attracting wrong fit.
4. **Per-referrer leaderboard**: top 20 referrers by qualified referrals. The Pareto principle hits hard here — typically 5% of referrers produce 50% of referred signups. Treat them as VIPs.
5. **Reward economics**: total dollars/credits issued ÷ total revenue from referred customers. Should be at most 20-30%. Above that, the program is unsustainable.
6. **Time from referral click to qualification**: faster is better. If most qualified referrals happen within 7 days, the messaging is clear and the incentive is strong. If they straggle for 60+ days, your funnel may be working, but at lower velocity than you'd like.
Quarterly review questions:
- Which incentive moment in Section 3 produces the most referrals? Double down on it; consider cutting the worst-performing moment to reduce friction.
- Is the LTV of referred customers higher than non-referred? Usually yes (warm intro = better fit). If not, the incentive is mis-calibrated.
- Are top referrers natural advocates or coupon-hunters? Look at their personal usage data. If they don't use the product, they're gaming.
- What's my contribution-margin on the referral channel after rewards? Compare to my paid acquisition channels. If referrals are the cheapest channel by 5×, scale up the program. If they're roughly the same, leave incentive structure as-is.
Output: the SQL queries to compute each metric, the Notion / dashboard template, and the quarterly retro questions to fill in.
The retention check is the metric most teams skip. A referral channel that converts 3× the baseline but churns 2× faster has the same lifetime value math as the baseline, with the added cost of the reward — actively destroying value.
6. Recognize the Top Referrers
The 5% of referrers who produce 50% of the referrals are not random — they are people who genuinely love the product. Treat them like the rare resource they are.
Build a top-referrer recognition program for [your product].
For the top 20 referrers each quarter:
1. **Public recognition** — a leaderboard on /community or /referrers (opt-in only — never publish names without consent). Optional: a "top referrer" badge in their profile.
2. **Personal outreach** — quarterly handwritten note, video, or short call from the founder. "You've sent 14 friends. Wanted to thank you personally and ask: what would make the product better for you?" Treat them as an extended customer-advisory board.
3. **Surprise-and-delight** — a one-off bonus reward at year 1 (extra credit, swag, exclusive feature access, beta preview). Does not need to be expensive — recognition matters more than cost. The unexpectedness is the point.
4. **Community access** — invite them to a private Slack / Discord / community space with the founder and other top users. Network effects within your top customers compound.
5. **Product input** — top referrers get early access to roadmap, feature votes, and the ability to flag things in a faster lane. They earn it.
Anti-pattern to avoid: turning top referrers into paid advertisers (kicking the rate up, contracts, MLM-style escalators). The moment your most-passionate users feel like commission salespeople, they stop sounding genuine — and the referral channel quality drops.
Output: the criteria for "top referrer" status, the quarterly process for outreach, the comms templates, and the annual budget for surprise-and-delight rewards.
The Pareto pattern in referral programs is reliable: a small number of advocates drive most of the signal. Investing 10 hours per quarter in personal recognition for 20 people consistently outperforms any tweak to the public incentive structure.
7. Sunset Criteria
Not every referral program survives. Plan for the conditions under which to pause or rewrite the program rather than letting it limp along consuming engineering and marketing attention.
Define sunset / rewrite criteria for my referral program.
Pause or rewrite if any of the following holds for two consecutive quarters:
1. Referred-signup share is under 3% of total signups (the program isn't moving the needle)
2. Referred-customer churn is materially higher than non-referred (incentive is attracting wrong fit)
3. Reward cost as a % of referred revenue exceeds 30% (margin destruction)
4. Manual fraud reviews per week exceed [threshold] (program is fundamentally gameable)
5. Founder time on referral admin exceeds 2 hours per week (operationally unsustainable at this stage)
If any criterion is hit, run the rewrite playbook:
- Audit the incentive structure — is it the wrong shape (cash vs feature) or the wrong amount?
- Audit the asks (Section 3) — are they appearing at moments of low engagement?
- Audit the fraud controls (Section 4) — has the gameability outpaced the controls?
Output: a quarterly checklist that I review every 90 days, with explicit go / no-go calls.
Most referral programs benefit from one significant rewrite in their first year. Founders who treat the program as static lose to founders who treat it as a living system.
Common Failure Modes
"Our referral conversion is 0.4%." Either the incentive is too small to motivate, the share copy is wrong, or the friction in the share flow is too high. Check the dashboard from Section 5: is the click-to-signup conversion the bottleneck (share copy / landing page) or the signup-to-paid conversion (incentive amount / referred-fit)?
"Customers complain about coupon-spam vibes." Your incentive is a discount-only ($X off) rather than a value-add (extra seats, pro features). Discount language reads as "we're cutting price for friends," which devalues the product. Switch to product-feature unlocks or status-based rewards.
"Top referrers are sending us low-quality customers." The reward gates need tightening. Add the "must hit activation AND first payment" rule before issuance, or move from cash to feature unlock so coupon-hunters self-select out.
"We launched it and revenue from referrals is zero." Probably too early. Did you have 50+ active paying customers before launching? Did organic referrals exist already? If no to either, pause and ship the rest of the growth stack first.
"Engineering keeps finding bugs in the credit math." You shipped without idempotency keys on reward issuance. Every duplicate webhook compounds the bug. Mandatory: every credit-applying API call must include an idempotency key keyed off the referral_id.
"The leaderboard is just two power users gaming the system." The leaderboard creates a tournament dynamic that attracts the wrong people. Either gate the leaderboard with strict fraud signals or remove it — most programs work fine without it.
"Customers asked us how to get the reward and we couldn't answer." Your /settings/referrals page doesn't communicate clearly. The page should answer in 30 seconds: how do I share, what do I get, when do I get it, what counts as a qualified referral. Pretend you've never used your own product and rewrite.
Related Reading
- Activation Funnel Diagnosis — referrals to a broken funnel just bring in churners; fix activation first
- Onboarding Email Sequence — the day-14 referral ask lives here
- Pricing Page That Converts — referred users hit your pricing page; the credit display is part of that flow
- Customer Support — referral questions are a meaningful share of support volume; pre-empt with FAQ articles