Technical
Cookieless affiliate tracking for brokers
A cookie is a message a browser agrees to give back to you later. Three of the four major browsers have narrowed what they agree to, and forex traffic breaks the remaining assumption anyway by clicking on one device and funding on another.
What actually breaks
Three separate failures get reported as one, and they need different fixes.
Third-party cookies are blocked
If the tracking domain is not the domain the reader is on, the cookie is a third-party cookie. Safari has blocked those outright since 2020 and the others have followed to varying degrees. A tracker on its own domain loses the click at the first hop.
First-party cookies are shortened
A cookie written by JavaScript rather than by an HTTP response header is capped at a short life on Safari. A forex account often takes longer than that from first click to first deposit, so the identifier expires before the conversion happens.
The device changes
A reader clicks a link in a chat app on a phone and completes verification on a laptop days later. No cookie mechanism survives that, because the storage is per browser and there are two browsers.
None of these produce an error. The click is recorded, the trader funds an account, and the conversion is simply never attributed. It looks identical to traffic that did not convert, which is why partners underestimate their own performance rather than complain about it.
The five events an introducing broker has to own
Only the first happens on your own infrastructure. The other four happen at the broker, which is why the integration is the whole job.
| Event | Where it happens | How it is captured |
|---|---|---|
| Click | Your own edge | A worker stamps a click identifier, writes a first-party cookie and a server-side row, and carries the sub-IDs with it |
| Registration | Broker CRM | Server to server postback, matched on the click identifier. The partner is locked to that trader permanently |
| Verification and first deposit | Broker CRM | Server to server postback carrying amount, method and country |
| Every closed trade | Platform bridge | Symbol, volume, duration and spread captured per trade, per broker |
| Payout | Your own ledger | Weekly lock, payout file, immutable ledger entry |
Server side first, cookie second
The fix is not a better cookie. It is to stop depending on the browser to carry the identifier at all. The click handler generates the identifier, writes it to your own database in the same request, and passes it forward in the redirect URL so it arrives at the broker as a query parameter. The cookie is still written, because it is useful when the reader returns without a link, but nothing depends on it.
From that point the identifier travels through the broker's own systems and comes back on a server to server postback. There is no browser in that path, so nothing in the browser can break it.
The click, at the edge
GET https://go.introbroker.io/r/INB-10428?s1=telegram-main
1. generate ib_cid first-party identifier, pseudonymous
2. write the click row partner, sub-IDs, country, device, timestamp
3. set a first-party cookie convenience only, nothing depends on it
4. 302 to the broker signup ?ib_cid=... travels in the URL- The identifier is pseudonymous until registration. It identifies a click, not a person.
- The redirect runs at the edge, so the extra hop costs the reader a few milliseconds rather than a page load.
- The broker's signup form has to accept the parameter and store it against the account. This is the single hardest thing to negotiate and it is worth more than any rate concession.
Postbacks that survive a bad day
The failure modes here are all operational rather than clever, and every one of them has cost somebody a month of accruals.
Step 1 of 4. Queue before you write
A postback is accepted, put on a queue and acknowledged. It is never dropped because a database was slow. The broker retries on a non-acknowledgement, and a retry storm against a struggling database is how a slow hour becomes a lost day.
Step 2 of 4. Require an idempotency key on every request
Brokers retry. Networks duplicate. Without a key, a replayed postback accrues the same trade twice and the reconciliation finds it weeks later, if at all. With one, a replay is a no-op that returns the original result.
Step 3 of 4. Keep the ledger per broker
With several brokers, a variance you cannot attribute to one broker's general ledger is a variance you will never resolve. Every trade row carries which broker it closed on, from the first day rather than after the first problem.
Step 4 of 4. Flag filtered trades, never void them silently
Qualified-lot rules exist and they are reasonable. A trade held below a minimum duration or opened during an abnormal spread should be flagged with the rule that fired and shown to the partner. A programme that silently removes trades from your statement is the thing partners are right to be suspicious of.
Cross-device, done deterministically
The click on the phone and the deposit on the laptop are the same person, and the only reliable way to know that is something the person typed on both occasions. At registration the broker has an email address and a phone number. Hashed and matched against the click record, those stitch the two sessions together with certainty.
The alternative on offer is probabilistic fingerprinting, which infers a match from screen size, fonts, time zone and network. It is imprecise, and under European data protection law it is difficult to justify at all, since it processes personal data to identify someone who has not been told about it. Deterministic matching on data the broker already holds for regulatory reasons does not have that problem.
What to ask a broker for, in order
This list is the real blocker on any introducing broker build. Everything else you can construct yourself.
- A trade-level data feed, not just a conversion postback. Without it you cannot compute a revenue share yourself.
- The click identifier carried through the entire signup flow and stored against the account.
- Postbacks on registration, verification, first deposit, every closed trade and every withdrawal.
- Read-only access to their own introducing broker report, so you can reconcile against their general ledger rather than trust it.
- The qualified-lot definition in writing: minimum duration, what happens during a widened spread, and what else can disqualify a trade. This is where partners get quietly short-changed.
Questions
Is server-side tracking allowed under European data protection law?
Attribution that is necessary to perform the partner contract has a lawful basis that is not consent, and it is a different processing activity from the marketing pixels on a site, which do need consent. The click identifier is pseudonymous until registration, the raw address is kept only as long as fraud investigation needs it, and there is a data processing agreement with each broker for trader data. Take your own legal advice on your own setup.
How long does a click identifier stay valid for attribution?
That window is a commercial decision rather than a technical limit, and Introbroker has not published one yet. What is settled is what happens after the match: once a trader is attributed to a partner, the attribution is permanent and the revenue share continues for as long as that trader keeps trading.
Can I keep using my own tracker?
Yes. Events are pushed outbound to your own tracker with your macros for the click identifier, the event, the payout, your five sub-IDs, the symbol, the volume, the country, the device and the broker. RedTrack, Voluum, Binom, the GA4 Measurement Protocol, Meta CAPI and a generic webhook are all supported. There is no requirement to work inside somebody else's dashboard.
Why does every trade row carry which broker it closed on?
Because reconciliation is per broker. Each broker produces its own report from its own general ledger, and a variance can only be chased if you can say which broker's numbers it belongs to. A combined figure hides which integration is losing trades.
Where this comes from
Sources
Primary sources only: the regulator, the standards body, the platform vendor, the legislation, or our own agreements. Not another affiliate's summary of one.
- StandardInternet Engineering Task Force
RFC 6265: HTTP State Management Mechanism
What a cookie is at the protocol level, which is what makes the difference between a first-party and a third-party cookie concrete rather than a marketing distinction.
- Platform vendorWebKit, Apple
Full third-party cookie blocking and more
The browser-side reason cookie-based affiliate attribution loses conversions, stated by the engine that does the blocking rather than by an affiliate network.
- LegislationOfficial Journal of the European Union
Regulation (EU) 2016/679, the General Data Protection Regulation
The lawful basis for server-side attribution, which is performance of the partner contract rather than consent, and the data minimisation rule behind the click log retention.
- LegislationOfficial Journal of the European Union
Directive 2002/58/EC on privacy and electronic communications, article 5(3)
Why storing an identifier on a reader's device is a separate question from processing it, and why a first-party click identifier is treated differently from a marketing pixel.