Skip to content

Server-side tracking explained

How the SDK captures click IDs, stores them server-side, matches conversions and forwards them to ad platforms.

article |4 min |Updated Sep 2026
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:

ParameterPlatform
gclidGoogle Ads (standard)
gbraidGoogle Ads (privacy-safe, iOS and Safari app campaigns)
wbraidGoogle Ads (privacy-safe, web campaigns on iOS and Safari)
fbclidMeta
msclkidMicrosoft Ads
ttclidTikTok
opprefOpenAI 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:

  • gbraid for iOS app-related click tracking
  • wbraid for 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

MetricValue
Gzipped sizeAbout 10KB
Uncompressed sizeAbout 36KB
LoadingNon-blocking, async
Render impactNone, 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.

Next in Installation Monitoring mode →