---
name: shopify-tasa-recompra
description: "Solo lectura: calcula qué porcentaje de clientes hace 2 o más pedidos dentro de N días, con opción de verlo por producto. Úsala cuando quieras saber cuántos clientes vuelven a comprarte y qué productos los hacen volver."
---

## Propósito
Calcula la tasa de recompra (el porcentaje de clientes que vuelven a hacer al menos un pedido más dentro de una ventana definida) y la segmenta según el producto o la colección de la primera compra. Identifica qué productos generan más recompras. Solo lectura: no ejecuta mutaciones.

## 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., tu-tienda.myshopify.com) |
| days_back | integer | no | 90 | Ventana de adquisición: clientes que hicieron su primera compra en este periodo |
| repeat_window | integer | no | 90 | Días después de la primera compra en los que se busca un pedido repetido |
| segment_by | string | no | none | Segmenta la tasa de recompra por: `product`, `none` |
| format | string | no | human | Formato de salida: `human` o `json` |

## Seguridad

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

## Pasos

1. **OPERACIÓN:** `customers` — consulta
   **Entradas:** `query: "created_at:>='<NOW - days_back days>'"`, `first: 250`, selecciona `id`, `numberOfOrders`, `createdAt`
   **Resultado esperado:** Clientes adquiridos en la ventana

2. **OPERACIÓN:** `orders` — consulta
   **Entradas:** `query: "created_at:>='<NOW - days_back + repeat_window days>'"`, `first: 250`, selecciona `customer { id }`, `createdAt`, `lineItems { product { id, title } }`, cursor de paginación
   **Resultado esperado:** Pedidos para armar el historial de compras de cada cliente y asociarlo con su primer producto

3. Para cada cliente adquirido: si tiene ≥ 2 pedidos dentro de `repeat_window` días → es un cliente que recompra

4. Calcula la tasa general; si `segment_by: product`, agrupa por el producto de la primera compra

## Operaciones GraphQL

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

```graphql
# orders:query — validada con api_version 2025-01
query CustomerOrderHistory($query: String!, $after: String) {
  orders(first: 250, after: $after, query: $query) {
    edges {
      node {
        id
        createdAt
        customer {
          id
        }
        lineItems(first: 5) {
          edges {
            node {
              product {
                id
                title
              }
            }
          }
        }
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}
```

## Seguimiento de la sesión

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

**Al iniciar**, muestra:
```
╔══════════════════════════════════════════════╗
║  SKILL: Tasa de recompra                     ║
║  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):
```
══════════════════════════════════════════════
TASA DE RECOMPRA
  Ventana de adquisición:  <days_back> días
  Ventana de recompra:     <repeat_window> días
  Clientes adquiridos:     <n>
  Clientes que recompran:  <n>
  Tasa de recompra:        <pct>%

  Por primer producto:
    "<producto>"  Adquiridos: <n>  Recompra: <pct>%
  Archivo: repeat_purchase_<fecha>.csv
══════════════════════════════════════════════
```

Para `format: json`, muestra:
```json
{
  "skill": "shopify-tasa-recompra",
  "store": "<dominio>",
  "acquisition_days": 90,
  "repeat_window_days": 90,
  "customers_acquired": 0,
  "repeat_purchasers": 0,
  "repeat_rate_pct": 0,
  "by_product": [],
  "output_file": "repeat_purchase_<fecha>.csv"
}
```

## Formato de salida
Archivo CSV `repeat_purchase_<AAAA-MM-DD>.csv` con las columnas:
`customer_id`, `first_order_date`, `first_product`, `total_orders`, `is_repeat`, `days_to_repeat`, `total_spent`

## 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 |
| Clientes con checkout como invitado | No hay registro de cliente al cual asociar los pedidos | Exclúyelos del análisis |
| Historial insuficiente | La tienda es más nueva que la ventana | Analiza el periodo disponible |

## Buenas prácticas
- Una tasa de recompra de 25–35 % en 90 días es una base sana para la mayoría de las tiendas online sin suscripción.
- Los productos con tasas de recompra altas son tus productos «puerta de entrada»: priorízalos en las campañas de adquisición.
- Usa `segment_by: product` para identificar qué productos crean clientes fieles y cuáles atraen compradores de una sola vez.
- Combínala con `shopify-cohortes-clientes` para ver con más profundidad las tendencias de retención a largo plazo.
