Overview
Dub’s affiliate program feature allows you to create and manage partner programs with commission-based rewards, automated tracking, and built-in payout management. Perfect for SaaS companies, e-commerce, and any business looking to scale through partnerships.
Affiliate programs are available on Business and Enterprise plans.
Creating a Program
Navigate to Programs
Go to your workspace and click “Programs” in the sidebar.
Create New Program
Click “Create Program” and fill in the basic information.
Configure Settings
Set up commission structures, payment terms, and program rules.
Launch Program
Activate the program and start inviting partners.
Program Configuration
// Program schema properties
const program = {
name: 'Acme SaaS Affiliate Program' ,
slug: 'acme-affiliates' ,
domain: 'go.acme.com' , // Optional custom domain
url: 'https://acme.com' ,
logo: 'https://acme.com/logo.png' ,
description: 'Earn 30% recurring commissions promoting Acme'
};
Commission Structure
Set up reward events for your program:
Click Rewards Pay partners per click (CPC model)
Lead Rewards Reward for qualified signups (CPL model)
Sale Rewards Commission on sales (CPS/revenue share)
// Example: Configure sale-based commission
const program = {
name: 'My Program' ,
primaryRewardEvent: 'sale' , // 'click', 'lead', or 'sale'
// Reward structures configured separately
};
Payout Configuration
Choose your payout mode:
All payouts handled by Dub
Automatic commission tracking
Built-in payout processing
Direct deposits to partners
Dub handles all payment logistics
const program = {
payoutMode: 'internal' ,
minPayoutAmount: 5000 // $50 minimum in cents
};
Flexible payout handling
Partners with payouts enabled → Dub processes
Other partners → Manual/external processing
Best for transition periods
const program = {
payoutMode: 'hybrid' ,
minPayoutAmount: 10000 // $100 minimum
};
All payouts external
You handle all payments
Dub provides tracking and reporting
Full control over payment timing and methods
const program = {
payoutMode: 'external' ,
minPayoutAmount: 0
};
Partner Management
Enrollment Statuses
Partners can have different statuses in your program:
Pending Applications awaiting approval
Approved Active partners in the program
Invited Partners you’ve invited who haven’t accepted
Rejected Applications you’ve declined
Declined Invites the partner declined
Deactivated Temporarily inactive partners
Banned Partners permanently removed for policy violations
Archived Historical partners no longer in program
Partner Statistics
Each partner enrollment tracks comprehensive metrics:
// Example partner enrollment data
const enrollment = {
partnerId: 'pn_123' ,
programId: 'prg_456' ,
status: 'approved' ,
// Performance metrics
totalClicks: 1250 ,
totalLeads: 85 ,
totalConversions: 42 ,
totalSales: 45 ,
totalSaleAmount: 450000 , // $4,500 in cents
totalCommissions: 135000 , // $1,350 in cents (30%)
// Calculated metrics
netRevenue: 315000 , // Revenue minus commissions
earningsPerClick: 360 , // Revenue per click in cents
averageLifetimeValue: 10714 , // $107.14 per customer
clickToLeadRate: 0.068 , // 6.8%
clickToConversionRate: 0.0336 , // 3.36%
leadToConversionRate: 0.494 , // 49.4%
returnOnAdSpend: 3.33 // $3.33 revenue per $1 commission
};
Partner Groups
Organize partners into groups with different settings:
// Example: Create partner groups
const groups = [
{
name: 'VIP Partners' ,
programId: 'prg_123' ,
// Higher commission rates for VIPs
},
{
name: 'Content Creators' ,
programId: 'prg_123' ,
// Specialized resources for creators
},
{
name: 'Enterprise Partners' ,
programId: 'prg_123' ,
// Custom terms for large partners
}
];
Reward Configuration
Creating Rewards
Set up commission structures for different events:
// Example: Percentage-based commission on sales
const saleReward = {
programId: 'prg_123' ,
event: 'sale' ,
type: 'percentage' ,
amount: 30 , // 30% commission
label: '30% Revenue Share' ,
description: 'Earn 30% on all sales you refer'
};
// Example: Fixed amount per lead
const leadReward = {
programId: 'prg_123' ,
event: 'lead' ,
type: 'fixed' ,
amount: 500 , // $5 per lead in cents
label: '$5 per Lead' ,
description: 'Earn $5 for every qualified signup'
};
// Example: Pay per click
const clickReward = {
programId: 'prg_123' ,
event: 'click' ,
type: 'fixed' ,
amount: 10 , // $0.10 per click
label: '$0.10 per Click' ,
description: 'Earn $0.10 for every click'
};
Tiered Commissions
Create multiple reward tiers:
// Example: Different tiers for different partner groups
const rewards = [
{
label: 'Standard - 20%' ,
amount: 20 , // Default tier
},
{
label: 'VIP - 30%' ,
amount: 30 , // Higher tier for top performers
},
{
label: 'Enterprise - 40%' ,
amount: 40 , // Premium tier
}
];
Discount Codes
Program-Level Discounts
Create discount codes for partners to promote:
// Example: Program discount
const programDiscount = {
programId: 'prg_123' ,
code: 'PARTNER20' ,
amount: 20 , // 20% off
description: 'Partner exclusive discount'
};
Partner-Specific Codes
Generate unique codes for each partner:
// Example: Partner-specific discount
const partnerCode = {
programId: 'prg_123' ,
partnerId: 'pn_456' ,
linkId: 'link_789' ,
code: 'JOHN20' , // Unique to this partner
amount: 20
};
Discount codes are automatically tracked and attributed to the correct partner.
Partner Links
Automatic Link Creation
When a partner joins, Dub automatically creates their affiliate link:
// Partner link structure
const partnerLink = {
domain: 'go.acme.com' ,
key: 'partner-john' , // Unique per partner
url: 'https://acme.com' ,
programId: 'prg_123' ,
partnerId: 'pn_456' ,
trackConversion: true // Always enabled for partner links
};
Custom Partner Links
Partners can create additional links for specific campaigns:
// Example: Campaign-specific partner link
const campaignLink = {
domain: 'go.acme.com' ,
key: 'john-webinar' ,
url: 'https://acme.com/webinar' ,
programId: 'prg_123' ,
partnerId: 'pn_456' ,
tagNames: [ 'webinar' , 'q1-2024' ]
};
Commission Tracking
Automatic Commission Calculation
Commissions are automatically calculated and tracked:
// When a sale occurs:
1. Sale event recorded : $100
2. Commission rate : 30 %
3. Commission calculated : $30
4. Partner balance updated
5. Commission record created
const commission = {
programId: 'prg_123' ,
partnerId: 'pn_456' ,
amount: 3000 , // $30 in cents
saleAmount: 10000 , // $100 sale
type: 'sale' ,
status: 'pending'
};
Recurring Commissions
Track first-time vs recurring revenue:
// First purchase
const firstSale = {
customerId: 'cus_123' ,
amount: 10000 ,
// Creates new commission
};
// Recurring purchase from same customer
const recurringSale = {
customerId: 'cus_123' ,
amount: 10000 ,
saleType: 'recurring' ,
// Commission still tracked for partner
};
Payout Management
Automatic Payouts
With internal payout mode, Dub handles payments:
Commissions Accumulate
Partner earns commissions from sales.
Minimum Threshold
Balance reaches minimum payout amount.
Payout Initiated
Dub automatically creates payout.
Partner Receives Payment
Funds deposited to partner’s account.
Manual Payouts
For external payout mode:
// Mark payouts as completed externally
const payout = {
programId: 'prg_123' ,
partnerId: 'pn_456' ,
amount: 50000 , // $500
status: 'completed' ,
paidAt: new Date (). toISOString (),
method: 'bank_transfer' ,
externalId: 'TRANSFER_123'
};
Payout History
Track all payouts:
// Get partner payouts
const payouts = await fetch (
'/api/programs/prg_123/payouts?partnerId=pn_456'
);
// Payout statuses:
// - pending: Awaiting processing
// - processing: Payment in progress
// - completed: Successfully paid
// - failed: Payment failed
// - cancelled: Payout cancelled
Partner Analytics
View partner performance metrics:
// Get partner analytics
const analytics = await fetch (
'/api/analytics?' +
'programId=prg_123&' +
'partnerId=pn_456&' +
'interval=30d'
);
// Track key metrics:
// - Total clicks
// - Conversion rate
// - Revenue generated
// - Commissions earned
// - Average order value
Leaderboards
Rank partners by performance:
// Top partners by revenue
const topRevenue = await fetch (
'/api/programs/prg_123/partners?' +
'sortBy=totalSaleAmount&' +
'order=desc&' +
'limit=10'
);
// Top by conversions
const topConversions = await fetch (
'/api/programs/prg_123/partners?' +
'sortBy=totalConversions&' +
'order=desc'
);
Fraud Prevention
Fraud Rules
Set up automatic fraud detection:
// Example fraud rules
const fraudRules = [
{
type: 'duplicate_customer' ,
enabled: true ,
action: 'flag' // or 'block'
},
{
type: 'invalid_traffic' ,
threshold: 0.8 , // 80% invalid click rate
action: 'suspend_partner'
},
{
type: 'self_referral' ,
action: 'reject_commission'
}
];
Ban Reasons
When banning partners, specify reason:
tos_violation - Terms of service violation
inappropriate_content - Inappropriate promotional content
fake_traffic - Generating fake clicks/traffic
fraud - Fraudulent activity
spam - Spamming
brand_abuse - Misrepresenting brand
Partner Network
Marketplace Listing
List your program in Dub’s partner marketplace:
const program = {
addedToMarketplaceAt: new Date (),
featuredOnMarketplaceAt: new Date (), // Featured programs
marketplaceHeaderImage: 'https://acme.com/header.jpg' ,
marketplaceRanking: 1 // Display order
};
Discovery Features
Help partners find your program:
// Enable partner discovery
const program = {
partnerNetworkEnabledAt: new Date (),
categories: [ 'saas' , 'marketing' , 'analytics' ],
description: 'Full program description for partners'
};
Best Practices
Clear Terms Provide clear commission structures and payment terms upfront
Regular Payouts Set reasonable payout thresholds and pay on time
Partner Support Provide resources, creatives, and support for partners
Monitor Performance Regularly review partner performance and optimize
Prevent Fraud Implement fraud detection rules from the start
Reward Top Performers Create tiered rewards to incentivize high performers
API Reference
For detailed API documentation on tracking conversions and managing customers: