Affiliate programs are a zero-cash-up-front channel. You pay commission only on the deals that close. A partner links you to their audience, someone buys, the partner gets 20% of the first-year ACV, you get a customer. Rewardful charges $49/month to track this. PartnerStack charges $300+. Neither is built into your app, so you're renting integration overhead alongside the software. Velocity X embeds affiliate tracking directly into the checkout flow. Partner gets a unique link (?aff=partner_slug). Stripe's metadata field captures partner_id when the customer pays. A monthly cron job aggregates conversions and triggers automatic payouts via Wise or Stripe Connect Express. No third-party SaaS. Full control. Zero subscription.
Why Affiliates Outpace Paid Ads for Service Businesses
If you've been living under a rock, here's the math: affiliate commissions are performance-gated. You pay only when someone converts. Google Ads? You pay per click whether they buy or not. Content marketing? Six months to compound. Affiliates compress the funnel and flip the risk: your partner vouches for you, they send someone over, and you only pay if that person signs up. That's a 15:1 advantage in CAC.
For service businesses specifically, affiliates hit different. Consultants, agencies, contractors — they already have trust with their audience. An affiliate marketer mentions your tool to their email list of 10K people, 200 click through, 30 sign up. You paid $0 in ad spend and $6K in commissions (at 20% of $1K per customer). Try that with paid ads. The quality is higher too: referred customers have higher NPS and lower churn because the affiliate pre-vetted them.
The Rewardful / PartnerStack Model and Hidden Costs
Rewardful ($49/month) and PartnerStack ($300/month, not including the mandatory add-ons) both solve the same problem: generate affiliate links, track conversions, queue payouts. On paper they're platforms. In reality, they're middleware. Your affiliate applies on their platform, gets a unique link, clicks land on a landing page hosted on *their* domain (or yours with a subdomain), and when the conversion happens, you pull the data back into your billing system. It's a Frankenstein setup.
The real cost is hidden: you're tethered to their UI for partner management. No customization of the partner dashboard. Limited visibility into why conversions drop. If they change pricing or deprecate features, you're stuck. A three-year PartnerStack contract at $300/month is $10,800 in overhead for a system that runs on a few database tables.
How Velocity X Affiliate Tracking Works
Behold: three tables and one Stripe integration: affiliates (id, name, email, stripe_connect_account_id, payout_method, commission_rate, status, created_at), affiliate_links (id, affiliate_id, slug, destination_url, created_at), and affiliate_conversions (id, affiliate_id, customer_id, order_id, commission_amount, status, conversion_date, payout_date).
Step 1: Partner Signup. You invite an affiliate or they apply via a form. They're created in the affiliates table with a unique slug and payout method (Stripe Connect, Wise email, or manual bank transfer). They get a unique link: your-site.com/?aff=partner_slug.
Step 2: Conversion Capture. A customer lands on that link. When they hit checkout (Stripe Checkout or your custom form), you pass the aff parameter to Stripe's metadata: payment_metadata = {affiliate_slug: "partner_slug"}. Stripe logs it on the payment intent. When the charge succeeds, you have affiliate_slug attached to the payment.
Step 3: Monthly Aggregation. A cron job runs on the 1st of every month. It queries Stripe for all successful payments from the past month with affiliate_slug metadata, matches them to the affiliates table, calculates commission (amount * rate), and creates affiliate_conversions records. Status starts as "pending".
Step 4: Payout. For Stripe Connect partners, you call the Stripe API to initiate a transfer. For Wise, you generate a payment file with their API and send it. For manual, you flag them in a dashboard for you to pay by hand. The record's status flips to "paid". Your affiliate sees it in their dashboard.
Partner Dashboard and Transparency
Every affiliate sees a dashboard showing: their unique link (copy to clipboard), traffic (clicks from that link in the past 30 days), conversions (signups/orders), commission earned YTD, and a payout history (amounts, dates, methods). You can slice by month and export a CSV for accounting. Zero mystery. This is why embedded beats SaaS: the partner dashboard is part of your app, not a third-party login.
On your admin side: total affiliates, YTD commission spend, top-performing partners, and a payout ledger (what's pending, what's been paid). You can toggle a partner on/off, adjust their commission rate, or change their payout method on the fly.
FAQ
What if an affiliate's customer requests a refund?
Stripe charge succeeds, you process a refund within 30 days. The affiliate_conversions record flips status to "refunded". The commission is deducted from their next payout. This is why monthly aggregation works: refunds settle before the monthly job runs, so you don't overpay.
Can I pay different commission rates to different partners?
Yes. Store commission_rate on the affiliates record. Top-tier partners get 25%, tier 2 get 20%, new partners get 15%. The cron job reads the partner's rate and calculates accordingly. You can also run seasonal promotions: "all affiliates get 25% for Q4" by flipping a flag on the job.
How do I prevent fraud (fake signups from the affiliate's own email)?
Layer basic checks: require email verification before the customer counts as converted. Flag conversions from the affiliate's own email domain for manual review. Check if the customer's email is a known throwaway (temp-mail, etc.) — if so, require extra validation. Most fraud is caught with email hygiene alone.
What if I want to add a cap on affiliate commissions per quarter?
Add a fields to affiliates: max_commission_per_quarter (default null = unlimited). The monthly cron job checks if year-to-date commission for the quarter exceeds the cap. If it does, it doesn't queue the payout for that conversion and flags it in the dashboard. Partners always know the rules upfront.
Can I offer referral bonuses (e.g., first 10 signups get $500 extra)?
Yes. Create an affiliate_bonuses table with start_date, end_date, condition (first_N_conversions, seasonal_window), and bonus_amount. During the bonus window, the cron job checks the condition and adds the bonus to the conversion's commission. When the window closes, bonuses stop. This is where owned systems shine — PartnerStack charges extra for campaigns.
The Bottom Line
Affiliate programs are not optional if you want to scale reach without burning budget on ads. The question is whether you pay a SaaS vendor $49–$300 per month, or you own the system yourself. For teams with Stripe and a partner dashboard, affiliate tracking is a 1-week build. Affiliates are pure margin — you pay commission only on the deals they send, and the partner dashboard builds trust. Velocity X ships with it built. The next time an influencer asks if you have an affiliate program, your answer is yes — and you own every conversion.