ads · conversion-tracking

Conversion Tracking Setup

How to set up conversion tracking pixels across ad platforms. This guide covers installation, event configuration, and validation — everything a marketer needs to ensure ad spend is properly attributed.


Why This Matters

Without conversion tracking:

Get tracking right before spending a dollar on ads.


Platform Pixels Overview

Platform Pixel/Tag Name Events API Key Events
Google Ads Google tag (gtag.js) Enhanced Conversions purchase, sign_up, generate_lead
Meta Meta Pixel + CAPI Conversions API Purchase, Lead, ViewContent, AddToCart
LinkedIn Insight Tag Conversions API conversion (URL or event-based)
TikTok TikTok Pixel Events API Purchase, ViewContent, AddToCart, CompleteRegistration
Twitter/X Twitter Pixel - Purchase, SignUp, Download

Google Ads

Install the Google tag

Add to every page, in <head>:

<script async src="https://www.googletagmanager.com/gtag/js?id=AW-XXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'AW-XXXXXXXXX');
</script>

Replace AW-XXXXXXXXX with your Conversion ID from Google Ads > Tools > Conversions.

Set up conversion actions

In Google Ads > Goals > Conversions > New conversion action:

Conversion Category Value Count
Purchase Purchase Dynamic (order value) Every
Sign up / Lead Sign-up Fixed ($X estimated value) One
Demo request Lead Fixed ($X estimated value) One
Free trial start Sign-up Fixed ($X estimated value) One

Fire conversion events

// Purchase
gtag('event', 'conversion', {
  'send_to': 'AW-XXXXXXXXX/CONVERSION_LABEL',
  'value': 99.00,
  'currency': 'USD',
  'transaction_id': 'ORDER-123'
});

// Lead / Sign up
gtag('event', 'conversion', {
  'send_to': 'AW-XXXXXXXXX/CONVERSION_LABEL',
  'value': 50.00,
  'currency': 'USD'
});

Enhanced Conversions

Sends hashed first-party data (email, phone) to improve attribution after cookie restrictions. Enable in Google Ads > Goals > Settings > Enhanced conversions.

gtag('set', 'user_data', {
  'email': 'user@example.com',      // auto-hashed by gtag
  'phone_number': '+11234567890'
});

Google Tag Manager alternative

If using GTM instead of inline gtag.js:

  1. Install GTM container on all pages
  2. Create Google Ads conversion tags in GTM
  3. Set triggers for conversion events (form submissions, purchases)
  4. Use the Data Layer to pass dynamic values (order amount, transaction ID)
  5. Test with GTM Preview mode before publishing

Meta (Facebook/Instagram)

Install the Meta Pixel

Add to every page, in <head>:

<script>
  !function(f,b,e,v,n,t,s)
  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  n.queue=[];t=b.createElement(e);t.async=!0;
  t.src=v;s=b.getElementsByTagName(e)[0];
  s.parentNode.insertBefore(t,s)}(window, document,'script',
  'https://connect.facebook.net/en_US/fbevents.js');
  fbq('init', 'YOUR_PIXEL_ID');
  fbq('track', 'PageView');
</script>

Replace YOUR_PIXEL_ID from Meta Events Manager.

Standard events

// View a product or key page
fbq('track', 'ViewContent', {
  content_name: 'Pro Plan',
  content_category: 'Pricing',
  value: 29.00,
  currency: 'USD'
});

// Lead capture (form submit, demo request)
fbq('track', 'Lead', {
  content_name: 'Demo Request',
  value: 50.00,
  currency: 'USD'
});

// Purchase
fbq('track', 'Purchase', {
  value: 99.00,
  currency: 'USD',
  content_type: 'product',
  contents: [{ id: 'pro-plan', quantity: 1 }]
});

// Add to cart (e-commerce)
fbq('track', 'AddToCart', {
  content_ids: ['SKU-123'],
  content_type: 'product',
  value: 49.00,
  currency: 'USD'
});

Conversions API (CAPI)

Server-side tracking that works alongside the pixel. Required for accurate tracking after iOS 14+ and cookie restrictions.

Set up via:

Key: send the same events from both pixel (browser) AND CAPI (server), with a shared event_id for deduplication.

Aggregated Event Measurement

Required for iOS 14+ tracking. In Events Manager > Aggregated Event Measurement:

  1. Verify your domain
  2. Configure and prioritize your top 8 events in order of business importance
  3. Purchase should typically be #1, Lead #2

LinkedIn

Install the Insight Tag

Add to every page, before </body>:

<script type="text/javascript">
  _linkedin_partner_id = "YOUR_PARTNER_ID";
  window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
  window._linkedin_data_partner_ids.push(_linkedin_partner_id);
  (function(l) {
    if (!l){window.lintrk = function(a,b){window.lintrk.q.push([a,b])};
    window.lintrk.q=[]}
    var s = document.getElementsByTagName("script")[0];
    var b = document.createElement("script");
    b.type = "text/javascript";b.async = true;
    b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
    s.parentNode.insertBefore(b, s);})(window.lintrk);
</script>

Conversion tracking

LinkedIn supports two methods:

URL-based: Fires when someone visits a specific URL (e.g., /thank-you).
Set up in Campaign Manager > Analyze > Conversion Tracking > Create Conversion.

Event-based: Fire manually on specific actions:

window.lintrk('track', { conversion_id: YOUR_CONVERSION_ID });

LinkedIn CAPI

For server-side tracking, LinkedIn offers a Conversions API. Set up via partner integrations (Segment, Tealium) or direct API calls. Deduplicates with the Insight Tag automatically when configured correctly.


TikTok

Install the TikTok Pixel

Add to every page, in <head>:

<script>
  !function (w, d, t) {
    w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];
    ttq.methods=["page","track","identify","instances","debug","on","off",
    "once","ready","alias","group","enableCookie","disableCookie","holdConsent",
    "revokeConsent","grantConsent"],ttq.setAndDefer=function(t,e)
    {t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};
    for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);
    ttq.instance=function(t){for(var e=ttq._i[t]||[],n=0;
    n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e};
    ttq.load=function(e,n){var r="https://analytics.tiktok.com/i18n/pixel/events.js",
    o=n&&n.partner;ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=r,
    ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},
    ttq._o[e]=n||{};var s=document.createElement("script");
    s.type="text/javascript",s.async=!0,s.src=r+"?sdkid="+e+"&lib="+t;
    var a=document.getElementsByTagName("script")[0];
    a.parentNode.insertBefore(s,a)};
    ttq.load('YOUR_PIXEL_ID');
    ttq.page();
  }(window, document, 'ttq');
</script>

Standard events

// View content
ttq.track('ViewContent', {
  content_id: 'pro-plan',
  content_type: 'product',
  content_name: 'Pro Plan',
  value: 29.00,
  currency: 'USD'
});

// Complete registration / sign up
ttq.track('CompleteRegistration', {
  content_name: 'Free Trial'
});

// Purchase
ttq.track('Purchase', {
  content_id: 'pro-plan',
  content_type: 'product',
  value: 99.00,
  currency: 'USD',
  quantity: 1
});

// Add to cart
ttq.track('AddToCart', {
  content_id: 'SKU-123',
  content_type: 'product',
  value: 49.00,
  currency: 'USD'
});

Events API (server-side)

TikTok's Events API works like Meta's CAPI — send the same events from your server for better attribution. Use event_id for deduplication with browser pixel events.

Advanced Matching

Pass hashed user data for better attribution:

ttq.identify({
  email: 'user@example.com',       // auto-hashed
  phone_number: '+11234567890'
});

Validation Checklist

After installing any pixel, verify before going live:

Browser-side checks

Platform-side checks

Debugging tools

Platform Tool
Google Google Tag Assistant, Chrome DevTools Network tab
Meta Meta Pixel Helper (Chrome extension), Events Manager Test Events
LinkedIn Insight Tag Validator in Campaign Manager
TikTok TikTok Pixel Helper (Chrome extension), Events Manager
All GTM Preview Mode (if using Google Tag Manager)

Common Mistakes


When to Use Server-Side Tracking

Browser-only tracking is increasingly unreliable due to:

Use server-side (CAPI/Events API) when:

Server-side is optional when:


Source: https://github.com/coreyhaines31/marketingskills/skills/ads/references/conversion-tracking.md · v2.3.2 · MIT License (c) 2025 Corey Haines.