The platform · 21 October 2026 · 12 min read
From click to payout: the journey of a sale through Affilyflow
Co-founder, product and technology
The short answer
- The commission rate and cookie window are locked the moment someone clicks – neither can be changed for a sale that is already on its way.
- Every sale is created as pending; the store has the program's approval period (30–90 days) to reject it with a reason, otherwise it is approved automatically.
- Only approved commission can be paid out – from DKK 100, automatically on the first banking day of the month – and the payout amount is calculated by the server, not by a number in the browser.
- Bots are not counted, the same order can never count twice, and every tracking event is logged – including those that did not become a sale.
An affiliate sale is a chain of events: a click, a visit, a purchase, a series of checks, an approval and finally a payout. At every link you can ask the same question – who decided this, and could anyone have changed it afterwards? This article follows a single sale all the way through Affilyflow and answers that question step by step.
The principle behind the chain is simple: the terms are frozen as early as possible, and after that neither party can change them. The commission rate and the attribution window are locked the moment someone clicks. Every sale is created as pending. The store has 30–90 days and must give a reason for a rejection. And the payout is calculated by the server, not by a number in the browser. These are not eight promises in a terms document – they are eight rules in the system.
The journey in 8 steps
Here is the whole journey at a glance. Each step is unfolded in the sections below with the question that matters to both parties: what is fixed, and what can still change?
The click hits /go
The affiliate's link points to our /go address. The server writes a click row with a timestamp and copies the program's commission rate and cookie window into the row – frozen from that moment. Known bots are filtered out and not recorded.
The visitor lands in the store
The visitor is sent on to the store with a click ID in the URL. That ID is the entire basis for attribution – no intermediate pages, no detours.
The purchase is completed and reported
The Shopify pixel, WooCommerce plugin, Stripe webhook or tracking script reports the order to us with click ID, order ID and amount.
The server checks
The click's age is measured against the frozen window, the order ID is checked for duplicates, and a blocked affiliate is stopped. Everything is decided on the server.
The sale is created as pending
No conversion credits a balance automatically. Everything starts as pending commission – without exception.
The store's approval period
The store can reject with a reason within the program's approval period of 30–90 days. If nothing happens, the sale is approved automatically when the deadline passes.
Approved commission on the balance
On approval the commission is earned. The balance is calculated from the underlying sales – not from a column anyone can edit.
Payout from DKK 100
On the first banking day of the month the server creates the payout automatically and calculates the amount from approved commission alone. The minimum is DKK 100, and the affiliate can also press "Pay out now".
Steps 1–2: the click freezes the terms
The affiliate's link does not point directly at the store, but at our /go address. When a visitor clicks, three things happen on the server before the visitor is sent on: the click is written as a row in the database with a timestamp, known bots are filtered out without being recorded (the bot filter means a crawler neither counts as a click nor can trigger attribution), and the program's commission rate and cookie window are copied into the click row itself. We call the latter rate lock: the terms that apply at the moment of the click are the terms the sale is settled on. The whole mechanism is described on the tracking page.
The visitor lands in the store with a click ID in the URL – the afid parameter. That ID is the entire basis for attribution: the conversion that later carries the ID is credited to that click and no other. There are no intermediate pages and no extra calls that can fail along the way – the visitor is in the store straight away.
From that moment two things are fixed that neither store nor affiliate can touch: the rate and the window. The store chooses its cookie window between 14 and 90 days and can change its rate going forward – but a reduction can only happen once every 30 days, and no change affects clicks that have already happened. The reduction rule is enforced by the database with a trigger, so it applies whichever way a write comes in – including around the dashboard. And the frozen terms sit in the click row itself, so a later change has nothing to hit.
Important
What we deliberately do not do
There is no fingerprinting and no cross-device tracking in Affilyflow. Attribution rests on a click ID in the URL and a cookie with the visitor – a model that can be explained in one line and verified in the log. Tracking that guesses identities across devices cannot be checked by either party, so it does not belong in a system that settles money.
Steps 3–4: the purchase is reported – and the server checks
When the purchase is completed, the store's integration reports the order to us. Shopify stores use a web pixel, WooCommerce stores our plugin, Stripe subscriptions are reported via a webhook, and other stores use our tracking script – the overview is on the integrations page. The report carries three things: the click ID, the order ID and the amount. The integration reports the amount excluding VAT, because commission is calculated on the order value excluding VAT – except the Shopify app, which sends Shopify's subtotal, meaning the value of the goods without shipping; whether VAT is deducted in every case is not yet confirmed.
What matters is what the browser does not decide. The click's age is measured against the window frozen at the click – on our server, from our timestamp, so a browser cannot lie about when the click happened. The order ID is checked against earlier conversions in the same program, so the same order never counts twice (dedup). And if the affiliate is blocked, the database itself stops the earning, whichever way the sale came in.
If the order fails one of the checks, it does not disappear – it is logged. Every single tracking event is written to the event log, including those that did not become a sale. A disagreement about a number should be settled by looking at the data, not by guessing. The technical walk-through of the chain is in the docs under how tracking works, and the reference for how stores report sales is under the conversion API and the status codes.
Steps 5–6: pending sales and the store's approval period
If the order passes all the checks, the sale is created – as pending. That is not a precaution we apply when in doubt; it is a rule without exceptions: a conversion never credits a balance automatically. The difference between pending and earned commission is the backbone of the whole approval model.
The store now has the program's approval period – 30, 45, 60 or 90 days, locked on the sale. During that period it can reject the sale, but only with a reason the affiliate can see – a rejection without a reason does not exist in the system. If the store does nothing, the sale is approved automatically when the deadline passes. Both sides of the agreement are implemented: the deadline is enforced by an automatic job, and the database allows no other write path from the client. The whole flow is described on the approval page and in the glossary under approval of sales.
One thing happens automatically in the store's favour: if an order from the WooCommerce plugin is refunded or cancelled, or a Stripe payment is refunded or disputed, we reject the commission automatically – even if the sale has already been approved – and the affiliate is notified. If the commission has been paid out and the sale was approved more than 90 days ago, however, the affiliate keeps the commission, and we carry the difference. This does not apply to sales reported via the Shopify pixel or the tracking script.
Watch out
Refunds on Shopify and via the script
Automatic clawback only exists for the WooCommerce plugin and Stripe. If a store refunds an order that was reported via the Shopify pixel or the tracking script, the sale must be rejected manually before the program's approval period expires – otherwise it is approved automatically.
Steps 7–8: balance and payout
On approval the commission moves from pending to earned, and it becomes part of the affiliate's balance. The balance is not a column anyone can edit – it is calculated from the underlying sales every time it is shown. If an amount cannot be explained by the rows behind it, it does not exist. Rates and numbers are gathered on the payments page.
When the approved commission reaches the payout threshold of DKK 100, it is paid out automatically on the first banking day of the month – weekends and Danish bank holidays are skipped – provided bank details, personal details and the self-billing agreement are in place. If the affiliate does not want to wait, they can press "Pay out now". Neither the automatic payout nor a payout request submits an amount – the server calculates what is due for payout itself, and it only counts sales with the status approved. Pending commission cannot be paid out, and an affiliate cannot have someone else's balance paid out. We make the transfer itself by bank transfer, and every payout gets a settlement document. What needs to be in place, and how VAT and refunds are handled, is described in the docs under payouts.
The bill sits with the store: the affiliate gets exactly the rate the program shows, and our network fee is 20 % of the store's total price instead of being deducted from the affiliate's rate. The fee can only be changed by us – it is locked in the database in the same way as the rates. And there is no subscription: if a sale never materialises, the network costs nothing.
Tip
Follow along yourself
If a number looks wrong, start in the event log – it also shows clicks and events that never became a sale, so a missing sale can be traced to its link in the chain.
Who can influence what – and what is locked
Here is the whole chain once more, now focused on who can influence each step, and what is locked once the step has been passed.
| Step | Who can influence it | What is locked |
|---|---|---|
| 1. Click on /go | The affiliate chooses where the link sits | Rate and cookie window are frozen in the click row; bots are not recorded |
| 2. Landing in the store | The store owns the buying experience | The click ID in the URL – which click gets the credit is already decided |
| 3. The order is reported | The store's platform reports order ID and amount | The click time – the browser cannot change the click's age |
| 4. The server's checks | Nobody – the rules run the same for everyone | Window, dedup and block check are decided on the server |
| 5. The sale is created | Nobody – the status is always pending | No balance is credited automatically |
| 6. The store's approval period | The store can reject with a reason | The deadline and the reason requirement; then automatic approval |
| 7. Approved commission | Nobody – the commission is earned | The balance is calculated from data, not from an editable column |
| 8. Payout | Nobody – automatic on the first banking day from DKK 100, or "Pay out now" | The amount is calculated by the server and only counts approved commission |
The pattern in the last column is the whole point: the further a sale gets in the chain, the less anyone can change. The click freezes the terms, the server decides the checks, the deadline decides the approval, and the data decides the balance. Transparency is not a report we write afterwards – it is building the system so there is nowhere to hide. Why we chose that path is set out in our manifesto on numbers you can verify.
Frequently asked questions
What happens if the store lowers the commission after my click?
Nothing for that click. The rate is copied to the click row the moment someone clicks, and the conversion is settled at the frozen rate. A reduction only applies to future clicks and can only happen once every 30 days.
When can I have my commission paid out?
Once the sale is approved, either by the store or automatically when the approval period ends, it counts towards your payout. From DKK 100 in approved commission it is paid out automatically on the first banking day of the month, or when you press "Pay out now", and the amount is calculated by the server. Pending commission cannot be paid out.
Can a sale be rejected without an explanation?
No. A rejection requires a reason the affiliate can see, and it must happen within the sale's approval period. If nothing happens before the deadline, the sale is approved automatically.
What happens to the commission if the order is refunded?
If an order from the WooCommerce plugin is refunded or cancelled, or a Stripe payment is refunded or disputed, the commission is rejected automatically. For sales reported via the Shopify pixel or the tracking script, the store has to reject the sale itself within the program's approval period.
Further reading

Written by
Loui WagnerCo-founder, product and technology
Found a number that no longer holds? Write to us – we will correct the article.
From reading to the first click.
Web shops only pay for approved sales, and affiliates are up and running in minutes – with numbers that can be checked.