Análisis de datos e informes en marketing
Optimización y análisis de campañas

Cómo conectar Klaviyo con Google Sheets para atribución de email y SMS en ecommerce

Adela
May 15, 2026
Klaviyo a Google Sheets: Atribución de Email y SMS (2026)

Si gestionas email o SMS para una marca DTC, Klaviyo sabe exactamente qué ingresos generó cada campaña y cada flow. Lo que no muestra de forma clara es cómo se compara ese revenue con tu inversión en paid media, qué canales de adquisición traen suscriptores que valen $200 de lifetime value frente a otros que valen $20, o cómo rinden tus flows post-compra por cohorte.

Esta guía cubre tres métodos para llevar datos de Klaviyo a Google Sheets en 2026, los gotchas específicos de Klaviyo en cada capa, y los dos dashboards de atribución para ecommerce que cambian cómo se reporta email y SMS: atribución de revenue por canal (Klaviyo cruzado con inversión paid) y LTV de suscriptor por canal de adquisición. Los métodos son el medio. Los dashboards son lo que importa.

Para conectar el resto del stack de marketing, tenemos guías individuales para HubSpot, LinkedIn Ads, Meta Ads, GA4 y Search Console. Este post extiende la serie a email y SMS, dos canales que la mayoría de los stacks de paid media reporting ignoran hasta que las cuentas dejan de cuadrar.

Dónde vive el revenue de ecommerce en Klaviyo

Antes de elegir un método, conviene saber qué expone Klaviyo y cómo organiza la atribución. El revenue de email y SMS se calcula contra una ventana de atribución configurada en Klaviyo Account Settings (default: 5 días para click, 1 día para open). Cada número de revenue que extraigas está acotado por esa ventana.

Los objetos centrales para reportar revenue:

  • Profiles. Suscriptores individuales con identificadores, propiedades e historial completo de eventos. La propiedad $source captura por dónde entró el profile a Klaviyo (Shopify checkout, embed form, signup form ID, etc.). Es tu ancla de canal de adquisición.
  • Metrics. Los eventos de Klaviyo. Los dos que mueven revenue: Placed Order (con el valor del pedido y la lista de productos como event properties) y Active on Site (trigger de browse abandonment).
  • Campaigns. Envíos puntuales de email o SMS. Cada uno tiene su revenue atribuido propio y datos únicos de open/click.
  • Flows. Automatizaciones (welcome series, abandoned cart, post-compra, win-back). Cada mensaje dentro de un flow tiene su revenue atribuido propio.
  • Lists y Segments. Agrupaciones de suscriptores para targeting. Útiles para definir cohortes.

Los números de revenue que ves en la UI de Klaviyo son vistas agregadas sobre estos objetos. Para llegar a atribución por canal o LTV por adquisición, necesitas los datos de evento subyacentes cruzados con propiedades del profile, lo que significa extraer filas, no solo las cards resumen.

Método 1: Export manual CSV desde la UI de Klaviyo

Para auditorías puntuales, snapshots ejecutivos de fin de mes, o antes de tener presupuesto de API aprobado. Rápido, gratis, frágil en cuanto pase una semana.

Setup: en Klaviyo, ve a Analytics o al informe específico de Campaign/Flow, click en Export, elige CSV. Para datos a nivel de campaña, los exports de la vista campaign performance incluyen revenue atribuido, recipients, opens, clicks y unsubscribes. Para datos de profile, al exportar una list o segment se incluyen las propiedades del profile más agregados de eventos si seleccionas esas columnas.

Gotchas específicos de Klaviyo en esta capa:

  • El export de revenue a nivel de cuenta tiene tope en 12 meses. Reportar year-over-year en email y SMS requiere ir acumulando exports mensuales hacia adelante en Sheets si quieres histórico más largo.
  • Los exports de flow son uno por flow, no en bulk. ¿Quieres revenue de 30 flows? Son 30 exports manuales. Aceptable para una revisión trimestral, doloroso para mensual.
  • El revenue de SMS se mezcla con email por defecto. Para desglosar por canal necesitas filtrar por Message Channel en el report builder antes de exportar. La mayoría de equipos exporta el número combinado asumiendo que es solo email.
  • Las ventanas de atribución no se exportan como campo. El número se calcula dentro de la UI de Klaviyo basado en la configuración a nivel de cuenta. Si alguien cambia la ventana, los exports históricos usan el número viejo; los nuevos exports usan el nuevo. No hay timestamp "as of".

Cuándo encaja este método: snapshot para el board, revisión trimestral, auditoría antes de rehacer flows.

Cuándo no: cualquier informe que refresque más que mensualmente, o cualquier cosa que cruce datos de Klaviyo con inversión en paid media.

Método 2: Apps Script con la API de Klaviyo

El camino gratis para un equipo in-house de ecommerce o marketing ops que quiere refresco diario sin suscripción a un conector. El setup la primera vez son 30-60 minutos, luego 15-20 minutos por cada tipo de informe adicional.

Paso 1. Genera una Klaviyo Private API key. En Klaviyo: Account → Settings → API Keys → Create Private API Key. Scopes: mínimo read access en los objetos relevantes (Profiles, Metrics, Events, Campaigns, Flows según lo que vayas a extraer). Guarda la key de forma segura; nunca la commitees a un Sheet público o GitHub.

Paso 2. En tu Sheet, abre Extensions → Apps Script y pega un script con esta estructura:

function exportKlaviyoCampaignRevenue() {
  const KLAVIYO_KEY = 'YOUR_PRIVATE_KEY';
  const baseUrl = 'https://a.klaviyo.com/api/campaigns/';
  const headers = {
    'Authorization': 'Klaviyo-API-Key ' + KLAVIYO_KEY,
    'revision': '2024-10-15',
    'Accept': 'application/json'
  };

  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();
  sheet.appendRow(['Campaign ID', 'Name', 'Send Time', 'Channel', 'Recipients', 'Opens', 'Clicks', 'Attributed Revenue']);

  let nextUrl = baseUrl + '?filter=equals(messages.channel,"email")&include=campaign-messages';
  while (nextUrl) {
    const response = UrlFetchApp.fetch(nextUrl, { headers: headers, muteHttpExceptions: true });
    const data = JSON.parse(response.getContentText());
    (data.data || []).forEach(campaign => {
      // Llama al Reporting API por campaña para metrics
      // Añade fila con revenue atribuido, opens, clicks
    });
    nextUrl = data.links && data.links.next ? data.links.next : null;
  }
}

La documentación oficial de la API de Klaviyo cubre todos los endpoints, incluyendo los del Reporting API que exponen revenue atribuido por campaña y flow.

Paso 3. Programa el trigger. Apps Script → Triggers (icono de reloj) → Add Trigger → ejecuta tu función a diario antes del check-in del equipo.

Gotchas específicos de Klaviyo en la capa API:

  • El header de revision API es obligatorio. La API de Klaviyo está versionada por fecha (revision: 2024-10-15 o una revisión posterior de 2025/2026). Sin él, la petición falla. Pinea una revisión; cuando Klaviyo la deprecie te avisan por email y dan ventana de migración.
  • Los rate limits son por endpoint, no por key. La mayoría de endpoints de lectura soportan unas 350 requests por minuto en estado estable (consulta la documentación oficial de rate limits). Cuando lo superas, obtienes un 429. Implementa backoff exponencial.
  • Las propiedades del profile no incluyen historial de eventos por defecto. Para conseguir el $source de un profile, llamas al objeto profile. Para conseguir su historial de Placed Order, consultas el endpoint Events filtrado por profile ID y metric ID. Dos endpoints, cruzados client-side.
  • El revenue a nivel de flow requiere un endpoint distinto al de campaign. Campaigns exponen atribución vía /api/campaign-recipient-estimations/ y endpoints de reporting. Flows lo exponen vía patrones /api/flow-action-attributions/. Las dos tienen estructuras distintas; consolida a un schema unificado en tu script antes de escribir a Sheets.
  • SMS y email comparten campaigns pero los metrics están separados. Filtra por messages.channel para separarlos. La mayoría de scripts caseros omiten esto y acaban doble-contando revenue cuando un cliente recibió email Y SMS de la misma campaña.
  • Límite de ejecución de Apps Script. Workspace Free: 6 minutos. Workspace de pago: 30 minutos. Extraer 12 meses de datos a nivel de campaña con propiedades de profile puede pasar de los 6 minutos. Solución: procesa por mes o pagina agresivamente.

La combinación de estos gotchas explica por qué los equipos que empiezan con Apps Script suelen migrar a un conector gestionado en cuanto tienen más de tres cuentas de Klaviyo o quieren SMS desglosado automáticamente.

Olvídate del mantenimiento de Apps Script

Dataslayer conecta Klaviyo con Google Sheets, Looker Studio, BigQuery y Power BI de forma programada. Email y SMS separados, revenue por flow expuesto, soporte multi-cuenta para agencias, y campos pre-construidos para ventanas de atribución.

Prueba Dataslayer Gratis

Método 3: Conector no-code programado

El camino para equipos de ecommerce que gestionan múltiples cuentas de marca (modelo agencia), DTC brands con volumen alto de SMS, o cualquiera que cruce datos de Klaviyo con inversión paid de forma programada.

Dataslayer conecta Klaviyo con Sheets vía el flujo de Klaviyo Private API key en menos de 10 minutos. Desde Google Sheets: Extensions → Add-ons → Get add-ons → instala Dataslayer. Después Extensions → Dataslayer → Launch Sidebar, elige Klaviyo, pega la private key, elige el data type (Campaigns, Flows, Profiles, Metrics, Events), selecciona campos y rango de fechas, click en Run.

Por qué un conector gana específicamente para reporting ecommerce de Klaviyo:

  • Multi-cuenta ecommerce-native. Agencias que gestionan 5-20 cuentas de Klaviyo de marcas DTC las consultan en un único workbook con una columna de cuenta. El conector batchea las llamadas API respetando los rate limits por cuenta.
  • Email y SMS pre-separados. El desglose por canal es una dimensión nativa. Sin lógica de filtro que recordar; el revenue de SMS es su propia fila.
  • Atribución por flow expuesta de forma nativa. Los endpoints de flow-action attribution de Klaviyo aparecen como dimensiones, no como respuesta API en crudo. El revenue de la welcome series se separa limpiamente del de abandoned cart y del de post-compra.
  • Cruces con paid media. Cuando tus datos de Klaviyo viven en Sheets junto a la inversión de Meta Ads y Google Ads, el CAC blended y el revenue atribuido por canal están a una fórmula de distancia.

Costes: el plan gratis cubre un conector y un usuario; los planes de pago escalan hasta agencias gestionando múltiples cuentas de Klaviyo en un mismo workbook. Precios actualizados aquí.

El gotcha de Klaviyo que NINGÚN método arregla: las ventanas de atribución son un setting a nivel de cuenta, no un parámetro por informe. Si cambias la atribución de click de 5 a 14 días en Klaviyo, todo informe histórico que regeneres después usa la nueva ventana en el lookback. El Sheet que exportaste el mes pasado es el único registro del número antiguo. Haz snapshots regulares si esperas cambios de ventana.

Los 2 dashboards de ecommerce que merecen la pena

Una vez los datos de Klaviyo fluyen a Sheets (cualquiera de los 3 métodos), estos son los dos informes que cambian cómo operan los equipos de email y SMS en ecommerce. Ninguno es una vista por defecto de Klaviyo, y ambos requieren cruzar datos de Klaviyo con otras fuentes o con definiciones de cohorte.

Dashboard 1: Atribución de revenue por canal (Klaviyo + paid ads)

La pregunta: si recorto la inversión en Meta Ads un 30%, ¿qué pasa con mi revenue atribuido a email? Más concretamente: ¿cuánto del revenue atribuido por Klaviyo es incremental frente al que habría capturado de los suscriptores adquiridos por paid de todos modos?

Columnas a extraer de Klaviyo:

  • Campaign o flow ID, name, channel (email/SMS)
  • Send date, revenue atribuido, recipients, conversion count
  • Propiedad $source del profile agregada a nivel de campaña (de dónde vienen estos recipients)

Columnas a extraer de Meta Ads (u otras plataformas paid):

  • Campaign ID, daily spend, conversions, purchase events
  • UTM campaign en landing pages

Cálculos en Sheets:

  • Revenue de email atribuido a suscriptores adquiridos por paid: SUMIFS donde $source del profile coincide con un canal paid (típicamente Shopify checkout con UTM de Meta, o un signup form paid)
  • Revenue de email atribuido a suscriptores orgánicos: SUMIFS donde $source coincide con no-paid (Shopify orgánico, referral, embed form)
  • CAC paid blended con email: (inversión paid) ÷ (nuevos suscriptores adquiridos por paid + revenue de primera compra atribuido a esos suscriptores)

Layout del pivot:

  • Filas: canal de adquisición (Meta, Google Ads, Orgánico, Referral)
  • Columnas: periodo (mes o trimestre)
  • Valores: total de suscriptores, revenue total de Klaviyo, CAC blended
  • Formato condicional: resalta canales donde el revenue de Klaviyo por suscriptor está por debajo del CAC de adquisición

Lo que surfacea que la UI de Klaviyo no muestra:

  • Si el CAC de $200 en Meta "vale la pena" cuando incluyes el LTV de email que esos suscriptores generan
  • Si los suscriptores orgánicos generan más revenue por profile que los paid (a menudo sí en DTC)
  • Qué signup forms paid traen suscriptores que nunca abren un solo email

Dashboard 2: LTV de suscriptor por canal de adquisición

La pregunta: de los suscriptores adquiridos en Q1, ¿cuál es el revenue medio por profile después de 90 días, por canal de adquisición? ¿Y a 180 días? ¿Y a un año?

Columnas a extraer de Klaviyo:

  • Profile ID, email, $source, fecha de $created
  • Fechas de suscripción a listas
  • Eventos Placed Order (fecha, valor) por profile

Cálculos en Sheets:

  • Definición de cohorte: agrupa profiles por mes de $created y por $source
  • LTV día 30 / 90 / 180 / 365: para cada profile, suma el valor de Placed Order dentro de X días desde $created
  • LTV medio por cohorte: AVERAGEIFS por mes de cohorte × source

Layout del pivot:

  • Filas: mes de cohorte (mes de adquisición)
  • Columnas: días desde la adquisición (30, 90, 180, 365)
  • Valores: LTV medio por cohorte, separado por source
  • Formato condicional: resalta cohortes donde el LTV a 30 días es inusualmente alto (indica buen rendimiento del flow post-compra) o inusualmente bajo (indica un canal trayendo suscriptores de baja intención)

Lo que responde este dashboard que la UI de Klaviyo no:

  • Qué signup forms producen suscriptores que compran varias veces en 180 días
  • Si tu flow post-compra está realmente moviendo la aguja en tasa de segunda compra (compara cohortes antes/después de un cambio de flow)
  • Si los suscriptores de SMS tienen LTV mayor o menor que los suscriptores solo de email en el mismo mes de adquisición

Comparando los tres métodos

Aspecto CSV manual Apps Script Conector programado
Tiempo de setup 5 min 30-60 min Menos de 10 min
Coste Gratis Gratis Desde $35/mes
Split Email vs SMS Filtro manual Lógica de filtro en código Dimensión nativa
Atribución por flow Manual por flow Endpoint extra requerido Expuesta nativamente
Refresh programado No Sí (Apps Script triggers) Sí (integrado)
Multi-cuenta Un export por cuenta Un script por cuenta Nativo, una query
Cruces con paid ads Manual Manual Mismo workbook, a una fórmula
Mantenimiento de código Ninguno Tuyo Del proveedor

La decisión suele bajar a cuántas cuentas tienes y cada cuánto refresca el dashboard. Una marca y un marketer fluido en Sheets: Apps Script. Múltiples marcas o refresh diario: conector programado. Solo revisión trimestral: CSV manual.

Particularidades de Klaviyo que conviene conocer

Cinco comportamientos que afectan a cada método y a cada dashboard que construyas encima de datos de Klaviyo:

  • Las ventanas de atribución son a nivel de cuenta, retroactivas al regenerar. Cambia la atribución de click de 5 a 14 días y todo informe histórico que regeneres después usa 14 días. Haz snapshot del revenue antes de cambiar la ventana si te importa la comparabilidad histórica.
  • Las propiedades personalizadas tienen namespace. Klaviyo distingue propiedades built-in ($first_name, $source, $created) de las customizadas (shopify_customer_tags, first_purchase_value). Las built-in empiezan con $. Omite el prefijo en llamadas API y el filtro devuelve vacío sin avisar.
  • El merge de profiles cambia los IDs. Cuando Klaviyo identifica que dos profiles son la misma persona (mismo email tras un browse anónimo previo), el profile ID antiguo se fusiona. Cruzar profile IDs de Klaviyo con otros sistemas requiere gestionar cambios ocasionales de ID.
  • Active on Site requiere el script de onsite tracking. Sin él, los flows de browse abandonment no disparan, y la métrica Active on Site en informes de revenue está vacía. Verifícalo en Klaviyo: Settings → Integrations → Web Tracking.
  • Los profiles suprimidos siguen apareciendo en algunos exports. Un profile suprimido (unsubscribed, bounced, marcado como spam) sigue existiendo; simplemente deja de recibir mensajes. La matemática de LTV por cohorte típicamente debería incluirlos porque el historial de pedidos es real, pero los informes de campaign performance deberían filtrarlos del recuento de recipients.

Errores comunes y cómo leerlos

401 unauthorized: la private API key es inválida, está revocada, o la enviaste sin el prefijo Klaviyo-API-Key en el header Authorization.

403 forbidden con error de scope: la private API key se creó sin read scope sobre el objeto que estás pidiendo. Edita la key en settings de Klaviyo, amplía los scopes, guarda, reintenta.

429 too many requests: rate limit alcanzado. Klaviyo incluye un header Retry-After indicando segundos a esperar. Implementa backoff exponencial o escalona los refreshes entre múltiples cuentas de Klaviyo.

410 gone al consultar un profile: el profile fue eliminado (request de borrado de datos GDPR, o fusionado a otro profile). Skip y continúa; no reintentes.

Array data vacío sin error: el filtro o el rango de fechas excluyó todo. Causa habitual: filtrar por messages.channel con un typo, o tirar campañas de un rango anterior a cuando la cuenta empezó a enviar.

FAQ

¿La UI de Klaviyo muestra revenue atribuido por canal entre email y SMS por defecto?
La card de revenue agregado combina ambos. Para desglosar email frente a SMS hay que filtrar en la vista de reporting (Campaign Performance → filter by Message Channel) o extraer los datos vía API o conector con la dimensión de canal. La mayoría de resúmenes de revenue a nivel cuenta vienen combinados por defecto.

¿Hasta dónde puedo exportar histórico de Klaviyo?
Para performance de campañas y flows, el export de revenue a nivel cuenta tiene tope de 12 meses. Para datos de profile y eventos vía API, el histórico depende de tu plan de Klaviyo; la retención estándar va bastante más allá de 12 meses en la mayoría de planes. Para preservar histórico más largo, ve haciendo snapshots a Sheets o a un warehouse hacia adelante.

¿Qué diferencia hay entre atribución de flow y de campaign en Klaviyo?
La atribución de campaign es por envío (un email o SMS a una lista en un momento puntual). La de flow es por mensaje dentro de una automatización (el segundo email de tu welcome series tiene su propio revenue atribuido, separado del primero). Reportar ambos a granularidad flow-message es la única forma de saber qué paso del welcome trajo realmente el revenue.

¿Puedo cruzar datos de Klaviyo con Meta Ads en Google Sheets sin warehouse?
Sí, si los datos están en el mismo workbook. Trae Klaviyo a una pestaña y Meta Ads a otra vía conectores o scripts separados, luego usa VLOOKUP/QUERY para cruzar por UTM campaign o por fecha. A partir de 100K filas de profile las fórmulas se ralentizan; ahí es cuando una capa de warehouse empieza a compensar.

¿Cómo separo el revenue de SMS del de email?
Filtra por messages.channel = "sms" en la API de Klaviyo o en la dimensión de canal del conector. La UI de Klaviyo también soporta este filtro en Campaign Performance y Flow Performance. La mayoría de scripts caseros omiten este filtro y acaban doble-contando cuando un cliente recibió email Y SMS de la misma campaña.

¿Los scripts de Apps Script con Klaviyo tienen los mismos límites que con HubSpot?
Mismos límites de ejecución de Apps Script (6 min Workspace free, 30 min de pago). Mismo patrón de gestión de rate limits. Las diferencias están en la capa API: Klaviyo usa revisiones versionadas por fecha, sintaxis de filtro distinta, y rate limits por endpoint en vez de a nivel cuenta.

Conclusión

Los tres métodos para llevar Klaviyo a Google Sheets están en un espectro: CSV manual para snapshots puntuales, Apps Script para automatización diaria gratis con mantenimiento de código, conector programado para reporting ecommerce hands-off entre múltiples cuentas. El método correcto depende del número de cuentas, la frecuencia de refresh, y si necesitas que el rendimiento de SMS y la atribución por flow salgan desglosados automáticamente.

Pero los métodos son el medio, no el fin. Los dos dashboards (atribución de revenue por canal y LTV de suscriptor por canal de adquisición) son el trabajo que cambia cómo los equipos de email y SMS en ecommerce reportan resultados. Ambos requieren cruzar datos de Klaviyo con definiciones de cohorte y con inversión paid, y ambos han ganado relevancia a lo largo de 2026 conforme las marcas DTC se apoyan más en email y SMS, dos canales que la UI de Klaviyo no expone bien. Constrúyelos una vez; consúltalos cada semana.

Extrae los datos. Construye los dashboards. El conector es el setup de una tarde; la claridad de atribución es algo que tus founders van a citar el resto del año. Empieza tu trial gratis de Dataslayer si quieres saltarte el mantenimiento de API y ir directo a los dashboards.

¿CÓMO PODEMOS AYUDAR?

Knowledge baseSupport ticketContact

POST RELACIONADO

Cómo conectar Klaviyo con Google Sheets para atribución de email y SMS en ecommerce

Constructor Visual de Queries vs SQL: ¿Cuál Debería Usar Tu Equipo de Marketing?

BigQuery para Equipos de Marketing: Los Costes Ocultos del Mes 3

Nuestros socios

Google Cloud Partner
Microsoft Partner