Conversion Tracking

Meta Pixel and Conversion API Setup

The browser pixel alone hasn't been reliable for years. We pair it with a server-side Conversions API feed so Meta still sees the sale, even when Safari and ad blockers don't let it.

+38% Average Event Match Quality lift
2–3wk Typical setup & QA turnaround
0 Events double-counted after dedup
The problem

Your Event Match Quality score is the real story

Meta grades every pixel on how well it can match an event to a real person. A browser-only pixel, blocked cookies and a checkout that doesn't pass first-party data will drag that score down — and a low score means Meta's algorithm is bidding on a fraction of what actually happened.

Most accounts we open still run pixel-only. No Conversions API, no deduplication, no hashed customer data. The fix isn't exotic, it's just rarely done properly the first time.

The fix

What we set up

  • Server-side Conversions API, sending events Meta never sees from the browser
  • Event deduplication between pixel and CAPI, so nothing counts twice
  • Hashed customer data (email, phone) attached to every event for better matching
  • PageView, ViewContent, AddToCart and Purchase mapped to real funnel steps
  • Event Match Quality checked and improved, not just switched on and left
  • Consent Mode wired in so EU traffic doesn't silently stop reporting
Before & after

What changes once CAPI is actually wired in

Same store, same traffic, same ad spend. The difference is what Meta can see once the server — not just the browser — is reporting.

iOS 14.5+ and Safari ITP quietly drop events

A browser-only pixel loses a meaningful share of iOS and Safari traffic before it ever reaches Meta — not because nothing happened, but because the browser never let the pixel see it.

Pixel only Events lost
Pixel + CAPI Recovered server-side

Event Match Quality sits in the "poor" band

Without hashed customer data attached, Meta can't confidently match an event to a person — so it discounts how much it trusts that event when optimising delivery.

Before 4.2 / 10 EMQ
After 7.8 / 10 EMQ

Ad blockers stop the pixel before it fires

A script that visibly looks like a tracking pixel gets blocked by name. A server-side call from your own domain doesn't announce itself the same way.

Pixel only Blocked client-side
Pixel + CAPI Sent from the server
Process

How the setup runs

Audit the current pixel

We check what's firing, what's missing, and where the Event Match Quality score is being lost.

Build the server-side feed

A Conversions API integration matched to your platform, sending events your browser pixel can't.

Deduplicate and QA

Tested with Meta's Events Manager test tool so pixel and CAPI agree, and nothing doubles up.

Hand over documented

What's tracked, how it's matched, and how to check it stays healthy after we're done.

What clients say

Don't just take our word for it

A tag manager migration from years ago had never been finished. Every signup had been counting twice, and nobody had noticed because it was consistent. Finding that paid for the whole engagement.

Brian Foster Marketing Lead · Doze Host

We were told the ads were working while our accountant said otherwise. They were the first people to open the tracking and show us why both things were true at once. The reported number dropped after the fix, then grew for real.

Sarah Mitchell Founder · Online Pilates Classes

I had no idea how much of my reporting was double counted. Now the number on the dashboard is a number I can actually plan against.

Rachel Kim Owner · Lesley Logan
Questions

Common questions

Do we need developer access for the Conversions API?

Usually yes, for the server-side call itself. If you're on Shopify or WooCommerce we can often use a platform integration instead, which needs no custom code.

Will this fix my Event Match Quality score immediately?

The improvement shows within days once the server events start flowing, though the score itself is a rolling average and takes a couple of weeks to fully settle.

Does this replace our existing pixel?

No. CAPI works alongside the browser pixel, not instead of it. Deduplication is what stops the two from double-counting.

Does this help with iOS 14.5+ and Safari's tracking limits?

Yes — that's most of the point. A server-side event doesn't depend on a browser cookie surviving, so it isn't affected by ITP or App Tracking Transparency the same way a pixel is.

Start here

Find out what your account is actually reporting

Send us access and we will come back with a written audit: what is tracked, what is double-counted, what is missing, and what we would change first.

No pitch deck · No lock-in · Findings are yours either way