K-Factor
Viral coefficient
Funnel
Conversion stages
A/B Testing
Optimize incentives
Cohorts
User segments
Calculating K-Factor
Sylphx automatically calculates your K-factor based on referral activity. Here's how to access and interpret the data.
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
// 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
Shares Initiated
Users who click a share button
Link Clicks
Referred users who click the link
Signups
Referred users who create an account
Conversions
Referred users who convert to paid
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
| Property | Type | Description |
|---|---|---|
Share Rate | percentage | Users who share their referral link (aim for >20%) |
Click-through Rate | percentage | Share recipients who click (aim for >30%) |
Signup Rate | percentage | Clicks that become signups (aim for >25%) |
Conversion Rate | percentage | Signups that convert to paid (aim for >30%) |
Time to Convert | days | Average 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 conversionA/B Testing Referral Incentives
Test different reward structures to find what drives the most referrals and conversions.
// 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
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.
// 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
// 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.
// 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 LTVReferred User Quality
Dashboard & Reports
Access all referral analytics through the Sylphx dashboard or export 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.