ZipLogger accepts Mixpanel-shaped payloads, so an app already instrumented with Mixpanel can send its events to ZipLogger by changing the endpoint and swapping the project token for a ZipLogger ingest key. Event names, properties and identity calls keep working as written.
Three translation routes over ZipLogger's normal ingest pipeline. They get no shortcuts: the same key resolution, the same per-plan quota, the same PII redaction and the same tenant isolation as every other event.
| Mixpanel call | ZipLogger route | Behaviour |
|---|---|---|
track |
/ingest/v1/mp/track |
Live events. Name and properties map straight through. |
import |
/ingest/v1/mp/import |
Historical backfill. Your timestamps are honoured within the ingest backdating window. |
engage / $set |
/ingest/v1/mp/engage |
Accepted and recorded as an event, so the properties stay queryable. See the limits below. |
The key can arrive as an X-Api-Key header or, for an untouched Mixpanel SDK,
as the payload's own token property.
Mixpanel's server SDKs post base64 JSON in a data form or query field. That
shape is parsed, not just the modern JSON body.
Mixpanel-shaped events land in the same store as native ones, and show up in the same explorer, funnels and dashboards.
https://app.ziplogger.ai.Run both in parallel for a week if you want a clean comparison: nothing stops you sending to Mixpanel and ZipLogger at once while you evaluate.
# Most Mixpanel SDKs expose an api_host setting.
mixpanel.init("zk_your_ziplogger_key", {
api_host: "https://app.ziplogger.ai/ingest/v1/mp",
})
# Everything below is unchanged.
mixpanel.identify(userId)
mixpanel.track("checkout_started", { total: 49 })
These are different products that overlap on events. The honest split:
Plenty of teams run both: Mixpanel for the product org, ZipLogger for the engineers who have to work out why the funnel broke on Tuesday.