Skip to main content

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

1

Navigate to Programs

Go to your workspace and click “Programs” in the sidebar.
2

Create New Program

Click “Create Program” and fill in the basic information.
3

Configure Settings

Set up commission structures, payment terms, and program rules.
4

Launch Program

Activate the program and start inviting partners.

Program Configuration

Basic Information

// 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
};

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.
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
};
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:
1

Commissions Accumulate

Partner earns commissions from sales.
2

Minimum Threshold

Balance reaches minimum payout amount.
3

Payout Initiated

Dub automatically creates payout.
4

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

Performance Dashboard

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:

Build docs developers (and LLMs) love