Overview
AdsPing is a server-side conversion tracking platform. Drop one script on your site and forward events to Meta, TikTok, Google Ads, and GA4 — bypassing ad blockers and iOS 14.5+ tracking limits.
What is AdsPing?
AdsPing is a server-side conversion tracking platform built for merchants who care about attribution accuracy. You install a single script (pb.js) on your site, configure which destinations to forward to, and AdsPing handles the rest — collecting events, deduplicating browser/server fires, and dispatching to each platform's server-side API with full match quality.
Each event is forwarded through your own backend channel, so ad blockers, iOS 14.5+ tracking restrictions, and third-party cookie deprecation can't silently break your reporting.
Why server-side?
Browser pixels (Meta's fbq, TikTok's ttq, Google's gtag) load JavaScript from the platform's domain. Ad blockers and privacy-focused browsers block those domains by default — Meta's own data shows 30-50% of pixel events get dropped on average. Server- side forwarding bypasses this entirely: events leave your browser through your domain, hit your backend, and get forwarded server-to- server using the platform's API.
- Adblocker-immune. pb.js posts to your own domain; ad blockers can't blanket-block it the way they do facebook.com/tr.
- iOS 14.5+ resilient. Server-side conversions don't depend on the App Tracking Transparency prompt or Safari ITP cookie restrictions.
- Better match quality. Server-side enrichment adds IP, user agent, and hashed user identifiers (email, phone, FBC, FBP, gclid) the browser pixel often misses.
- Deduplication. When you keep the browser pixel alongside server-side, AdsPing fires the same event_id from both channels so platforms count it once but with combined match signals.
How it works
Three objects cover the whole model:
| Object | What it represents | Example |
|---|---|---|
Pixel | One per domain. Has its own subscription, event quota, and install snippet. | acme.com |
Pipeline | A forwarding rule on a pixel: events → one destination with config. | Meta CAPI for Lead events |
Event | A single tracked action (PageView, Lead, Purchase…). Each event_id is unique. | Lead event_id=abc-123 |
A pixel can have many pipelines — e.g. Meta and TikTok forwarding all events, plus a Google Ads pipeline forwarding only Lead. From a visitor's click to the platform's Events Manager, every hop:
Visitor clicks button
↓
pb.js intercepts (form submit / fbq / ttq / auto-tracking)
↓
pb.js POSTs JSON event → adsping-backend (your endpoint, your domain)
↓
Backend validates → stores → enqueues 1 job per pipeline
↓
Worker reads pipeline.config → calls platform API
↓
Platform logs event in Events Manager / Conversions DiagnosticsBrowser/server deduplication
Both Meta and TikTok recommend running the browser pixel and the server API together. AdsPing makes this work without you writing any code: pb.js mints a fresh event_id for every event and sends it on both legs — the browser pixel call (fbq, ttq) and the server-side request. The platform sees two events with the same id, counts them once, and combines the match signals. For Meta and TikTok, pb.js even loads the platform's official browser script for you (only if window.fbq / window.ttq isn't already defined) — one AdsPing script tag gives you complete coverage.
Match quality
Match quality is each platform's estimate of how well the event attaches to a user record. AdsPing maximizes it by:
- Form auto-capture. When pb.js sees a form submit, it harvests email/phone/name/address fields from inputs, hashes them client-side (SHA-256), and forwards as Advanced Matching parameters.
- Click ID capture. pb.js reads
fbclid,gclid,gbraid,wbraid,ttclidfrom the URL and stores them in a first-party cookie. Every event gets the right click ID auto-attached. - Network intercept. If the merchant's own code calls
fbq('init', …, { em, ph }), pb.js mirrors those values into our payload too. - Server enrichment. The backend adds client IP, user agent, and event source URL — fields the browser pixel doesn't always populate.