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
- In Mixpanel, open Settings → Project Settings.
- Copy the Project Token.
- Note your project's region:
- US (default):
https://api.mixpanel.com - EU:
https://api-eu.mixpanel.com - India:
https://api-in.mixpanel.com
- US (default):
2. Create the integration
- Open Integrations and click New integration.
- Under Data out, choose Mixpanel.
- Click Continue.
- On the detail page, paste the Project Token.
- Pick the Destination endpoint for your project's region.
- Click Save configuration.
Flow events start flowing on the next response.
Event payload
We emit four flow events:
| Event name | When it fires |
|---|---|
Flow Viewed | A flow was shown to a user. |
Flow Dismissed | The user dismissed a flow without submitting. |
Flow Completed | The user completed a flow. |
Flow Action Succeeded | A 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:
| Property | Always sent? | Notes |
|---|---|---|
token | Always | The project token from your integration. |
distinct_id | Always | The user identifier resolved by getuserfeedback.com. |
$insert_id | Always | Stable per event. Mixpanel uses it for dedupe. |
time | Always | Unix seconds when the event occurred. |
gx_event_schema | Always for versioned GX events | Stable machine-readable event name. |
gx_event_schema_version | Always for versioned GX events | Positive integer version of the event contract. |
gx_flow_id | On v1 flow lifecycle events | The flow the event relates to. |
gx_flow_version_id | On v1 flow lifecycle events | The exact flow version that produced the event. |
gx_flow_version_number | On v1 flow lifecycle events | Human-readable flow version number. |
gx_flow_run_id | On v1 flow lifecycle events | Correlates events from the same flow run. |
gx_flow_surface | On v1 flow lifecycle events | widget or web_page. |
gx_flow_completion_id | On Flow Completed v1 | Stable identity for the completed flow. |
traits | When available | Profile traits known at the time, e.g. email. |
identities | Always | The identifiers we resolved against. |
page_path | When available | Page the event happened on. |
page_referrer | When available | Referrer at the time of the event. |
locale | When available | Browser 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_idfor seven days; older replays can create duplicates. We set$insert_idautomatically per event — preserve it through any relay.