Credit without a click

Coupon-code affiliate tracking: crediting a sale that never clicked a link

By Jimi Barkway · Published 4 September 2026 · Part of the blog

The short answer

Map the code to the partner, and the payment carries the credit. AffiliateRail stores the partner against the Stripe promotion code's id, so renaming the code changes nothing, and a checkout session that carries that id is credited to that partner with no click involved. A stamped click still wins when both are present. That makes a code the right tool for podcasts, video and anywhere a link cannot be clicked, at a price most founders under-count: the discount plus the commission, on every redemption.

How does a coupon code credit an affiliate with no click?

In shortThe code is mapped to one partner in your program, and the payment carries the code. Your billing system puts the code on the checkout. The mapping turns it into a partner, and the commission is written the way a click's would be.

A link works by leaving something behind in the browser, which means it depends on a cookie, a bit of storage, and a visitor who comes back before any of that is cleared away. A code works by riding on the payment. Nothing has to survive in the browser at all. That is the whole difference, and it is why a code reaches people a link cannot.

In Stripe the object is a promotion code. It points at a coupon, and it is the thing your customer types. Stripe's own reference lists what you can put on one. A named customer. A limit on how many times it can be used. An expiry date. A first-time-buyer rule. A minimum amount. The code can run to 500 characters, though a code a podcast host has to say out loud should be short enough to hear once.

A promotion code points to an underlying promotion. You can optionally restrict the code to a specific customer, redemption limit, and expiration date.

Create a promotion code, Stripe API reference, checked 4 September 2026

The mapping is the part worth knowing. AffiliateRail stores the partner against the promotion code's id, the string that starts promo_. It does not store the letters your customer types. The checkout session carries that id in its discounts list, so the match is exact. Rename the code from JANE to JANE20 in Stripe and nothing breaks. The id never moved. A tool that matched on the letters would have stopped paying Jane, and told nobody.

You make the code in your own Stripe account, and the connection reads it, which is the whole of the integration: nothing is ever written back into your Stripe. One partner can hold as many codes as you like. That is how a creator gets a fresh code per campaign without a second account.

Paddle has the same idea under a different name. Discounts, which Paddle notes are "sometimes called coupons or promo codes", can be one-off or recurring, and the buyer can apply one at checkout or you can apply it yourself on the transaction. AffiliateRail's code path binds on Stripe's promotion-code id today, so a Paddle program credits the partner through the link and the reference on the transaction instead. Worth knowing before you promise a Paddle partner a code.

What happens when a customer has both a link and a code?

In shortThe click wins. AffiliateRail reads the stamped click id first. It looks at the discount only when there is no click. The rule is in the code and it has a test on it, so it never depends on the day.

This matters more than it sounds. Two partners can be in one sale: Jane wrote the review that sent the visitor to your site, and the visitor then went hunting for any code at all and found Sam's on a deal page. Someone has to be paid. The order is the decision.

Putting the click first pays the partner who moved the person. The code is a way to name a visitor who arrived with nothing on them. It is not a second claim over a visitor who already had one.

The other order exists in this category. At least one platform says in its own docs that codes beat links, which is a fair choice, and the reverse of this one. Read your tool's rule before you write a partner agreement, because that single line decides who gets paid in every mixed sale you will ever have and it is not the sort of thing anyone reads twice.

There is one more piece of order. A customer binds once. The first thing that carries a referral wins, and later payments do not re-open it. So a code used at the second renewal cannot take a customer off the partner who brought them.

What does a code carry, and what does it lose?

In shortA code carries credit off the web, and through anything that blocks a script. It loses the click data. It costs you a discount on top of the commission. And it is the one thing a stranger can copy and use.

What a coupon code does and does not do, compared with an affiliate link
A linkA code
How the sale is matchedA click id stamped onto the checkoutThe promotion code on the payment
What the audience must doClick, then buy inside the windowRemember a word and type it
Works off the webNo. Audio, print and stage have nothing to clickYes. A code can be said out loud
Blocked scripts, short cookie capsCosts you click counts, and the referral if storage is clearedNothing has to survive in the browser
Click data for the partnerClicks, sources, countries, the journeyNone. Sales and earnings only
Cost to youThe commissionThe commission and the discount, every time
Repeat paymentsYes. The customer stays with the partnerYes. The same binding on the customer
If it spreadsA link is copyable but still earns its ownerAnyone who finds the code triggers a commission
Billing railsStripe and PaddleStripe today

The cost line is the one founders miss. A link costs you the commission. A code costs the commission and the discount. A fifth off plus a fifth commission is a much bigger number than either on its own. Price the code as one figure, not two.

When is a code the right thing to give a partner?

In shortWhen the audience cannot click. Podcast reads, video watched on a television, live talks, print. Anywhere a link would have to be typed from memory anyway. A code is easier to say than a web address, and easier to hold in your head.

This is the honest answer to why creator programs run on codes. A host reading your product out for forty seconds on a podcast cannot hand over a tracking link, and half the audience is driving. They can say a word. The code is the only marker that survives being spoken, and the discount is what makes an audience bother to use it.

It also does something a link cannot. It gives the audience a reason to act now. A link is a route. A code is an offer.

Most partners should have both: the link for the blog post and the newsletter, where it is clickable and carries the whole journey, and the code for the read, the caption and the video. An AffiliateRail program can also run on codes alone, with links hidden in the partner portal. That suits a program whose partners are all on camera.

What a creator needs from you is short, and most merchants send half of it.

The message to a creator you are giving a code

Hi [first name],

Your code is [CODE]. It gives your audience [discount] off. It pays you [commission] on every payment they make, for as long as they stay subscribed.

Two things worth knowing. The code works whether or not anyone clicks, so it is safe to say out loud in a video or a podcast. There is no link to remember. And if someone does click your link first, the link takes the credit, so you are covered either way.

Your portal at [portal address] shows every sale the code brought in, what you have earned, and when the next payout runs.

One ask. Please keep the code to your own audience and off deal sites. Codes that end up on coupon aggregators get retired, because at that point they pay for sales that were already happening.

[your name]

The last paragraph is the one to keep. Saying it before the code goes out is a two-minute job. Saying it after the code has leaked is a negotiation.

Pay the partner whose code brought the sale

Codes from your own Stripe, mapped to partners, with a click still winning. Fourteen days, no card.

Start free trial

What happens when the code leaks?

In shortIt reaches deal sites. Then it starts paying commission on customers who were already buying. Nothing prevents this. What you need is a written position taken early, and a signal that knows a popular code from an abused one.

The pattern is ordinary. A customer is part way through checkout, sees a discount box, opens a tab, searches your brand plus the word coupon, finds a partner's code sitting on a deal site, comes back and pays. The partner is credited for a sale they had nothing to do with. Your margin pays for it twice.

A browser add-on can do the same thing with no search. Some of them write their own referral onto the checkout page, on top of whatever the visitor arrived with. That takes the credit from the creator who made the recommendation. The practice is the subject of a joined civil case in the Northern District of California, In re PayPal Honey Browser Extension Litigation. The defendants answered the second amended complaint in July 2026 and the case is still running. Nothing in it is decided, and nobody should read a finding into it. It is worth knowing because the mechanism is real, and it is aimed at the partners you are giving codes to.

Now the counting trap. A code is meant to be used by many people, so a high count of redemptions proves nothing at all, and any rule built on that count will spend its life flagging your best partner. AffiliateRail's coupon-abuse check looks for one code used by accounts that are the same person: several whose email addresses reduce to the same mailbox under different aliases, or a burst from one address inside the hour. Both thresholds are yours to tune. Both raise a flag with its evidence, and neither reverses anything on its own.

The rest is the position you take. Module 2 of the manual has wording for a coupon and deal-site clause. The plainest version credits approved deal partners through their own code only, never through a last-second link. Module 6 covers the leak next to the other five patterns, and the scripts for saying no.

Does a code prove the affiliate caused the sale?

In shortIt proves the customer heard the affiliate. That is more than a last click proves. It is still not proof the sale would have been lost without them.

Typing a code is a deliberate act, so it is a stronger signal than a cookie set by a visit nobody remembers, and that is the real argument for codes. It holds up. What it cannot tell you is whether the customer was already on their way to buying and went looking for a discount on the last screen.

You can smell the difference in data you already hold, and module 7 goes through it. Minutes between first contact and payment, rather than days. Codes used in step with your own launches, rather than the partner's posting. Churn no better than a cold visitor's. The crude test works too. Retire a suspect code for a month and watch whether total revenue moves. Usually it does not, and that is your answer.

No published figure exists for how much of a program's coupon revenue would have arrived anyway. This page is not going to invent one. Practitioners have argued both sides for years, and one exchange from 2022 still frames it best. Codes are what survives a blocked script. The price is your click data, a discount box on your pricing page, and a code that reaches deal sites fast.

So treat the code as what it is. The marker that works where nothing else does, priced as discount plus commission, given on purpose, watched by a rule that knows a popular code from an abused one, and read as evidence that the customer heard your partner. Not as proof they caused the sale.

Common questions

Can one partner have more than one code?

As many as you want to give them. Each code is its own row mapped to the same partner, which is how a creator gets a separate code per campaign, per channel or per launch without a second account. Every code shows how many customers it has attributed, so retiring one is an informed decision rather than a guess.

Do renewals keep paying the partner behind the code?

They do. The code binds the customer to the partner, not the single payment, so every later invoice from that customer is credited the same way a link-referred customer's would be. Recurring commission rules apply exactly as they do on the link path.

What if the customer clicked another partner's link and then used a code?

The click wins in AffiliateRail: the stamped click id is read first and the discount is only looked at when there is no click. Other platforms in this category document the opposite order, so check the rule your tool uses before you write it into a partner agreement.

Is a discount required to run a code?

Technically no, and practically yes. A code worth nothing gives the audience no reason to type it, and typing it is the whole mechanism. Price the discount and the commission together as one cost, because both come off the same sale.

What happens to past sales if a code is deleted?

Everything already credited through it keeps its partner and its commission. Deleting a code stops future matching only, which is the reason deletion is the off switch: there is no half-retired state to reason about later.

Does the coupon path work on Paddle?

Not today. AffiliateRail matches on Stripe's promotion-code id, and a Paddle program attributes through the link and the reference carried on the transaction instead. Paddle's own discounts exist and work for discounting; they are not yet a partner-attribution path here.

Where these facts come from

Every figure above was read off the document named here on the date beside it. If one has moved on, email support@affiliaterail.com and we will correct the figure and move the date.

Start

Give a partner a code, and credit the sale it brings

Codes you create in your own Stripe, mapped to partners, with a click still winning when both exist. No card for fourteen days. Full refund within 30 days of your first payment.