10 guides · Analytics and CDP
Product analytics is not an ads pixel
A CDP is a pipe. A pixel is a bid. Measurement Protocol, capture, and track still have clocks, ids, and required fields. These pages are the payload the vendor will actually ingest.
Validate a pixel or CAPI All docs
timestamp_micros is 16 digits
GA4 MP needs api_secret and exactly one of measurement_id (G- form) or firebase_app_id. timestamp_micros is 16 digits. Purchase needs currency, value, transaction_id, and items. HTTP 204 is not a schema review.
PostHog returns 200 and drops the event
PostHog documents that a capture missing event or distinct_id still returns 200 and is not ingested. Send ISO 8601 for event time. Do not treat status code as a contract test.
track without an event name still 200s
Segment's HTTP Tracking API track call needs an event name. The HTTP 200 does not check it. anonymousId or userId still have to exist if you want a person, not a floating event.
Amplitude wants milliseconds, not seconds
Amplitude HTTP V2 wants event time in milliseconds. Seconds (10 digits) look like 1970-something. ISO strings belong to other vendors. Date.now() is already milliseconds, for once.
Mixpanel join key is distinct_id
Mixpanel joins on distinct_id. Engage/identify must reuse it. Time is epoch seconds in some Mixpanel APIs and not others; read the endpoint you POST to, not a blog from 2016.
Adobe Analytics sendBeacon still needs a report suite
Adobe Analytics sendBeacon (and the image beacon fallback) still needs the report suite on /b/ss/. s.t() and s.tl() are different. SPA apps that never call s.t() on route change go dark after the first page. This is not a GA4 event.
A CDP is a pipe. A pixel is a bid.
A CDP (Segment and friends) routes events. An ads pixel or CAPI is a bid and attribution pipe. Product analytics is product. One track() call is not automatically all three jobs done well.
Sampling hides the broken 1%
GA4 UI sampling and Mixpanel bookkeeping hide rare broken payloads. QA on 20 events will never see the 1% of Purchases missing currency. Sample raw exports or contract-test fixtures.
DebugView is not production
DebugView, Meta Test Events, and GTM preview are QA surfaces. They are not production. Leaving debug_mode on or test_event_code on trains the wrong graph, or no graph.
Product analytics and ads conversion are different jobs
Product analytics wants funnels and retention. Ads pixels want matchable conversions for bidding. Sharing one Purchase event is fine. Sharing one schema without a map is how both teams think the other is wrong.