What we check
In the HTML: the scan looks for signatures of four server-to-server interfaces. Meta Conversions API by the events endpoint or an external_id in the pixel init, TikTok Events API by business-api.tiktok.com, LinkedIn Conversions API by the conversionEvents endpoint, Google Enhanced Conversions by enhanced_conversion or allow_enhanced_conversions. A match means "ok" with the list. No match is a note, never critical.
What the scan cannot see: the API itself. A server container forwarding events to Meta or Google does so without the browser's involvement, and that is exactly its purpose. The scan can only name indicators, not deliver confirmation. Whether a first-party endpoint runs is shown by the server-side tagging finding; whether Enhanced Conversions are switched on in the container, by the Google Ads finding.
Why it matters
The browser pixel measures only whom it reaches: no ad blockers, no Safari with ITP, no rejection in the banner. The Conversions API reports the conversion from the server, with the same event_id, so the platform merges pixel and server event instead of counting twice, and for campaigns optimising on conversions that is the difference between an algorithm that learns and one that guesses. Learning needs data. Whoever enables the API in the ad account alone, without checking the event matching, gets the opposite though: duplicate conversions or discarded ones. How the server container solves that cleanly is covered in the guide server-side tracking with Stape.
Common causes
- Paid campaigns run, but conversion measurement hangs entirely on the browser pixel.
- CAPI was activated in the ad account but sends without a consistent event_id, conversions count twice or get discarded.
- Enhanced Conversions are on in the Google Ads account, but the hashed fields never come out of the tag.
- The site runs no paid campaigns, then the finding is expected and not an error.