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

In brief

Give each affiliate their own discount code, and the sale gets credited when a customer types it in. No link, no click, nothing to track. AffiliateRail stores the partner against Stripe's internal id for that code rather than the text of it, so you can rename the code and nothing breaks, and a checkout session carrying that id goes to that partner. If someone clicks a link and uses a code, the click wins. That makes codes the right tool for podcasts, video, and anywhere nobody can click anything. The catch most founders miss is the cost: a 20% code on a $99 plan at 20% commission costs you $15.84 a month more than a plain link, because you discount the price and then pay commission on what was actually paid.

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

In shortEach code belongs to one partner, and the payment carries the code with it. Stripe records which code was used. Your affiliate tool looks up whose it is. The commission is written exactly as it would be for a click.

Attribution is the question of which partner gets credited for a sale. A code answers it differently from a link. A link works by leaving something behind in the browser. It leans on a cookie and a scrap of storage. It also needs a visitor who comes back before any of that gets cleared. A code doesn't lean on the browser at all. It rides on the payment. That's the whole difference. It's why a code reaches people a link never will: listeners, viewers, readers of print.

A promotion code is Stripe's customer-facing code for a coupon. It's the thing your partner reads out. It's the thing your customer types into the box at checkout. It's also the row your commission hangs from. Stripe's own reference lists what you can put on one. A named customer, a cap on redemptions, an expiry date, a first-time-buyer rule, a minimum amount. The code itself can run to 500 characters. But a podcast host has to say it out loud. So make it 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

Now the part where tools differ. AffiliateRail stores the partner against the promotion code's id, the string starting promo_. It does not store it against the letters your customer types. The checkout session carries that id in its discounts list, so the match is exact. Rename JANE to JANE20 next month and nothing breaks, because the id never moved. A tool matching on the letters would have carried on running. It would have stopped paying Jane and told nobody. That kind of silent failure surfaces only when the partner does the sums herself. Jane finds out first. You hear it from her.

You make the code in your own Stripe account and the connection reads it. Nothing is written back. One partner can hold as many codes as you like. That is how a creator gets a fresh one per campaign.

Paddle has the same idea under another name. Discounts there can be one-off or recurring. Either the buyer applies one at checkout or you apply it yourself. AffiliateRail's code path binds on Stripe's promotion-code id today. So a Paddle program credits the partner through the link instead. Worth knowing before you promise a Paddle partner a code.

The click beats the coupon, and you decide why

In shortAffiliateRail looks for a click first. It only checks the discount when there was no click. That order is fixed in code with a test on it. So every sale gets the same answer instead of somebody deciding case by case.

The commissions table: three rows with a date, partner, customer, the rule that priced them, the sale amount, the commission and a status of due, pending or approved
A commission credited by code rather than by click looks the same here.

Two partners can turn up in one sale. Jane wrote the review that sent the visitor over. Sam recommended your product on his podcast a fortnight earlier. So Sam's code was the one typed at checkout. Both have a fair claim. Somebody has to be paid. The order is a decision you are making whether you realise it or not.

Putting the click first pays whoever got there earliest. It uses the one thing a stranger cannot copy. Anyone can find a code on a deals page. A click belongs to one visit in one browser. So a code is the backup for a visitor who arrived with nothing on them. It is not a rival claim on one who already had something.

Some platforms document the opposite order, and that's a fair choice too. So read your tool's rule before you write a partner agreement. That one line decides every mixed sale you'll ever have.

One more thing about order. A customer is tied to a partner once, on the first payment carrying anything. Later payments cannot reopen it. So a code used at the second renewal changes nothing. It cannot take a customer away from whoever brought them.

What a code carries, and what it costs you

In shortIt carries credit off the web and through anything that blocks a script. It loses you the click data. It costs a discount on top of the commission. And it's the one marker 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
Where it worksStripe and PaddleStripe today

The cost line is the one founders undercount, so do the arithmetic once. For example, let's say you sell at $99 a month. You pay 20% recurring. The code gives your customer 20% off.

The same customer on both paths, at $99 a month with 20% commission and a 20% code
PathCustomer paysPartner earnsYou keepBasis
A link$99.00$19.80$79.205 Sep 2026
The same partner's code$79.20$15.84$63.365 Sep 2026

Commission is worked out on what the customer actually paid. So the discount shrinks the partner's cut as well as yours. Same partner, same customer. You are worse off every month by the gap between those two bottom figures. You keep 64% of the full price where the link kept 80% (arithmetic, 5 September 2026).

That discount goes somewhere, and it splits three ways. The customer gains. You lose most of what they gained. The partner loses the rest, because their percentage comes off a smaller number. Tell a creator that early. Otherwise they will ask why the code paid them less than their own link would have.

None of which makes a code a bad deal. It makes it a different deal. Most people price it as a single number when it is really two. Keep the last figure. A fifth off plus a fifth in commission takes about a third off your full price.

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

In shortWhen the audience can't click. Podcast reads, video watched on a television, live talks, print. And anywhere a link would have to be typed from memory anyway.

This is the honest explanation for why creator programs run on codes. A host reading your product out for forty seconds can't hand over a link. Half that audience is driving. What they can do is say a word. A code is the only marker that survives being spoken. The discount is what makes anyone bother to type it.

It also gives the audience a reason to act now. A bare link never manages that. A link is a route; a code is an offer.

Most partners should have both. The link for the blog post and the newsletter. The code for the read, the caption and the video. An AffiliateRail program can also run on codes alone, with links hidden in the portal. That suits partners who are all on camera.

What a creator needs from you fits in one message.

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's safe to say out loud in a video or a podcast, and there's no link to remember. And if someone does click your link first, the link takes the credit. So you're covered either way.

Your portal at [portal address] shows every sale the code brought in. It shows what you've 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. At that point they're paying for sales that were already happening.

[your name]

Keep that last paragraph in particular. Saying it before the code goes out takes two minutes. Saying it afterwards becomes a negotiation about somebody's earnings.

A code on a deal site pays for sales you already had

In shortA code reaches deal sites. Then it pays commission on customers who were already buying. Nothing prevents that. 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 enough, and every founder recognises it. A customer is part way through checkout, notices a discount box, and opens another tab. They search your brand plus the word coupon. They find a partner's code on a deal site, come back and pay. The partner gets credited for a sale they had nothing to do with. Your margin pays for it twice: once in the discount and once in the commission. Nobody did anything wrong.

A browser add-on can do the same without the search. Some 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. That practice is the subject of a joined civil case in the Northern District of California. The case is In re PayPal Honey Browser Extension Litigation. PayPal answered the second amended complaint in July 2026. The case is still running. So nothing is decided, and nobody should read a finding into it. That said, it's worth knowing about. The mechanism is technically straightforward. And it's aimed at the partners you hand codes to.

Then there's the counting trap. It is where most fraud rules here go wrong. A code is meant to be used by lots of people. So a high count proves nothing. A rule built on that count spends its life flagging your best partner. I wrote AffiliateRail's coupon-abuse rule to ignore the count entirely. Coupon abuse is one code used over and over by what is really one person. So the rule hunts for that instead. One sign is several email addresses reducing to the same mailbox under different aliases. For example, jane+one@ and jane+two@. Another is a burst of redemptions from a single IP address inside an hour. Both thresholds are yours to tune. Both raise a flag with its evidence rather than reversing anything on their own.

The rest is the position you take in writing, before anyone tests it. Module 2 of the manual has the clause. The plainest version credits approved deal partners through their own code only. Never a last-second link. Module 6 covers the leak alongside the other five patterns.

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 your affiliate program

Does a code prove the affiliate caused the sale?

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

Typing a code is a deliberate act. So a redemption is a stronger signal than a cookie set by a visit nobody remembers. That's the real argument for codes. What it can't tell you is whether the customer was buying anyway. Some go looking for a discount on the last screen.

You can smell the difference in data you already hold. Module 7 walks through it. Minutes between first contact and payment rather than days. A code that moves in step with your 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. Watch whether new subscriptions fall. If they don't, that's your answer.

No published figure exists for how much of a program's coupon revenue would have arrived anyway. This page isn't going to invent one. Practitioners have argued both sides for years. 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 a code as exactly what it is. It reaches audiences nothing else reaches. It costs discount plus commission together.

Common questions

Does the discount repeat, or only apply once?

That's yours to set in Stripe, and it changes the sums. A coupon runs once, repeats, or lasts forever. A code set to once costs you the discount on the first payment only. The example above assumes a repeating code, which is the dearer case.

What happens to a coupon commission when the customer refunds?

It follows the money, exactly as a link commission does. One not yet paid out is voided. One already sent comes off the partner's next payout.

Can one partner have more than one code?

As many as you want to give them. Each code is its own row against the same partner. So a creator can have one per campaign or per channel. Each row shows how many customers it brought in. So retiring one is a 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 is credited the same way.

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. Typing it is the whole mechanism. Price the discount and the commission as one cost.

What happens to past sales if a code is deleted?

Everything already credited keeps its partner and its commission. Deleting a code stops future matching only. That's why deletion is the off switch. There is no half-retired state to puzzle over later.

Where these facts come from

Fact-checked and reviewed by Jimi Barkway on 8 September 2026. Every figure above was read off the document named here on the date beside it. To contact AffiliateRail about one, email support@affiliaterail.com and the figure is corrected and the date moved.

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.