Running a program

Campaigns and commissions

A campaign is a set of commission rules. Every affiliate is on one campaign, and every program starts with a default one. Payments from a referred customer earn under that campaign's rules.

Campaign settings#

SettingValuesWhat it does
Ratepercent or flatA percentage of each payment (for example 30%), or a fixed amount per payment in one currency (for example 10.00 USD).
Durationonce, months, foreverPay on the first payment only, on every payment for N months after the first one (1 to 120), or on every payment for as long as the customer pays.
Hold0 to 180 daysHow long a commission waits before it becomes payable. Set it to cover your refund window.
Minimum payoutamountAn affiliate isn't included in a payout until they are owed at least this much.
Lead bountyamount, optionalA fixed amount paid once per referred signup, before anyone pays. It does not use up a one-time sale commission.
Product rulesup to 50Different rates for specific Stripe products or prices, or no commission to exclude one (a hardware add-on, a low-margin plan).
Stripe couponcoupon id, optionalMakes affiliates' creator codes redeemable at checkout. See Creator codes.
Public join pageon or offOn: the campaign gets its own join page at /join/your-program/page-name, and people who sign up there join this campaign. Off: invite-only.
Landing pageURL, optionalWhere this campaign's affiliate links point instead of your website, for example /partners. Must be on your site.

The Free plan has one campaign. Starter and up can have as many as they like, for example a 20% default and a 40% campaign for top partners. You can also give a single affiliate a rate override that replaces the campaign rate for them alone. Product rules still win for the products they name.

Public and private campaigns

Your main join page always signs people up to the default campaign. Turn on Public join page for any other campaign to give it a page of its own, so you can send creators to one page and customers to another on different terms. The page shows that campaign's rate and hold period. A private campaign has no page: you add affiliates to it from the Affiliates page or the API, or move existing affiliates onto it.

Each campaign can also have its own landing page. Affiliates on it get default links like https://yourapp.com/partners?via=jane, and moving an affiliate to another campaign moves their default link with them. Links an affiliate made themselves keep their own landing page.

How a commission is worked out#

  1. Kickrail takes what the customer actually paid, after discounts and before tax.
  2. It checks the duration: a one-time campaign pays only once per referral, and a 12-month campaign stops 12 months after the first payment.
  3. With product rules, the payment is split across its invoice lines in proportion to their amounts, and each line gets its own rate.
  4. The result is in the payment's currency. It becomes payable on the payment date plus the hold.

Example

Campaign: 30%, 12 months, 30-day hold
Invoice:  CA$56.50 paid, CA$6.50 of it tax

Base        = 56.50 - 6.50 = CA$50.00
Commission  = 30% of 50.00 = CA$15.00
Payable on  = invoice date + 30 days

Kickrail never pays twice for the same payment. Stripe retries webhooks, and a payment can arrive both as a checkout and an invoice; each payment is recorded once.

Commission states#

StatusMeaning
pendingearned, not paidIn its hold until due_at, then payable. held_for_review means it waits for you to clear a self-referral flag first.
paidincluded in a payoutpayout_id and paid_at say which and when.
voidcancelledA full refund before it was paid. void_reason explains why.

Refunds and disputes#

Kickrail listens for charge.refunded and charge.dispute.created on your Stripe account.

  • Not paid yet: a partial refund shrinks the commission in proportion; a full refund voids it.
  • Already paid: Kickrail adds a negative clawback commission (kind: "clawback"). It nets against the affiliate's next payout, so nobody has to send money back by hand.
  • Several partial refunds add up exactly to the original commission, never more.

Self-referral checks#

Kickrail flags a referral when the customer looks like the affiliate:

  • Same email. Gmail dots and +tags are ignored, so [email protected] matches [email protected].
  • Same company domain, such as both on @northwind.io. Free mail providers like Gmail and Outlook are not counted.
  • Same IP as one the affiliate signed in from. Send ip with the signup call for this check.

A flag never rejects anything on its own, because a coworker on the same office network is often legitimate. Commissions from a flagged referral are held. Review it on the Referrals page and clear the flag to release them, or reject the referral.

Testing with your own addresses

If you test with an affiliate and a customer on the same company domain, every test commission is held by the domain check. Clear the flag on the referral, or use addresses on different domains.