Made by Rune Andersen @ Copenhagen, Denmark
Mixpanel logo

Debug Mixpanel in Chrome DevTools

To debug Mixpanel in Chrome DevTools, install the free Event Watcher extension and open its panel: every Mixpanel request is captured the moment it fires, decoded by a dedicated parser into named events, readable parameters, and consent signals, and cross-referenced against the visitor's consent state. Event Watcher has listed Mixpanel under Analytics since v1.0.0, and flags any Mixpanel event that fires without analytics consent.

Event-based product analytics with funnel analysis, retention, and A/B testing.

Last updated:

Category
Analytics
Detected via
Network requests: Event Watcher matches the request URLs this platform sends
Consent category
Analytics / statistics consent: Event Watcher flags Mixpanel activity that fires without it
Dedicated parser
Yes: requests are decoded into named events, parameters, and consent signals, not just raw URLs
Supported since
Event Watcher v1.0.0 (2026-02-20)
Show the URL patterns Event Watcher matches
  • api.mixpanel.com
  • api-eu.mixpanel.com
  • api-in.mixpanel.com
  • mixpanel.com/track
  • mixpanel.com/engage
  • decide.mixpanel.com
  • api-js.mixpanel.com
  • cdn.mxpnl.com
  • mxpnl.com

What Mixpanel traffic looks like

Mixpanel ships events as base64-encoded JSON. The wire format is what makes raw DevTools inspection painful.

Endpoint pattern
api.mixpanel.com/track (EU-residency projects use api-eu.mixpanel.com, India api-in.mixpanel.com; api-js.mixpanel.com appears with newer SDK versions); profile updates go to /engage; decide.mixpanel.com serves SDK config (no events there)
Transport
Base64-encoded JSON in a data parameter, either in an application/x-www-form-urlencoded POST body or in the query string; batched sends put a JSON array in data, so one request can carry many events
Key parameters
event the event name · properties.token project token, Mixpanel's equivalent of a measurement ID · properties.distinct_id the identity key, plus $device_id/$user_id on newer SDKs · dollar-prefixed defaults ($browser, $current_url, $screen_height…) mixed in with your custom properties in the same object

The data parameter decoded, as Event Watcher shows it:

{
  "event": "Signup Completed",
  "properties": {
    "token": "a1b2c3…",
    "distinct_id": "18f2ab…",
    "$device_id": "18f2ab…",
    "$browser": "Chrome",
    "$current_url": "https://example.dk/signup",
    "plan": "pro"
  }
}

Debugging Mixpanel with Event Watcher

  • The Mixpanel parser does the base64 decode for you, across all three transport shapes: JSON body, form-encoded data, query-string data.
  • Batched arrays split into individual events, each showing its event name, distinct_id, and full properties object: "copy the payload, decode it in the console, pretty-print it" becomes clicking an event in the stream.
  • The project token and the region inferred from the endpoint (US / EU / India) surface per event.
  • Filtering the stream to Mixpanel while clicking through a funnel is a fast way to confirm every step actually leaves the browser.

Mixpanel and consent

Analytics consent

The extension checks Mixpanel against the analytics consent category. Mixpanel has opt-out APIs (opt_out_tracking()) but no degraded consent-mode ping: any /track request before an analytics grant is a real pre-consent event, flagged and counted in the violations counter.

Watch for the common half-gated setup: the snippet loads and calls init before consent (setting the mp_ cookie and a distinct_id) while only track calls are deferred. EU data residency changes the endpoint, not the consent obligation.

Common debugging scenarios

  • Events land in the wrong project. Read the decoded token per event. Sites that migrated projects often leave one hardcoded token in an old snippet.
  • Funnels break at identify. Compare distinct_id on events either side of login; if it never changes, the identify() call didn't reach the wire.
  • Duplicate events. Pivot Grouped view by Event Name. Duplicates sharing a distinct_id and arriving milliseconds apart mean double-binding, while duplicates from two scripts are attributed by the Script Tree view.
  • EU residency verification. Confirm hits go to api-eu.mixpanel.com and nothing falls back to the US endpoint.
  • Property missing on some pages. Compare the same event's decoded properties across pages in Grouped view instead of diffing base64 blobs.

See Mixpanel traffic on your own site

Free, no account, runs entirely inside Chrome DevTools.

Add to ChromeFree on the Chrome Web Store

Related guides

More analytics platforms