Delivery Options
- X Pixel: JavaScript universal website tag
- Google Tag Manager: Centralized tag management
- Conversions API: Server-side conversion tracking
- Mobile SDK: App event tracking via third-party MMPs
X Pixel Base Code
Direct Implementation
Install the X Pixel base code in the <head> section of all pages:
<!-- X Pixel Base Code -->
<script>
!function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments);
},s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='https://static.ads-twitter.com/uwt.js',
a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script');
twq('config','PIXEL_ID');
</script>
<!-- End X Pixel Base Code -->
Replace PIXEL_ID with your actual X Pixel ID from Ads Manager.
Event Tracking
PageView
Track page views (recommended for all pages):
<script>
twq('event', 'tw-PIXEL_ID-PageView');
</script>
Purchase
Track completed purchases:
<script>
twq('event', 'tw-PIXEL_ID-Purchase', {
value: '99.99',
currency: 'USD',
transaction_id: 'ORDER_12345',
num_items: '2'
});
</script>
AddToCart
Track cart additions:
<script>
twq('event', 'tw-PIXEL_ID-AddToCart', {
value: '49.99',
currency: 'USD',
content_ids: ['SKU_12345'],
content_name: 'Blue Widget'
});
</script>
CompleteRegistration
Track user signups:
<script>
twq('event', 'tw-PIXEL_ID-CompleteRegistration', {
value: '25.00',
currency: 'USD'
});
</script>
Google Tag Manager Implementation
Create X Pixel Base Tag
- Create new tag: Custom HTML
- Name: "X Pixel - Base Code"
- Paste base code:
<script>
!function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments);
},s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='https://static.ads-twitter.com/uwt.js',
a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script');
twq('config','{{X Pixel ID}}');
</script>
- Trigger: All Pages
- Firing Priority: 1
Create GTM Variable
- Create new variable: Constant
- Name: "X Pixel ID"
- Value: Your Pixel ID (e.g.,
o1234)
Event Tags
Purchase Event:
<script>
twq('event', 'tw-{{X Pixel ID}}-Purchase', {
value: '{{Transaction Value}}',
currency: '{{Currency}}',
transaction_id: '{{Transaction ID}}',
num_items: '{{Product Quantity}}'
});
</script>
Trigger: Custom Event - purchase
Lead Event:
<script>
twq('event', 'tw-{{X Pixel ID}}-SubmitForm', {
value: '50.00',
currency: 'USD'
});
</script>
Trigger: Form Submission - All Forms
Advanced Matching
Include hashed email for improved attribution:
// Hash email client-side
async function hashEmail(email) {
const msgBuffer = new TextEncoder().encode(email.toLowerCase().trim());
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
// Track with advanced matching
async function trackWithAdvancedMatching(email) {
const hashedEmail = await hashEmail(email);
twq('event', 'tw-PIXEL_ID-Purchase', {
value: '99.99',
currency: 'USD',
transaction_id: 'ORDER_12345',
email_address: hashedEmail
});
}
// Usage on confirmation page
trackWithAdvancedMatching('user@example.com');
Consent Management
Load pixel only with user consent:
<script>
// Check for consent
if (window.cookieConsent && window.cookieConsent.advertising) {
// Load X Pixel
!function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments);
},s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='https://static.ads-twitter.com/uwt.js',
a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script');
twq('config','PIXEL_ID');
} else {
console.log('X Pixel blocked - no consent');
}
</script>
Mobile App Integration
X doesn't have native SDK. Use Mobile Measurement Partners:
AppsFlyer
import AppsFlyerLib
AppsFlyerLib.shared().logEvent("af_purchase", withValues: [
AFEventParamRevenue: 99.99,
AFEventParamCurrency: "USD",
"af_channel": "twitter"
])
Adjust
val event = AdjustEvent("abc123")
event.setRevenue(99.99, "USD")
event.addCallbackParameter("network", "twitter")
Adjust.trackEvent(event)
Testing & Validation
X Pixel Helper
- Install X Pixel Helper Chrome extension
- Navigate to your website
- Click extension icon
- Verify pixel is active and events fire
Browser Console
// Check if X Pixel loaded
if (typeof twq !== 'undefined') {
console.log('✓ X Pixel loaded');
// Fire test event
twq('event', 'tw-PIXEL_ID-TestEvent');
} else {
console.error('✗ X Pixel not loaded');
}
Network Tab
- Open Developer Tools → Network tab
- Filter by "twitter" or "ads-twitter"
- Verify requests to
static.ads-twitter.com - Check event parameters
Validation Checklist
- Base code loads on all pages
- Pixel ID is correct
- PageView events fire on all pages
- Conversion events fire at correct moments
- Event parameters pass correct data
- Advanced matching implemented (optional)
- Consent management integrated
- Test with X Pixel Helper
- Verify in Events Manager
- Custom audiences populate (24-48 hours)