No alert ever fired. The events kept shipping. Just one field, missing from 47% of payloads since the Tuesday afternoon theme deploy.
Schema drift is the failure mode nobody alerts on. A frontend engineer drops phone from the checkout payload — for a perfectly defensible PII reason — but never tells the growth team. CAPI keeps firing. Events keep landing. The HTTP 200s look identical to the ones from last week.
Inside Meta, the EMQ score quietly slides from 8.4 to 6.1. The optimization algorithm sees fewer matches, decides your audience is harder to convert, and widens reach. CPA climbs. Everyone blames the creative.
By the time someone notices — usually a weekly performance review with finance pulling backend revenue alongside the Meta dashboard — the learning phase has absorbed three weeks of degraded signal. Resetting it costs roughly four to six weeks of CPA inflation per channel.
The fix is not better ad creative. The fix is a system that knows what your events are supposed to look like, notices when the shape moves, and tells you while there is still a deploy log open.
{
"version_from": 16,
"version_to": 17,
"event_count": 4827, "drifted_count": 2271,
"removed": [
{ "path": "user_data.phone", "pct": 0.47 },
],
"added": [
{ "path": "items.0.product_id", "type": "string" },
],
"type_changes": [
{ "path": "custom_data.value", "from": "number", "to": "string" }
],
"severity": "critical"
}Shopify theme update inlined a new currency formatter that returned the string "USD 129.00" instead of the number 129.
Type change on custom_data.value: number → string in 100% of events. Critical alert at 14:08 UTC, 6 minutes after the deploy.
Theme reverted in 18 minutes. Meta optimization spared ~$11K of bad-signal spend. EMQ rebounded to 8.2 within 36 hours.
A backend migration renamed external_id to user_id silently — the old contract was kept for two weeks then removed.
Removal of external_id in 100% of events. Critical alert fired the same day as the cleanup PR merged.
Klaviyo flow targeting external_id stopped firing for 9 hours instead of 9 days. Field aliased back, audience sync restored, no lost trial-to-paid emails.
Agency-wide PII reduction policy stripped user_data.email and user_data.phone from all clients in one rollout.
Warning fired across all 14 clients within the same 6-hour window. Daily digest grouped them into one report.
Hashed-email pipeline configured before EMQ degraded. Match quality held at 7.9 average instead of falling to ~5. Three weeks of CPA inflation avoided across the portfolio.
Cron at :00 every six hours. Most drifts caught within one cycle of the deploy that caused them.
Webhook URL and recipient list configured per workspace. No middleware, no Zapier.
BFCM and product launches mark the window — info and warning drifts queue, critical still fires.
Every canonical schema is versioned in event_taxonomy_versions. Roll back, audit, replay.
We use essential cookies to keep the site secure and functional. Analytics and third-party tags run only with your consent. See our Cookie Policy.
We use essential cookies to keep the site secure and functional. Analytics and third-party tags run only with your consent. See our Cookie Policy.