<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Referral Tracking Notes]]></title><description><![CDATA[Referral Tracking Notes]]></description><link>https://referraltrackingnotes.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 12 Nov 2026 09:24:56 GMT</lastBuildDate><atom:link href="https://referraltrackingnotes.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[PartnerStack alternatives (2026): what Rewardful, FirstPromoter, Tolt and Dub cost next to Spark's 10%]]></title><description><![CDATA[PartnerStack prices on a demo; Spark takes 10% of payouts. What Rewardful, FirstPromoter, Tolt and Dub cost at $5k to $50k a month, and when to stay.]]></description><link>https://referraltrackingnotes.hashnode.dev/partnerstack-alternatives</link><guid isPermaLink="true">https://referraltrackingnotes.hashnode.dev/partnerstack-alternatives</guid><category><![CDATA[SaaS]]></category><category><![CDATA[Affiliate marketing]]></category><category><![CDATA[Startups]]></category><category><![CDATA[stripe]]></category><dc:creator><![CDATA[Referral Tracking Notes]]></dc:creator><pubDate>Wed, 11 Nov 2026 17:18:09 GMT</pubDate><content:encoded><![CDATA[<p>Owe your affiliates $3,000 next month on PartnerStack Spark and the bill is $3,300. The extra $300 is PartnerStack's "10% processing fee on commissions you pay out," and it's the only PartnerStack price you can read without booking a call.</p>
<p>The rest of PartnerStack is quoted on a demo. Its pricing page lists Launch, Growth and Enterprise, three "Book your demo" buttons, and this line in the FAQ: "Your final plan and pricing are confirmed during your demo." On top of the plan, PartnerStack adds what its help center calls a PartnerStack fee, "a percentage … on your partner commission invoice total." The rate isn't published. You ask your Customer Success Manager.</p>
<p>Rewardful, FirstPromoter, Tolt and Dub all publish their entry prices and start with a 14-day trial, no call needed. For a plain affiliate program on Stripe, Rewardful beats Spark once payouts pass about $490 a month if you send them yourself, and about $700 if Rewardful sends them for 3%. If PartnerStack's marketplace, deal registration or MDF brings you revenue, stay: none of the four lists deal registration or MDF on its pricing page.</p>
<p>Every price below comes from each vendor's own site, read Nov 11, 2026. I haven't run any of these tools in production. I'm a Dub affiliate, so I only quote each vendor about itself, and anything I couldn't find is marked UNKNOWN.</p>
<h2>What PartnerStack publishes, and what it doesn't</h2>
<p>From <a href="https://partnerstack.com/pricing">partnerstack.com/pricing</a>:</p>
<ul>
<li>Launch: affiliate link tracking or lead and deal registration ("Select one"), PartnerStack Marketplace access, Partner Payments, onboarding and training tools, CRM integrations.</li>
<li>Growth: adds an LMS, partner challenges, MDF management and payments, and advanced segmentation.</li>
<li>Enterprise: full access to link tracking plus lead and deal registration, a designated CSM, and "network success" recruiting help.</li>
<li>No cap on partners. "Pricing is based on your partner program size, feature needs and level of support."</li>
</ul>
<p>What isn't there: a price for any of the three, the PartnerStack fee rate, a minimum contract term, a refund policy or a trial. All UNKNOWN until the demo.</p>
<p><a href="https://partnerstack.com/platform/spark">Spark</a> is the exception. It's self-serve, "no contracts," and you sign up without a call. You get a single user, simplified tracking links, simple commission offers, "Simple Sale tracking via Stripe," automated payouts and a custom domain. You don't get the network: "Spark does not include access to the PartnerStack Network of more than 117,000 B2B partners."</p>
<p>PartnerStack does document its fraud and tax handling, which matters when you compare. Its help center describes fraud flagging through Sift in a "Fraud Management" tab, with commissions held while you review (<a href="https://support.partnerstack.com/hc/en-us/articles/5301967077395-Managing-fraud">managing fraud</a>). For partners who withdraw by direct deposit, it collects a W-9 from US partners and a W-8 from non-US ones, and it files a 1099-K for a partner with both "$20,000 USD in gross payment volume" and 200 transactions in a year (<a href="https://support.partnerstack.com/hc/en-us/articles/360048158113-Managing-tax-information">tax information</a>). Which plans include the fraud tooling is UNKNOWN.</p>
<p>Two more things from PartnerStack's help center that matter for the math. Commissions are invoiced to you on the 1st, you have seven days to review, the invoice is charged on the 8th, and partners can withdraw from the 13th (<a href="https://support.partnerstack.com/hc/en-us/articles/360009437334-Company-FAQs">Company FAQs</a>). And partners pay their own withdrawal fees: "$2.25 USD + 0.25% to a max of $20USD per payout" via Stripe, or "2% to a max of $20 USD" via PayPal (<a href="https://support.partnerstack.com/hc/en-us/articles/360009377934-Configuring-payout-providers">payout providers</a>).</p>
<h2>What the alternatives cost as your program grows</h2>
<p>Here is one program at a 20% commission, on monthly prices, so payouts are a fifth of affiliate revenue. "You pay" means you send the payouts yourself; "they pay" means the vendor does.</p>
<table>
<thead>
<tr>
<th align="left">Affiliate revenue a month (payouts)</th>
<th align="left">PartnerStack Launch / Growth / Enterprise</th>
<th align="left">PartnerStack Spark</th>
<th align="left">Rewardful</th>
<th align="left">FirstPromoter</th>
<th align="left">Tolt</th>
<th align="left">Dub (ACH)</th>
</tr>
</thead>
<tbody><tr>
<td align="left">$5,000 ($1,000)</td>
<td align="left">Not public / UNKNOWN</td>
<td align="left">$100</td>
<td align="left">$49 you pay, $79 they pay</td>
<td align="left">$49 you pay</td>
<td align="left">$119</td>
<td align="left">$140</td>
</tr>
<tr>
<td align="left">$12,500 ($2,500)</td>
<td align="left">Not public / UNKNOWN</td>
<td align="left">$250</td>
<td align="left">$99 you pay, $174 they pay</td>
<td align="left">$99 you pay</td>
<td align="left">$149</td>
<td align="left">$215</td>
</tr>
<tr>
<td align="left">$25,000 ($5,000)</td>
<td align="left">Not public / UNKNOWN</td>
<td align="left">$500</td>
<td align="left">from $149 you pay, from $299 they pay</td>
<td align="left">from $149 you pay</td>
<td align="left">$299</td>
<td align="left">$550</td>
</tr>
<tr>
<td align="left">$50,000 ($10,000)</td>
<td align="left">Not public / UNKNOWN</td>
<td align="left">$1,000</td>
<td align="left">$299 you pay, $599 they pay</td>
<td align="left">from $149, tier UNKNOWN</td>
<td align="left">$399</td>
<td align="left">$800</td>
</tr>
</tbody></table>
<p>The table ignores your own time and any PayPal or Wise fees when you send payouts yourself; Rewardful's pricing page lists those third-party fees as outside its 0%. How each cell is built:</p>
<ul>
<li>Spark: 10% of payouts.</li>
<li>Rewardful: Starter $49 up to $7,500 a month in affiliate-attributed revenue, Growth $99 up to $15,000, Enterprise from $149 up to $30,000 and $299 up to $75,000 (<a href="https://www.rewardful.com/pricing">pricing</a>, <a href="https://www.rewardful.com/pricing-schedule">tier schedule</a>). Rewardful says it takes 0% of affiliate revenue. "They pay" adds the 3% Managed Payouts fee.</li>
<li>FirstPromoter: Starter $49 up to $5,000, Business $99 up to $15,000, Enterprise $149 "above $15,000/month," behind "Let's talk" (<a href="https://firstpromoter.com/pricing">pricing</a>). Its pricing page lists no transaction or payout fee, so its fee is UNKNOWN, not zero. Managed Auto Payouts is Enterprise only, "SaaS companies only, approval required," and its fee is UNKNOWN.</li>
<li>Tolt: Growth $99 up to $20k a month in partner revenue, Pro $199 up to $50k, plus "2% of what's paid out" on every plan. Tolt pays the affiliates (<a href="https://tolt.com/pricing">pricing</a>).</li>
<li>Dub: Business $90 covers up to $2.5K a month in partner payouts, Advanced $300 covers up to $15K, plus a 5% payout fee by ACH (<a href="https://dub.co/pricing">pricing</a>, <a href="https://dub.co/help/article/partner-payouts">payouts help</a>). Dub pays the partners. Fund payouts by card and the fee is 8%, which makes those four cells $170, $290, $700 and $1,100.</li>
</ul>
<img src="https://cdn.hashnode.com/uploads/covers/6af425c8d61cf9641b9c624e/2a6fa04f-1302-403c-a5e9-237a4d8c0a1f.png" alt="Dub pricing page on the Monthly toggle, Nov 11, 2026: Business $90 per month with $2.5K partner payouts a month, Advanced $300 per month with $15K partner payouts a month, Enterprise custom annual billing." style="display:block;margin:0 auto" />

<p><a href="http://dub.co/pricing"><em>dub.co/pricing</em></a><em>, Monthly view, Nov 11, 2026: Business at $90 covers $2.5K a month in partner payouts.</em></p>
<p>Three things stand out.</p>
<p>Spark is cheap only when you're small. Rewardful at $49 beats it once payouts pass $490 a month, if you're fine sending a PayPal or Wise batch yourself. If you want the vendor to pay affiliates, Rewardful with Managed Payouts beats Spark from about $700 in payouts, and Tolt from about $1,240.</p>
<p>Dub sits in the middle, with a cliff. Against Spark, Dub Business wins between $1,800 and $2,500 a month in payouts. Past $2,500 you need Advanced at $300, and Spark is cheaper again until about $6,000. From $6,000 up to Advanced's $15K cap, Dub wins. If your payouts land between $2,500 and $6,000 a month, Spark costs less than Dub, and I'm the one with the Dub link.</p>
<p>The PartnerStack column is the one that matters for most people reading this, and I can't fill it. If you're on Launch or Growth today, your invoice is the number to put there: the plan fee plus your PartnerStack fee percentage.</p>
<h2>Who takes a cut, and how</h2>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">PartnerStack</th>
<th align="left">Rewardful</th>
<th align="left">FirstPromoter</th>
<th align="left">Tolt</th>
<th align="left">Dub</th>
</tr>
</thead>
<tbody><tr>
<td align="left">Plan prices</td>
<td align="left">Spark $0; others not public</td>
<td align="left">$49 / $99 / $149+</td>
<td align="left">$49 / $99 / $149</td>
<td align="left">$99 / $199 / custom</td>
<td align="left">$90 / $300 / custom</td>
</tr>
<tr>
<td align="left">Cut of payouts or revenue</td>
<td align="left">Spark 10%; PartnerStack fee rate UNKNOWN</td>
<td align="left">0% of revenue; 3% with Managed Payouts</td>
<td align="left">None listed (UNKNOWN)</td>
<td align="left">2% of payouts</td>
<td align="left">5% ACH, 8% card (3% / 6% on Enterprise)</td>
</tr>
<tr>
<td align="left">Plan grows with</td>
<td align="left">"partner program size, feature needs and level of support"</td>
<td align="left">Affiliate revenue</td>
<td align="left">Affiliate revenue</td>
<td align="left">Partner revenue</td>
<td align="left">Partner payouts</td>
</tr>
<tr>
<td align="left">Who sends payouts</td>
<td align="left">PartnerStack</td>
<td align="left">You, or Rewardful for 3%</td>
<td align="left">You; managed on Enterprise only</td>
<td align="left">Tolt</td>
<td align="left">Dub</td>
</tr>
<tr>
<td align="left">Trial</td>
<td align="left">Spark is free to start; others demo-led</td>
<td align="left">14 days</td>
<td align="left">14 days, no card</td>
<td align="left">14 days, no card</td>
<td align="left">14 days, card charged at the end</td>
</tr>
<tr>
<td align="left">Minimum contract</td>
<td align="left">UNKNOWN; Spark "no contracts"</td>
<td align="left">Cancel any time</td>
<td align="left">UNKNOWN</td>
<td align="left">Monthly or yearly</td>
<td align="left">Cancel any time; Enterprise annual</td>
</tr>
</tbody></table>
<p>Sources: the pricing pages above, plus Dub's <a href="https://dub.co/help/article/free-trial">free trial help</a> and Rewardful's <a href="https://www.rewardful.com/pricing-schedule">tier schedule</a>.</p>
<h2>Rewardful</h2>
<p>The cheapest bill here if you'll send payouts yourself. Every plan has unlimited affiliates and "a 0% transaction fee on affiliate-attributed revenue." Managed Payouts is optional on any plan for 3%. Starter is limited to two team members. On billing, it's Stripe first, and its own Paddle page says "Rewardful only integrates with Paddle Classic, not Paddle Billing" (<a href="https://www.rewardful.com/paddle">rewardful.com/paddle</a>). If you go over a cap, Rewardful moves you "to the next pricing tier in the next billing cycle." No marketplace is listed.</p>
<h2>FirstPromoter</h2>
<p>Same $49 entry, lower first cap ($5,000 a month in revenue from affiliates) and 1,000 affiliates on Starter. It lists the widest billing support of the four: Stripe, Paddle, Chargebee, Recurly and Braintree, and its help center has a Paddle Billing guide. W-9 and W-8BEN collection is listed on every plan but is off by default. Fraud controls (self-referral detection, a paid-ad traffic policy, reCAPTCHA) are listed on every plan. The page is running a 20% off code, BF2026, as I write this.</p>
<h2>Tolt</h2>
<img src="https://cdn.hashnode.com/uploads/covers/6af425c8d61cf9641b9c624e/7bb93ab9-08dc-4115-8bb9-f1038c183c28.png" alt="Tolt pricing page, Monthly view, Nov 11, 2026: Growth $99 a month up to $20k a month in partner revenue, Pro $199 up to $50k, Enterprise custom." style="display:block;margin:0 auto" />

<p><a href="http://tolt.com/pricing"><em>tolt.com/pricing</em></a><em>, Monthly view, Nov 11, 2026: Growth is $99 a month for up to $20k in partner revenue.</em></p>
<p>The closest match to Spark's "they pay your partners" model, at a fifth of the cut. Every plan pays affiliates for you for 2% of what's paid out, and collects "W-9 and W-8 forms, 1099 filing" before a partner's first payout. Radar fraud protection starts on Pro. Billing is Stripe, Paddle or Chargebee, or webhooks and the API. The FAQ promises a full refund within 30 days. I went deeper on Tolt's plans in <a href="https://referraltrackingnotes.hashnode.dev/tolt-alternatives">Tolt alternatives</a>.</p>
<h2>Dub</h2>
<p>Dub Partners starts at $90 a month on Business, or $81 billed yearly. Dub pays partners, collects W-9s, sends a 1099-NEC to US partners paid $600 or more in a year, and collects W-8s from non-US partners (<a href="https://dub.co/help/article/partner-payouts">payouts help</a>). Commissions sit in a holding period first, 30 days by default, and Dub's own advice is "We don't recommend a 0-day holding period."</p>
<p>Where Dub loses, from its own pages:</p>
<ul>
<li>Fraud tooling: risk monitoring "is only available on Advanced plans and above" (<a href="https://dub.co/help/article/risk-monitoring">risk monitoring</a>).</li>
<li>Network: "Partner Network access" and "Program Marketplace listing" are on Enterprise only (<a href="https://dub.co/pricing">pricing</a>). PartnerStack puts Marketplace access on Launch.</li>
<li>Caps: go over your monthly payout limit and "you won't be able to send payouts until the next billing period."</li>
<li>Billing: <a href="http://dub.co">dub.co</a> lists Stripe, Shopify and Polar. I found no Paddle or Chargebee integration, so treat those as UNKNOWN.</li>
<li>Trial: payouts are capped at $500 a month during the trial, and "your card will be automatically charged for the first month of your paid plan" when it ends (<a href="https://dub.co/help/article/free-trial">free trial help</a>).</li>
</ul>
<h2>Leaving PartnerStack without losing partners</h2>
<p>Whichever tool you pick:</p>
<ol>
<li>Export partners, links and open commissions, and check your contract's notice period (UNKNOWN to me, it's in your contract).</li>
<li>Settle the last commission invoice inside PartnerStack so no partner has a balance in two places.</li>
<li>Collect payout details and tax forms in the new tool before the first payout.</li>
<li>Keep old links working through your cookie window.</li>
<li>Run one test customer through click, signup, payment and refund before you email partners.</li>
</ol>
<p>If you're moving to Dub, its <a href="https://dub.co/help/article/migrating-from-partnerstack">PartnerStack import guide</a> uses your PartnerStack Public and Secret API keys and needs a custom domain and conversion tracking set up first. It only imports partners "In an 'approved' state" with "at least 1 lead / referral," and it recreates their links on your Dub domain. Because there's no <code>/triggers</code> endpoint, "your PartnerStack triggers will not be migrated," so every partner lands on your default reward. Commissions without a valid Stripe customer ID or transaction trace don't come over.</p>
<h2>Who each tool fits</h2>
<p>I earn a commission if you sign up for Dub, so here's where I'd send you elsewhere.</p>
<ul>
<li>Stay on PartnerStack if the marketplace recruits partners for you, or your partners register deals, take courses or spend MDF. None of the four lists deal registration or MDF on its pricing page, and only Dub lists a partner network, on Enterprise.</li>
<li>Pick Spark if you pay partners under about $700 a month, want them paid for you, and one user is enough.</li>
<li>Pick Rewardful for the lowest bill when you'll send payouts yourself, on Stripe or Paddle Classic.</li>
<li>Pick FirstPromoter if you bill on Chargebee, Recurly, Braintree or Paddle Billing.</li>
<li>Pick Tolt if you want the tool to pay affiliates and file 1099s for the smallest cut here, 2%.</li>
<li>Pick Dub if Stripe is your source of truth, you want payouts and US tax forms inside the product, and your payouts sit between $1,800 and $2,500 a month or above $6,000. Price the $2,500 to $6,000 band honestly first.</li>
</ul>
<p>For the three-way spec sheet with Stripe event details and refund handling, see <a href="https://referraltrackingnotes.hashnode.dev/dub-vs-rewardful-vs-partnerstack">Dub vs Rewardful vs PartnerStack</a>.</p>
<p>Affiliate link - I may earn a commission: <a href="https://refer.dub.co/shamil">https://refer.dub.co/shamil</a></p>
<h2>Quick answers</h2>
<p><strong>How much does PartnerStack cost?</strong> Launch, Growth and Enterprise aren't priced in public: "Your final plan and pricing are confirmed during your demo." There's also a PartnerStack fee on your commission invoice, rate not public. Spark is $0 a month plus 10% of the commissions you pay out.</p>
<p><strong>What's the cheapest PartnerStack alternative?</strong> On published prices, Rewardful or FirstPromoter at $49 a month if you send payouts yourself. If you want the tool to pay affiliates, Rewardful with Managed Payouts (3%) or Tolt ($99 plus 2%).</p>
<p><strong>Is Dub cheaper than PartnerStack?</strong> Than Spark, only between $1,800 and $2,500 a month in payouts, or above $6,000, paying by ACH. Than Launch or Growth: UNKNOWN, because those prices aren't public.</p>
<p><strong>Does any alternative have a partner marketplace?</strong> Dub lists "Partner Network access" and "Program Marketplace listing" on Enterprise only. Rewardful, FirstPromoter and Tolt list none.</p>
<h2>What I couldn't verify</h2>
<ul>
<li>PartnerStack Launch, Growth and Enterprise prices, the PartnerStack fee rate, minimum contract, refund policy and whether a trial exists.</li>
<li>FirstPromoter's fee on Managed Auto Payouts and its Enterprise tier above $15,000.</li>
<li>Whether Dub tracks Paddle or Chargebee sales.</li>
</ul>
<p><em>Prices read Nov 11, 2026 from</em> <a href="http://partnerstack.com"><em>partnerstack.com</em></a><em>,</em> <a href="http://rewardful.com"><em>rewardful.com</em></a><em>,</em> <a href="http://firstpromoter.com"><em>firstpromoter.com</em></a><em>,</em> <a href="http://tolt.com"><em>tolt.com</em></a> <em>and</em> <a href="http://dub.co"><em>dub.co</em></a> <em>(pricing, help and docs). Vendors change prices often, so check before you buy.</em></p>
]]></content:encoded></item><item><title><![CDATA[Verify your Dub + Stripe referral tracking before launch: one test customer, four records]]></title><description><![CDATA[Push one test customer through click, signup, Stripe payment and refund on Dub. The IDs to record, what a pass looks like, and a test table to copy.]]></description><link>https://referraltrackingnotes.hashnode.dev/verify-your-saas-referral-tracking</link><guid isPermaLink="true">https://referraltrackingnotes.hashnode.dev/verify-your-saas-referral-tracking</guid><category><![CDATA[SaaS]]></category><category><![CDATA[stripe]]></category><category><![CDATA[Testing]]></category><category><![CDATA[Affiliate marketing]]></category><dc:creator><![CDATA[Referral Tracking Notes]]></dc:creator><pubDate>Wed, 11 Nov 2026 14:40:29 GMT</pubDate><content:encoded><![CDATA[<p>Maya clicks your partner Acme's link on a Tuesday, signs up with Google, pays for your plan through Stripe Checkout, and asks for her money back nine days later. That one customer leaves four records behind: a click, a lead, a sale and a refund. If any of them is missing, or lands on the wrong partner, you'll hear about it from Acme, probably in an email with a screenshot attached.</p>
<p>So before a real partner sends you traffic, verify your referral tracking end to end: push one test customer through all four on Dub and Stripe, and write down the IDs at each hop.</p>
<p>I'm a Dub affiliate. I checked every step against Dub's docs on Nov 11, 2026, but haven't run it in a live or staging workspace myself. Maya, Acme and every ID below are made up. The "Observed" and "Pass/Fail" columns in the table are blank on purpose, for your own run.</p>
<h2>What you need first</h2>
<p>This is for a SaaS running its own partner program on Dub with Stripe billing, and it covers one path: Stripe Checkout in subscription mode. Other payment setups are listed at the end. Run them as separate traces.</p>
<ul>
<li>A Dub staging workspace. Staging is on Business plans and above, and only when the workspace has a partner program. Free and Pro workspaces don't get one (<a href="https://dub.co/docs/testing">testing docs</a>). Business is $90 a month, or $81 a month billed yearly (<a href="https://dub.co/pricing">pricing</a>). Staging itself isn't billed (<a href="https://dub.co/docs/testing">testing docs</a>). Dub's 14-day trial charges your card for the first month when it ends, and you can cancel any time before that (<a href="https://dub.co/help/article/free-trial">free trial</a>). The docs don't say whether a workspace still on its trial gets staging, so check first.</li>
<li>Staging keys, not production ones. Staging API keys start with <code>dub_test_</code> and staging publishable keys with <code>dub_pk_test_</code>. API keys, publishable keys, webhooks and integration connections are all separate from production (same page).</li>
<li>Stripe in test mode or a Stripe sandbox, connected to the staging workspace. Live mode is rejected in staging.</li>
<li>The Dub Analytics script on your site and Dub's server-side SDK in your backend (<a href="https://dub.co/docs/integrations/stripe">Stripe integration</a>).</li>
<li>Test partner email addresses. Staging payouts are simulated, but "Partners still receive the payout email for staging payouts" (<a href="https://dub.co/docs/testing">testing docs</a>).</li>
</ul>
<h2>The cast</h2>
<ul>
<li>Acme is a test partner in your staging program, with a staging partner link.</li>
<li>Maya is a test user. She clicks Acme's link, signs up, subscribes, then asks for a refund.</li>
<li>Your app is on <code>app.example.com</code> and your marketing site on <code>example.com</code>.</li>
</ul>
<p>Write down every ID as you go. The trace is only as good as what you record.</p>
<h2>The ID chain</h2>
<p>Fill this in before you click anything. Each row has to hand off to the next.</p>
<table>
<thead>
<tr>
<th align="left">Hop</th>
<th align="left">Where it lives</th>
<th align="left">Example value</th>
<th align="left">Has to match</th>
</tr>
</thead>
<tbody><tr>
<td align="left">Click ID</td>
<td align="left"><code>dub_id</code> cookie set by the Analytics script</td>
<td align="left"><code>clk_EXAMPLE</code></td>
<td align="left">Sent as <code>clickId</code> in the lead event</td>
</tr>
<tr>
<td align="left">Your user ID</td>
<td align="left">Your database</td>
<td align="left"><code>user_maya_001</code></td>
<td align="left">Sent as <code>customerExternalId</code> in the lead event</td>
</tr>
<tr>
<td align="left">Checkout link-back</td>
<td align="left"><code>metadata.dubCustomerExternalId</code> on the Checkout Session</td>
<td align="left"><code>user_maya_001</code></td>
<td align="left">Exactly the <code>customerExternalId</code> above</td>
</tr>
<tr>
<td align="left">Stripe customer</td>
<td align="left"><code>cus_...</code></td>
<td align="left"><code>cus_EXAMPLE</code></td>
<td align="left">Created by Checkout for Maya</td>
</tr>
<tr>
<td align="left">Subscription and invoice</td>
<td align="left"><code>sub_...</code>, <code>in_...</code></td>
<td align="left"><code>sub_EXAMPLE</code>, <code>in_EXAMPLE</code></td>
<td align="left">The paid invoice behind the sale</td>
</tr>
<tr>
<td align="left">Charge</td>
<td align="left"><code>ch_...</code></td>
<td align="left"><code>ch_EXAMPLE</code></td>
<td align="left">The charge you refund</td>
</tr>
</tbody></table>
<p>The rule that's easiest to break: the value you send as <code>customerExternalId</code> at signup has to be the same value you put in the Checkout Session's <code>metadata.dubCustomerExternalId</code>. If one is your user ID and the other is an email or a team ID, the sale can't tie back to the click (<a href="https://dub.co/docs/integrations/stripe">Stripe integration</a>).</p>
<h2>The trace, step by step</h2>
<p><strong>1. Check the script, and that <code>dub_id</code> reaches signup.</strong> On a page where the Analytics script is installed, open the browser console and type <code>_dubAnalytics</code>. You should see the object. Then load that page with <code>?dub_id=test</code> and check that a <code>dub_id</code> cookie appears. If either check fails, Dub's docs say to make sure the script is in the page's <code>&lt;head&gt;</code> and to purge any CDN cache (<a href="https://dub.co/docs/sdks/client-side/installation-guides/manual">install checks</a>). On a partner program, also set the script's <code>data-domains</code> property to your referral link domain; the same page says you need it "to enable client-side click-tracking." The check that matters is whether the <code>dub_id</code> cookie reaches your signup handler.</p>
<p>Pass: <code>_dubAnalytics</code> is defined and the <code>?dub_id=test</code> cookie appears, with <code>data-domains</code> set.</p>
<p><strong>2. Click Acme's staging link as Maya</strong>, in a fresh browser profile. Staging links are on <code>{your-workspace-slug}.staging.dub.link</code> (<a href="https://dub.co/docs/testing">testing docs</a>), so write that domain down along with the <code>dub_id</code> value and the domain the cookie is set on.</p>
<p>The cookie lasts 90 days by default, and Dub gives the sale to the last partner link clicked unless you switch to first-click (<a href="https://dub.co/docs/concepts/attribution">how attribution works</a>).</p>
<p>Pass: the click shows up in the staging workspace, and the <code>dub_id</code> cookie can be read on your signup domain, so the handler can send it as <code>clickId</code>.</p>
<p><strong>3. Sign Maya up.</strong> Your backend sends a lead event with <code>clickId</code> from the cookie, an event name like <code>Sign Up</code>, and <code>customerExternalId</code> set to Maya's user ID. Dub calls server-side tracking "the recommended way to track conversions" (<a href="https://dub.co/docs/conversions/quickstart">server-side tracking</a>).</p>
<p>If sign-in runs through a callback route, like OAuth or a magic link, send the lead inside that callback, where the <code>dub_id</code> cookie is still available. Dub's Supabase example tracks the lead only when the cookie is there and the user was created in the last 10 minutes, and then deletes the cookie (<a href="https://dub.co/docs/conversions/leads/supabase">Supabase guide</a>). You don't need Supabase to copy the idea.</p>
<p>Dub records only the first lead for each <code>customerExternalId</code> and <code>eventName</code> pair (<a href="https://dub.co/docs/concepts/attribution">how attribution works</a>). So a retried callback shouldn't double-count, as long as every signup path sends the same event name and the same user ID. Test it: fire the callback twice and confirm one lead.</p>
<p>If a signup alone isn't the lead you want to pay for, say a partner should only earn once a user does something real in your product, Dub has deferred lead tracking, which creates the lead event in a later request (<a href="https://dub.co/docs/conversions/leads/deferred">deferred lead tracking</a>). Trace that as its own run.</p>
<p>Pass: one lead for Maya in staging, on Acme's link, with customer external ID <code>user_maya_001</code>.</p>
<p><strong>4. Start a subscription Checkout.</strong> Create the Checkout Session with <code>mode: "subscription"</code> and <code>metadata.dubCustomerExternalId</code> set to Maya's user ID. Pay with one of Stripe's test cards (<a href="https://docs.stripe.com/testing">Stripe testing docs</a>).</p>
<p>Pass: a sale on Maya's customer in staging, on Acme's link, with a commission for Acme.</p>
<p><strong>5. Check the amount.</strong> Dub leaves tax out of the sale amount. For a Checkout Session it records <code>amount_total - total_details.amount_tax</code>. For invoices it records <code>amount_paid × total_excluding_tax / total</code>, so "A fully paid invoice records exactly <code>total_excluding_tax</code>," and a partly paid one, say with a credit balance applied, records the paid amount without its tax share (same page). If an invoice has several line items, Dub works out the commission line by line. Compare Dub's sale amount to that number and to the reward you set.</p>
<p>Say Maya's plan is $49 a month and 8% sales tax brings the invoice to $52.92. She pays it in full, so either way Dub should record $49.00: $52.92 minus $3.92 of tax on the session, or $52.92 × $49.00 / $52.92 on the invoice. At a 20% reward, Acme's commission is $9.80.</p>
<p>Pass: sale amount $49.00, commission $9.80.</p>
<p><strong>6. Refund the charge in full, before the commission is paid out, and to be safe before its payout starts processing.</strong> With the Stripe integration, "refunds are automatically tracked without any additional setup" (<a href="https://dub.co/docs/conversions/sales/refunds">refunds docs</a>), and Dub's payouts help says the commission "will also be marked as refunded" (<a href="https://dub.co/help/article/partner-payouts">payouts help</a>).</p>
<p>Pass: Acme's commission shows refunded. Then check whether it's still in the pending payout. The docs say a refunded commission is left out of pending payouts on the manual path, but don't spell that out for Stripe refunds, so record what you see.</p>
<p>Dub's docs don't say how a partial refund changes the commission. If you offer partial refunds, run one as its own row and record what happens.</p>
<p><strong>7. Test a refund after the payout.</strong> Staging payouts are simulated, with no bank charge and no money moving (<a href="https://dub.co/docs/testing">testing docs</a>), so you can confirm one, refund the charge after it, and record whether the commission changes. If your program uses external or hybrid payouts, staging sends <code>external_payout.confirmed</code>, and the payout stays processing until a test handler responds, so point that webhook at one first (same page). Dub's <a href="https://dub.co/docs/conversions/sales/refunds">refunds docs</a> say "Commissions that are already paid cannot be refunded." They suggest a payout holding period that matches your refund policy, so a 30-day refund window gets a 30-day hold, and a clawback for anything already paid. Pick your holding period and write the clawback steps down now.</p>
<p><strong>8. Go live on purpose.</strong> Swap every <code>dub_test_</code> and <code>dub_pk_test_</code> key for production keys, connect live Stripe to the production workspace, and send one real conversion through a production link. Dub's docs say to confirm it lands in production "before you treat the integration as live." Staging data stays in staging (<a href="https://dub.co/docs/testing">testing docs</a>).</p>
<h2>The test table</h2>
<p>Copy this, run each row in staging and fill in the blank columns.</p>
<table>
<thead>
<tr>
<th align="left">Scenario</th>
<th align="left">Expected</th>
<th align="left">Observed</th>
<th align="left">IDs to record</th>
<th align="left">Pass/Fail</th>
<th align="left">Fix if it fails</th>
</tr>
</thead>
<tbody><tr>
<td align="left">Email signup</td>
<td align="left">One lead on Acme's link, <code>customerExternalId</code> = your user ID</td>
<td align="left"></td>
<td align="left"><code>dub_id</code>, user ID, lead event</td>
<td align="left"></td>
<td align="left">Lead not sent, or sent without the cookie value. Check the signup handler reads <code>dub_id</code>.</td>
</tr>
<tr>
<td align="left">OAuth or callback signup</td>
<td align="left">One lead, even if the callback runs twice</td>
<td align="left"></td>
<td align="left"><code>dub_id</code>, user ID, event name, callback time vs. user created time</td>
<td align="left"></td>
<td align="left">Cookie lost on the provider redirect, or a new-user check filtered the wrong person. A second lead means a different <code>eventName</code> or <code>customerExternalId</code> on this path.</td>
</tr>
<tr>
<td align="left">Marketing site to app subdomain</td>
<td align="left"><code>dub_id</code> set on <code>example.com</code> is readable on <code>app.example.com</code></td>
<td align="left"></td>
<td align="left">Cookie domain on each host</td>
<td align="left"></td>
<td align="left">If the script is only on the subdomain, set the cookie domain to <code>.example.com</code> (<a href="https://dub.co/docs/sdks/client-side/features/cross-domain-tracking">cross-domain</a>)</td>
</tr>
<tr>
<td align="left">Two different domains</td>
<td align="left">Click ID carried from <code>example.sh</code> to <code>example.com</code></td>
<td align="left"></td>
<td align="left">URLs before and after the hop</td>
<td align="left"></td>
<td align="left">Use the outbound-domains script on both domains (same page)</td>
</tr>
<tr>
<td align="left">Paid subscription</td>
<td align="left">Sale on Maya's customer, on Acme's link, commission created</td>
<td align="left"></td>
<td align="left"><code>cus_</code>, <code>sub_</code>, <code>in_</code>, Checkout Session ID</td>
<td align="left"></td>
<td align="left"><code>dubCustomerExternalId</code> missing, or not equal to the lead's <code>customerExternalId</code></td>
</tr>
<tr>
<td align="left">Full refund before payout</td>
<td align="left">Commission marked refunded</td>
<td align="left"></td>
<td align="left"><code>ch_</code>, refund ID, commission ID</td>
<td align="left"></td>
<td align="left">Stripe app not connected to the staging workspace, wrong charge, or the commission was already paid (or its payout was processing)</td>
</tr>
<tr>
<td align="left">Refund after a staging payout</td>
<td align="left">Per the refunds docs, no automatic change. You handle it with a clawback</td>
<td align="left"></td>
<td align="left">Payout ID, commission ID</td>
<td align="left"></td>
<td align="left">Set a holding period to match your refund window and write down the clawback steps</td>
</tr>
<tr>
<td align="left">Staging vs. production</td>
<td align="left">Staging events stay in staging. Production uses <code>dub_</code> and <code>dub_pk_</code> keys and live Stripe</td>
<td align="left"></td>
<td align="left">Key prefixes in each environment</td>
<td align="left"></td>
<td align="left">A <code>dub_test_</code> key shipped to production. Replace it and redeploy.</td>
</tr>
</tbody></table>
<h2>When something's off</h2>
<ul>
<li>Clicks show up, leads don't. The lead event isn't firing, or it has no click ID. Check that the cookie exists at signup time on the signup domain, and that every signup method runs the lead call on the server.</li>
<li>Leads show up, sales don't. Check the Checkout metadata key is <code>dubCustomerExternalId</code> and that its value equals the lead's <code>customerExternalId</code>. Then check the Stripe app is connected to the same workspace, staging or production (<a href="https://dub.co/docs/integrations/stripe">Stripe integration</a>).</li>
<li>A one-time purchase didn't track. In guest checkout with <code>mode: "payment"</code>, the Checkout customer can be null and "sales won't be tracked on Dub." Dub's fix is <code>customer_creation: "always"</code> (same page). It's off the subscription path, and it still catches people.</li>
<li>The sale amount looks low. Tax is left out on purpose, as in step 5's $52.92 invoice that records $49.00.</li>
<li>Leads counted twice. Dub dedupes on <code>customerExternalId</code> plus <code>eventName</code>, so look for two signup paths sending different event names, like "Sign Up" and "Signup", or one sending an email where the other sends the user ID.</li>
<li>A refund didn't void the commission. Look at the payout status. Dub's refunds docs say "Commissions that are already paid cannot be refunded" (<a href="https://dub.co/docs/conversions/sales/refunds">refunds docs</a>). For disputes, the Stripe docs go further: Dub doesn't change a commission "after its payout starts processing or is paid" (<a href="https://dub.co/docs/integrations/stripe">Stripe docs</a>). Assume the same for refunds until your test shows otherwise.</li>
<li>Real partners got emails during testing. Staging payouts still email partners. Use test addresses only.</li>
</ul>
<h2>Other payment paths</h2>
<p>Each of these needs its own trace. All from <a href="https://dub.co/docs/integrations/stripe">Dub's Stripe docs</a>:</p>
<ul>
<li>Stripe Customers. Put <code>dubCustomerExternalId</code> and <code>dubClickId</code> in the customer's metadata. Leads and sales are tracked, but lead rewards aren't generated.</li>
<li>Coupons and promotion codes. No code to write, but you lose geolocation, device, referrer and UTM data.</li>
<li>Payment Links. Add <code>?dub_client_reference_id=1</code> to the Payment Link when you shorten it on Dub, and Dub appends the click ID as <code>client_reference_id</code> for you. If visitors land on your marketing site first, append the <code>dub_id</code> yourself, prefixed with <code>dub_id_</code>. Lead webhooks and lead rewards aren't generated on this path.</li>
<li>Pricing Tables. Pass the click ID, prefixed with <code>dub_id_</code>, in the <code>client-reference-id</code> attribute.</li>
<li>Free trials. Dub can track subscription free trials as lead events; turn on Track Free Trials in the Stripe integration settings. Trace that run through to the first paid invoice.</li>
<li>Disputes. Holding a commission during an open dispute needs Advanced or above. "A lost dispute refunds the commission on every plan, the same as a Stripe refund," unless the payout is already processing or paid. For those, use a clawback.</li>
</ul>
<h2>What to keep</h2>
<p>Save the filled-in table, the IDs and the date you ran it. Run the paid subscription and refund rows again whenever you change auth, checkout or domains.</p>
<p>If you're still picking a tool, I compared <a href="https://referraltrackingnotes.hashnode.dev/dub-vs-rewardful-vs-partnerstack">Dub vs Rewardful vs PartnerStack</a> and <a href="https://referraltrackingnotes.hashnode.dev/tolt-alternatives">Tolt alternatives</a> on price. Once tracking passes, the next thing that bites is money: what happens to a partner's commission on <a href="https://referraltrackingnotes.hashnode.dev/stripe-affiliate-tracking-refunds-upgrades-coupons">refunds, mid-cycle upgrades and Black Friday coupons</a>.</p>
<p>If you're choosing a tool for this, Dub is the one this guide is built around; the test needs its $90 Business plan. Affiliate link - I may earn a commission: <a href="https://refer.dub.co/shamil">https://refer.dub.co/shamil</a></p>
<hr />
<p><em>Sources: Dub docs pages and Stripe's testing page, linked inline, read Nov 11, 2026. Checked against the docs, not run hands-on. All names and IDs are made up.</em></p>
]]></content:encoded></item><item><title><![CDATA[Tolt alternatives (2026): what Rewardful, FirstPromoter and Dub cost as your affiliates grow]]></title><description><![CDATA[Tolt starts at $99/mo plus 2% of payouts. What Rewardful, FirstPromoter and Dub cost at $5k, $8k and $25k in affiliate revenue, and where Dub loses.]]></description><link>https://referraltrackingnotes.hashnode.dev/tolt-alternatives</link><guid isPermaLink="true">https://referraltrackingnotes.hashnode.dev/tolt-alternatives</guid><category><![CDATA[SaaS]]></category><category><![CDATA[Affiliate marketing]]></category><category><![CDATA[Startups]]></category><category><![CDATA[stripe]]></category><dc:creator><![CDATA[Referral Tracking Notes]]></dc:creator><pubDate>Wed, 11 Nov 2026 14:34:48 GMT</pubDate><content:encoded><![CDATA[<p>Tolt's public pricing page starts at $99 a month now, and every plan on it keeps 2% of what you pay your affiliates. That's $119 a month for a program doing $5,000 in affiliate revenue at a 20% commission. Rewardful and FirstPromoter both list $49 for the same program, as long as you send the payouts yourself.</p>
<p>If you're reading Tolt alternatives because of that $99, the cheap options are real. The catch is in who pays your affiliates. Tolt does it on every public plan for that 2%. FirstPromoter leaves it to you on its $49 plan, Rewardful will do it for 3% on any plan, and Dub does it for 5% on a $90 plan.</p>
<p>Check one more thing before you move: every tool here charges more as your affiliates do well. Tolt, Rewardful and FirstPromoter all tier on affiliate revenue, and Rewardful's and FirstPromoter's caps are lower. What sets Tolt apart is the $99 floor and the 2%.</p>
<p>Prices are from each vendor's own pages, re-read Nov 11, 2026. Screenshots are from Nov 10, and so is one Tolt trial-account screen, which I label where I use it. I haven't run any of these tools in production. I'm also a Dub affiliate, so I only quote each vendor about itself.</p>
<h2>What Tolt charges today</h2>
<img src="https://substack-post-media.s3.amazonaws.com/public/images/ddfcee29-3a86-4e8b-b55c-2a3d8a5a4e24_2880x2200.png" alt="Tolt's public pricing page, read Nov 10, 2026: Growth starts at $99 a month." style="display:block;margin:0 auto" />

<p>The <a href="https://tolt.com/pricing">pricing page</a> says it plainly: "Priced on what affiliates bring in."</p>
<table>
<thead>
<tr>
<th align="left">Plan</th>
<th align="left">Monthly</th>
<th align="left">Yearly</th>
<th align="left">Partner revenue covered</th>
<th align="left">Payout fee</th>
</tr>
</thead>
<tbody><tr>
<td align="left">Growth</td>
<td align="left">$99</td>
<td align="left">$82 a month, $990 billed yearly</td>
<td align="left">Up to $20k a month</td>
<td align="left">2% of what's paid out</td>
</tr>
<tr>
<td align="left">Pro</td>
<td align="left">$199</td>
<td align="left">$165 a month, $1,990 billed yearly</td>
<td align="left">Up to $50k a month</td>
<td align="left">2%</td>
</tr>
<tr>
<td align="left">Enterprise</td>
<td align="left">Custom</td>
<td align="left">Custom</td>
<td align="left">Over $50k a month</td>
<td align="left">2%</td>
</tr>
</tbody></table>
<p>Affiliates are unlimited on every plan. Growth already includes auto payouts by PayPal, Wise, bank and wire, plus W-9 and W-8 collection and 1099 filing. Pro adds Radar fraud protection and custom payout methods, and removes the "Powered by Tolt" link. The FAQ promises a full refund if you ask within 30 days.</p>
<p>If you're shopping because of the price, these are the pressure points. $99 is a lot for a small program if you're happy to send a PayPal file once a month. The 2% is on every plan. Fraud protection waits for Pro. And billing has to be Stripe, Paddle or Chargebee, or you wire it up with webhooks and the API.</p>
<h2>The plan you pay for grows with your affiliates</h2>
<p>Inside a Tolt trial account on Nov 10, 2026, the in-app billing screen showed three plans, not two.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6af425c8d61cf9641b9c624e/d6a82897-c72b-486f-9154-5401379d5df8.png" alt="Tolt in-app billing screen in a trial account, Nov 10, 2026, showing Basic $69, Growth $99 and Pro $199 with partner-revenue caps." style="display:block;margin:0 auto" />

<p><em>Tolt trial-account billing view, Nov 10, 2026: a $69 Basic plan for up to $10,000 a month in partner revenue.</em></p>
<p>Basic isn't on the public pricing page I read today. The public page starts at Growth and says "Every plan pays your affiliates for you." On that trial screen, Basic says "Manual payouts," and autopayouts plus email campaigns and automations start at Growth. So both can be true: the public plans all pay affiliates for you, and a cheaper manual plan showed up in the app. I don't know who gets offered Basic, or whether it carries the 2% fee. Ask Tolt before you count on it.</p>
<p>Either way, the tier is set by what your affiliates bring in. Tolt's FAQ: "Plans step up with the revenue your partners bring in, never with how many partners you have." Rewardful and FirstPromoter work the same way, on lower caps, and Dub steps up on what you pay partners instead: $2.5K a month on Business and $15K on Advanced, on monthly billing (<a href="https://dub.co/pricing">pricing</a>). Here's one program at a 20% commission, on each vendor's monthly prices:</p>
<table>
<thead>
<tr>
<th align="left">Partner revenue a month</th>
<th align="left">Tolt</th>
<th align="left">Rewardful</th>
<th align="left">FirstPromoter</th>
<th align="left">Dub</th>
</tr>
</thead>
<tbody><tr>
<td align="left">$8,000 ($1,600 in commissions)</td>
<td align="left">Growth, $99 + $32 = $131</td>
<td align="left">Growth, $99, or $147 with Managed Payouts</td>
<td align="left">Business, $99</td>
<td align="left">Business, $90 + $80 = $170</td>
</tr>
<tr>
<td align="left">$25,000 ($5,000 in commissions)</td>
<td align="left">Pro, $199 + $100 = $299</td>
<td align="left">Enterprise, from $149, or from $299 with Managed Payouts</td>
<td align="left">Enterprise, from $149</td>
<td align="left">Advanced, $300 + $250 = $550</td>
</tr>
</tbody></table>
<p>At $8,000 you're past both $49 plans: Rewardful Starter stops at $7,500 and FirstPromoter Starter at $5,000. At $25,000 both are on Enterprise; Rewardful's entry tier covers up to $30,000. Rewardful lists it at $149+ behind a demo and FirstPromoter at $149 behind "Let's talk," so treat both as starting prices.</p>
<p>If you send payouts yourself, Rewardful and FirstPromoter stay cheapest at both sizes. If you want the vendor to pay affiliates, Tolt beats Rewardful's Managed Payouts at $8,000 ($131 vs $147) and is no more expensive at $25,000 ($299 vs $299 and up). Dub was the bigger bill at both sizes. Your affiliates tripled and every bill went up, so price the plan you'll need at three times today's affiliate revenue, not the one you need now.</p>
<h2>Tolt alternatives at a glance</h2>
<p>From each vendor's pricing page, re-read Nov 11, 2026.</p>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">Tolt</th>
<th align="left">Rewardful</th>
<th align="left">FirstPromoter</th>
<th align="left">Dub</th>
</tr>
</thead>
<tbody><tr>
<td align="left">Cheapest plan with a partner program</td>
<td align="left">Growth, $99 a month</td>
<td align="left">Starter, $49 a month</td>
<td align="left">Starter, $49 a month</td>
<td align="left">Business, $90 a month, or $81 a month billed yearly</td>
</tr>
<tr>
<td align="left">What the cap measures</td>
<td align="left">Partner revenue</td>
<td align="left">Affiliate-attributed revenue</td>
<td align="left">Revenue from affiliates</td>
<td align="left">Partner payouts</td>
</tr>
<tr>
<td align="left">First cap</td>
<td align="left">$20k a month</td>
<td align="left">$7,500 a month</td>
<td align="left">$5,000 a month</td>
<td align="left">$2.5K a month in payouts</td>
</tr>
<tr>
<td align="left">Who takes a cut</td>
<td align="left">2% of payouts, every public plan</td>
<td align="left">0%, or 3% with Managed Payouts</td>
<td align="left">None stated on self-run payouts</td>
<td align="left">5% by ACH, 8% by card (Business and Advanced)</td>
</tr>
<tr>
<td align="left">Billing systems</td>
<td align="left">Stripe, Paddle, Chargebee</td>
<td align="left">Stripe, Paddle Classic only</td>
<td align="left">Stripe, Paddle, Chargebee, Recurly, Braintree</td>
<td align="left">Stripe app</td>
</tr>
<tr>
<td align="left">Trial</td>
<td align="left">14 days, no card</td>
<td align="left">14 days</td>
<td align="left">14 days, no card</td>
<td align="left">14 days, card charged at the end</td>
</tr>
</tbody></table>
<p>Don't compare those caps one for one. Tolt, Rewardful and FirstPromoter count what your affiliates sell. Dub counts what you pay them. At a 20% commission, Dub's $2.5K a month in payouts covers $12,500 a month in affiliate revenue.</p>
<h2>Rewardful</h2>
<img src="https://substack-post-media.s3.amazonaws.com/public/images/80d031e4-f617-450d-88d2-62a5491e0b54_1440x890.png" alt="Rewardful's pricing page, read Nov 10, 2026: Starter is $49 a month." style="display:block;margin:0 auto" />

<p>The <a href="https://www.rewardful.com/pricing">pricing page</a> lists Starter at $49 a month for up to $7,500 in affiliate-attributed revenue, Growth at $99 for $15,000, and the entry Enterprise tier from $149 for $30,000. Yearly is twelve months for the price of ten: $490, $990 and $1,490 and up. Every plan has unlimited affiliates and a 0% transaction fee. Starter is one campaign and two team members, and it leaves out the branded portal, custom domain and custom rewards.</p>
<p>You can stay at 0% by sending PayPal mass payouts or Wise bulk payouts yourself. Or you pay a 3% processing fee for Managed Payouts, which is optional on every plan. Rewardful's FAQ says that with Managed Payouts, "Rewardful handles payouts and tax compliance on behalf of the merchant" (<a href="https://help.rewardful.com/en/articles/11930744-merchants-faq-managed-payouts">Managed Payouts FAQ</a>).</p>
<h2>FirstPromoter</h2>
<img src="https://substack-post-media.s3.amazonaws.com/public/images/9f953e42-8287-4a9d-9706-2149326ebfe4_2880x2200.png" alt="FirstPromoter's pricing page, read Nov 10, 2026: Starter is $49 a month up to $5,000 in affiliate revenue." style="display:block;margin:0 auto" />

<p>The <a href="https://firstpromoter.com/pricing">pricing page</a> lists $49, $99 and $149 a month, or $490, $990 and $1,490 a year. Starter covers $5,000 a month in revenue from affiliates, less than Rewardful's $7,500, and caps you at 1,000 affiliates and 3 campaigns. Business covers $15,000. Enterprise starts at $149 for anything above that, behind a "Let's talk" button. FirstPromoter's FAQ says that when you pass a limit, "Your account moves to the next plan tier."</p>
<p>On paper, $49 buys a lot. The pricing page lists mass payouts through PayPal, Wise, Stripe, crypto and bank transfer on every plan, and multi-tier commissions up to 3 levels. White-labeling and Managed Auto Payouts are Enterprise only, and the managed option is "SaaS companies only, approval required."</p>
<p>On tax forms and payout rails, the public page and the app disagree. The pricing page lists W-9 and W-8BEN collection and mass payouts on every plan. A FirstPromoter trial account on Nov 10 showed bank payouts and W-9 and W-8BEN collection starting at Business, and its default payout terms were Net-30 with PayPal as the only enabled method. If you need either on Starter, ask.</p>
<h2>Dub</h2>
<img src="https://substack-post-media.s3.amazonaws.com/public/images/dcd17def-3a06-4af7-8deb-903d38f34c7b_2880x2200.png" alt="Dub's pricing page opens on yearly billing, read Nov 10, 2026." style="display:block;margin:0 auto" />

<p>The <a href="https://dub.co/pricing">pricing page</a> opens on the yearly view, with a badge that reads "10% off discount + 12x usage upfront." There, Business is $81 a month and Advanced $270. Click Monthly and they're $90 and $300. Enterprise is custom annual billing with a 3% payout fee.</p>
<p>Partner payouts and the Stripe integration both need Business or higher (<a href="https://dub.co/help/article/partner-payouts">payouts help</a>, <a href="https://dub.co/docs/integrations/stripe">Stripe docs</a>). You click Confirm payouts and Dub pays partners, collects W-9s from US partners and W-8s from everyone else, and sends a 1099-NEC to US partners paid $600 or more in a year. Commissions sit in a holding period first, 30 days by default. The options are 0, 7, 14, 30, 60 or 90 days, and Dub's help page says "We don't recommend a 0-day holding period." ACH takes up to 4 business days. Pay by card and the fee goes from 5% to 8%.</p>
<p>Three things on Dub's side catch founders out. The pricing FAQ says that once you exceed your monthly payout limit, "you won't be able to send payouts until the next billing period." On monthly billing, that means your partners wait until next month. And the trial isn't card-free: when it ends, "your card will be automatically charged for the first month of your paid plan" (<a href="https://dub.co/help/article/free-trial">free trial help</a>). During the trial, payouts are capped at $500 a month. And fraud tooling sits higher on Dub: risk monitoring is on Advanced, not Business (<a href="https://dub.co/pricing">pricing</a>). Rewardful's pricing page lists self-referral fraud detection on every plan, and FirstPromoter's lists self-referral detection, a paid-ad traffic policy and reCAPTCHA on every plan.</p>
<h2>PartnerStack is a different kind of tool</h2>
<p>PartnerStack's main <a href="https://partnerstack.com/pricing">pricing page</a> has no prices: "Your final plan and pricing are confirmed during your demo." Its Launch plan makes you pick affiliate link tracking or lead and deal registration. Its <a href="https://partnerstack.com/platform/spark">Spark plan</a> is public: "$0 per month subscription fee. + 10% processing fee on commissions you pay out," for a single user, with "Simple Sale tracking via Stripe." It's built for deal registration and marketing development funds, so as a Tolt replacement for a Stripe affiliate program it's a different purchase.</p>
<p>If you're leaving PartnerStack rather than Tolt, I worked out where Spark's 10% stops being the cheap option in <a href="https://referraltrackingnotes.hashnode.dev/partnerstack-alternatives">PartnerStack alternatives</a>.</p>
<h2>What one month costs</h2>
<p>Take a program doing $5,000 a month in affiliate revenue at a 20% commission, so $1,000 a month in payouts, on monthly prices. That's at or under every plan's cap below.</p>
<ul>
<li>Tolt Growth: $99 plus 2% of $1,000, so $119. Tolt pays the affiliates.</li>
<li>Rewardful Starter: $49 if you send the payouts. With Managed Payouts, $49 plus $30, so $79.</li>
<li>FirstPromoter Starter: $49, and you send the payouts. It's right at Starter's $5,000 cap, so one good month moves you to Business at $99.</li>
<li>Dub Business: $90 plus 5% of $1,000, so $140. Fund it by card and it's $90 plus $80, so $170.</li>
</ul>
<p>At this size, Rewardful and FirstPromoter are the cheapest if you'll do payouts yourself. Rewardful with Managed Payouts is $40 under Tolt and still takes payouts off your desk. Dub costs the most because of the 5% fee.</p>
<h2>Billing systems and Stripe</h2>
<ul>
<li>Tolt lists Stripe, Paddle and Chargebee, and says "Billing syncs both ways." Anything else goes through webhooks or the API.</li>
<li>Rewardful is built around Stripe and describes a two-way Stripe sync. It also has a Paddle integration, but its own page says "Rewardful only integrates with Paddle Classic, not Paddle Billing" (<a href="https://www.rewardful.com/paddle">rewardful.com/paddle</a>).</li>
<li>FirstPromoter lists Stripe, Paddle, Chargebee, Recurly and Braintree on every plan, plus a historical Stripe import when you migrate.</li>
<li>Dub tracks Stripe through a Stripe app. You send a lead event with your own user ID as <code>customerExternalId</code> at signup, then pass the same ID as <code>metadata.dubCustomerExternalId</code> on the Checkout Session (<a href="https://dub.co/docs/integrations/stripe">Stripe docs</a>). Dub's docs list Stripe, Shopify, HubSpot and Segment as integrations, with no Paddle or Chargebee.</li>
</ul>
<p>On Stripe, Dub's staging workspace lets you push a test customer through click, signup, payment and refund before any real partner shows up (<a href="https://dub.co/docs/testing">testing docs</a>). I wrote that trace up in <a href="https://referraltrackingnotes.hashnode.dev/verify-your-saas-referral-tracking">verify your Dub + Stripe referral tracking before launch</a>.</p>
<h2>Refunds</h2>
<p>Tolt's FAQ says a cancelled subscription stops future commission, and a refunded payment's commission "is taken back from the affiliate." FirstPromoter lists automatic negative commissions on refunds on every plan. Dub's Stripe integration marks the commission refunded, but "Commissions that are already paid cannot be refunded." For those, Dub tells you to set a holding period that matches your refund policy and to create a clawback when one slips through (<a href="https://dub.co/docs/conversions/sales/refunds">refunds docs</a>). I haven't reproduced any of these.</p>
<h2>Who each tool fits</h2>
<p>I earn a commission if you sign up for Dub, so this list says where I'd send you elsewhere.</p>
<ul>
<li>Stay on Tolt if you want payouts and tax forms handled from $99 without a 5% fee, and you bill on Stripe, Paddle or Chargebee. Move to Pro for Radar or to drop the "Powered by Tolt" link.</li>
<li>Pick Rewardful if you want the lowest bill, you're under $7,500 a month in affiliate revenue, and you'll send payouts yourself or pay 3% later to stop. It's on Stripe, or Paddle Classic (not Paddle Billing).</li>
<li>Pick FirstPromoter if you bill on Chargebee, Recurly or Braintree, or want three-level sub-affiliate commissions on the $49 plan, and a $5,000 Starter cap is fine for now. I didn't see multi-tier on Tolt's pricing page. Dub's Advanced plan lists "Partner referral rewards," which I haven't tested, so don't take it as the same thing.</li>
<li>Pick Dub if Stripe is your source of truth, you want attribution tied to your own user IDs on the server, and you'd rather have payouts and US tax forms built in. You pay for that with the 5% fee and a cap on payouts instead of revenue.</li>
<li>Pick PartnerStack if your partners register deals and you have the budget for a sales-led contract.</li>
</ul>
<p>Whichever you choose, run one test customer through click, signup, payment and refund before you invite partners. If you're comparing Dub against just one of these, I priced <a href="https://referraltrackingnotes.hashnode.dev/dub-vs-rewardful-vs-partnerstack">Dub vs Rewardful vs PartnerStack</a> and <a href="https://referraltrackingnotes.hashnode.dev/dub-partners-vs-firstpromoter">Dub Partners vs FirstPromoter</a> at several program sizes.</p>
<p>Affiliate link - I may earn a commission: <a href="https://refer.dub.co/shamil">https://refer.dub.co/shamil</a></p>
<h2>What I couldn't verify</h2>
<ul>
<li>Who Tolt offers the $69 Basic plan to, and whether Basic carries the 2% payout fee.</li>
<li>Prices for PartnerStack's Launch, Growth and Enterprise plans.</li>
</ul>
<p><em>Prices re-read Nov 11, 2026 from</em> <a href="http://tolt.com/pricing"><em>tolt.com/pricing</em></a><em>,</em> <a href="http://rewardful.com"><em>rewardful.com</em></a><em>,</em> <a href="http://firstpromoter.com/pricing"><em>firstpromoter.com/pricing</em></a><em>,</em> <a href="http://dub.co"><em>dub.co</em></a> <em>(pricing, help and docs) and</em> <a href="http://partnerstack.com"><em>partnerstack.com</em></a><em>. Screenshots and the Tolt trial billing screen are from Nov 10, 2026. Vendors change prices often, so check before you buy.</em></p>
]]></content:encoded></item><item><title><![CDATA[Affiliate programs for iOS and Android apps in 2026: codes vs links, and what RevenueCat changes]]></title><description><![CDATA[Codes or links for your mobile app affiliate program? Where each loses the sale, what RevenueCat webhooks fix, and four tools priced from their docs.]]></description><link>https://referraltrackingnotes.hashnode.dev/affiliate-programs-ios-android-apps</link><guid isPermaLink="true">https://referraltrackingnotes.hashnode.dev/affiliate-programs-ios-android-apps</guid><category><![CDATA[Mobile apps]]></category><category><![CDATA[RevenueCat]]></category><category><![CDATA[Affiliate marketing]]></category><dc:creator><![CDATA[Referral Tracking Notes]]></dc:creator><pubDate>Wed, 11 Nov 2026 10:34:41 GMT</pubDate><content:encoded><![CDATA[<p>A solo iOS dev posted in r/iOSAppsMarketing last week with a utility app priced at $9.99 one time or $2.99 a month, and a simple plan: everyone gets a code, and whoever's code gets used earns a dollar (<a href="https://www.reddit.com/r/iOSAppsMarketing/comments/1xntnay/affiliates_and_subscriptions/">the post</a>). Two days later they were choosing between WinWinKit, Influto or "hand rolling a solution", and they didn't want a big monthly bill (<a href="https://www.reddit.com/r/iOSAppsMarketing/comments/1xpkkke/which_affiliate_program/">follow-up</a>).</p>
<p>They'd already found the catch. They figured the paywall had to move into an in-app purchase "for the affiliate link thing to work." That's the gap a mobile app affiliate program has to close. A creator's link gets a click on the web. Then the App Store sits in the middle, the install starts the app fresh, and the purchase happens inside StoreKit or Google Play Billing, where a web affiliate tool never sees it. Tolt's docs put it plainly: "Links and cookies don't survive an App Store install" (<a href="https://docs.tolt.com/tracking/mobile-apps">Tolt docs: mobile apps</a>). Dub's docs say the same about iOS from their side: "iOS doesn't provide a built-in install referrer API" (<a href="https://dub.co/docs/concepts/deep-links/deferred-deep-linking">Dub docs: deferred deep linking</a>).</p>
<p>So the job is to rebuild one fact after the install: which partner does this app user belong to? You can do it with a code the user types, with a link that survives the store, or both. Then you need the purchases, renewals and refunds to show up somewhere that can pay commission.</p>
<h2>Codes: the store's own, or your own</h2>
<p>Store codes and your own codes are not the same thing.</p>
<p>The first kind belongs to the store. Apple's offer codes give "a free or discounted price for a specific duration" on auto-renewable subscriptions. Custom codes like SPRINGPROMO can be redeemed "through a redemption URL or within your app", each customer can redeem "one code per offer", and each app gets "up to 1 million codes per quarter" (<a href="https://developer.apple.com/help/app-store-connect/manage-subscriptions/set-up-offer-codes">App Store Connect help: offer codes</a>). In-app redemption needs iOS 14 or later and the right StoreKit method in your app.</p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/1d076dfb-42a0-459a-9dbb-4cf26a7a1f36_1280x524.png" alt="App Store Connect help, read Nov 11, 2026: custom offer codes are redeemed through a redemption URL or within your app, and customers can redeem one code per offer." /></p>
<p>Google Play's version is narrower. Subscription promo codes give "a free trial of between 3 and 90 days", and custom codes can only be redeemed in your app, only for subscriptions, and only "by users who have not previously subscribed" (<a href="https://support.google.com/googleplay/android-developer/answer/6321495?hl=en">Play Console help: create promotions</a>). For a subscription, a Play promo code is a free trial, not 20% off.</p>
<p>That has a cost the founder's plan didn't price in. A store code has to give the buyer something, a discount or a trial, on top of the dollar you pay the creator. The upside is that RevenueCat passes the code along: its webhook has an <code>offer_code</code> field, "Available for App Store and Google Play" (<a href="https://www.revenuecat.com/docs/integrations/webhooks/event-types-and-fields">RevenueCat docs: event types and fields</a>). Map each code to a creator and you know who sold it.</p>
<p>The second kind is your own code: a "Have a code?" field in onboarding or on the paywall that tags the user and gives no store discount at all. That's how Tolt, Insert Affiliate and WinWinKit take a typed code. It's deterministic. It also counts only the people who remember the code and bother to type it.</p>
<h2>Links: deep links and the install gap</h2>
<p>Android has a clean path for links. Google's Install Referrer API lets your app read "the referrer URL of the installed package" after install (<a href="https://developer.android.com/google/play/installreferrer">Android Developers: Play Install Referrer</a>). Dub uses it for deferred deep linking: the app reads the referrer on first launch, pulls out the deep link and reports the open (<a href="https://dub.co/docs/concepts/deep-links/deferred-deep-linking">Dub docs: deferred deep linking</a>).</p>
<p>iOS has no such API, so every tool improvises. Dub's approach is "deterministic tracking (clipboard-based) and probabilistic tracking (IP-based)". The clipboard path works only if the user taps "Get the App" on Dub's landing page, which copies the link before the App Store opens. Tap "Get the App without Copying", or decline paste permission, and Dub falls back to matching IP addresses (<a href="https://dub.co/docs/concepts/deep-links/deferred-deep-linking">same page</a>). On a shared office or carrier network, that's a guess, and you should treat it as one.</p>
<p>Links also break on a new phone. The referrer, the clipboard and the IP match all happen once, at first install. Six months later the user buys a new iPhone, reinstalls, and restores their subscription. If the partner was tied to that device, the partner is gone. The fix is the same for every tool: tie the partner to your own user ID, not to the install.</p>
<h2>What RevenueCat changes for a mobile app affiliate program</h2>
<p>RevenueCat doesn't do attribution. It does the other half: telling a server what happened to the money, for both stores, in one format. Its webhooks send <code>INITIAL_PURCHASE</code>, <code>RENEWAL</code>, <code>CANCELLATION</code> ("canceled or refunded"), <code>NON_RENEWING_PURCHASE</code> and <code>TRANSFER</code>, among others (<a href="https://www.revenuecat.com/docs/integrations/webhooks/event-types-and-fields">event types and fields</a>). It's free "for up to $2,500 in monthly tracked revenue", then 1% of what it tracks (<a href="https://www.revenuecat.com/pricing/">RevenueCat pricing</a>). A program tracking a few hundred dollars a month stays under that cap. The Reddit posts don't say how much this founder already tracks.</p>
<p>Once purchases come from RevenueCat, attribution shrinks to one question: which partner owns this app user ID? Tolt, Insert Affiliate and WinWinKit answer it by tying a code or link claim to the user RevenueCat reports, through the App User ID or a subscriber attribute.</p>
<p>Three details in RevenueCat's docs will bite whoever writes the commission logic, you or a vendor:</p>
<ol>
<li>Refunds show up as <code>CANCELLATION</code> with reason <code>CUSTOMER_SUPPORT</code>, and for subscriptions the event "fires only when the latest subscription period is refunded; refunds for earlier periods do not trigger it" (<a href="https://www.revenuecat.com/docs/integrations/webhooks/event-types-and-fields">event types and fields</a>). Refund last March's renewal and nobody's commission moves.</li>
<li>Webhooks can arrive twice. RevenueCat retries up to 5 times over about 80 minutes and tells you to make processing idempotent (<a href="https://www.revenuecat.com/docs/integrations/webhooks">RevenueCat docs: webhooks</a>).</li>
<li>Purchase events carry <code>is_family_share</code>, which is true when the purchase reached the user through Apple's Family Sharing. Decide whether a family member's access earns a creator anything before it happens.</li>
</ol>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/411323e3-1eab-4dbe-9aea-c53fe8a6e726_1280x480.png" alt="RevenueCat webhook docs, read Nov 11, 2026: CANCELLATION covers cancels and refunds, and for subscriptions it fires only when the latest period is refunded." /></p>
<h2>Where Dub fits, and where it doesn't</h2>
<p>For an app-only product, Dub loses a lot.</p>
<p>Dub has no RevenueCat, App Store or Google Play integration. "RevenueCat" appears zero times in Dub's full docs export, its integrations page and its changelog. The way in is the track-sale API, <code>POST /track/sale</code>, whose <code>paymentProcessor</code> field accepts <code>apple</code> and <code>revenuecat</code> (<a href="https://dub.co/docs/api-reference/track/sale">Dub API: track a sale</a>). That's a label. Nothing in the docs describes Dub listening to Apple or RevenueCat on its own. You write the RevenueCat webhook handler, and it calls Dub for every purchase and every renewal.</p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/f1d0921b-2ec9-4061-b919-1f928e31879b_720x330.png" alt="Dub API reference, read Nov 11, 2026: the track-sale endpoint's paymentProcessor field lists apple and revenuecat as options, a label you set yourself." /></p>
<p>The mobile SDKs are the iOS SDK and the React Native SDK, both marked beta, and "Android support is coming soon" (<a href="https://dub.co/docs/sdks/client-side-mobile/introduction">Dub docs: mobile SDKs</a>). Deep link attribution itself "requires a Business plan subscription or higher" and is "currently only available for iOS (Swift) and React Native" (<a href="https://dub.co/docs/concepts/deep-links/attribution">Dub docs: deep link attribution</a>). Business is $90 a month, or $81 billed yearly, plus a 5% payout fee, with $2.5K in partner payouts a month on the monthly plan (<a href="https://dub.co/pricing">dub.co/pricing</a>).</p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/ab9f1502-5c0d-43b6-94de-9f88b47a5be1_1280x560.png" alt="Dub docs, read Nov 11, 2026: deep link attribution requires a Business plan or higher and is only available for iOS (Swift) and React Native; Android (Kotlin) is coming soon." /></p>
<p>Refunds are manual on this path. Dub's Stripe integration catches refunds by itself. Without Stripe, you pass a unique <code>invoiceId</code> with each sale, find the commission by that ID when a refund comes in, and set it to refunded through the API. Paid commissions "cannot be refunded", so you'd create a clawback instead (<a href="https://dub.co/docs/conversions/sales/refunds">Dub docs: tracking refunds</a>). The upside of that <code>invoiceId</code> is that "only one sale event can be recorded for a given invoice ID" (<a href="https://dub.co/docs/api-reference/track/sale">track a sale</a>), so if you pass RevenueCat's transaction ID, a duplicate webhook can't pay a partner twice.</p>
<p>Where Dub can win is a product that sells on the web and in the app. Each sale you track carries a <code>customerExternalId</code>, "used to identify and attribute all future events to this customer" (<a href="https://dub.co/docs/api-reference/track/sale">track a sale</a>). Use the same user ID in your app, in RevenueCat and in your Stripe checkout, and app renewals and web purchases land in one partner program with one payout run. Sale rewards can be flat, like the founder's $1, or recurring "on every renewal for as long as you choose" (<a href="https://dub.co/help/article/sale-rewards">Dub help: sale rewards</a>). Dub also collects W-9s and W-8s and sends 1099-NECs to US partners paid $600 or more in a year (<a href="https://dub.co/help/article/partner-payouts">Dub help: partner payouts</a>). That web-plus-app setup is my reading of how the documented pieces fit. Dub doesn't publish it as a mobile recipe, so test it.</p>
<h2>Tolt, Insert Affiliate and WinWinKit, on their own pages</h2>
<p>All three sell RevenueCat-connected tracking. Each one is described here only from its own site and docs.</p>
<p>Tolt connects through a RevenueCat webhook and uses codes first. Users claim a creator's code with Tolt's Swift or Android SDK, "The first code they claim counts", and a refund "takes the commission back, even after it's been paid" (<a href="https://tolt.com/revenuecat-affiliate-program">Tolt: RevenueCat affiliate program</a>). Its docs map <code>TRANSFER</code> to "The customer moves to the new app user id", say it ignores sandbox and Test Store purchases, and offer switches to exclude tax and store fees from commission (<a href="https://docs.tolt.com/integrations/revenuecat">Tolt docs: RevenueCat</a>). Growth is $99 a month for up to $20k a month in partner revenue, Pro is $199 up to $50k, and payouts cost 2% of what's paid out (<a href="https://tolt.com/pricing">Tolt pricing</a>).</p>
<p>Insert Affiliate is codes plus its own deep links, called Insert Links. With RevenueCat, your app sets a custom attribute, <code>insert_affiliate</code>, so purchases carry the affiliate (<a href="https://docs.insertaffiliate.com/integration-overview">Insert Affiliate docs: integration overview</a>). A refund before payout cancels the commission. After payout, the affiliate's balance goes negative, and a refund only counts once it's confirmed with RevenueCat using your secret API key (<a href="https://docs.insertaffiliate.com/paying-affiliates/automatic-payouts">Insert Affiliate docs: automatic payouts</a>). Pricing is in pounds: free for up to 2 affiliates and 100 transactions, then Starter at £20 a month plus 10% of affiliate transaction revenue, limited to 5 affiliates, Growth at £70 plus 8%, Enterprise at £200 plus 7.5% (<a href="https://insertaffiliate.com">insertaffiliate.com</a>).</p>
<p>WinWinKit takes RevenueCat webhooks for purchases, renewals, refunds and expirations, matched by App User ID (<a href="https://winwinkit.com/docs/introduction/revenue-tracking/revenuecat.md">WinWinKit docs: RevenueCat</a>). Each refund "automatically updates the attributed revenue and earnings" (<a href="https://winwinkit.com/attribution-and-revenue.md">WinWinKit: attribution and revenue</a>). It also has a no-code option built on Apple offer codes, App Store only and invite-only (<a href="https://winwinkit.com/no-code.md">WinWinKit: no-code</a>). Starter is $30 a month up to $3k in monthly attributed revenue, Essential $75 up to $7.5k, Scale $150 up to $15k, with payout fees of 7%, 5% and 3% plus 3% Stripe processing (<a href="https://winwinkit.com/pricing">WinWinKit pricing</a>).</p>
<p>Say creators bring 100 subscribers a month at $2.99 and each earns them $1, so $100 in commission and $299 in referred revenue. On list prices, Dub Business monthly is $90 plus $5 in payout fees, $95. Tolt Growth is $99 plus $2, $101. WinWinKit Starter is $30 plus 7% and a 3% Stripe processing fee; if both apply to the $100 payout, that's $40, though the page doesn't say what the Stripe 3% is charged on. Insert Affiliate's free tier allows 2 affiliates and 100 transactions, so this example already sits on the transaction cap, and "everyone gets a code" walks past the affiliate cap immediately. Starter is £20 plus 10% of $299, which is £20 plus $29.90, and it only allows 5 affiliates. Of the three tools that publish a USD price, Tolt is the highest bill, Dub is next, and Dub is also the most engineering. If the app is all you sell, it's hard to argue for. It starts to make sense when you also sell on the web through Stripe and want one program for both.</p>
<h2>A sandbox test before you pay anyone</h2>
<p>Run these four before you invite a single creator. Tools treat test purchases differently: Tolt ignores sandbox purchases entirely, WinWinKit has a sandbox mode that tracks only sandbox transactions (<a href="https://winwinkit.com/pricing">WinWinKit pricing</a>), and Dub gives Business plans a staging workspace with no real money (<a href="https://dub.co/docs/testing">Dub docs: testing</a>).</p>
<ol>
<li>Purchase. Claim a creator's code or open their link on a fresh install, then subscribe. Expect one customer tied to that creator and one commission at your rate. Tolt documents that a free trial shows as a lead and that commission starts on the first paid period (<a href="https://tolt.com/revenuecat-affiliate-program">Tolt: RevenueCat affiliate program</a>). Check the $0-trial case on whichever tool you pick, because RevenueCat can report a trial as a purchase with price 0.</li>
<li>Renewal. Let a sandbox subscription renew. Expect a second commission if your reward is recurring, none if it's one-time, and still exactly one commission per renewal if the webhook fires twice.</li>
<li>Refund. Refund the latest period before the payout hold ends. Expect the commission voided. Then refund an older period and check that you know what happens, because RevenueCat won't send an event for it.</li>
<li>Reinstall on a new phone. Delete the app, install on a second device, sign in or restore purchases. Expect no new commission and the same creator on the customer. If the customer now belongs to nobody, your user ID isn't stable, and every partner will lose customers this way.</li>
</ol>
<p>Try Dub Partners: <a href="https://refer.dub.co/shamil">https://refer.dub.co/shamil</a> (Affiliate link - I may earn a commission)</p>
<h2>FAQ</h2>
<p><strong>Can I run an affiliate program for an app that sells through the App Store?</strong>
Yes. You need a way to tie a user to a partner after install, a code or a deep link, and a purchase feed such as RevenueCat webhooks. Stripe-only affiliate tools never see App Store purchases.</p>
<p><strong>Do Apple offer codes work as creator codes?</strong>
They can. Each code must carry a free or discounted price, each customer can redeem one code per offer, and RevenueCat's webhook reports the code used.</p>
<p><strong>Does Dub integrate with RevenueCat?</strong>
Not natively, as of Nov 11, 2026. You'd send each purchase and renewal to Dub's track-sale API from your own webhook handler.</p>
<p><strong>Does Dub have an Android SDK?</strong>
No. Dub's docs list iOS and React Native SDKs in beta and say Android support is coming soon.</p>
<h2>Not verified</h2>
<ul>
<li>Whether Dub's React Native SDK does deep link attribution on Android devices. The React Native guide has an Android-only code branch, but the attribution page says Android (Kotlin) is coming soon.</li>
<li>Whether Dub can credit a partner from a code alone, with no click, inside an app. Dub's discount codes name Stripe, Shopify and a custom webhook as providers. Apple and Google aren't mentioned.</li>
<li>Which Tolt plans include the RevenueCat integration. Its pricing page doesn't say.</li>
<li>Insert Affiliate's fixed-price plans. Only the revenue-share prices rendered when I read the page, and they're in GBP.</li>
<li>Whether WinWinKit has a free plan. Its pricing page says "No", and its no-code page mentions "the Free plan".</li>
<li>How WinWinKit handles a refund after a commission is already paid.</li>
<li>How any of the four tools treats <code>is_family_share</code> purchases.</li>
<li>Whether Insert Affiliate's 100-transaction free limit is per month or in total.</li>
<li>How Insert Affiliate, WinWinKit and Dub treat a $0 trial purchase. Tolt documents lead-until-paid; I didn't find the same statement on the other three.</li>
<li>Influto. I didn't read its docs for this piece.</li>
</ul>
<h2>Sources</h2>
<p>Every page linked above was read on Nov 11, 2026. Prices are list prices on that date and change often, so check them before you buy.</p>
]]></content:encoded></item><item><title><![CDATA[Stripe affiliate tracking: the Black Friday coupon that costs your partner $108 a customer]]></title><description><![CDATA[A 30% Black Friday coupon can cost your partner $108 a year. How Stripe affiliate commissions change on coupons, refunds and upgrades, on Dub.]]></description><link>https://referraltrackingnotes.hashnode.dev/stripe-affiliate-tracking-refunds-upgrades-coupons</link><guid isPermaLink="true">https://referraltrackingnotes.hashnode.dev/stripe-affiliate-tracking-refunds-upgrades-coupons</guid><category><![CDATA[stripe]]></category><category><![CDATA[Affiliate marketing]]></category><category><![CDATA[SaaS]]></category><dc:creator><![CDATA[Referral Tracking Notes]]></dc:creator><pubDate>Wed, 11 Nov 2026 09:10:35 GMT</pubDate><content:encoded><![CDATA[<p>Set your Black Friday coupon to <code>forever</code> and every partner who sends you a customer that weekend earns less on that customer for the life of the commission. On a $100-a-month plan, with a 30% coupon and a 30% recurring commission, that's $108 per customer out of the partner's pocket over the 12-month commission. Nothing is broken. The commission is smaller every month because the invoice is.</p>
<p>Stripe affiliate tracking is full of side effects like that, partly because Stripe doesn't track affiliates at all. It records customers, invoices and refunds, and a tool like Dub, or your own webhook code, turns those records into commissions. So whatever changes the cash on an invoice changes what your partner earns, and coupons, refunds and mid-cycle upgrades all do. The partner and customers below are made up. The rules come from Dub's and Stripe's docs, and where Dub's docs go quiet, I say so.</p>
<p>The rule underneath all of it: the commission follows the cash the customer paid and kept. Dub calculates percentage rewards on "the invoice or checkout total after any discounts" (<a href="https://dub.co/help/article/sale-rewards">Dub help: sale rewards</a>), with tax removed, and "Commissions that are already paid cannot be refunded" (<a href="https://dub.co/docs/conversions/sales/refunds">Dub docs: tracking refunds</a>).</p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/3a1f832c-5cd6-4dc1-b5e1-b81540aea7b3_1456x1077.png" alt="Dub help center: percentage rewards are calculated on the Stripe invoice or checkout total after any discounts." /></p>
<h2>The setup</h2>
<ul>
<li>The plan is $100 a month on Stripe Billing.</li>
<li>The partner reward is 30% recurring for 12 months. Dub's reward builder takes exactly that, and "30% recurring for 12 months" is the example in its own help article (<a href="https://dub.co/help/article/sale-rewards">sale rewards</a>).</li>
<li>The payout holding period is 30 days, Dub's default. You can set anything from 0 to 90 (<a href="https://dub.co/help/article/partner-payouts">Dub help: partner payouts</a>).</li>
<li>Priya clicks Leo's partner link and subscribes on Black Friday, Nov 27, 2026, with a 30%-off coupon set to <code>once</code>, Stripe's default.</li>
</ul>
<p>This assumes Dub's Stripe integration, which needs Dub's Business plan or higher (<a href="https://dub.co/docs/integrations/stripe">Dub docs: Stripe integration</a>; <a href="https://dub.co/pricing">dub.co/pricing</a>). Every paid Stripe payment or invoice becomes a sale event, and each sale event creates a commission (<a href="https://dub.co/help/article/sale-rewards">sale rewards</a>).</p>
<h2>How Stripe affiliate tracking treats a Black Friday coupon</h2>
<p>Priya's first invoice is $100 minus 30%, so $70. Leo gets 30% of $70, which is $21, not $30. Good. Paying commission on a sticker price nobody paid is how a launch-week promo starts losing money.</p>
<h3>The coupon's duration sets the next 11 months</h3>
<p>Stripe coupons last <code>once</code>, <code>repeating</code> for a set number of months, or <code>forever</code>. The default is <code>once</code>, which "applies only to the first invoice" (<a href="https://docs.stripe.com/billing/subscriptions/coupons">Stripe docs: coupons and promotion codes</a>). Since the commission follows each discounted invoice, the duration you pick for your Black Friday code is also a decision about your partners' pay. Leo's total over Priya's first 12 invoices:</p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/035b8823-fc00-403c-bda0-fa8a1c004b6d_1456x716.png" alt="Table: Leo's 12-month commission on a $100 plan at 30%. No coupon $360, 30% off once $351, 30% off repeating for 3 months $333, 30% off forever $252." /></p>
<ul>
<li>No coupon: $360.</li>
<li>30% off, <code>once</code>: $351.</li>
<li>30% off, <code>repeating</code> for 3 months: $333.</li>
<li>30% off, <code>forever</code>: $252.</li>
</ul>
<p>A <code>forever</code> coupon is a 30% pay cut on every commission Leo earns from that customer, $108 over the 12 months. Tell partners before the promo, not after they notice. Dub's own discount examples include a "30% lifetime discount" and a "25% discount for the first 12 months" (<a href="https://dub.co/help/article/dual-sided-incentives">Dub help: dual-sided incentives</a>), so you can set it up either way.</p>
<h3>Tax comes out first</h3>
<p>Say Stripe Tax adds 10% and Priya pays $77. Dub's invoice formula is <code>saleAmount = amount_paid × total_excluding_tax / total</code> (<a href="https://dub.co/docs/integrations/stripe">Stripe integration: tax handling</a>), so $77 × $70 / $77 = $70, and Leo still gets $21. In Stripe's terms, <code>total</code> is "Total after discounts and taxes" and <code>total_excluding_tax</code> includes "all discounts but excluding all tax" (<a href="https://docs.stripe.com/api/invoices/object">Stripe docs: the Invoice object</a>). For Checkout sessions, Dub subtracts <code>total_details.amount_tax</code> from <code>amount_total</code> instead. In a multi-product checkout, each line's commission uses its share "after discounts, tax exclusion and currency conversion" (<a href="https://dub.co/docs/integrations/stripe">Stripe integration</a>).</p>
<h3>The first-time-order trap</h3>
<p>If you run free trials, this is the one to fix before Thanksgiving. Discount codes you create through Dub are limited to first-time orders in Stripe by default. If your signup flow creates a trial subscription or a $0 invoice, "Stripe may classify those customers as returning purchasers and reject the code." Your partner's customer types the code and gets an error. Turn off "Eligible for first-time order only" in Dub's Stripe integration settings. It only affects codes you create afterward (<a href="https://dub.co/docs/integrations/stripe">Stripe integration: first-time order restriction</a>). Stripe supports this restriction on promotion codes, not on plain coupons (<a href="https://docs.stripe.com/billing/subscriptions/coupons">Stripe docs: coupons and promotion codes</a>).</p>
<h3>Code-only tracking is easier and blurrier</h3>
<p>You can skip links entirely and give each partner a Stripe promo code. Dub supports that with no code changes, and warns that "you sacrifice attribution accuracy". You lose geolocation, device, referrer and UTM data, and Dub guesses location from the billing address (<a href="https://dub.co/docs/integrations/stripe">Stripe integration: option 3</a>).</p>
<p>The bigger problem is that the code is the only thing tying the sale to the partner. If Priya types your sitewide <code>BLACKFRIDAY</code> code instead of Leo's, Leo gets nothing. With link tracking, his click already tied her to him, and the sitewide coupon just lowers the invoice. That's my reading of how Dub's documented flows fit together, not something the docs spell out, so test it.</p>
<p>And you can't edit a Stripe coupon once it exists. To change a Dub discount you delete it and make a new one, and deleting it in Dub leaves the coupon sitting in Stripe (<a href="https://dub.co/help/article/dual-sided-incentives">dual-sided incentives</a>).</p>
<h2>A refund in month 2</h2>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/9d1e185e-4c1f-488f-ba27-14118ffa206b_1456x641.png" alt="Timeline table: Nov 27 invoice paid $70, $21 commission pending; Dec 27 invoice paid $100, $30 pending; Jan 5 full refund of invoice 2, $30 marked Refunded and removed from pending payout." /></p>
<ul>
<li>Nov 27. Invoice 1 is paid at $70. Leo's $21 sits as Pending for the 30-day hold.</li>
<li>Around Dec 27. Invoice 2 is paid at $100. Leo's $30 goes to Pending, and November's $21 can now go into a payout.</li>
<li>Jan 5. You refund invoice 2 in full. The $30 becomes Refunded and drops out of any pending payout.</li>
</ul>
<p>Dub's Stripe integration tracks refunds "automatically… without any additional setup," and the commission is "marked <code>Refunded</code> and removed from any pending payout" (<a href="https://dub.co/docs/conversions/sales/refunds">tracking refunds</a>; <a href="https://dub.co/help/article/sale-rewards">sale rewards</a>). Leo loses $30 he never had. No awkward email required.</p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/91adb543-b318-4ee8-ae3f-a411ecfc7672_1456x1262.png" alt="Dub docs note: commissions already paid cannot be refunded; set a payout holding period that matches your refund policy." /></p>
<p>Now Priya is angry and you refund November too. If Leo's $21 has already gone out, Dub leaves it alone: "Commissions that have already been paid aren't changed" (<a href="https://dub.co/help/article/sale-rewards">sale rewards</a>). You create a clawback, a negative commission "subtracted from their next payout" (<a href="https://dub.co/help/article/partner-commissions">Dub help: partner commissions</a>). Fine if Leo has more sales coming. If he doesn't, you're asking a partner to give back $21.</p>
<p>Which is why Dub tells you to match the hold to your refund policy: "If you offer a 30-day refund policy, set your payout holding period to 30 days" (<a href="https://dub.co/docs/conversions/sales/refunds">tracking refunds</a>). It also doesn't recommend a 0-day hold, because "commissions can be paid out before refunds and chargebacks come in" (<a href="https://dub.co/help/article/partner-payouts">partner payouts</a>). If your Black Friday promise is "refund any time in January," 30 days is too short, and so is 60: a Nov 27 commission clears on Jan 26. I'd use 90.</p>
<h3>Partial refunds, where the docs go quiet</h3>
<p>Refund $50 of the $100 December charge. Stripe allows that, and lets you refund a charge more than once up to the original amount (<a href="https://docs.stripe.com/refunds">Stripe docs: refunds</a>). The fair commission is now 30% of $50, or $15.</p>
<p>Whether Dub's Stripe integration drops the $30 to $15 by itself, the docs I read don't say. The refunds doc describes a status change to "Refunded," which sounds all or nothing. The commission API, on the other hand, is "useful for handling refunds (partial or full)." It takes a new <code>earnings</code> value, a new <code>saleAmount</code>, or <code>modifySaleAmount</code>, where a negative number decreases it, and "paid commissions cannot be updated" (<a href="https://dub.co/docs/api-reference/commissions/update">Dub API: update a commission</a>). Run one partial refund in staging and look. If the commission is still $30, set <code>earnings: 15</code> through the API before the hold ends, or create a $15 clawback after the payout.</p>
<p>Disputes have their own rules. An open dispute puts the commission On Hold on Advanced and above. Lose it and the commission is Refunded. Win it and it goes back to Pending (<a href="https://dub.co/help/article/sale-rewards">sale rewards</a>).</p>
<h2>An upgrade mid-cycle, then a downgrade</h2>
<p>Omar is another customer Leo sent, with no coupon. On day 15 of a 30-day cycle he moves from the $100 plan to the $200 plan.</p>
<p>Stripe's docs walk through the same move at a tenth the size. Upgrading "from a 10 USD monthly plan to a 20 USD option halfway through the billing period" bills an extra 5 USD, a $5 credit for unused time against a $10 charge for the time left. Same page: "Negative prorations aren't automatically refunded and positive prorations aren't immediately billed" (<a href="https://docs.stripe.com/billing/subscriptions/prorations">Stripe docs: prorations</a>).</p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/01e5dc83-684a-47e4-b892-c653ae9f8424_1456x1150.png" alt="Stripe docs: upgrading a 10 USD plan to 20 USD halfway through the period bills an extra 5 USD; negative prorations aren't automatically refunded." /></p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/e2fda4d8-fd60-4b6b-b596-812316f9c7c5_1456x599.png" alt="Table: a $100 to $200 upgrade on day 15. Default prorations bill $250 next invoice for a $75 commission; always_invoice bills $50 now and $200 next month, $15 plus $60, also $75." /></p>
<ul>
<li>Default prorations: the next invoice has a $50 credit, a $100 charge and the $200 month, so $250. Leo's 30% is $75.</li>
<li><code>always_invoice</code>: Stripe bills $50 now, a $15 commission, then $200 next month, $60. Also $75.</li>
</ul>
<p>Same money, different timing. Dub creates a sale for each paid invoice (<a href="https://dub.co/help/article/sale-rewards">sale rewards</a>), so the commission lands on whichever invoice Stripe sends. Dub's docs never say "proration", though. I got here by combining Dub's one-sale-per-invoice rule with Stripe's math, so test one upgrade.</p>
<p>A live coupon changes the numbers. Stripe prorates "using the subscription's discounted price" and doesn't discount the proration lines twice (<a href="https://docs.stripe.com/billing/subscriptions/prorations">prorations</a>). Give Omar an active 30% <code>repeating</code> coupon and the upgrade becomes a $35 credit plus a $70 charge, $35 of proration, plus $140 for the next month. That's $175 on the next invoice and $52.50 for Leo.</p>
<p>Later Omar drops back to $100 on day 15 of a cycle: a $100 credit against a $50 charge, $50 in his favor. Stripe doesn't refund it. Downgrade prorations become credit against the next invoice (<a href="https://docs.stripe.com/billing/customer/balance">Stripe docs: customer balance</a>), so that invoice is $50 and Leo earns $15. Earlier commissions stay put, because no <code>charge.refunded</code> event ever fired. When credit only partly covers an invoice, Dub "records the paid amount without its tax share" (<a href="https://dub.co/docs/integrations/stripe">Stripe integration: tax handling</a>).</p>
<h2>The fine print</h2>
<ul>
<li>Dashboard edits. You can edit the earnings amount only on custom commissions that haven't been paid, while status changes work on any unpaid commission (<a href="https://dub.co/help/article/partner-commissions">partner commissions</a>). Partial fixes to a sale commission go through the API.</li>
<li>Plan gates. Sale rewards, refund tracking and the Stripe integration need Business ($90 a month, $81 billed yearly). Dispute holds and custom reward conditions need Advanced ($300, or $270 yearly). Payouts carry a 5% fee on both, 8% if card-funded, and Business caps payouts at $2,500 a month (<a href="https://dub.co/pricing">dub.co/pricing</a>, monthly and yearly toggles; <a href="https://dub.co/help/article/partner-payouts">partner payouts</a>).</li>
<li>Duplicates, if you build it yourself. Stripe says webhook endpoints "might occasionally receive the same event more than once" (<a href="https://docs.stripe.com/webhooks">Stripe docs: webhooks</a>). A tool deals with that. A weekend script often doesn't, and Leo gets paid twice.</li>
</ul>
<p>If you pay out a few hundred dollars a month, that $90 floor and 5% matter more than anything above. Cheaper options are in <a href="https://referraltrackingnotes.substack.com/p/tolt-alternatives">Tolt alternatives</a> and <a href="https://referraltrackingnotes.substack.com/p/dub-vs-rewardful-vs-partnerstack">Dub vs Rewardful vs PartnerStack</a>, and every tool's monthly bill at $2k, $10k and $50k in payouts is in <a href="https://referraltrackingnotes.substack.com/p/affiliate-software-pricing">affiliate software pricing for 2026</a>.</p>
<h2>A test to run before Black Friday</h2>
<p>Dub gives Business-plan programs a staging workspace for testing "conversion events, integrations, and partner payouts without changing your live analytics or using real money" (<a href="https://dub.co/docs/testing">Dub docs: testing</a>). Run these there:</p>
<ol>
<li>Check out through a partner link with a 30% coupon on a $100 plan. Expect a $70 sale and a $21 commission.</li>
<li>Add tax to the same checkout. The sale should stay at $70.</li>
<li>Fully refund a renewal before the hold ends. The commission should show Refunded.</li>
<li>Partly refund a renewal and write down what happens. The docs won't tell you.</li>
<li>Upgrade mid-cycle with <code>always_invoice</code>. Look for a commission on the proration invoice.</li>
<li>Redeem a Dub-generated partner code on an account that already has a trial. If Stripe rejects it, turn off the first-time-order setting.</li>
<li>Start a trial that creates a $0 invoice, or use a 100%-off coupon, and note whether a $0 sale shows up. The docs I read don't say what Dub records.</li>
</ol>
<p>For the wider click-to-payment check, see <a href="https://referraltrackingnotes.substack.com/p/verify-your-saas-referral-tracking">how to verify your SaaS referral tracking</a>. Moving off PartnerStack before the holidays? <a href="https://referraltrackingnotes.substack.com/p/partnerstack-alternatives">PartnerStack alternatives</a> covers what leaving costs.</p>
<p>If you'd rather let Dub keep these books, it has a 14-day trial.</p>
<p>Try Dub Partners: <a href="https://refer.dub.co/shamil">https://refer.dub.co/shamil</a> (Affiliate link - I may earn a commission)</p>
<h2>FAQ</h2>
<p><strong>Does Stripe have built-in affiliate tracking?</strong>
No. Stripe records customers, invoices and refunds. A separate tool, or your own code, ties a payment to a partner and calculates the commission from Stripe's events.</p>
<p><strong>Is the commission calculated before or after the coupon?</strong>
On Dub, after. A $100 plan with 30% off pays a 30% partner $21 (<a href="https://dub.co/help/article/sale-rewards">sale rewards</a>).</p>
<p><strong>What happens to a commission when the customer gets a refund?</strong>
Unpaid, Dub marks it Refunded and pulls it from the pending payout. Already paid, it stays paid, and you create a clawback against the partner's next payout. Whether a partial refund trims the commission on its own, Dub's docs don't say (<a href="https://dub.co/help/article/partner-commissions">partner commissions</a>).</p>
<p><strong>Why did Stripe reject my partner's promo code?</strong>
Dub-created codes are first-time-order-only by default, and a trial or $0 invoice can make Stripe treat the customer as returning. Turn off "Eligible for first-time order only" in Dub's Stripe integration settings (<a href="https://dub.co/docs/integrations/stripe">Stripe integration</a>).</p>
<h2>Sources (all checked Nov 10, 2026)</h2>
<ul>
<li>Dub help, Sale-based rewards: <a href="https://dub.co/help/article/sale-rewards">https://dub.co/help/article/sale-rewards</a></li>
<li>Dub docs, Tracking refunds: <a href="https://dub.co/docs/conversions/sales/refunds">https://dub.co/docs/conversions/sales/refunds</a></li>
<li>Dub docs, Stripe integration (tax handling, first-time order restriction, option 3, multi-line items): <a href="https://dub.co/docs/integrations/stripe">https://dub.co/docs/integrations/stripe</a></li>
<li>Dub API, Update a commission: <a href="https://dub.co/docs/api-reference/commissions/update">https://dub.co/docs/api-reference/commissions/update</a></li>
<li>Dub help, Partner commissions (statuses, clawbacks): <a href="https://dub.co/help/article/partner-commissions">https://dub.co/help/article/partner-commissions</a></li>
<li>Dub help, Partner payouts (holding period, card 8%): <a href="https://dub.co/help/article/partner-payouts">https://dub.co/help/article/partner-payouts</a></li>
<li>Dub help, Dual-sided incentives: <a href="https://dub.co/help/article/dual-sided-incentives">https://dub.co/help/article/dual-sided-incentives</a></li>
<li>Dub docs, Testing your implementation: <a href="https://dub.co/docs/testing">https://dub.co/docs/testing</a></li>
<li>Dub pricing (monthly and yearly toggles): <a href="https://dub.co/pricing">https://dub.co/pricing</a></li>
<li>Stripe docs, Prorations: <a href="https://docs.stripe.com/billing/subscriptions/prorations">https://docs.stripe.com/billing/subscriptions/prorations</a></li>
<li>Stripe docs, Coupons and promotion codes: <a href="https://docs.stripe.com/billing/subscriptions/coupons">https://docs.stripe.com/billing/subscriptions/coupons</a></li>
<li>Stripe docs, Refunds: <a href="https://docs.stripe.com/refunds">https://docs.stripe.com/refunds</a></li>
<li>Stripe docs, Invoice object: <a href="https://docs.stripe.com/api/invoices/object">https://docs.stripe.com/api/invoices/object</a></li>
<li>Stripe docs, Customer invoice balance: <a href="https://docs.stripe.com/billing/customer/balance">https://docs.stripe.com/billing/customer/balance</a></li>
<li>Stripe docs, Webhooks: <a href="https://docs.stripe.com/webhooks">https://docs.stripe.com/webhooks</a></li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Dub vs Rewardful for Stripe SaaS (2026): $49 a month, or $90 plus 5% of every payout?]]></title><description><![CDATA[Rewardful is $49/mo with 0% fees. Dub is $90/mo plus 5% of payouts and spells out its 1099s. Monthly bills at 15% to 50% commission, and refunds.]]></description><link>https://referraltrackingnotes.hashnode.dev/dub-vs-rewardful-vs-partnerstack</link><guid isPermaLink="true">https://referraltrackingnotes.hashnode.dev/dub-vs-rewardful-vs-partnerstack</guid><category><![CDATA[Affiliate marketing]]></category><category><![CDATA[SaaS]]></category><category><![CDATA[stripe]]></category><dc:creator><![CDATA[Referral Tracking Notes]]></dc:creator><pubDate>Wed, 11 Nov 2026 09:07:48 GMT</pubDate><content:encoded><![CDATA[<p>Pay your affiliates $980 in a month and Dub's 5% payout fee comes to $49. That's Rewardful Starter's entire monthly bill, before Dub's $90 plan fee even starts. That's the whole Dub vs Rewardful gap for a Stripe SaaS: Dub takes a cut of every payout, and Rewardful only takes one if you hand it the payouts.</p>
<p>I ran the bills at four commission rates and two program sizes, looking for a case where Dub comes out cheaper. On published prices there isn't one. At $7,500 in monthly affiliate revenue and a 20% commission, Dub is $165 and Rewardful is $49. Add Rewardful's Managed Payouts at 3% and it's $94, still well under.</p>
<p>So the reason to pick Dub isn't price, and it isn't mainly who sends the money either: Rewardful's Managed Payouts pays affiliates too, for 3%, and says it "handles payouts and tax compliance" without saying which forms. Dub spells it out: W-9s, W-8s, and a 1099-NEC for any US partner it pays $600 or more. If the bill decides it, buy Rewardful.</p>
<p>PartnerStack is further down. It publishes one price, for its self-serve Spark plan, and quotes everything else on a demo call.</p>
<p>Everything here comes from what each vendor publishes about itself, checked Nov 10, 2026, with Dub and Rewardful checked again Nov 11. I haven't run any of the three in production, and anything I couldn't confirm says not verified.</p>
<h2>Quick comparison</h2>
<img src="https://substack-post-media.s3.amazonaws.com/public/images/a753cd08-0b33-466a-ba0b-95094309b5ad_1456x880.png" alt="Quick comparison table, prices read Nov 10, 2026: Dub Business $90/mo monthly ($81 yearly) with 5% payout fees; Rewardful Starter $49/mo with 0% transaction fee; PartnerStack Spark $0/mo plus 10% of commissions, other plans quoted in a demo. Also plan limits, Stripe setup and free trials." style="display:block;margin:0 auto" />

<h2>What Dub vs Rewardful costs at your commission rate</h2>
<p>The two meter different things. Rewardful caps plans by affiliate-attributed revenue. Dub caps them by partner payouts, then takes a cut of each payout.</p>
<p>Rewardful's <a href="https://www.rewardful.com/pricing">pricing page</a>: Starter is $49 a month for up to $7,500 a month in affiliate revenue, Growth is $99 for up to $15,000, and Enterprise starts at $149 for up to $30,000 on its entry tier, with higher tiers above. Yearly billing is 12 months for the price of 10, so $490, $990 and $1,490 and up. Every plan has unlimited affiliates and a 0% transaction fee. Starter is limited to one campaign and two team members.</p>
<p>Dub's <a href="https://dub.co/pricing">pricing page</a> opens on the yearly view, with a "10%" badge, where Business and Advanced show as $81 and $270. Monthly, they're $90 and $300. Business covers $2,500 a month in partner payouts ($30K a year) and up to 500 partners. Advanced covers $15,000 a month ($180K a year) with unlimited partners. Enterprise is custom annual billing. The payout fee is 5% on Business and Advanced and 3% on Enterprise when you fund by ACH, or 8% and 6% by card (<a href="https://dub.co/help/article/partner-payouts">payouts help</a>). Paid plans have a 14-day trial, and non-profits and open-source projects get 25% off. The same monthly prices and caps are in <a href="https://dub.co/blog/dub-vs-rewardful">Dub's own Dub vs Rewardful post</a>.</p>
<p>Your commission rate connects the two, since payouts are revenue times your rate. Rewardful Starter always covers $7,500 in revenue. Dub Business covers $2,500 divided by your rate: $16,667 at 15%, $12,500 at 20%, $7,500 at 33.3% and $5,000 at 50%. So under a third, Dub's entry plan stretches further. It's still the bigger bill.</p>
<p>At $7,500 a month in affiliate revenue (Dub is plan plus 5% by ACH; Rewardful is $49, or $49 plus 3% with Managed Payouts):</p>
<ul>
<li>15% commission, $1,125 in payouts. Dub $146.25. Rewardful $49, or $82.75 managed.</li>
<li>20%, $1,500 in payouts. Dub $165. Rewardful $49, or $94 managed.</li>
<li>33.3%, $2,500 in payouts. Dub $215. Rewardful $49, or $124 managed.</li>
<li>50%, $3,750 in payouts, which pushes Dub to Advanced. Dub $487.50. Rewardful $49, or $161.50 managed.</li>
</ul>
<p>At $15,000 a month, where Rewardful moves to Growth at $99:</p>
<ul>
<li>15%, $2,250 in payouts. Dub $202.50. Rewardful $99, or $166.50 managed.</li>
<li>20%, $3,000, so Dub needs Advanced. Dub $450. Rewardful $99, or $189 managed.</li>
<li>33.3%, $5,000. Dub $550. Rewardful $99, or $249 managed.</li>
<li>50%, $7,500. Dub $675. Rewardful $99, or $324 managed.</li>
</ul>
<p>Even with Managed Payouts, Rewardful's bill never reaches Dub's in those lists, and at that point both are paying your partners for you. The premium you pay Dub covers tax-form handling it documents, plus holds on disputed sales on Advanced.</p>
<p>The lists use monthly prices and ignore your own time and the PayPal or Wise fees if you pay Rewardful affiliates yourself. Same math for FirstPromoter is in <a href="https://referraltrackingnotes.substack.com/p/dub-partners-vs-firstpromoter-nov">Dub Partners vs FirstPromoter</a>.</p>
<h2>PartnerStack, the one without a price tag</h2>
<p>PartnerStack's <a href="https://partnerstack.com/pricing">pricing page</a> names Launch, Growth and Enterprise and prices none of them: "Your final plan and pricing are confirmed during your demo." The one public price is Spark, the self-serve plan, at $0 a month plus a 10% processing fee on the commissions you pay out (<a href="https://partnerstack.com/platform/spark">PartnerStack Spark</a>). On the other plans the fee is "a percentage (known as a PartnerStack fee) on your partner commission invoice total," and you ask your Customer Success Manager what it is (<a href="https://support.partnerstack.com/hc/en-us/articles/360009437334-Company-FAQs">Company FAQs</a>). The Launch and Growth prices you'll see elsewhere come from competitors' blogs, so I've left them out.</p>
<p><em>Correction, Nov 10, 2026: an earlier version said PartnerStack publishes no prices and quoted Dub's blog for its plan prices. Spark is public, and I removed Dub's figures about PartnerStack. When Spark beats Dub, Rewardful and Tolt: see</em> <a href="https://referraltrackingnotes.hashnode.dev/partnerstack-alternatives"><em>PartnerStack alternatives: what leaving actually costs</em></a><em>.</em></p>
<h2>Stripe setup and referral tracking</h2>
<p>Dub installs from the Stripe App Marketplace and needs Business or higher. It listens for <code>customer.created</code>, <code>checkout.session.completed</code>, <code>invoice.paid</code>, <code>charge.refunded</code> and dispute events, handles subscriptions and one-time payments, counts free trials as leads, strips tax out of sale amounts and splits multi-line invoices by product. On the tracking side, a small Analytics script stores the <code>dub_id</code> click ID in a first-party cookie, your backend sends a server-side lead event with <code>customerExternalId</code>, and you pass the same ID as <code>metadata.dubCustomerExternalId</code> on the Checkout Session. Promo codes and Payment Links need less code and give up some attribution detail. (<a href="https://dub.co/docs/integrations/stripe">Stripe docs</a>). Expect to touch your backend.</p>
<p>Rewardful connects to your Stripe account and gets webhooks for customer and invoice events. When Stripe creates a customer, Rewardful looks for a <code>referral</code> attribute in its metadata, works out commissions from what the customer actually paid after discounts, and recalculates on full or partial refunds (<a href="https://help.rewardful.com/en/articles/2213091-how-does-rewardful-use-my-stripe-account">How Rewardful uses Stripe</a>). Its script reads <code>?via=token</code> links, stores the referral ID in a cookie (<code>Rewardful.referral</code>) and can add a hidden <code>referral</code> field to your signup forms. If nobody can touch the backend, <code>rewardful('convert', { email })</code> works from the front end, but it needs read-write Stripe access and only works for Stripe customers created in the last 24 hours (<a href="https://developers.rewardful.com/javascript-api/overview">JavaScript API</a>). Every plan includes coupon code tracking, first-touch or last-touch attribution, automatic adjustments for upgrades, downgrades, cancellations and free trials, and a "two-way Stripe sync" (<a href="https://www.rewardful.com/pricing">pricing</a>).</p>
<p>PartnerStack has a Stripe Webhook App that records <code>charge</code> events by default or <code>invoice.payment_succeeded</code> instead, "not both," and its team flips the switch for you. Charge events record <code>amount</code>, invoice events record <code>subtotal</code>. It matches customers by <code>customer_key</code>, then Stripe customer ID, then email. Through the app it defaults to email, so set <code>customer_key</code> in Stripe metadata, as PartnerStack recommends. New vendors haven't been able to use manual webhooks since Feb 2024 (<a href="https://docs.partnerstack.com/docs/stripe-payment-tracking">Stripe Payment Tracking</a>). On the page, PartnerStackJS stores the partner key in a first-party cookie and your code calls <code>createSignup</code> with a customer key, with a server-to-server API as the backend option (<a href="https://docs.partnerstack.com/docs/partnerstackjs">link tracking docs</a>). On Launch you choose affiliate link tracking or lead and deal registration, not both. Enterprise gets both (<a href="https://partnerstack.com/pricing">pricing</a>).</p>
<h2>Paying affiliates</h2>
<p>On Dub, commissions sit through a hold (default 30 days, anywhere from 0 to 90). Then you review pending payouts, click "Confirm payouts", and Dub pays the partners, PayPal among its methods. ACH payouts take up to 4 business days. Dub collects W-9s and W-8s and issues a 1099-NEC to each US partner who reaches $600 (<a href="https://dub.co/help/article/partner-payouts">payouts help</a>).</p>
<p>On Rewardful, every plan gets PayPal mass payouts and Wise bulk payouts, and Enterprise adds one-click PayPal (<a href="https://www.rewardful.com/pricing">pricing</a>). With Managed Payouts you pay one invoice and Rewardful pays the affiliates and "handles payouts and tax compliance." It needs an ACH-capable funding account, which Rewardful doesn't debit automatically (<a href="https://help.rewardful.com/en/articles/11930744-merchants-faq-managed-payouts">FAQ</a>). Affiliates pay their own withdrawal fees: $1.00 for ACH, $0.75 plus 2% for PayPal (capped at $1.75 for US residents and $20.75 for everyone else), $10 to $15 for wires, and 1.9% to 3% for currency conversion (<a href="https://www.rewardful.com/withdrawal-fees">withdrawal fees</a>). Dub's comparison post says Rewardful offers no tax help. Rewardful's FAQ says otherwise, and I'll take a vendor's word about itself over its competitor's.</p>
<p>PartnerStack invoices a month's commissions on the 1st, gives you seven days to review, charges on the 8th, and partners can withdraw around the 13th (<a href="https://support.partnerstack.com/hc/en-us/articles/360009437334-Company-FAQs">Company FAQs</a>). Its partner withdrawal fees are not verified.</p>
<h2>Refunds and chargebacks</h2>
<p>Refund before the commission is paid, and all three handle a full refund. Dub detects it on Business and up, marks the commission Refunded and pulls it from pending payouts. Rewardful deletes the commission on a full refund and recalculates it on a partial one. PartnerStack deletes the transaction on a full refund and, on a partial one, replaces it with one for whatever's left. Dub's docs don't say what happens on a partial refund.</p>
<p>Refund after it's paid, and it's manual everywhere. Dub has you add a clawback, a negative commission that comes off the partner's next payout. Rewardful: "You (the merchant) need to handle the overpayment manually." PartnerStack doesn't say.</p>
<p>Holding periods give refunds time to land. Dub offers 0, 7, 14, 30 (default), 60 or 90 days. Rewardful keeps commissions pending 30 days by default, adjustable. PartnerStack's is unknown. On chargebacks, Dub puts the commission On Hold during an open dispute on Advanced and up, and marks it Refunded on every plan if you lose. Rewardful's and PartnerStack's dispute handling are unknown.</p>
<p>Sources: Dub <a href="https://dub.co/docs/conversions/sales/refunds">refunds</a>, <a href="https://dub.co/docs/integrations/stripe">Stripe</a>, <a href="https://dub.co/help/article/partner-payouts">payouts</a> and <a href="https://dub.co/help/article/partner-commissions">commissions</a>. Rewardful <a href="https://www.rewardful.com/automated-refund-handling">refund handling</a>. PartnerStack <a href="https://docs.partnerstack.com/docs/stripe-payment-tracking">Stripe payment tracking</a>.</p>
<h2>Which plan you actually need</h2>
<p>Dub: Business at minimum, because payouts and the Stripe integration start there. The embedded referral dashboard, partner referral rewards and email campaigns need Advanced, and the Partner Network is Enterprise-only (<a href="https://dub.co/pricing">pricing</a>). Dub's two comparison posts give two different network sizes, 4,000+ and 7,000+, so I'm quoting neither.</p>
<p>Rewardful: any plan, Starter included. You need Growth for a branded portal, a custom domain, private campaigns or custom rewards.</p>
<p>PartnerStack: Launch, which includes Marketplace access. MDF, an LMS and partner challenges start on Growth.</p>
<h2>Dub and Rewardful side by side, from their own docs (Nov 11, 2026)</h2>
<p>Unknown means I couldn't find it on the vendor's own pages, not that the tool can't do it.</p>
<ul>
<li>Dub prices on partner payouts, with Business covering $2,500 a month ($30K a year) (<a href="https://dub.co/pricing">dub.co/pricing</a>, <a href="https://dub.co/blog/dub-vs-rewardful">dub.co/blog/dub-vs-rewardful</a>). Rewardful prices on affiliate revenue, with Starter covering $7,500 a month (<a href="https://www.rewardful.com/pricing">rewardful.com/pricing</a>).</li>
<li>Monthly, Dub Business costs $90 ($81 billed yearly) and Rewardful Starter $49 ($490 a year).</li>
<li>Dub takes 5% of each ACH-funded payout on Business and Advanced, more on card funding (<a href="https://dub.co/help/article/partner-payouts">dub.co/help/article/partner-payouts</a>). Rewardful's transaction fee is 0%, and Managed Payouts costs 3% of payouts.</li>
<li>On Stripe refunds, Dub marks the unpaid commission Refunded with no extra setup (<a href="https://dub.co/docs/conversions/sales/refunds">dub.co/docs/conversions/sales/refunds</a>). Rewardful recalculates on partial refunds and deletes on full ones (<a href="https://www.rewardful.com/automated-refund-handling">rewardful.com/automated-refund-handling</a>).</li>
<li>Dub attributes sales from Stripe coupons and promotion codes, with less detail than link tracking (<a href="https://dub.co/docs/integrations/stripe">dub.co/docs/integrations/stripe</a>). Rewardful includes coupon code tracking on every plan.</li>
<li>Dub sends the money itself once a commission's hold ends and you click Confirm payouts. Rewardful has you pay affiliates through PayPal or Wise, or use Managed Payouts at 3%.</li>
<li>Dub collects W-9s/W-8s and sends 1099-NECs. Rewardful's pages I read name no specific tax forms.</li>
<li>Dub lists Stripe and Shopify for sale tracking (<a href="https://dub.co/docs/integrations/stripe">Stripe</a>, <a href="https://dub.co/docs/integrations/shopify">Shopify</a>). Rewardful lists Stripe with two-way sync. Its other integrations are unknown.</li>
</ul>
<h2>FAQ</h2>
<p><strong>Is Rewardful cheaper than Dub?</strong> Yes, on published prices, at all four commission rates I tested: $49 a month for Rewardful Starter against $90 plus 5% of each ACH payout for Dub Business.</p>
<p><strong>Where does FirstPromoter fit?</strong> It prices by affiliate revenue, like Rewardful: $49 monthly covers up to $5,000, and $99 covers up to $15,000. It works with Stripe, Paddle, Chargebee, Recurly and Braintree, lists W-9/W-8BEN collection on every plan (a FirstPromoter trial account showed it on Business and up, so ask), and adds negative commissions automatically on refunds (<a href="https://firstpromoter.com/pricing">firstpromoter.com/pricing</a>, read Nov 11, 2026). More in <a href="https://referraltrackingnotes.substack.com/p/dub-partners-vs-firstpromoter-nov">Dub Partners vs FirstPromoter</a>.</p>
<p><strong>What happens to a commission if the customer gets a refund?</strong> If it hasn't been paid, both tools cancel it automatically, and Rewardful also recalculates on partial refunds. If it has, Rewardful leaves recovery to you, and Dub's fix is a clawback taken from that partner's next payout.</p>
<h2>Who each tool fits</h2>
<img src="https://substack-post-media.s3.amazonaws.com/public/images/9ca97592-f9f5-4b91-8ba3-037f595a39ba_2800x5342.png" alt="Which tool fits you? Rewardful, PartnerStack or Dub, based on the article's conclusions." style="display:block;margin:0 auto" />

<p>Rewardful, if you want the smallest bill. It's also the easier pick if nobody can touch your backend, within the front-end limits covered in the Stripe setup section above.</p>
<p>PartnerStack, if your partners register leads and deals, you need CRM sync, MDF, partner training and a marketplace, and you have budget for a sales-led contract. It's the only one of the three built around deal registration and co-selling (<a href="https://partnerstack.com/pricing">pricing</a>).</p>
<p>Dub, if you want attribution tied to your own user IDs on the server, and you want the tax forms spelled out rather than implied. You can test it against a Stripe sandbox before launch (<a href="https://dub.co/docs/testing">testing docs</a>), and Advanced adds an embeddable referral dashboard. You pay for that in the 5% fee, on every payout.</p>
<p>Whichever you pick, push one test customer through a click, signup, payment and refund before you invite a single partner. Each tool's bill at $2k, $10k and $50k is in <a href="https://referraltrackingnotes.substack.com/p/affiliate-software-pricing">affiliate software pricing for 2026</a>.</p>
<p>Try Dub Partners: <a href="https://refer.dub.co/shamil">https://refer.dub.co/shamil</a> (Affiliate link - I may earn a commission)</p>
<h2>Not verified</h2>
<ul>
<li>PartnerStack's Launch, Growth and Enterprise prices and fee rate, any renewal increase, its network size and partner withdrawal fees. Spark's $0 a month plus 10% is the only published price.</li>
<li>How any of the three behaves hands-on.</li>
<li>Partner-side fees on Dub payouts.</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Dub Partners vs FirstPromoter: is handing off affiliate payouts worth $351 a month?]]></title><description><![CDATA[On FirstPromoter you run affiliate payouts yourself. Dub runs them and sends 1099s, for up to $451 more a month at 20% commission. Prices and Net-30.]]></description><link>https://referraltrackingnotes.hashnode.dev/dub-partners-vs-firstpromoter</link><guid isPermaLink="true">https://referraltrackingnotes.hashnode.dev/dub-partners-vs-firstpromoter</guid><category><![CDATA[Affiliate marketing]]></category><category><![CDATA[SaaS]]></category><category><![CDATA[stripe]]></category><dc:creator><![CDATA[Referral Tracking Notes]]></dc:creator><pubDate>Wed, 11 Nov 2026 09:03:24 GMT</pubDate><content:encoded><![CDATA[<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/64c1879f-43f8-484d-b5b5-421ed1a4032b_1600x640.png" alt="Two help-center screenshots side by side. FirstPromoter's says " /></p>
<p>On FirstPromoter's default schedule, the 30th of each month is payout day for the month before, and below the Enterprise plan you're the one sending the money, through PayPal, Wise, Stripe or your bank. On Dub Partners you click Confirm payouts and Dub pays everyone, collects W-9s and W-8s, and sends the 1099-NECs. That chore is most of the Dub Partners vs FirstPromoter decision.</p>
<p>Handing it off isn't cheap. A program doing $15,000 a month in affiliate revenue at a 20% commission pays $99 a month on FirstPromoter's list prices. On Dub it's $450, the plan plus a 5% payout fee. That's $351 a month, over $4,000 a year, to stop doing payouts. I priced two more sizes, and FirstPromoter's list price was lower at both: by $91 at $5k, and by up to $451 at $30k. Past $15,000 its public price is $149 and up, behind a "Let's talk" button.</p>
<p>The 20% is my number, not a vendor's. Dub prices on what you pay partners, so a richer commission makes Dub's bill bigger. FirstPromoter prices on revenue and doesn't care.</p>
<p>My pick: FirstPromoter, unless running payouts is the job you hate most. It was cheaper at every size I priced, and its pricing page lists Paddle, Chargebee, Recurly and Braintree, which Dub's integrations page doesn't. Dub is for the founder who never wants to open a payout export or think about a 1099 again, and will put up with a fee that grows every time a partner gets paid.</p>
<p>Every figure below comes from the vendors' own pages, read Nov 10, 2026, plus a FirstPromoter trial account where I say so. Both companies publish comparison pages about each other, and they disagree on things like tax forms, so I only quote each one about itself.</p>
<h2>Dub Partners vs FirstPromoter pricing, side by side</h2>
<p>FirstPromoter charges by the revenue your affiliates bring in. Dub charges by what you pay out to them.</p>
<p>Dub, from dub.co/pricing:</p>
<ul>
<li>Business is $90 a month, or $81 billed yearly. It covers up to $2.5K a month in partner payouts and takes a 5% payout fee.</li>
<li>Advanced is $300 a month, or $270 billed yearly, for up to $15K a month in payouts, also at 5%.</li>
<li>Enterprise is custom annual billing, with unlimited payouts and a 3% fee.</li>
<li>Fund payouts by card instead of ACH and the fee is 8%, or 6% on Enterprise (<a href="https://dub.co/help/article/partner-payouts">Dub help: partner payouts</a>).</li>
<li>The yearly toggle shows the same caps as $30K and $180K a year.</li>
</ul>
<p>FirstPromoter, from firstpromoter.com/pricing, at list price:</p>
<ul>
<li>Starter is $49 a month or $490 a year, for up to $5,000 a month in affiliate revenue.</li>
<li>Business is $99 a month or $990 a year, for up to $15,000.</li>
<li>Enterprise is $149 a month or $1,490 a year, for anything "above $15,000". No hard dollar cap is published, and the button says "Let's talk" where the other two say "Get started", which is pricing-page for "it depends".</li>
<li>No payout fee on any plan.</li>
</ul>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/24847aa2-2de9-4a43-b093-5ef2bd774128_2880x2200.png" alt="Live screenshot of dub.co/pricing on the Monthly toggle, read Nov 10, 2026 (~11:41 PM MST). Business is $90 per month with " /></p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/71f9eb1c-aadd-4133-87b6-2199d97749e5_2880x1280.png" alt="Live screenshot of firstpromoter.com/pricing on Monthly plans, read Nov 10, 2026 (~11:43 PM MST). Starter is $49/month up to $5,000/month revenue from affiliates, Business $99/month up to $15,000, Enterprise $149/month " /></p>
<p>A FirstPromoter trial account's billing screen, the same day, didn't match. It listed four yearly plans at $499, $999, $1,499 and $2,990, and two Enterprise tiers capped at $30,000 and $75,000 a month in affiliate revenue, at $149 and $299 a month. The public page shows neither cap, and its yearly prices are $9 lower. I treat the public page as the list price and the $30k and $75k tiers as not verified.</p>
<p>Outgrowing a plan works differently too. FirstPromoter's FAQ: "Your account moves to the next plan tier so tracking and commissions continue without interruption." Dub's FAQ: "When you exceed your monthly payouts limits, you won't be able to send payouts until the next billing period." So on Dub you either upgrade or your partners wait a month for money they've already earned. I'd pay for the upgrade. Making your best partners wait is an odd way to thank them.</p>
<h2>What each one costs at $5k, $15k and $30k a month</h2>
<p>A revenue cap and a payout cap only line up once you pick a commission rate. At my example 20%, payouts are a fifth of affiliate revenue. Monthly list prices, ACH-funded Dub payouts, no discounts or tax.</p>
<ul>
<li>$5,000 in affiliate revenue means $1,000 in payouts. FirstPromoter is $49. Dub is $140, the $90 Business plan plus a $50 fee. Dub costs $91 more.</li>
<li>$15,000 means $3,000 in payouts, which is over Dub's $2.5K Business cap. FirstPromoter is $99. Dub is Advanced at $300 plus $150 in fees, so $450. Dub costs $351 more.</li>
<li>$30,000 means $6,000 in payouts. FirstPromoter's public page puts you on Enterprise at $149 and up, behind that "Let's talk" button. Dub is $300 plus $300 in fees, so $600. Dub costs up to $451 more.</li>
</ul>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/88385ae0-369e-4772-85b6-a21e64bd6fde_1600x880.png" alt="Comparison graphic of monthly list-price cost at $5,000, $15,000 and $30,000 in affiliate revenue, assuming a 20% commission. FirstPromoter is $49, $99 and $149+. Dub is $140, $450 and $600 (plan plus 5% ACH payout fee). Dub costs $91, $351 and $451 more. Prices read Nov 10, 2026 from firstpromoter.com/pricing and dub.co/pricing." /></p>
<p>At 30%, payouts become $1,500, $4,500 and $9,000, and Dub's bill climbs to $165, $525 and $750. FirstPromoter's doesn't move.</p>
<p>Yearly billing narrows the gap a little. FirstPromoter's yearly prices work out to about $41, $83 and $124 a month (the page calls it "2 months free"). Dub's Business and Advanced drop to $81 and $270. The 5% fee gets no discount.</p>
<p>Those FirstPromoter numbers are the plan price only, which flatters them a bit. Below its managed tier you pay affiliates yourself through PayPal, Wise, Stripe, your bank or crypto. Those providers charge their own fees, and the job eats some of your time every month. I didn't put a number on either.</p>
<h2>Net-30 or a 30-day hold: when affiliates see their money</h2>
<p>FirstPromoter's help center: "For our default payout terms, NET-30, payout for the current month will be paid next month on 30th. For ex March payout (all commissions generated during March) will be paid on 30th of April." You can switch to NET-15, NET-45, NET-60 or Custom, and set a minimum payout (<a href="https://help.firstpromoter.com/en/articles/9019492-how-payouts-work-in-firstpromoter">FirstPromoter help: how payouts work</a>). So a commission earned March 1 waits 60 days and one earned March 31 waits 30. The trial account showed the same default on Nov 10: "Monthly / Net-30. This month's commissions will be paid next month on 30th if the payout amount is over $50", with PayPal switched on.</p>
<p>Dub doesn't say Net-30 anywhere I looked. It has a holding period of 0, 7, 14, 30, 60 or 90 days, defaulting to 30, and each commission gets its own clock. Commissions sit as pending during the hold, so a refund can cancel one before money moves. Dub's own advice: "We don't recommend a 0-day holding period." When the hold ends, nothing goes out until you click Confirm payouts. ACH then takes "up to 4 business days", and card funding is "Instant" (<a href="https://dub.co/help/article/partner-payouts">Dub help: partner payouts</a>). There's no minimum unless you set one: "The default payout amount on Dub is $0" (<a href="https://dub.co/help/article/commissions-payouts">Dub help: commissions and payouts</a>).</p>
<p>So at default settings, your affiliates wait about a month or more on either tool.</p>
<h2>Who sends the money, and who handles tax forms</h2>
<p>Dub pays partners itself once you click Confirm payouts, for 5% with ACH funding or 8% by card. It collects W-9s from US partners and W-8s from everyone else, and sends a 1099-NEC to US partners paid $600 or more in a year (dub.co/pricing and <a href="https://dub.co/help/article/partner-payouts">Dub help: partner payouts</a>).</p>
<p>On FirstPromoter, below Enterprise, you do. Its help article on paying promoters, dated July 13, 2026, says one-by-one PayPal payouts work "on any plan" and one-click or bulk PayPal payouts need "a Business plan or higher" (<a href="https://help.firstpromoter.com/en/articles/8971513-how-to-pay-your-promoters">FirstPromoter help: how to pay your promoters</a>). The same article now lists Stripe Payouts, through Stripe Connect, as a one-click option, without saying which plan it needs.</p>
<p>The pricing table doesn't quite agree. It still shows "One-click direct PayPal payouts" on Business and Enterprise only, and marks "Mass payouts" by PayPal, Wise, Stripe, crypto and bank transfer as included everywhere. My best reading of both pages: every plan can export a bulk payout file, one-click PayPal starts at Business, and Managed Auto Payouts are Enterprise-only, need approval, and carry a fee FirstPromoter doesn't publish.</p>
<p>Tax forms are worse. The pricing table lists W-9 and W-8BEN collection on every plan. The trial account's in-app plan list put bank payouts, one-click PayPal and W-9/W-8BEN collection on Business ($99) and up. One of them is wrong. If you need tax forms on Starter, ask before you buy, and ask about 1099s while you're at it, since the pricing page is silent on them.</p>
<h2>The smaller things that might decide it</h2>
<p>Dub's payout cap bites earlier than it looks. At 20%, $2.5K in payouts is $12,500 in affiliate revenue, below FirstPromoter's $15,000 Business cap, so Dub's real first price step is $90 to $300. Dub's entry plan also includes 500 partners to FirstPromoter Starter's 1,000 affiliates. And for billing, FirstPromoter's pricing page lists Stripe, Paddle, Chargebee, Recurly and Braintree. Dub's integrations cover Stripe and Shopify for commerce, plus Zapier, Make, Segment, WordPress, Raycast and Slack, and anything else goes through its API (<a href="https://dub.co/docs/integrations">Dub integrations</a>).</p>
<p>FirstPromoter's weak spot is the top end. Past $15k you're on a plan with a public price, no public cap and a sales call.</p>
<h2>FirstPromoter's Black Friday code</h2>
<p>On Nov 10, FirstPromoter's pricing page carried a banner: "Black Friday is only weeks away. Go live today with 20% off now with code BF2026." The banner doesn't say what the 20% covers. The landing page it links to, <a href="https://firstpromoter.com/lp/prepare-for-black-friday">firstpromoter.com/lp/prepare-for-black-friday</a>, does: "Start your free trial from this page and apply code when you choose a plan. The discount covers your first paid month." So it's 20% off one month, which on Starter is about the price of a sandwich. I couldn't find an expiry date. Check before you count on it.</p>
<h2>FAQ</h2>
<p><strong>Is FirstPromoter cheaper than Dub Partners?</strong>
On list prices, yes, at every size I priced. At a 20% example commission, it's $49 vs $140 at $5k a month in affiliate revenue, $99 vs $450 at $15k, and $149 and up vs $600 at $30k (read Nov 10, 2026).</p>
<p><strong>Does FirstPromoter pay affiliates Net-30?</strong>
By default. One month's commissions are paid on the 30th of the next. NET-15, NET-45, NET-60 and custom schedules are options.</p>
<p><strong>Does Dub pay affiliates Net-30?</strong>
It doesn't use the term. Each commission sits in a holding period, 30 days by default and adjustable from 0 to 90, then goes out when you confirm the payout.</p>
<p><strong>Does Dub or FirstPromoter handle 1099s?</strong>
Dub does. It collects W-9 and W-8 forms, and US partners paid at least $600 a year get a 1099-NEC. FirstPromoter's pricing page lists W-9/W-8BEN collection on every plan, though a trial account showed it on Business and up, and the page says nothing about 1099s.</p>
<h2>What I couldn't verify</h2>
<ul>
<li>FirstPromoter's $30k tier at $149 and $75k tier at $299, seen only in a trial account.</li>
<li>Which FirstPromoter plan Stripe Payouts needs, and what Managed Auto Payouts cost.</li>
<li>Whether FirstPromoter sends 1099s.</li>
<li>When the BF2026 code expires.</li>
</ul>
<p>Related: <a href="https://referraltrackingnotes.substack.com/p/affiliate-software-pricing">what affiliate software costs as your program grows</a>, <a href="https://referraltrackingnotes.substack.com/p/dub-vs-rewardful-vs-partnerstack">Dub vs Rewardful vs PartnerStack</a>, <a href="https://referraltrackingnotes.substack.com/p/tolt-alternatives">Tolt alternatives</a> for very small programs, and, once you've picked, <a href="https://referraltrackingnotes.substack.com/p/stripe-affiliate-tracking-refunds-upgrades-coupons">Stripe affiliate tracking: refunds, upgrades and coupons</a> and <a href="https://referraltrackingnotes.substack.com/p/verify-your-saas-referral-tracking">verify your referral tracking before launch</a>, so you find the bugs before a partner does.</p>
<hr />
<p>If sending payouts and chasing tax forms is the part you want gone, that's what Dub's extra money pays for.</p>
<p>Try Dub Partners: <a href="https://refer.dub.co/shamil">https://refer.dub.co/shamil</a> (Affiliate link - I may earn a commission)</p>
<p><em>Prices read Nov 10, 2026 from dub.co/pricing, dub.co/help, firstpromoter.com/pricing, help.firstpromoter.com and firstpromoter.com/lp/prepare-for-black-friday. Vendors change prices often, so check both pages before you buy.</em></p>
]]></content:encoded></item></channel></rss>