---
title: "Mixpanel"
description: "Conecta Mixpanel con Adapty para potentes analíticas de suscripciones."
---

[Mixpanel](https://mixpanel.com/home/) es un potente servicio de analítica de producto. Su solución de seguimiento basada en eventos permite a los equipos de producto obtener información valiosa sobre las mejores estrategias de adquisición, conversión y retención de usuarios en distintas plataformas.

Esta integración te permite llevar todos los eventos de Adapty a Mixpanel. Como resultado, obtendrás una visión más completa de tu negocio de suscripciones y las acciones de tus clientes. Adapty proporciona un conjunto completo de datos que te permite hacer seguimiento de los [eventos de suscripción](events) desde los stores en un solo lugar. Con Adapty, puedes ver fácilmente cómo se comportan tus suscriptores, entender qué les gusta y usar esa información para comunicarte con ellos de forma dirigida y eficaz.

## Cómo configurar la integración con Mixpanel \{#how-to-set-up-mixpanel-integration\}

1. Abre la página [Integrations -> Mixpanel](https://app.adapty.io/integrations/mixpanel) en el Adapty Dashboard.
2. Activa el interruptor e introduce tu **Mixpanel Token**. Puedes especificar un token para todas las plataformas o limitarlo a plataformas concretas si solo quieres recibir datos de algunas de ellas.

  <img src="/assets/shared/img/mixpanel.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

### Cómo encontrar tu Mixpanel Token \{#finding-your-mixpanel-token\}

Para obtener tu **Mixpanel Token**:

1. Inicia sesión en tu [Mixpanel Dashboard](https://mixpanel.com/settings/project/).
2. Abre **Settings** y selecciona **Organization Settings**.

  <img src="/assets/shared/img/mixpanel-settings.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

3. En la barra lateral izquierda, ve a **Projects** y selecciona tu proyecto.

  <img src="/assets/shared/img/mixpanel-project-id.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

## Cómo funciona la integración \{#how-the-integration-works\}

Adapty mapea automáticamente las propiedades de evento relevantes —como el ID de usuario y los ingresos— a las [propiedades nativas de Mixpanel](https://docs.mixpanel.com/docs/data-structure/user-profiles). Esto garantiza un seguimiento e informes precisos de los eventos relacionados con suscripciones.

Además, Adapty acumula datos de ingresos por usuario y actualiza sus [Propiedades de Perfil de Usuario](https://docs.mixpanel.com/docs/data-structure/user-profiles), incluidas `subscription state` y `subscription product ID`. Una vez recibido un evento, Mixpanel actualiza los campos correspondientes en tiempo real.

## Eventos y etiquetas \{#events-and-tags\}

Debajo de las credenciales encontrarás tres grupos de eventos que puedes enviar a Mixpanel desde Adapty. Activa simplemente los que necesites. Consulta la lista completa de eventos que ofrece Adapty [aquí](events).

  <img src="/assets/shared/img/mixpanel-events.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

Recomendamos usar los nombres de evento predeterminados que proporciona Adapty. Aun así, puedes cambiarlos según tus necesidades.

## Configuración del SDK \{#sdk-configuration\}

Usa el método `.setIntegrationIdentifier()` para establecer `mixpanelUserId`. Si no se establece, Adapty usa tu ID de usuario (`customerUserId`) o, si es nulo, el ID de Adapty. Asegúrate de que el ID de usuario que utilizas para enviar datos a Mixpanel desde tu app sea el mismo que envías a Adapty.

---
no_index: true
---
import Callout from '../../../components/Callout.astro';

<Callout type="note">
Si usas un ID de usuario de terceros como Customer User ID, no lo pases durante `activate()` — es posible que el SDK de terceros aún no lo haya generado. En su lugar, llama primero a `activate()` sin CUID, luego a `setIntegrationIdentifier()`, y después a `identify()` con el CUID.
</Callout>

<Tabs groupId="current-os" queryString>
<TabItem value="swift" label="iOS (Swift)" default>

```swift showLineNumbers

do {
    try await Adapty.setIntegrationIdentifier(
        key: "mixpanel_user_id", 
        value: Mixpanel.mainInstance().distinctId
    )
} catch {
    // handle the error
}
```
</TabItem>
<TabItem value="swift-callback" label="iOS (Swift-Callback)" default>

```swift showLineNumbers

let builder = AdaptyProfileParameters.Builder()
            .with(mixpanelUserId: Mixpanel.mainInstance().distinctId)

Adapty.updateProfile(params: builder.build())
```
</TabItem>
<TabItem value="kotlin" label="Android (Kotlin)" default>

```kotlin showLineNumbers
Adapty.setIntegrationIdentifier("mixpanel_user_id", mixpanelAPI.distinctId) { error ->
    if (error != null) {
        // handle the error
    }
}
```
</TabItem>
<TabItem value="flutter" label="Flutter (Dart)" default>

```javascript showLineNumbers

final mixpanel = await Mixpanel.init("Your Token", trackAutomaticEvents: true);
final distinctId = await mixpanel.getDistinctId();

try {
    await Adapty().setIntegrationIdentifier(
        key: "mixpanel_user_id", 
        value: distinctId,
    );
} on AdaptyError catch (adaptyError) {
    // handle the error
} catch (e) {
    // handle the error
}
```
</TabItem>
<TabItem value="unity" label="Unity (C#)" default>

```csharp showLineNumbers
using AdaptySDK;

var distinctId = Mixpanel.DistinctId;

if (distinctId != null) {
  Adapty.SetIntegrationIdentifier(
    "mixpanel_user_id", 
    distinctId, 
    (error) => {
    // handle the error
  });
}
```
</TabItem>
<TabItem value="rn" label="React Native (TS)" default>

```typescript showLineNumbers

// If you already have a shared Mixpanel instance in your app, use that instance instead.
const trackAutomaticEvents = true;
const mixpanel = new Mixpanel('YOUR_PROJECT_TOKEN', trackAutomaticEvents);
await mixpanel.init();

// This is Mixpanel's current distinct_id (auto-generated, or set via mixpanel.identify(...))
const mixpanelUserId = await mixpanel.getDistinctId();

try {
    await adapty.setIntegrationIdentifier("mixpanel_user_id", mixpanelUserId);
} catch (error) {
    // handle `AdaptyError`
}
```
</TabItem>
</Tabs>

## Estructura de eventos de Mixpanel \{#mixpanel-event-structure\}

Adapty envía eventos a Mixpanel usando el método `track`. Las propiedades del evento tienen esta estructura:

```json
{
  "event": "subscription_renewed",
  "properties": {
    "ip": 0,
    "time": 1709294400,
    "$insert_id": "123e4567-e89b-12d3-a456-426614174000",
    "vendor_product_id": "yearly.premium.6999",
    "original_transaction_id": "GPA.3383...",
    "currency": "USD",
    "environment": "Production",
    "store": "app_store",
    "purchase_date": "2024-03-01T12:00:00.000000+0000"
  }
}
```

Donde:

| Parámetro                            | Tipo    | Descripción                                                    |
|:-------------------------------------|:--------|:---------------------------------------------------------------|
| `event`                              | String  | El nombre del evento (mapeado desde el evento de Adapty).      |
| `properties`                         | Object  | Propiedades del evento.                                        |
| `properties.ip`                      | Integer | Dirección IP (enviada como 0 en comunicaciones servidor a servidor). |
| `properties.time`                    | Long    | Marca de tiempo UNIX del evento en segundos.                   |
| `properties.$insert_id`              | String  | ID único del evento (UUID) para deduplicación.                 |
| `properties.vendor_product_id`       | String  | El ID de producto del store.                                   |
| `properties.original_transaction_id` | String  | ID de la transacción original.                                 |
| `properties.currency`                | String  | Código de moneda.                                              |
| `properties.store`                   | String  | Nombre del store (p. ej., "app_store").                        |
| `properties.environment`             | String  | Entorno ("Sandbox" o "Production").                            |

### Actualizaciones del perfil de usuario \{#user-profile-updates\}

Adapty también actualiza el Perfil de Usuario de Mixpanel usando `people_set` con las siguientes propiedades:

| Parámetro                 | Tipo   | Descripción                                                         |
|:--------------------------|:-------|:--------------------------------------------------------------------|
| `subscription_state`      | String | Estado actual de la suscripción (p. ej., "subscribed").             |
| `subscription_product_id` | String | ID del producto de suscripción activo.                              |