Skip to main content

Referral Analytics

Growth

Measure viral growth with K-factor analysis, optimize your referral funnel, and identify your most valuable referrers.

K-Factor

Viral coefficient

Funnel

Conversion stages

A/B Testing

Optimize incentives

Cohorts

User segments

Understanding Viral Coefficient (K-Factor)

The viral coefficient (K-factor) measures how many new users each existing user brings in. A K-factor greater than 1 means exponential growth.

K
K-Factor
=
i
Invites Sent
x
c
Conversion Rate

K = (Average invites per user) × (Invite conversion rate)

K < 1

Declining growth

Each user brings less than one new user

K = 1

Stable growth

Each user brings exactly one new user

K > 1

Viral growth

Exponential user acquisition

Realistic Expectations

Most products have a K-factor between 0.1 and 0.5. A K-factor above 0.5 is excellent. True viral products with K > 1 are rare and typically require a strong network effect.

Calculating K-Factor

Sylphx automatically calculates your K-factor based on referral activity. Here's how to access and interpret the data.

Fetch K-factor metrics
import { platform } from '@/lib/platform'

// Get current K-factor and components
const viralMetrics = await platform.referrals.getViralMetrics({
  period: 'last_30_days',
})

// Response:
{
  kFactor: 0.42,
  components: {
    averageInvitesSent: 2.8,      // i: users send 2.8 invites on average
    inviteConversionRate: 0.15,   // c: 15% of invites convert
  },
  trend: {
    previous: 0.38,
    change: 0.04,
    changePercent: 10.5,
    direction: 'up',
  },
  breakdown: {
    byChannel: {
      email: { invites: 1.2, conversion: 0.18 },
      twitter: { invites: 0.8, conversion: 0.12 },
      whatsapp: { invites: 0.5, conversion: 0.22 },
      copy: { invites: 0.3, conversion: 0.08 },
    },
    byUserSegment: {
      free: { kFactor: 0.28 },
      premium: { kFactor: 0.65 },
    },
  },
  projectedGrowth: {
    usersIn30Days: 1250,
    usersIn90Days: 3800,
    timeToDouble: 45,  // days
  },
}

K-Factor Over Time

Historical K-factor
// Track K-factor trends over time
const historicalK = await platform.referrals.getViralMetrics({
  period: 'last_90_days',
  granularity: 'week',
})

// Response:
{
  series: [
    { date: '2024-01-01', kFactor: 0.35, invites: 2.4, conversion: 0.146 },
    { date: '2024-01-08', kFactor: 0.38, invites: 2.6, conversion: 0.146 },
    { date: '2024-01-15', kFactor: 0.42, invites: 2.8, conversion: 0.150 },
    { date: '2024-01-22', kFactor: 0.45, invites: 3.0, conversion: 0.150 },
    // ...
  ],
  insights: [
    {
      type: 'improvement',
      metric: 'invites_sent',
      change: '+25%',
      cause: 'New share button placement',
    },
    {
      type: 'opportunity',
      metric: 'conversion_rate',
      suggestion: 'Test higher referee reward to improve conversion',
    },
  ],
}

Referral Funnel Stages

Understand where users drop off in the referral process to optimize each stage.

Referral Link Views

Users who see their referral link

10,000
100%

Shares Initiated

Users who click a share button

2,800
28%

Link Clicks

Referred users who click the link

1,500
15%

Signups

Referred users who create an account

450
4.5%

Conversions

Referred users who convert to paid

180
1.8%
Fetch funnel data
const funnel = await platform.referrals.getFunnel({
  period: 'last_30_days',
})

// Response:
{
  stages: [
    {
      name: 'link_views',
      count: 10000,
      rate: 1.0,
      dropoff: 0.72,  // 72% don't share
    },
    {
      name: 'shares_initiated',
      count: 2800,
      rate: 0.28,
      dropoff: 0.46,
      byChannel: {
        copy: 1200,
        email: 800,
        twitter: 500,
        whatsapp: 300,
      },
    },
    {
      name: 'link_clicks',
      count: 1500,
      rate: 0.15,
      dropoff: 0.70,
    },
    {
      name: 'signups',
      count: 450,
      rate: 0.045,
      dropoff: 0.60,
    },
    {
      name: 'conversions',
      count: 180,
      rate: 0.018,
      dropoff: 0,
    },
  ],
  bottleneck: {
    stage: 'link_views_to_shares',
    dropoff: 0.72,
    recommendation: 'Improve share prompt visibility and incentive messaging',
  },
}

Conversion Rate Optimization

Identify and fix bottlenecks in your referral funnel with data-driven optimization.

Key Metrics to Track

PropertyTypeDescription
Share RatepercentageUsers who share their referral link (aim for >20%)
Click-through RatepercentageShare recipients who click (aim for >30%)
Signup RatepercentageClicks that become signups (aim for >25%)
Conversion RatepercentageSignups that convert to paid (aim for >30%)
Time to ConvertdaysAverage days from click to conversion

Optimization Strategies by Stage

// Problem: Low share rate (users don't share their link)

// Solutions:
// 1. Make referral link more visible
// 2. Add share prompts at key moments
// 3. Show social proof (other users' success)
// 4. Improve reward messaging

// Track share prompt effectiveness
const sharePromptMetrics = await platform.referrals.getMetrics({
  metric: 'share_prompt_conversion',
  groupBy: 'prompt_location',
})

// {
//   onboarding_complete: { shown: 5000, shared: 1200, rate: 0.24 },
//   settings_page: { shown: 8000, shared: 400, rate: 0.05 },
//   after_upgrade: { shown: 1000, shared: 350, rate: 0.35 },  // Best!
//   sidebar_widget: { shown: 50000, shared: 1000, rate: 0.02 },
// }

// Insight: Prompt after upgrade has highest conversion

A/B Testing Referral Incentives

Test different reward structures to find what drives the most referrals and conversions.

Create an experiment
// Create a referral reward experiment
const experiment = await platform.referrals.createExperiment({
  name: 'reward_value_test',
  description: 'Test different reward amounts',

  variants: [
    {
      name: 'control',
      weight: 0.33,
      config: {
        referrerReward: { type: 'points', amount: 500 },
        refereeReward: { type: 'discount', amount: 10 },
      },
    },
    {
      name: 'higher_referrer',
      weight: 0.33,
      config: {
        referrerReward: { type: 'points', amount: 1000 },  // 2x
        refereeReward: { type: 'discount', amount: 10 },
      },
    },
    {
      name: 'higher_referee',
      weight: 0.34,
      config: {
        referrerReward: { type: 'points', amount: 500 },
        refereeReward: { type: 'discount', amount: 20 },  // 2x
      },
    },
  ],

  metrics: ['shares', 'signups', 'conversions', 'ltv'],
  minimumSampleSize: 1000,
  confidenceLevel: 0.95,
})

// Check experiment results
const results = await platform.referrals.getExperimentResults({
  experimentId: experiment.id,
})

// Response:
{
  status: 'completed',
  winner: 'higher_referee',
  confidence: 0.97,
  results: {
    control: {
      users: 1050,
      shares: 294,        // 28%
      signups: 126,       // 12%
      conversions: 38,    // 3.6%
      avgLTV: 89,
    },
    higher_referrer: {
      users: 1020,
      shares: 357,        // 35% (+25%)
      signups: 143,       // 14%
      conversions: 41,    // 4.0%
      avgLTV: 85,
    },
    higher_referee: {
      users: 1030,
      shares: 309,        // 30%
      signups: 185,       // 18% (+50%) Winner!
      conversions: 59,    // 5.7%
      avgLTV: 92,
    },
  },
  recommendation: 'Higher referee reward drives more signups without hurting LTV',
}

Test One Variable at a Time

For clear results, only change one variable per experiment. Test reward amount separately from reward type, and referrer rewards separately from referee rewards.

Common Tests to Run

Reward Amount

Find the optimal reward value that maximizes referrals vs. cost

Reward Type

Compare cash/credits, discounts, free months, and feature unlocks

Two-sided vs One-sided

Test rewarding both parties vs. only referrer or referee

Timing

Immediate rewards vs. delayed (after conversion/verification)

Identifying Top Referrers

Find and nurture your most valuable referrers - they often drive a disproportionate share of growth.

Top referrers analysis
// Get top referrers by various metrics
const topReferrers = await platform.referrals.getTopReferrers({
  period: 'last_90_days',
  limit: 100,
  sortBy: 'conversions',  // or 'signups', 'ltv_generated', 'revenue'
})

// Response:
{
  referrers: [
    {
      userId: 'user_123',
      name: 'Alice Chen',
      email: 'alice@example.com',
      metrics: {
        shares: 156,
        clicks: 420,
        signups: 85,
        conversions: 32,
        ltvGenerated: 2880,
        rewardsEarned: 320,
      },
      rank: 1,
      percentile: 99.5,
      segment: 'power_referrer',  // Top 1%
    },
    {
      userId: 'user_456',
      name: 'Bob Smith',
      metrics: {
        shares: 89,
        clicks: 245,
        signups: 52,
        conversions: 21,
        ltvGenerated: 1890,
        rewardsEarned: 210,
      },
      rank: 2,
      percentile: 99.0,
      segment: 'power_referrer',
    },
    // ...
  ],

  distribution: {
    top1Percent: { users: 10, referrals: 340, share: 0.42 },   // 42% of referrals
    top10Percent: { users: 100, referrals: 580, share: 0.72 }, // 72% of referrals
    remaining: { users: 900, referrals: 230, share: 0.28 },
  },

  insights: [
    {
      type: 'concentration',
      message: 'Top 1% of referrers drive 42% of all referrals',
    },
    {
      type: 'opportunity',
      message: '230 users have shared but 0 conversions - consider nurturing',
    },
  ],
}

Referrer Segments

Power Referrers

Top 1% by conversions

VIP treatment, exclusive rewards, early access

Active Referrers

Top 10% by conversions

Bonus rewards, personalized thank-yous

Emerging Referrers

Recent first successful referral

Encouragement, tips to refer more

Dormant Referrers

Past referrals, inactive >30 days

Re-engagement campaigns, new incentives

Automated segmentation
// Automatically segment and engage referrers
await platform.referrals.configureSegments({
  segments: [
    {
      name: 'power_referrer',
      criteria: { conversions: { gte: 10 }, period: '90d' },
      actions: [
        { type: 'tag', tag: 'vip' },
        { type: 'email', template: 'power_referrer_thanks' },
        { type: 'reward_multiplier', multiplier: 1.5 },
      ],
    },
    {
      name: 'emerging_referrer',
      criteria: { conversions: { gte: 1, lte: 3 }, period: '30d' },
      actions: [
        { type: 'email', template: 'referral_tips' },
      ],
    },
    {
      name: 'dormant_referrer',
      criteria: {
        totalConversions: { gte: 1 },
        lastReferral: { daysAgo: { gte: 30 } },
      },
      actions: [
        { type: 'email', template: 'referral_reengagement' },
        { type: 'offer', reward: { type: 'points', amount: 200 } },
      ],
    },
  ],
})

Cohort Analysis

Analyze how referral behavior and quality varies across user cohorts over time.

Cohort analysis
// Analyze referral behavior by signup cohort
const cohortAnalysis = await platform.referrals.getCohortAnalysis({
  cohortBy: 'signup_month',
  metrics: ['referral_rate', 'avg_referrals', 'referral_ltv'],
  period: 'last_12_months',
})

// Response:
{
  cohorts: [
    {
      cohort: '2024-01',
      users: 1200,
      metrics: {
        referralRate: 0.15,      // 15% made at least 1 referral
        avgReferrals: 0.45,      // Average referrals per user
        referralLTV: 125,        // LTV of users they referred
        timeToFirstReferral: 12, // Days after signup
      },
    },
    {
      cohort: '2024-02',
      users: 1350,
      metrics: {
        referralRate: 0.18,      // Improved!
        avgReferrals: 0.52,
        referralLTV: 132,
        timeToFirstReferral: 10,
      },
    },
    // ...
  ],

  insights: [
    {
      type: 'trend',
      message: 'Referral rate improving month-over-month (+20% since Jan)',
    },
    {
      type: 'quality',
      message: 'Q1 referrals have 15% higher LTV than Q4 referrals',
    },
  ],
}

// Compare referred vs non-referred user cohorts
const referredCohorts = await platform.referrals.getCohortAnalysis({
  cohortBy: 'acquisition_source',  // 'referred' vs 'organic' vs 'paid'
  metrics: ['retention_d30', 'conversion_rate', 'ltv'],
})

// {
//   cohorts: [
//     {
//       cohort: 'referred',
//       users: 2500,
//       metrics: {
//         retentionD30: 0.65,    // 65% still active after 30 days
//         conversionRate: 0.32,  // 32% converted to paid
//         ltv: 145,
//       },
//     },
//     {
//       cohort: 'organic',
//       users: 8000,
//       metrics: {
//         retentionD30: 0.52,    // Referred users retain better
//         conversionRate: 0.24,
//         ltv: 112,
//       },
//     },
//     {
//       cohort: 'paid_ads',
//       users: 5000,
//       metrics: {
//         retentionD30: 0.45,
//         conversionRate: 0.18,
//         ltv: 95,
//       },
//     },
//   ],
// }

// Insight: Referred users have 25% better retention and 29% higher LTV

Referred User Quality

Referred users typically have higher retention, conversion rates, and LTV than users from other channels. Use this data to justify investment in your referral program.

Dashboard & Reports

Access all referral analytics through the Sylphx dashboard or export reports.

Generate reports
// Generate a comprehensive referral report
const report = await platform.referrals.generateReport({
  period: 'last_30_days',
  sections: [
    'overview',
    'k_factor',
    'funnel',
    'top_referrers',
    'cohort_analysis',
    'experiment_results',
  ],
  format: 'pdf',  // or 'csv', 'json'
})

// Schedule recurring reports
await platform.referrals.scheduleReport({
  name: 'Weekly Referral Summary',
  frequency: 'weekly',
  dayOfWeek: 'monday',
  recipients: ['team@company.com'],
  sections: ['overview', 'k_factor', 'top_referrers'],
})

// Real-time metrics for dashboards
const realtime = await platform.referrals.getRealtimeMetrics()
// {
//   today: {
//     shares: 145,
//     clicks: 89,
//     signups: 23,
//     conversions: 8,
//   },
//   activeReferrers: 42,  // Currently sharing
//   pendingRewards: 15,   // Awaiting fulfillment
// }

Ready to build your referral program?

Explore the full API reference for all referral endpoints, or check out the pre-built components.