Skip to main content

Most conversion tracking is quietly wrong.

Events counted twice, events fired from the wrong pages, phone numbers that hash to nothing. We audit what you are sending today, then build the server-side integration that makes the number trustworthy enough to spend against.

Deduplicated browser and server events
Dispatched off the critical path
Your pixel, your token, your repo

The number looks fine. That is the problem.

Broken tracking does not throw an error. It reports a plausible figure and you optimise toward it.

Counted twice

The pixel and the server both report the same conversion because nothing ties them together. Reported cost per result halves, the campaign looks like it is working, and spend scales against a number that was never real.

Fired from the wrong pages

A catch-all route renders the homepage and the homepage fires a conversion. On one site we audited, a single event was firing from 35 different URLs. Every audience built on it was mostly people who scrolled past a banner.

Matched to nobody

Contact details normalised wrongly still hash, still transmit, and still match zero people. The platform reports events received and attributes none of them, so the failure never surfaces as an error.

What we build.

An audit of what you fire today, then the integration that replaces it. Engineering work, delivered into your repository and your ad account.

The audit

Every event you currently fire, mapped to the pages that fire it and the identity fields it carries. This is where the double counting, the catch-all routes, and the identifiers that match nobody surface. It is the cheapest day in the engagement and usually the one that explains the last campaign.

Server-side events

Conversions API integration running on the edge, sharing one event ID with the browser pixel so the platform deduplicates rather than double counts. Dispatched in background execution after the response is returned, with explicit status checks on the platform response, because a rejected event returns an error status rather than throwing and a plain try/catch reports success forever.

Identity and consent

Contact details normalised to the platform's expected form and hashed before they leave your system, with locale-aware digit handling and no fabricated values when input does not fit. Consent wording reviewed against what you are about to send, in every language the site serves, and corrected in the same release.

The stack.

No tag manager sprawl and no third-party middleman holding your data. It runs on infrastructure you already own.

Server events
  • Meta Conversions API
  • Shared event ID deduplication
  • Explicit response-status checks
Runtime
  • Cloudflare Workers and Pages Functions
  • Background dispatch after response
  • AWS Lambda where the stack is already there
Identity
  • SHA-256 hashing before transmission
  • Locale-aware phone and email normalisation
  • Null rather than a fabricated identifier
Hardening
  • Server-side event-name allowlist
  • Request body size caps in bytes
  • Rate limiting on public tracking endpoints
Verification
  • Platform test-event tooling
  • Automated tests over normalisation and payloads
  • Typechecked edge functions
Ownership
  • Your pixel and dataset
  • Your access token as a platform secret
  • Your repository

Tracking is one layer. The events run on Cloudflare Workers or AWS serverless, and the pages that fire them usually need the front end looked at too, so the measurement and the thing being measured get built together rather than bolted on afterwards.

What the last one found.

Measured on a property launch in Egypt, built from nothing in a single engagement.

35 → 2
URLs firing one event
A conversion event fired by every catch-all route, scoped back to the pages where it means something
0
Arabic numbers matching
Arabic-Indic digits hash to an empty string without folding, so every Arabic-entered phone matched nobody
102
Automated tests
Written over normalisation, payload shape, and failure paths on a codebase that had none
5
Live site corrections
Unit sizes, delivery date, an implied price, the project name in the static head, and a sitemap pointing at example.com

There is no campaign performance figure here on purpose. At the time of writing that client has not spent anything, so any number we quoted would be someone else's. The full case study is here.

Common questions.

Because the browser pixel is the least reliable path you own. Ad blockers remove it, iOS restricts the cookies it depends on, and a slow or failed third-party script simply drops the event. A server event leaves your infrastructure, so it arrives whether or not the visitor's browser cooperated. The point is not to replace the pixel. It is to stop treating the browser as the only witness to a conversion that your own backend already knows about.

Still have questions? Book a call

Ready to Ship 10x Faster?

Every engagement starts with our FREE 48-hour AWS Architecture Diagnostic. We'll analyze your setup, identify bottlenecks, and create your custom 30-day roadmap. Completely free.

Free Assessment

Complete infrastructure analysis

Custom Roadmap

30-day implementation plan

Expert Insights

Senior engineer recommendations

Response within 2 hours · No spam · Direct access to senior engineers

Zero Risk
48-Hour Delivery
Expert Analysis
M
S
C
T
47+ projects shipped for teams in 6+ countries