Server-side tracking explained
How the SDK captures click IDs, stores them server-side, matches conversions and forwards them to ad platforms.
On this page · 6 sections
Convultra captures conversion data on the server, removing the dependency on browser cookies and client-side pixels. Server-side matching reaches about 98%, against pixels that miss 30 to 40% of conversions. This page is the technical view; for the plain-English version see How Convultra works.
How it works
1. A visitor arrives with a click ID
When a user clicks an ad, the platform appends a click ID to the destination URL. Convultra recognizes these automatically:
| Parameter | Platform |
|---|---|
gclid | Google Ads (standard) |
gbraid | Google Ads (privacy-safe, iOS and Safari app campaigns) |
wbraid | Google Ads (privacy-safe, web campaigns on iOS and Safari) |
fbclid | Meta |
msclkid | Microsoft Ads |
ttclid | TikTok |
oppref | OpenAI Ads |
2. The SDK stores the click ID server-side
The SDK reads the click ID from the URL on the first pageview and sends it to Convultra. It is persisted server-side, not in a cookie or localStorage, so it survives Safari ITP’s 7-day cookie cap, cookie blockers, private browsing and browser restarts. See Click ID persistence.
3. A conversion occurs
When you call a tracking method such as Convultra.trackPurchase(), the SDK sends the conversion to Convultra, and the server associates it with the stored click ID.
4. The conversion is forwarded
Convultra forwards the conversion, with the click ID and any enhanced user data, to each connected ad platform through its server-side API:
- Google Ads: Google Ads API conversion upload. Live.
- OpenAI Ads: Conversions API. Live.
- Meta: Conversions API. Coming soon.
- Microsoft Ads: Offline Conversions API. Coming soon.
- TikTok: Events API. Coming soon.
Safari ITP and privacy fallbacks
Safari ITP limits first-party cookies to 7 days, and to 24 hours in some cases. When ITP strips or prevents gclid storage, Google provides two privacy-safe alternatives:
gbraidfor iOS app-related click trackingwbraidfor web campaign clicks on iOS and Safari
Convultra captures all three and uses whichever is available. If gclid is present it takes priority; otherwise gbraid or wbraid is used.
What the SDK collects automatically
On every pageview, with no extra code:
- Page URL and referrer
- Click IDs (
gclid,gbraid,wbraid,fbclid,msclkid,ttclid,oppref) - UTM parameters (
utm_source,utm_medium,utm_campaign,utm_content,utm_term) - Session and visitor identifiers
- Device, browser, OS and screen resolution
- Geolocation (country, region and city, derived from IP on the server)
SDK performance
| Metric | Value |
|---|---|
| Gzipped size | About 10KB |
| Uncompressed size | About 36KB |
| Loading | Non-blocking, async |
| Render impact | None, no layout shift, no main-thread blocking |
The recommended install uses a stub plus async script, so tracking calls are queued immediately and processed once the SDK loads. See Installing the tracking script.
Sending events from your own server
A conversion that happens outside the browser, such as an order confirmed by a payment webhook or a lead qualified in a CRM, can be sent by posting to the tracking endpoint directly. It is the same endpoint the SDK uses:
POST https://tracking.convultra.com/v1/track
Content-Type: application/json
X-Convultra-Key: proj_your_project_key
{
"project_id": "proj_your_project_key",
"event_id": "order_8842",
"event_type": "purchase",
"timestamp": 1736951400000,
"value": 149.99,
"currency": "USD",
"data": { "orderId": "order_8842" },
"user_data": { "email": "sarah@example.com" }
}
project_id is your project key, the same proj_ value the script uses. event_type is one of the seven conversion types or a custom name. Give every event a unique event_id so a retried webhook is deduplicated rather than counted twice. user_data is optional; when present, Convultra normalizes and hashes it before anything is forwarded (see Enhanced conversions). To send several events in one request, post a JSON array to /v1/track/batch.
A server-sent event has no browser context, so attribution relies on the identifiers you pass and on any click ID Convultra already stored for that visitor. The WordPress plugin sends WooCommerce purchases this way.
Architecture
Browser Convultra server Ad platforms
------- ---------------- ------------
1. User clicks ad
(URL contains gclid)
2. Page loads SDK -----------> Stores click ID server-side
3. Convultra.trackPurchase() -> tracking.convultra.com/v1/track
+- Matches click ID ---------> Google Ads API (live)
+- Adds hashed user data ----> OpenAI Ads API (live)
+- Deduplicates -------------> Meta, Microsoft Ads, TikTok (coming soon)
Server-side forwarding means conversions reach ad platforms even when the visitor’s browser blocks third-party requests, cookies or JavaScript.