---
name: shopify-cohortes-clientes
description: "Solo lectura: agrupa a los clientes por el mes de su primera compra y mide la tasa de recompra y los ingresos de cada grupo (cohorte). Úsala cuando quieras medir qué tan bien retienes a tus clientes con el tiempo."
---

## Propósito
Agrupa a los clientes según el mes de su primera compra y sigue cómo le va a cada grupo (cohorte) con el tiempo: cuántos clientes vuelven a comprar, cuántos pedidos hacen y cuántos ingresos genera cada cohorte en los meses siguientes. El análisis de cohortes es la referencia para medir la retención y la salud de un programa de suscripción o de fidelización. Solo lectura: no hace cambios.

## Requisitos
- Sesión autenticada de Shopify CLI: `shopify store auth --store <tu-tienda>.myshopify.com --scopes read_customers,read_orders`
- Las consultas se ejecutan con `shopify store execute`.
- Permisos (scopes) de API: `read_customers`, `read_orders`

## Parámetros

| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|-----------|------|-------------|----------------|-------------|
| store | string | sí | — | Dominio de la tienda (p. ej., mitienda.myshopify.com) |
| cohort_months | integer | no | 6 | Cantidad de meses de cohortes que se analizan |
| follow_months | integer | no | 3 | Cantidad de meses que se sigue a cada cohorte después de su primera compra |
| format | string | no | human | Formato de salida: `human` o `json` |

## Seguridad

> ℹ️ Skill de solo lectura: no ejecuta mutaciones. Puedes correrla en cualquier momento sin riesgo.

## Pasos

1. **OPERACIÓN:** `customers` — consulta
   **Entradas:** `query: "created_at:>='<NOW - cohort_months months>'"`, `first: 250`, selecciona `id`, `createdAt`, `numberOfOrders` y el cursor de paginación
   **Resultado esperado:** Los clientes adquiridos dentro de la ventana de cohortes

2. **OPERACIÓN:** `orders` — consulta
   **Entradas:** `query: "created_at:>='<NOW - cohort_months + follow_months months>'"`, `first: 250`, selecciona `customer { id }`, `createdAt`, `totalPriceSet` y el cursor de paginación
   **Resultado esperado:** Todos los pedidos, para armar la línea de tiempo de compras de cada cliente

3. Agrupa a los clientes por el mes de su primer pedido (cohorte); para cada cohorte, calcula la tasa de recompra y los ingresos totales en los meses 1, 2 y 3 en adelante

## Operaciones GraphQL

```graphql
# customers:query — validada con api_version 2025-01
query CohortCustomers($query: String!, $after: String) {
  customers(first: 250, after: $after, query: $query) {
    edges {
      node {
        id
        createdAt
        numberOfOrders
        amountSpent {
          amount
          currencyCode
        }
        defaultEmailAddress {
          emailAddress
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}
```

```graphql
# orders:query — validada con api_version 2025-01
query CohortOrders($query: String!, $after: String) {
  orders(first: 250, after: $after, query: $query) {
    edges {
      node {
        id
        createdAt
        totalPriceSet {
          shopMoney {
            amount
            currencyCode
          }
        }
        customer {
          id
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}
```

## Seguimiento de la sesión

**Claude DEBE mostrar lo siguiente en cada etapa. Es obligatorio.**

**Al iniciar**, muestra:
```
╔══════════════════════════════════════════════╗
║  SKILL: shopify-cohortes-clientes            ║
║  Tienda: <dominio de la tienda>              ║
║  Inicio: <AAAA-MM-DD HH:MM UTC>              ║
╚══════════════════════════════════════════════╝
```

**Después de cada paso**, muestra:
```
[N/TOTAL] <CONSULTA|MUTACIÓN>  <OperationName>
          → Parámetros: <resumen breve de las entradas clave>
          → Resultado: <cantidad o desenlace>
```

**Al terminar**, muestra:

Para `format: human` (predeterminado):
```
══════════════════════════════════════════════
ANÁLISIS DE COHORTES DE CLIENTES
  Meses de cohortes analizados: <n>
  Total de clientes seguidos:   <n>

  Cohorte     Adquiridos  Recompra M+1  Recompra M+2  Recompra M+3
  ──────────────────────────────────────────────────────────────────
  2026-01     <n>         <pct>%        <pct>%        <pct>%
  2026-02     <n>         <pct>%        <pct>%        <pct>%
  Archivo: cohort_analysis_<fecha>.csv
══════════════════════════════════════════════
```

Para `format: json`, muestra:
```json
{
  "skill": "shopify-cohortes-clientes",
  "store": "<dominio>",
  "cohorts": [],
  "output_file": "cohort_analysis_<fecha>.csv"
}
```

## Formato de salida
Archivo CSV `cohort_analysis_<AAAA-MM-DD>.csv` con las columnas:
`cohort_month`, `customers_acquired`, `repeat_purchasers`, `repeat_rate_pct`, `total_revenue`, `revenue_per_customer`, `month_offset`

## Manejo de errores
| Error | Causa | Solución |
|-------|-------|----------|
| `THROTTLED` | Se superó el límite de solicitudes de la API | Espera 2 segundos y reintenta hasta 3 veces |
| Historial insuficiente | La tienda es más nueva que la ventana de cohortes | Analiza solo los meses disponibles |
| Pedidos de invitados | Sin registro de cliente | Exclúyelos del seguimiento de cohortes |

## Buenas prácticas
- En un ecommerce sano, normalmente entre el 20 % y el 40 % de los clientes del primer mes vuelve a comprar en 90 días: úsalo como punto de comparación.
- Si la tasa de recompra baja en las cohortes recientes, puede ser señal de problemas de calidad del producto, fricción en la experiencia del cliente o más competencia.
- Usa `follow_months: 6` en negocios de suscripción, donde la ventana de recompra es más larga.
- Combínala con `shopify-niveles-gasto-clientes`: los clientes de cohortes con alta recompra son tus mejores candidatos para los niveles Gold/Platinum.
