Mixpanel Connector Guide

The Mixpanel connector helps Tealfabric workflows send product events and pull analytics data for reporting, lifecycle automation, and operational monitoring. It is best used when your process needs to both publish behavioral signals and read aggregated trends without manually moving data between tools.

Document information
FieldValue
Canonical URL/docs/04_connecting-systems/connectors/m/mixpanel
Version (published date)2026-05-08
Tagsconnectors, reference, mixpanel
Connector IDmixpanel-1.0.0

Mixpanel connector flow showing secure event tracking, profile enrichment, and analytics retrieval feeding product and operations workflows.

Configuration and authentication

Configure the connector with a Mixpanel service account so workflow traffic is isolated from personal user accounts. In most cases, keeping the default base URL is correct, and only credentials plus timeout settings need to vary by environment. Validate access early with the test operation before production runs; only test enforces required api_key validation (matching legacy connector behavior).

  • api_key (required for test): Mixpanel service account credential. receive appends api_key to the query string when missing; send does not inject it automatically.
  • api_secret (optional): Secret for endpoints that require it.
  • base_url (optional): Defaults to https://mixpanel.com/api/2.0.
  • timeout_seconds (optional): Request timeout for connector calls.

Track events with send

Use send to push product or workflow events into Mixpanel so dashboards and cohorts stay current. Keep event names stable and include consistent distinct_id values to preserve clean analytics over time.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

async function trackSignupEvent(integrationId: string) {
  const response = await fetch(`${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`, {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "X-Tenant-ID": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      operation: "send",
      endpoint: "track",
      data: {
        event: "User Signup Completed",
        properties: {
          distinct_id: "<ENTITY_ID>",
          plan: "growth",
          source: "onboarding-flow",
          time: Math.floor(Date.now() / 1000),
        },
      },
    }),
  });
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  const payload = await response.json();
  return payload.data;
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "send",
    "endpoint": "track",
    "data": {
      "event": "User Signup Completed",
      "properties": {
        "distinct_id": "<ENTITY_ID>",
        "plan": "growth",
        "source": "onboarding-flow",
        "time": 1735689600
      }
    }
  }'
{
  "success": true,
  "message_count": 1,
  "data": {
    "status": 1,
    "error": null
  },
  "response": {
    "status": 1,
    "error": null
  }
}

Retrieve analytics with receive

Use receive when workflows need trend data, such as daily signups or conversion movement, before deciding what to do next. Keep time windows explicit and narrow enough for reliable recurring jobs.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

async function getSignupTrend(integrationId: string) {
  const response = await fetch(`${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`, {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "X-Tenant-ID": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      operation: "receive",
      endpoint: "events",
      query: {
        event: "[\"User Signup Completed\"]",
        from_date: "2026-05-01",
        to_date: "2026-05-07",
        unit: "day",
      },
    }),
  });
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  const payload = await response.json();
  return payload.data;
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "receive",
    "endpoint": "events",
    "query": {
      "event": "[\"User Signup Completed\"]",
      "from_date": "2026-05-01",
      "to_date": "2026-05-07",
      "unit": "day"
    }
  }'
{
  "success": true,
  "message_count": 7,
  "total_size": 7,
  "data": [
    {"date": "2026-05-01", "value": 124},
    {"date": "2026-05-02", "value": 131}
  ]
}

Test connection with test

Use test to validate api_key and probe GET engage with the configured credentials. This is the only operation that rejects missing api_key up front.

{
  "operation": "test"
}
{
  "success": true,
  "message": "Mixpanel connection test successful",
  "details": {
    "api_base_url": "https://mixpanel.com/api/2.0"
  }
}

Reliability guidance

Analytics workloads fail most often from credential drift, oversized date ranges, or repeated retries during rate limiting. Keep service account credentials scoped and rotated, run bounded queries, and add retry backoff for transient failures. These controls keep your Mixpanel integrations dependable as traffic grows.

Additional resources