Klaviyo llama a sus contactos "profiles". Exportarlos es directo desde el panel para bases pequeñas y medianas, pero si tienes >50.000 perfiles o quieres cruzar con eventos, necesitas la API. Vamos por partes.

Método 1 — Desde el panel (hasta ~50k perfiles cómodo)

Todo lo que tengas:

  1. En Klaviyo: Audience → Lists & Segments.
  2. Selecciona la lista "All Subscribers" (o la que quieras exportar).
  3. Arriba a la derecha: Manage List → Export List to CSV.
  4. Klaviyo procesa el export en background. Recibes email cuando esté listo con el enlace de descarga.

Aparece también en Analytics → Downloads.

Con filtros específicos (recomendado): Klaviyo brilla cuando exportas segmentos precisos. Ejemplos útiles:

  • Perfiles activos (compraron en últimos 12 meses): crea segmento Placed Order at least once in the last 12 months → exporta ese segmento.
  • Perfiles nunca activos (candidatos a suprimir): Has not opened any email in the last 90 days AND has not placed any order ever.
  • VIPs (LTV alto): Total revenue is at least 500.
  • Nuevos suscriptores último trimestre: Received Marketing = true AND joined after DATE.

Cada segmento se exporta por separado.

Qué campos vienen en el CSV de Klaviyo

Por defecto: Email, First Name, Last Name, Phone Number, Consent Details (para email y SMS separado), Joined, Last Event Date, Total Orders, Total Revenue, propiedades custom, etiquetas de listas y segmentos.

Puedes añadir/quitar columnas antes del export en Manage → Choose fields to export. Si migras de plataforma, marca todo lo que puedas — mejor incluir de más que perder datos.

Método 2 — Klaviyo API (para >50k o automatización)

Para bases grandes, la API es más fiable que el export UI (que puede fallar con timeouts en bases enormes).

Setup:

  1. Account → Settings → API Keys → Create Private API Key. Da permiso read:profiles mínimo.
  2. Guarda la key (aparece una vez).

Ejemplo curl (paginado, cursor-based):

curl -X GET "https://a.klaviyo.com/api/profiles/?page[size]=100" \
  -H "Authorization: Klaviyo-API-Key YOUR_API_KEY" \
  -H "revision: 2024-10-15" \
  -H "accept: application/json"

Cada response trae data (array de profiles) y links.next (cursor). Sigue el next hasta que sea null.

Python (más práctico para escalar):

import requests, csv, time

API_KEY = "YOUR_API_KEY"
BASE = "https://a.klaviyo.com/api/profiles/"
headers = {
    "Authorization": f"Klaviyo-API-Key {API_KEY}",
    "revision": "2024-10-15",
    "accept": "application/json",
}

with open("klaviyo-profiles.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["email", "first_name", "last_name", "phone", "created", "total_orders"])
    url = f"{BASE}?page[size]=100"
    while url:
        r = requests.get(url, headers=headers)
        r.raise_for_status()
        data = r.json()
        for p in data["data"]:
            attr = p["attributes"]
            props = attr.get("properties", {})
            writer.writerow([
                attr.get("email"),
                attr.get("first_name"),
                attr.get("last_name"),
                attr.get("phone_number"),
                attr.get("created"),
                props.get("total_orders", ""),
            ])
        url = data.get("links", {}).get("next")
        time.sleep(0.1)  # respeta rate limit (75 req/s burst, 700/min steady)

Rate limits Klaviyo: 75 req/s burst, 700 req/min steady. Para 200.000 perfiles con page size 100 = 2.000 requests = ~3 minutos.

Errores comunes al exportar de Klaviyo

El export UI se queda "in progress" varias horas Para bases >100k puede pasar. Solución: usa la API. O trocea con segmentos por fecha de alta (Joined after X AND Joined before Y).

Phone numbers con formato inconsistente Klaviyo intenta normalizar a +34XXXXXXXXX pero si el opt-in vino sin prefijo, se guarda como recibió. Antes de importar en otra herramienta, normaliza todos a formato internacional (Sheets con IF(LEFT(A2,1)="+", A2, "+34"&A2) como base).

Suppressed profiles NO aparecen en export normal Klaviyo excluye por defecto los perfiles suprimidos (unsubscribed + hard bounce). Si los necesitas para el histórico: Profiles → Suppressed → Export.

Consent status para email vs SMS Klaviyo separa email_consent y sms_consent. Al importar en otra herramienta, mapea cada uno al campo correspondiente. Si mezclas, puedes acabar enviando SMS a gente que solo dio opt-in a email — problema legal.

Qué revisar antes de reimportar en otra herramienta

Los mismos problemas que en cualquier CSV, con particularidades de Klaviyo:

  • Perfiles inactivos que Klaviyo mantiene "engaged" — Klaviyo aplica su propio sunset flow. Antes de migrar, elimina los que llevan >12 meses sin abrir.
  • Duplicados por normalización — Klaviyo tolera dos perfiles con el mismo email si vienen de sources distintos (raro pero pasa en migraciones).
  • Perfiles con dominio muerto — Klaviyo no comprueba DNS proactivamente hasta que envías.

Pásalo por ClearRows antes de reimportar. Gratis, 30 segundos, te dice qué % de cada tipo hay.

Preguntas frecuentes

¿Klaviyo permite exportar más de una lista a la vez? No en UI. Exporta cada una por separado. Con API es trivial: iterar sobre /api/lists/ y para cada list_id bajar sus miembros con /api/lists/{id}/relationships/profiles/.

¿Puedo exportar solo perfiles con historial de compra? Sí. Crea segmento Placed Order at least once over all time y expórtalo.

¿Es legal exportar de Klaviyo y reimportar en Mailchimp/Brevo desde España? Sí, si el opt-in era genérico "recibir emails de [tu marca]" y no "solo por Klaviyo". RGPD: la base legal se transfiere con el registro. Guarda email_consent.timestamp y email_consent.method como evidencia.

¿Cada cuánto debería exportar como backup? Mensual. Si Klaviyo es tu principal activo comercial, semanal automatizado por script.

¿La API tiene coste? No. Klaviyo API es gratis con tu plan (aplica solo el precio por perfil). Rate limits generosos para lectura.


Antes de reimportar

Ya tienes el CSV. Antes de subirlo a la nueva plataforma, mira qué te llevas de verdad.

Analiza tu CSV en ClearRows gratis en 30 segundos →

Sin registro, tu archivo se elimina en 24h.

ClearRows — Barcelona. Datos limpios, ventas reales.