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.
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.
- Meta Conversions API
- Shared event ID deduplication
- Explicit response-status checks
- Cloudflare Workers and Pages Functions
- Background dispatch after response
- AWS Lambda where the stack is already there
- SHA-256 hashing before transmission
- Locale-aware phone and email normalisation
- Null rather than a fabricated identifier
- Server-side event-name allowlist
- Request body size caps in bytes
- Rate limiting on public tracking endpoints
- Platform test-event tooling
- Automated tests over normalisation and payloads
- Typechecked edge functions
- 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.
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
Real projects, real results
Ravina Square: Launch Stack From Zero
Conversion tracking, bilingual RTL product page, competitor teardown, 72-prospect outbound list. The audit found the live site advertising units that do not exist.
Event-Driven Ticketing Platform
Billions of events/year, 40+ theatre brands, 100x DynamoDB throttling cut, 99.99% uptime
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.
Complete infrastructure analysis
30-day implementation plan
Senior engineer recommendations