How attribution works
Attribution is how Refficks decides which partner, if any, earned a sale. It weighs every partner touch on the customer that happened before the sale and inside the program's window, takes the highest-ranked kind of touch, and within that kind the most recent one (or the earliest, if you choose).
When no partner qualifies, the sale is recorded as credited to nobody, with the reason. Refficks never guesses, and never changes a decision silently.
The short version
- A touch is a partner's claim on a customer: a click on their link, their code typed at checkout, your server naming them, or a person on your team crediting them.
- A touch counts for the program's attribution window: 30 days unless you set another, 60 for a referral program.
- The kinds of touch are ranked. Your team's word beats your server's statement, which beats a click, which beats a code, which beats an imported record.
- Between two clicks, Last touch (the default) pays the most recent and First touch pays the earliest.
- Whether a code can beat a click, and whether a customer stays with the partner who first won them, are settings on each program.
- Every decision shows its reasoning on Conversions › a sale › Why?.
In detail
The kinds of touch
| What happened | Shown as | How it reaches Refficks | Rank |
|---|---|---|---|
| A person on your team recorded a sale and named the partner | Recorded by hand | Record a sale on Conversions | 140 |
| Your server named the partner | Server-side partner ID | An event from your server with attribution.partner_id |
120 |
| A visitor clicked the partner's link and landed on your site | Direct URL parameter | The script on your site reads the code in the address, such as ?rfi=dana |
100 |
| A visitor clicked the partner's link through Refficks's own address | Tracking link | A link ending /r/<code>, used when Count clicks on our servers is on, and for every link that points straight at a Stripe Payment Link |
100 |
| The partner's code was used at checkout | Coupon code | Your store, Stripe or your server reports the code with the sale | 60 |
| A record brought over from another platform | Imported | A migration | 20 |
A click recorded through Refficks's address and one recorded by the script on your page are the same act recorded two ways, so they rank level and the more recent wins.
A partner's link whose destination is a Stripe Payment Link (buy.stripe.com)
has no page of yours in between for the script to run on, so it is always
handed out in its /r/<code> form. Once you have chosen a guide that sells
through payment links, Refficks adds the partner's code to the address as
client_reference_id as it sends the visitor on, and Stripe hands the code
back with the payment. A client_reference_id you wrote into the link
yourself is left as it is.
A touch's time is the moment it reached Refficks. The script on your page cannot say a click happened earlier than it did; only your server, with its secret key, can give an event a time of its own.
Crediting or moving a single sale by hand is not a touch competing with the others: it replaces that sale's decision outright. See Credit or move a sale.
The parameter that names the partner is set under Settings › Partners and
payouts › Partner links, in The bit that names the partner. New
workspaces start with rfi. Renaming it keeps every old name working, listed
as Still works, until you press Retire on it.
A B2B partner who sourced a deal appears on the customer's journey as "Sourced the deal" and never wins a sale: they are paid through the deal.
Which touches can win
A touch is eligible only when all of these are true:
- It happened before the sale. Otherwise: "Happened after the conversion."
- It had not expired. Otherwise: "Outside the 30-day attribution window." The window is fixed when the touch is recorded, so changing a program's window later never re-decides an earlier click.
- The program counts that kind of touch. Otherwise, for example: "This programme does not count a server-side attribution."
- The partner still earns. A partner suspended in the program, removed from it, or archived is shown as considered and not credited: "This partner is suspended from this programme." or "This partner is no longer one of your partners."
An eligible touch reads "Within the attribution window."
Pausing or archiving a whole program works earlier, at the click: links in it stop recording clicks and touches, so nothing new is there to weigh.
Every touch is listed under Every touch considered, eligible or not, with its reason. Nothing is filtered out of sight.
Who wins
Among the eligible touches, the highest rank wins. Among touches of the same rank, the program's model decides.
Example: Sam Rivera clicks Dana's link on 1 October and Lee's link on 5 October, then pays USD 120.00 on 6 October. Under Last touch, Lee is credited. Under First touch, Dana is. If Sam also typed Dana's code at checkout, the click still wins under the default A click beats a code.
The decision carries a confidence figure: 95% for a click through Refficks's address, 90% for a click read by the script, 85% for a code, 100% for your server's statement, less 10 points for each other partner with a live claim (30 at most). A line beside it says the same in words, for example "85%: how sure the evidence is that this partner sent the sale. Refficks starts at 95% for a tracking link and takes 10 points off for each other partner with a live claim on the customer (one here, 30 points at most). It is there to weigh the decision by, and changes nothing anybody is paid." A sale a person credited, moved or recorded by hand reads "a person chose this partner" instead.

When a code and a click disagree
On each program, When someone clicked a link and also typed a code:
- A click beats a code (default): "When someone clicked a partner link and also typed a code at checkout, the click decides. The code only wins when nobody clicked."
- A code beats a click: "A code typed at checkout decides, even when the customer clicked a partner link first." It still ranks below your server's statement and your team's word.
- Codes do not decide attribution: "Codes are recorded on the journey but never decide who is paid."
When a customer comes back
On each program, When a customer comes back through a different partner:
- Every sale is decided on its own (default): "A customer who comes back through a different partner is credited to that partner on their next purchase."
- The first partner keeps the customer: "Once a partner has won a customer, later touches from anybody else are recorded on the journey but never take a sale."
- Renewals stay with whoever won the subscription: "Every invoice on a subscription keeps paying the partner who won it, including upgrades. A separate purchase is decided on its own touches."
Under every setting, a customer already credited to a partner stays with them when no newer touch competes. That is what keeps a subscription paying its partner in month six, long after the click expired. The decision then reads "This customer was already attributed to this partner on" a date, "and no newer touch competes."
One exception: a renewal of a subscription that began before Refficks heard of it is credited to nobody: "This subscription began before Refficks heard of it; nobody acquired it through a partner." If a partner did bring that customer, credit the sale by hand.
Sales credited to nobody
A sale no partner qualifies for is still recorded, under Conversions with "No partner", and its page says which of three things happened:
- "No partner ever touched this customer": ordinary revenue.
- "Every touch had expired": "If these should have counted, the programme's window may be shorter than your sales cycle."
- "Every touch was excluded by the programme": check the program's rules and the partners' status.
Reports shows the same reasons, with counts and amounts, in Where your revenue comes from.
Credited later, when the buyer is identified
A sale often reaches Refficks a few seconds before the buyer's browser says who they are. When a buyer is identified within 24 hours after a sale that was credited to nobody, Refficks decides that sale again with the same rules. If a partner's touch now qualifies, the sale moves to them, and it says so:
- the decision begins "Credited later: the buyer was identified by your website on" a date;
- Conversions shows "Credited later, on" the date under the partner;
- the partner's page, under Performance, shows "Credited later: identified by your website on" the date;
- Settings › Developer › History records it, with no person as the actor.
Only a sale credited to nobody is reopened, and only once.
When only a browser vouched for it
Your publishable key is readable in your page, so anything the script reports is a browser's word. Two kinds of sale are credited as usual and then wait for a person before their commission approves, whatever the plan's holding period:
- The browser named a customer you already knew. The winning click was joined to the buyer only because the browser said who it was, and Refficks knew that customer before the click: "A shopper's browser said it was this customer, whom you already knew, and that is all that links the partner's click to this sale, so it waits for someone to approve it." Renewals of that sale wait the same way. A customer who signs up after clicking, the ordinary case, approves as before.
- The order came from your confirmation page unsigned: "Only a shopper's browser reported this sale, so it waits for someone to approve it." If your server later reports the same order signed, the unsigned report is set aside and its commission reversed; see Install the tracking script.
Crediting or moving a sale by hand
On a sale's Why? page, owners, admins and managers can act:
- On a sale credited to nobody, Credit this sale to a partner.
- On a credited sale, Move this to another partner. The commission is taken back from the first partner as a new ledger entry and worked out for the new one from their plan.
Your name and your reason stay on the decision either way. A manager can do both, with two limits: the commission waits for an owner or admin to approve it, and a move that would take back a commission already approved or paid is refused. Credit or move a sale has the steps.
Nothing is silently changed
- Changing a program's rules affects sales from then on. "Every sale already decided keeps the partner it has, and every commission already earned stands." Renewals on running subscriptions follow the new rule from their next invoice.
- A correction never overwrites. The old decision is kept, readable, and marked superseded; the money moves through new ledger entries.
- Before you change a rule, the confirmation shows what it would have done to the program's last 1,000 sales at most: "Against your last" N "sales", how many would have moved, and the difference in commission. Nothing is written.
- Under other rules, on each sale's page, shows who would have won under First partner touch, Last partner touch and Codes beat clicks. "Nothing here changes anything."
Referral programs
A referral program counts link clicks, direct links, referral codes and sales recorded by hand. It does not count your server naming a partner.
Two restrictions decide whether a referral earns its reward, under the program's Referral program card, Restrictions:
- Only reward genuinely new customers (on by default). A refused referral reads "This customer was already known before the referral, and this programme rewards new customers only."
- Allow people to refer themselves (off by default). A refused one reads "The referrer and the referred customer are the same person." Refficks matches the same email address, or a customer already linked to the partner, never an IP address.
In other programs a partner buying through their own link is not refused. It may raise a "Review recommended" signal for you to look at.
Consent and privacy
- A browser that sends Global Privacy Control leaves no touch: no click, no cookie, nothing written.
- On a site that waits for consent, a visitor who agrees on the page they landed on still credits the partner. One who agrees only on a later page does not.
- A shopper who declines can still credit a partner through the partner's code at checkout, with no visitor, buyer, IP hash, country or device recorded.
Consent and privacy covers what the script writes and keeps.
Where to see it in Refficks
Conversions › any sale › Why? opens Why this conversion was attributed: the partner, What it paid, The decision with its sentence, Method, Source and Window applied, Every touch considered, and Under other rules. The customer's own page shows the whole Journey, with a Why? link beside each sale. Read the attribution debugger goes through the page card by card.
Settings that change it
| Setting | Where | Default | What it changes |
|---|---|---|---|
| Attribution window (days) | Programs › a program › Settings | 30 days; 60 for a referral program | How long after a click a sale still counts. From 1 to 365. Applies to clicks from now on. |
| When two partners are both in the window | Programs › a program › How this program decides | Last touch | Most recent or earliest eligible touch |
| When someone clicked a link and also typed a code | the same card | A click beats a code | Whether a code can outrank a click |
| When a customer comes back through a different partner | the same card | Every sale is decided on its own | Whether a later partner can take a returning customer |
| The bit that names the partner | Settings › Partners and payouts › Partner links | rfi for a new workspace |
The parameter in partner links. Old names keep working until retired. |
| Count clicks on our servers | Settings › Partners and payouts › Partner links | Off | Links go through Refficks's address first. "Nothing changes about who gets paid." |
| Wait for consent before tracking | Settings › Partners and payouts › Partner links | Off | The script records nothing until your cookie banner says yes |
| Only reward genuinely new customers | a referral program's Restrictions | On | Whether an existing customer can earn a referral reward |
| Allow people to refer themselves | a referral program's Restrictions | Off | Whether a self-referral can earn a reward |

Program settings and How this program decides can be changed by owners, admins and managers. Settings › Partners and payouts › Partner links can be changed by owners and admins.
A single link can carry its own window, shown in the Window column on Tracking.
Limits
- Attribution looks at the 100 earliest touches on a customer.
- A sale credited to nobody is only reconsidered when the buyer is identified within 24 hours. After that, credit it by hand.
- Refficks never splits one sale between partners. The earliest partner is recorded for reporting, but only one is paid.
- A subscription bought through a Stripe Payment Link is not credited from the link, because its invoices do not carry the code.
- On BigCommerce, an order placed with "Buy now", which skips the cart, is credited only through the partner's code.
Related
- Read the attribution debugger: every card on a sale's Why? page.
- Credit or move a sale: when the decision is wrong and you know who it should have been.
- A sale was not credited to a partner: read the reasoning and fix the cause.
- Commission plans: what a credited sale pays.
- Refunds and reversals: what happens to a credited sale's commission when the money goes back.