GrowReach Tracking Pixels — Research & Implementation Guide

Date: August 17, 2026 Author: CRO Agent (GrowReach) Scope: Tracking pixels for all major social/ad platforms, implementation guide for developers, ongoing management, data accuracy Primary analytics: PostHog (EU Cloud, full suite) + Google Tag Manager (GTM-MQDVLQ6P) + GA4 (G-2DSCDB28FB) + Google Search Console


Table of Contents

  1. What Tracking Pixels Are (and Why They Matter)
  2. Brainstorm: Requirements & Best Practices (Read This First)
  3. Essential Pixel List — All Major Platforms
  4. Recommended Architecture: PostHog CDP + GTM, Not 10 Raw Pixels
  5. Implementation Guide for Developers
  6. Ongoing Management & Maintenance
  7. Ensuring Accurate Data Collection
  8. Launch Checklist

1. What Tracking Pixels Are (and Why They Matter)

The short version

A tracking pixel is a tiny piece of JavaScript (historically a 1×1 transparent image) that a platform (Meta, TikTok, Reddit, etc.) gives you to drop on your website. When a visitor loads a page or performs an action, the pixel fires and tells the platform: “Someone visited this page / clicked this button / signed up.”

What each pixel actually does

CapabilityWhat it enables
PageView / Visit trackingPlatform knows someone landed on your site
Click trackingPlatform knows which ad click brought them (via click IDs like fbclid, ttclid, gclid, sccid)
Conversion trackingPlatform knows when a visitor signed up / paid — feeds its optimization algorithms
Audience buildingPlatform builds a list of “people who visited your site” → lookalike/similar audiences
RetargetingYou can show ads to people who visited but didn’t convert
Scroll depth / engagementSome pixels (or your analytics tool) can track how far people scroll, time on page, etc.

Client-side vs server-side (critical distinction in 2026)

Client-side pixel (browser)Server-side / Conversions API
How it worksJS snippet in <head> fires from the visitor’s browserYour backend sends events directly to the platform’s API
Blocked byAd blockers, iOS ATT, ITP, browser privacyMuch harder to block
Data loss30–40% in 2026 (iOS ATT, ITP, ad blockers)Near-zero
PII matchingLimited (browser cookies)Full (hashed email, phone, name)
Best forPageView, standard eventsConversions, purchase, signup, lookalike audiences

The 2026 reality: client-side pixels alone lose 30–40% of conversion data. Every serious advertiser runs both — client-side for standard events, server-side (Conversions API) for conversions with hashed PII. This is exactly what PostHog’s CDP destinations give you.

Why GrowReach specifically needs this

  • Reddit is already your #2 traffic source (13.5%) — but you can’t retarget or build lookalikes from it because no Reddit pixel exists
  • You’re in price discovery (49/$69) — you need conversion data flowing to ad platforms before you scale spend
  • Your goal is ~100% visitor → signup/email — pixels let you build audiences of “visited but didn’t sign up” for retargeting
  • PostHog already captures everything (visits, clicks, scroll, exceptions) — you don’t need pixels for analytics; you need them for ad platform optimization and audience building

2. Brainstorm: Requirements & Best Practices

The user asked to brainstorm requirements and best practices before drafting the guide. This section is that brainstorm — the decisions that shape everything below.

2.1 What do we actually need to track?

DataWhere it lives todayWhere it should flow
Visits, pageviews, scroll depth, clicks, sessionsPostHog ✅PostHog (already done)
Conversions (signup, trial, paid)PostHog (partial — no custom user_signed_up event)PostHog + every ad platform
Ad click attribution (which ad drove the visit)PostHog (UTM missing on 99% of traffic ⚠️)PostHog + ad platforms
Lookalike audience seedsNowhere ❌Ad platforms (via pixels/CAPI)
Retargeting listsNowhere ❌Ad platforms

Key decision: We are NOT installing pixels to replace PostHog. PostHog stays the single source of truth for analytics. Pixels exist to (a) feed ad-platform optimization, (b) build audiences, (c) enable lookalikes.

2.2 Requirements brainstorm

  1. Single source of truth — PostHog remains the analytics backbone; pixels are outputs, not a second analytics system
  2. Minimal page bloat — 10 raw pixels in <head> = slow site + more breakage. Use PostHog CDP destinations (server-side) + GTM (client-side) instead
  3. Server-side first for conversions — signup/paid events go via Conversions API (Meta CAPI, TikTok Events API, Reddit CAPI, LinkedIn CAPI, Snapchat CAPI) with hashed PII for match quality
  4. Client-side only where required — some platforms (X/Twitter, Pinterest, Bing, Quora) have no PostHog destination; those get lightweight GTM tags
  5. Consent-aware — EU traffic is 37.6% of your visitors (India 37.6%, US 16.8%). GDPR/Consent Mode V2 compliance is non-negotiable
  6. Event taxonomy must be fixed first — PostHog has no custom user_signed_up event; ad platforms need clean, consistent event names
  7. UTM tracking must be fixed — 99% of traffic has no UTM. Ad platforms can’t attribute without click IDs; you can’t measure campaigns without UTMs
  8. Deduplication — when both client-side pixel AND server-side CAPI fire, platforms double-count unless event_id matches. PostHog destinations handle this via {event.uuid}
  9. Test before launch — every destination has a test mode; use it before sending real traffic
  10. Documentation — event names, pixel IDs, access tokens, and owners must be documented (this guide + a tracking plan doc)

2.3 Best practices brainstorm

PracticeWhy
Use the same Pixel ID for browser and server eventsMeta/TikTok dedupe on this; mismatched IDs = double counting
Hash PII (SHA-256, lowercase, trimmed) before sending server-sidePlatforms require it; never send raw PII
Send event_id in both client and server eventsDedup rate ≥90% target
Filter events in PostHog destinations — only send conversions, not every autocapture clickAd platforms charge/limit event volume; noise hurts optimization
Identify before convertingPostHog destinations use person properties at event time — if identify() fires after the conversion event, email/phone won’t be attached (documented PostHog FAQ)
Consent Mode V2 (Advanced)EEA enforcement since Jul 21, 2025; Basic mode loses ~25% of EEA conversion signal
Monitor EMQ (Meta Event Match Quality) ≥ 8.0Below 6.0 = lookalikes and optimization degrade badly
Test events with platform test codes before going liveAvoid polluting real data
One owner per platformPixels rot when nobody owns them

2.4 The “which platforms” decision

GrowReach is a B2B-ish SaaS (AI engagement automation for LinkedIn/Reddit). Priority ranking:

PriorityPlatformWhy
🔴 P0Meta (Facebook/Instagram)Largest audience pool, best lookalike engine, CAPI mature
🔴 P0RedditAlready your #2 traffic source — retarget + lookalike from real visitors
🔴 P0Google AdsSearch intent + YouTube; GA4/GTM already installed
🟡 P1LinkedInB2B fit (your ICP is LinkedIn users), expensive but precise
🟡 P1TikTokYounger audience, strong engagement; CAPI mature
🟢 P2X (Twitter)Niche but relevant for SaaS/tech audience
🟢 P2PinterestLower priority for B2B SaaS, but cheap lookalikes
🟢 P2Bing/Microsoft AdsCheap search traffic, easy via GTM
⚪ P3SnapchatOnly if you target younger demographics
⚪ P3QuoraNiche; only if you advertise there

3. Essential Pixel List

PlatformPostHog destinationWhat you need from platformClient-side pixel needed?
Meta (FB/IG)Meta Ads ConversionsPixel ID + Access Token (CAPI)Optional (PostHog sends server-side; add Meta Pixel via GTM only if you want browser-side dedup)
TikTokTikTok Ads ConversionsPixel ID + Access Token (Events API)Optional
RedditReddit Pixel (3rd-party cookie) or Reddit Conversions API (recommended)Pixel ID (Pixel) or Account ID + Conversion Access Token (CAPI)Pixel destination uses 3rd-party cookies — prefer CAPI
LinkedInLinkedIn Ads ConversionsOAuth + Account ID + Conversion RuleOptional
SnapchatSnapchat Ads ConversionsOAuth + Pixel IDOptional
Google AdsGoogle Ads Conversions (experimental)OAuth + Customer ID + conversion actionNo — use GA4/GTM for Google Ads instead (see 3.2)

3.2 Platforms WITHOUT PostHog destinations (client-side via GTM)

PlatformPixel/tagHow to add (GTM)Notes
Google AdsGoogle Ads conversion tag + Enhanced ConversionsVia GA4 (already installed) or GTM tagYou already have GA4 (G-2DSCDB28FB) — link GA4→Google Ads, enable Enhanced Conversions
X (Twitter)X Pixel (Universal Website Tag)GTM custom HTML or X templateX has no PostHog destination; GTM is the cleanest path
PinterestPinterest TagGTM templateNo PostHog destination
Microsoft/BingUET (Universal Event Tracking) tagGTM templateNo PostHog destination; cheap search traffic
QuoraQuora PixelGTM custom HTMLOnly if you advertise on Quora

3.3 What about scroll depth, heatmaps, etc.?

NeedToolStatus
Scroll depthPostHog (autocapture + custom events)✅ Already have
HeatmapsPostHog Heatmaps (part of suite) or Hotjar/ClarityPostHog has heatmaps; enable if not already
Session replayPostHog Session Replay✅ Already have (verify enabled)
Click trackingPostHog autocapture✅ Already have
Ad platform conversion dataPixels/CAPI above❌ This is the gap this guide fills

Important: You do NOT need pixels for scroll depth or heatmaps — PostHog does that. Pixels are for ad platforms.


                    ┌─────────────────────────────────────┐
                    │         growreach.app (browser)      │
                    │  PostHog JS (autocapture, identify)  │
                    │  GTM (GTM-MQDVLQ6P)                   │
                    │    ├─ GA4 (G-2DSCDB28FB)             │
                    │    ├─ X Pixel, Pinterest, Bing UET    │
                    │    └─ (optional) Meta/TikTok pixels  │
                    └──────────────┬──────────────────────┘
                                   │ events (pageview, signup, paid)
                                   ▼
                    ┌─────────────────────────────────────┐
                    │            PostHog (EU)             │
                    │  Single source of truth + CDP       │
                    └──────┬──────────┬──────────┬────────┘
                           ▼          ▼          ▼
              ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
              │ Meta CAPI    │ │ TikTok API   │ │ Reddit CAPI  │
              │ LinkedIn CAPI│ │ Snapchat CAPI│ │ Google Ads   │
              └──────────────┘ └──────────────┘ └──────────────┘

Why this architecture:

  • One integration point (PostHog) instead of 10 raw pixels
  • Server-side events survive ad blockers, iOS ATT, ITP (recover the 30–40% loss)
  • Hashed PII (email, phone, name) attached automatically from PostHog person properties → high match quality → better lookalikes
  • GTM handles the stragglers (X, Pinterest, Bing) that PostHog doesn’t support
  • GA4/GTM already installed — Google Ads path is nearly free

5. Implementation Guide for Developers

Phase 0 — Pre-flight (do this first, ~1 day)

0.1 Fix the event taxonomy in PostHog

Ad platforms need clean conversion events. Define and implement:

EventWhen it firesProperties to include
user_signed_upSignup form submitted successfullyemail, first_name, last_name, plan (if chosen), $current_url
free_plan_purchasedFree plan activatedemail, plan
paid_plan_purchasedPaid plan chargedemail, plan, value, currency
linkedin_account_connectedLinkedIn OAuth successemail
commenting_voice_configuredVoice/persona configuredemail

Critical: call posthog.identify() with email + name BEFORE firing conversion events. PostHog destinations read person properties at event-processing time — if identify comes after, the ad platform gets no PII and match quality collapses (this is the #1 documented PostHog destination pitfall).

// Correct order:
posthog.identify(user.id, { email: user.email, first_name: user.first_name, last_name: user.last_name });
posthog.capture('user_signed_up', { plan: 'free', value: 0, currency: 'USD' });

0.2 Fix UTM / click-ID capture

  • Add UTM parameters to every outbound campaign link (PostHog captures $initial_utm_source etc. automatically)
  • PostHog automatically captures fbclid, ttclid, gclid, sccid as person properties ($initial_fbclid, etc.) — verify these are present in your PostHog person properties. The Meta/TikTok/Snapchat destinations read them directly.
  • If you serve EU visitors (you do — 37.6% India, but EU exists), implement a consent banner that sets posthog.opt_out_capturing() / GTM consent signals
  • PostHog destinations should be gated on consent for PII-bearing events
  • Use Advanced Consent Mode in GA4/GTM (Basic loses ~25% of EEA conversion signal)

0.4 Gather platform credentials

PlatformCredentials neededWhere to get them
MetaPixel ID + Access Tokenbusiness.facebook.com → Events Manager → Settings → Conversions API
TikTokPixel ID + Access Tokenads.tiktok.com → Events Manager
RedditAccount ID + Conversion Access Tokenads.reddit.com → Events Manager → Conversion Access Token
LinkedInOAuth + Account ID + Conversion Rulelinkedin.com/campaignmanager → Conversion tracking
SnapchatOAuth + Pixel IDbusiness.snapchat.com → Pixel
Google AdsOAuth + Customer IDads.google.com → Settings

Phase 1 — PostHog CDP destinations (server-side, ~2–3 days)

General pattern for each (identical UI flow):

  1. PostHog → Data pipeline tab → Destinations tab
  2. Search for the destination (e.g., “Meta Ads Conversions”) → + Create
  3. Paste credentials (Pixel ID, Access Token, etc.)
  4. Set event/property filters — ONLY send conversion events (user_signed_up, paid_plan_purchased, etc.). Do NOT send all autocapture events — noise hurts ad-platform optimization and burns event volume
  5. Create & enable → use the built-in test interface → verify events arrive in the platform’s Events Manager
  6. Monitor the metrics/logs tabs

5.1 Meta Ads Conversions

  1. Create destination in PostHog (search “Meta Ads Conversions”)
  2. Get Pixel ID + Access Token from Meta Events Manager (Settings → Conversions API → Generate access token)
  3. Configure:
    • Access token — from Meta
    • Pixel ID — same ID you’d use for browser pixel
    • Event ID{event.uuid} (default — enables dedup)
    • Event source URL{event.properties.$current_url}
    • Event time{toInt(toUnixTimestamp(event.timestamp))}
    • Action sourcewebsite
    • User data — default template already hashes em, fn, ln, fbc, client_user_agent from person properties
  4. Filter: event == 'user_signed_up' OR event == 'paid_plan_purchased'
  5. Test with Meta’s Test Event Code first, then remove it
  6. Verify in Meta Events Manager → Test Events → check EMQ ≥ 8.0

5.2 TikTok Ads Conversions

  1. Create destination (search “TikTok Ads Conversions”)
  2. Get Pixel ID + Access Token from TikTok Events Manager
  3. Default template hashes email, phone, name, geo, and sends ttclid — keep defaults
  4. Filter: conversion events only
  5. Test in TikTok Events Manager → Test Events

Two options:

  • Reddit Pixel destination — uses 3rd-party cookies (⚠️ blocked by ITP/ad blockers, and Reddit itself warns about it)
  • Reddit Conversions API destination — server-side, no cookies, better match quality → use this one
  1. Create destination (search “Reddit Conversions API”)
  2. Get Account ID from ads.reddit.com (may include t2_ prefix)
  3. Create a Conversion Access Token (Reddit Ads → Events Manager → Conversion Access Token)
  4. Default template sends hashed IP, email, user agent, screen dimensions
  5. Filter: conversion events only
  6. Test in Reddit Events Manager

5.4 LinkedIn Ads Conversions

  1. Create destination (search “LinkedIn Ads Conversions”)
  2. Connect LinkedIn Ads account via OAuth
  3. Select Account ID (9 digits) and create/select a Conversion Rule in LinkedIn Campaign Manager
  4. Default template sends user IDs + user info (hashed)
  5. Filter: conversion events only
  6. Test in LinkedIn Campaign Manager → Conversion tracking

5.5 Snapchat Ads Conversions

  1. Create destination (search “Snapchat Ads Conversions”)
  2. Connect Snapchat Business account via OAuth, get Pixel ID
  3. Default template hashes email, phone, name, geo, sends sc_click_id
  4. Filter: conversion events only
  5. Test in Snapchat Business Manager

5.6 Google Ads Conversions (experimental — use GA4 path instead)

PostHog’s Google Ads destination is experimental and unsupported. Recommended path: you already have GA4 + GTM. Do this instead:

  1. In GA4 → Admin → Google Ads linking → link your Google Ads account
  2. In Google Ads → Goals → Conversions → create conversion actions (Signup, Purchase)
  3. Enable Enhanced Conversions (hashed first-party data → ~10% uplift)
  4. Import GA4 conversions into Google Ads (auto-import or manual)
  5. GA4 → Google Ads auto-tagging sends gclid automatically

Phase 2 — GTM client-side pixels (platforms without PostHog destinations, ~1 day)

All of these go through GTM (GTM-MQDVLQ6P) — no code deploys needed:

5.7 X (Twitter) Pixel

  1. X Ads → Conversion tracking → create pixel → copy the pixel ID
  2. GTM → Tags → New → Tag type “X Universal Website Tag” (or Custom HTML with the snippet)
  3. Trigger: All Pages
  4. Add conversion events: GTM → new tag → X tag with event name (e.g., signup) → trigger on signup success

5.8 Pinterest Tag

  1. Pinterest Ads → Conversions → Tag → copy tag ID
  2. GTM → Tags → New → Pinterest Tag template
  3. Trigger: All Pages
  4. Add signup / checkout events on conversion triggers

5.9 Microsoft (Bing) UET

  1. Microsoft Advertising → Tools → UET tag → create → copy UET tag ID
  2. GTM → Tags → New → Bing UET template
  3. Trigger: All Pages
  4. Add conversion goals in Microsoft Advertising

5.10 Quora Pixel (only if advertising on Quora)

  1. Quora Ads → Conversions → Pixel → copy pixel code
  2. GTM → Tags → New → Custom HTML with Quora snippet
  3. Trigger: All Pages

Phase 3 — Verification (half day)

CheckToolPass criteria
Meta events arriveMeta Events Manager → Test EventsAll conversion events appear, EMQ ≥ 8.0
TikTok events arriveTikTok Events ManagerEvents appear with hashed PII
Reddit events arriveReddit Events ManagerEvents appear
LinkedIn events arriveLinkedIn Campaign ManagerConversions appear
Dedup workingMeta Events Manager → DiagnosticsDedup rate ≥ 90%
GTM tags fireTag Assistant / GTM Preview modeX, Pinterest, Bing fire on all pages
GA4 → Google AdsGoogle Ads → ConversionsImported conversions appear (6–48h)
No double countingCompare PostHog event count vs platform countWithin expected server-side delta

6. Ongoing Management & Maintenance

6.1 Monthly health check (30 min)

TaskFrequencyOwner
Check PostHog destination metrics/logs tabs for errorsWeeklyDev
Verify EMQ in Meta Events Manager ≥ 8.0MonthlyMarketing
Check dedup rate ≥ 90%MonthlyDev
Verify server-side hit ratio ≥ 80% of client-sideMonthlyDev
Test one event end-to-end per platformMonthlyDev
Review event taxonomy — no renamed/removed eventsQuarterlyDev + Marketing
Rotate access tokens (Meta, TikTok, Reddit)QuarterlyDev
Check consent banner still gates PII eventsQuarterlyDev

6.2 Access token rotation

  • Meta, TikTok, Reddit access tokens expire — set calendar reminders
  • Store tokens in PostHog destination config; when rotating, update in PostHog (not in code)
  • Never commit tokens to the repo

6.3 What happens when you change the site

  • New pages: GTM tags fire automatically (All Pages trigger) — no action needed
  • New conversion events: add to PostHog destination filters + platform conversion rules
  • New platform: check if PostHog has a destination first (preferred); else GTM tag
  • PostHog destination auto-disable: PostHog quarantines destinations that error repeatedly — check the metrics tab weekly, re-enable in UI after fixing

6.4 Ownership

PlatformOwner (suggested)
PostHog destinations (all)Dev lead
Meta / TikTok / Reddit accountsMarketing lead
GTM containerDev lead
GA4 / Google AdsMarketing lead

7. Ensuring Accurate Data Collection

7.1 The five accuracy killers (and fixes)

KillerFix
No event_id dedup → double countingPostHog destinations default to {event.uuid} — keep it. Never change it
Identify after conversion → no PII attachedidentify() before capture() of conversion events (see Phase 0.1)
Sending all events → noise + volume burnFilter destinations to conversion events only
Raw PII → platform rejects or degradesPostHog templates hash automatically — don’t override with raw values
No UTM/click IDs → zero attributionAdd UTMs to all links; verify $initial_fbclid/ttclid/gclid/sccid in PostHog person properties

7.2 Event naming convention

  • Canonical, lowercase, snake_case: user_signed_up, paid_plan_purchased
  • Same name in PostHog, Meta, TikTok, Reddit, LinkedIn (map via destination config)
  • Never rename in transit — platforms dedupe on event name + event_id
  • Version custom params if schema changes (cx_segment, cx_funnel_step)

7.3 PII hashing discipline

FieldNormalizationHash
Emaillowercase + trimSHA-256
PhoneE.164 (+15551234567)SHA-256
First/last namelowercase + trimSHA-256
City/state/ziplowercase + trimSHA-256
  • Never hash already-hashed values (double-hashing breaks matching)
  • Never send plain PII server-side
  • PostHog destination templates do this automatically — only touch if you customize the Hog code

7.4 Testing protocol (every new destination)

  1. Use platform test event code (Meta Test Event Code, TikTok test mode, etc.)
  2. Fire a real conversion in staging
  3. Verify in platform Events Manager
  4. Remove test code
  5. Fire one real conversion in production
  6. Verify again + check dedup rate after 24h

7.5 Data quality KPIs

KPITarget
Meta EMQ (Purchase)≥ 8.0
Dedup rate≥ 90%
Server-side / client-side hit ratio80–120%
UTM coverage≥ 95% of paid traffic
Conversion event latency< 5 min

8. Launch Checklist

Pre-launch

  • user_signed_up + paid_plan_purchased events implemented in PostHog
  • identify() fires before conversion events
  • UTMs on all campaign links
  • Consent Mode V2 (Advanced) live
  • Meta Pixel ID + Access Token obtained
  • TikTok Pixel ID + Access Token obtained
  • Reddit Account ID + Conversion Access Token obtained
  • LinkedIn OAuth + Conversion Rule created
  • Snapchat OAuth + Pixel ID obtained (if P2+)
  • Google Ads linked to GA4, Enhanced Conversions enabled

Launch

  • PostHog destinations created (Meta, TikTok, Reddit, LinkedIn, Snapchat)
  • Destination filters set to conversion events only
  • GTM tags added (X, Pinterest, Bing)
  • All destinations tested with test codes
  • Test codes removed

Post-launch (48h)

  • EMQ verified ≥ 8.0
  • Dedup rate ≥ 90%
  • Events visible in all platform Events Managers
  • GA4 → Google Ads conversions imported (6–48h)
  • Monthly health check calendar set

Appendix B — Current site instrumentation (verified Aug 17, 2026)

ToolStatusID
PostHog (EU)✅ Installedeu.i.posthog.com
Google Tag Manager✅ InstalledGTM-MQDVLQ6P
GA4✅ InstalledG-2DSCDB28FB
Google Search Console✅ (per Rahul)
Meta Pixel❌ Not installed
TikTok Pixel❌ Not installed
Reddit Pixel/CAPI❌ Not installed
LinkedIn Insight Tag❌ Not installed
X Pixel❌ Not installed
Pinterest Tag❌ Not installed
Bing UET❌ Not installed
Snapchat Pixel❌ Not installed