Off-site tracking allows you to capture events that happen beyond your website—such as partner site conversions, email opens, or ad impressions—and associate them with your users in Permutive. This enables powerful use cases like:
Campaign reporting: Measure the effectiveness of advertising campaigns by tracking conversions on partner sites
Campaign optimization: Optimize targeting during campaigns to reach conversion KPIs
Suppression targeting: Remove users from targeting cohorts once they have converted
Premium targeting: Offer premium targeting for users who have visited a partner site but not yet converted
Prerequisites:
A custom event schema must exist in your Permutive workspace before implementation. Contact Support to set this up.
Determine which user identification method you’ll use (third-party cookies, internal user IDs, or Permutive user ID).
Before implementing tracking pixels, choose how you’ll identify users:Third-party cookies: Use IDs from partners like AppNexus, Google, or The Trade Desk. Permutive can automatically collect some third-party cookies—contact Support if you’re unsure whether your preferred ID is supported.
Some browsers block third-party cookies, which limits this method’s effectiveness. Consider using internal user IDs or Permutive’s user ID for more reliable tracking.
Internal user IDs: Use Permutive’s identity framework with your own identifiers to track users across touchpoints.Permutive user ID: Use the Permutive-assigned user ID directly for tracking.
Use this method when you need to copy and paste a tracking URL into third-party platforms like ad servers. The platform will handle firing the pixel request.Run these JavaScript snippets in your browser console to generate tracking URLs.
1
Using AppNexus ID
This example uses the AppNexus third-party cookie for user identification.
GDPR Compliance for EU Users: When targeting users in the EU, you must append GDPR parameters to the AppNexus URL. If TCF signals are available, include gdpr (1 if GDPR applies, 0 if not) and gdpr_consent (the consent string). If TCF signals are unavailable, use consent=1 (user consented) or consent=0 (no consent). Without these parameters, AppNexus will not return the user ID for EU users.Example with GDPR parameters:
Some platforms provide a macro for the rand (cache-buster) parameter. Check your platform’s documentation to see if you can use their macro instead of generating a random number.
Use this method when you can deploy JavaScript on the page where the event occurs, such as on partner conversion pages, within iframes, or in video players.
1
Deploy the JavaScript Tag
Add the following script to the page where you want to track the event. This example uses AppNexus for user identification.
GDPR Compliance for EU Users: When targeting users in the EU, you must append GDPR parameters to the AppNexus URL. Add gdpr=1 and gdpr_consent=YOUR_CONSENT_STRING to the URL if TCF signals are available, or consent=1 if the user has consented but TCF signals are unavailable.
2
Customize Event Properties
You can dynamically populate event properties based on the page context. For example:
The same JavaScript tag can be used across multiple partner sites—the partner name can be inferred from the URL property if needed.
The rand parameter is generated automatically in the code, ensuring each pixel fires uniquely for accurate tracking.
Use this method for environments where JavaScript is not allowed, such as marketing emails.
1
Generate Your Tracking URL
First, generate your tracking URL using the snippets from the Tracking URL tab. Run the appropriate JavaScript in your browser console and copy the resulting URL.
Some email service providers (ESPs) offer macros for the rand parameter. Check your ESP’s documentation to see if you can use their macro for cache-busting instead of a static value.
The examples above use AppNexus for third-party cookie identification. You can also use Google or The Trade Desk for ID syncing, which work similarly but have their own URL patterns.
Show Using Google ID Sync
Google’s cookie sync endpoint automatically forwards custom parameters to Permutive. This allows you to track events while simultaneously syncing the Google ID.Generate a Google tracking URL:
Copy
Ask AI
// Configurationconst publicKey = 'your-public-api-key';const permutiveUserId = 'permutive-user-id'; // Optional: include if knownconst eventName = 'AdImpression';const eventProperties = { campaign_id: 123};const gdpr = 0; // Set to 1 if GDPR applies// Build the tracking URLconst params = new URLSearchParams({ google_nid: 'permutive_dmp', google_cm: '', type: 'ddp', k: publicKey, e: eventName, p: JSON.stringify(eventProperties), gdpr: gdpr});// Optionally include Permutive user ID if knownif (permutiveUserId) { params.set('u', permutiveUserId);}const trackingUrl = `https://cm.g.doubleclick.net/pixel?${params}`;console.log(trackingUrl);
When this pixel fires, Google will redirect to Permutive’s sync endpoint, passing along all your custom parameters plus the Google ID. The event will be tracked and the ID sync will occur automatically.
GDPR Compliance: Include gdpr=1 for EU users. If consent is required, also include gdpr_consent with the TCF consent string.
Show Using The Trade Desk ID Sync
The Trade Desk’s cookie sync endpoint requires custom parameters to be passed via the ttd_passthrough parameter. This parameter accepts URL-encoded query params, which means event properties (JSON) must be double URL-encoded.Generate a Trade Desk tracking URL:
Copy
Ask AI
// Configurationconst publicKey = 'your-public-api-key';const permutiveUserId = 'permutive-user-id';const eventName = 'AdImpression';const eventProperties = { campaign_id: 123};const gdpr = 1; // Set to 1 if GDPR appliesconst gdprConsent = 'YOUR_CONSENT_STRING'; // TCF consent string// Build the passthrough params (these get forwarded to Permutive)// Note: Event properties must be URL-encoded within the passthroughconst passthroughParams = new URLSearchParams({ e: eventName, p: JSON.stringify(eventProperties) // Will be encoded by URLSearchParams});// Build the full tracking URL// Note: ttd_puid format is <permutive_api_key>,<permutive_user_id>const params = new URLSearchParams({ ttd_pid: 'dbegppc', ttd_tpi: '1', ttd_puid: `${publicKey},${permutiveUserId}`, ttd_passthrough: passthroughParams.toString(), // Already URL-encoded gdpr: gdpr, gdpr_consent: gdprConsent});const trackingUrl = `https://match.adsrvr.org/track/cmf/generic?${params}`;console.log(trackingUrl);
When this pixel fires, The Trade Desk will redirect to Permutive’s sync endpoint, passing along the decoded passthrough parameters plus the Trade Desk ID. The event will be tracked and the ID sync will occur automatically.
Double Encoding Explained: The ttd_passthrough value is URL-encoded by URLSearchParams. Since the event properties (p) contain JSON that is also URL-encoded, the final result has the JSON double-encoded. This is expected behavior—The Trade Desk will decode it once, and Permutive will decode it again.
GDPR Compliance: Include gdpr=1 and gdpr_consent with the TCF consent string for EU users.