Mixpanel as a destination

Send flow (survey) events from getuserfeedback.com into Mixpanel so responses live alongside your product analytics.

Last reviewed

Mixpanel as a destination

Use this when flow responses should land in Mixpanel alongside your product events.

Every flow response and flow lifecycle event arrives in Mixpanel as a track call against the same distinct_id Mixpanel already knows for the user.

1. Get a Mixpanel project token

  1. In Mixpanel, open Settings → Project Settings.
  2. Copy the Project Token.
  3. Note your project's region:
    • US (default): https://api.mixpanel.com
    • EU: https://api-eu.mixpanel.com
    • India: https://api-in.mixpanel.com

2. Create the integration

  1. Open Integrations and click New integration.
  2. Under Data out, choose Mixpanel.
  3. Click Continue.
  4. On the detail page, paste the Project Token.
  5. Pick the Destination endpoint for your project's region.
  6. Click Save configuration.

Flow events start flowing on the next response.

Event payload

We emit four flow events:

Event nameWhen it fires
Flow ViewedA flow was shown to a user.
Flow DismissedThe user dismissed a flow without submitting.
Flow CompletedThe user completed a flow.
Flow Action SucceededA registered action handler returned or resolved successfully, or a supported navigation was accepted.

You can rename or disable each event in the Events section of the integration detail page — match your own naming convention (e.g. flow_completed), or turn off events you don't want forwarded.

Each enabled event arrives in Mixpanel as a track call:

{"event": "Flow Completed","properties": {"token": "<your project token>","distinct_id": "user_123","$insert_id": "gx_flow_completed:v1:flcmp_…","time": 1747130040,"gx_event_schema": "gx_flow_completed","gx_event_schema_version": 1,"gx_flow_completion_id": "flcmp_…","gx_flow_id": "flow_…","gx_flow_version_id": "flow_version_…","gx_flow_version_number": 3,"gx_flow_run_id": "flow_run_…","gx_flow_surface": "web_page","traits": { "email": "user@example.com" }}}

$insert_id is set per event so Mixpanel can dedupe replays. Don't strip it in a proxy.

See Events for more on the event shape and how to send your own.

Properties we send

The Mixpanel payload has event at the top level and the rest inside properties:

PropertyAlways sent?Notes
tokenAlwaysThe project token from your integration.
distinct_idAlwaysThe user identifier resolved by getuserfeedback.com.
$insert_idAlwaysStable per event. Mixpanel uses it for dedupe.
timeAlwaysUnix seconds when the event occurred.
gx_event_schemaAlways for versioned GX eventsStable machine-readable event name.
gx_event_schema_versionAlways for versioned GX eventsPositive integer version of the event contract.
gx_flow_idOn v1 flow lifecycle eventsThe flow the event relates to.
gx_flow_version_idOn v1 flow lifecycle eventsThe exact flow version that produced the event.
gx_flow_version_numberOn v1 flow lifecycle eventsHuman-readable flow version number.
gx_flow_run_idOn v1 flow lifecycle eventsCorrelates events from the same flow run.
gx_flow_surfaceOn v1 flow lifecycle eventswidget or web_page.
gx_flow_completion_idOn Flow Completed v1Stable identity for the completed flow.
traitsWhen availableProfile traits known at the time, e.g. email.
identitiesAlwaysThe identifiers we resolved against.
page_pathWhen availablePage the event happened on.
page_referrerWhen availableReferrer at the time of the event.
localeWhen availableBrowser locale, e.g. en-US.

These GX properties describe version 1. A future version keeps the schema name and version but may use a different property shape.

When a successful submission does not include the Flow-run coordinates needed for version 1, Mixpanel receives the legacy completion shape instead. That fallback uses response_id and flow_id when available and does not include the versioned GX envelope.

Identity

distinct_id is taken from the user's resolved userId, or anonymousId if no userId is known yet. If you also use the getuserfeedback.com widget on the same product, the same distinct_id is used everywhere, so events land on the existing Mixpanel user profile instead of creating a new one.

Delivery and retries

If Mixpanel returns a retryable error (5xx, 429, or a transient network failure), we retry the event with exponential backoff: 1 minute, 2, 4, 8, 16, 32, 64 minutes, then a final attempt up to 6 hours later. After 8 attempts an event stops retrying.

Permanent errors (4xx like an invalid Project Token) fail immediately without retries. Each event has a stable $insert_id, so Mixpanel dedupes retries within its 7-day window.

What can break

  • 401 from Mixpanel. The Project Token is wrong or belongs to a different project. Copy it again from Mixpanel Project Settings.
  • No events in Live View. Wrong region. Pick the endpoint that matches your project's region — Mixpanel does not forward traffic across regions.
  • Integration paused. Paused integrations don't deliver. Resume from Integrations.
  • Events look duplicated. Mixpanel dedupes on $insert_id for seven days; older replays can create duplicates. We set $insert_id automatically per event — preserve it through any relay.

Next