Mailchimp entrega informes analíticos muy interesantes sobre el resultado de tus campañas. Sin embargo no lo hace en un dashboard demasiado práctico en mi opinión. Además no ofrece una evolución del número de suscriptores sino que te muestra tan solo una fotografía, por lo que es muy incómodo hacer una estimación del rendimiento de una campaña de captación con esos datos. Por suerte, Google Data Studio puede ayudarte en esa tarea.

Como ya sabes, Google Data Studio (GDS) permite conectar servicios externos a su sistema para volcar datos que puedes recoger en sus mecanismos de visualización. Por ejemplo, los informes de las exploraciones de Google Analytics 4 están muy bien (mejor que los de la anterior versión) pero se quedan muy cortos en cuanto a sus posibilidades de personalización. Llevarnos esos datos a GDS y crear un panel absolutamente coherente con tu marca es razonablemente sencillo.
Para conectar algunas herramientas a GDS dispones de conectores nativos, para otras, requerirás de conectores creados por terceros. Por desgracia Mailchimp solo puede vincularse mediante el empleo de conectores demoware o trialware, es decir, aquellos que ofrecen un tiempo de prueba (habitualmente de 15 días) y después debes pagar mensualmente. Los precios oscilan entre los 9$/mes del conector de Jivrus Technologies hasta los 69$/mes del de Supermetrics, que si bien es más genérico en cuanto a aplicaciones disponibles, supone una inversión importante.

Funcionar con la demo parece poco operativo, en solo 15 días no podrás testear muchas acciones de marketing en Mailchimp así que en la School nos propusimos buscar una alternativa que nos permitiera conectar Mailchimp con Google Data Studio gratis. Y aquí está la solución.
Cómo funciona el conector
El conector utiliza un paso intermedio muy habitual en este tipo de integraciones manuales, Google Sheets, las hojas de cálculo de Google. Lo que vas a hacer es conectar una hoja con la API de Mailchimp para que descargue periódicamente (con la frecuencia que tú decidas) los datos de tus campañas y de tus listas. A continuación vincularás esa hoja de Sheets con Google Data Studio mediante el conector nativo (y gratuito). Con eso dispondrás de todos los datos de Mailchimp en GDS para crear tu dashboard.
Qué datos podré consultar
El conector son en realidad dos: uno para consultar datos del rendimiento de las campañas y otro para la información sobre una lista o audiencia de Mailchimp.
Campañas de Mailchimp
El informe de campañas te ofrece las siguientes métricas:
Fecha y hora de envío, ID de campaña, Título de campaña, Asunto, Emails enviados, Informes de abuso, Bajas, Tasa de abandono, Rebotes duros, Rebotes blandos, Total de rebotes, Errores de sintaxis, Número de reenvíos, Aperturas de reenvíos, Total de aperturas, Aperturas únicas, Tasa de apertura, Última apertura, Total de clics, Clics únicos, Clics por suscriptor, Tasa de clic y Fecha y hora del último clic.
Listas de Mailchimp
El informe sobre una lista te entrega los siguientes datos:
Fecha Suscriptores, Total de bajas, Contactos limpiados, Suscripciones desde el último envío, Bajas desde el último envío, Contactos limpiados desde el último envío, Número de campañas, Fecha de la última campaña, Media de suscripción mensual, Media de bajas mensual, Tasa de apertura, Tasa de clic, Fecha de la última suscripción, Fecha de la última baja, Puntuación de la lista.
Además hay dos métricas sobre la lista que obtenemos de la API pero que no he incluido en el informe por su baja utilidad práctica que son: el conteo de etiquetas MERGE y la comparación con la media de suscriptores del sector. El código está comentado y te resultará bastante fácil añadirlas si lo deseas, pero si ves que se te atraganta, déjanoslo en los comentarios y te echaremos un cable.
¿Dudas con GA4? Tenemos un cursazo para resolverlas y ponerte a tope con la nueva versión de Analytics
Cómo crear la hoja de cálculo para campañas
Lo primero es crear una nueva hoja de cálculo en tu cuenta de Google Drive y renombrar la pestaña de trabajo (la primera hoja) como CampaignData.
Los datos serán añadidos a la hoja mediante una App Script. Para ello, desde G. Sheets ve a Extensiones > Apps Scripts y en la pestaña del Editor pega el código que tienes un poco más abajo. El lenguaje de programación utilizado es una especie de JavaScript llamado GoogleScript. Este código hace una llamada a la API de Mailchimp para solicitar tus datos y lo devuelve pintándolo en la hoja de cálculo.
Para poder acceder a tus datos en Mailchimp debes usar una clave API. Para conseguir esa clave API tendrás que entrar en tu cuenta de Mailchimp e ir a tu usuario > Account > Extras > API keys y crear una nueva. No olvides etiquetarla en el campo Label para saber en el futuro para qué la estás usando. Por motivos de seguridad es una buena práctica mantenerlas ordenadas e irlas desactivando cuando dejes de usarlas.
Añade dicha clave en la linea 2 del código en lugar del texto CLAVE-API-DE-TU-CUENTA-DE-MAILCHIMP
.
function chimpCampaigns() {
var API_KEY = 'CLAVE-API-DE-TU-CUENTA-DE-MAILCHIMP'; // Clave API de MailChimp
var REPORT_START_DATE = '2020-1-01 00:00:00'; // Fecha de inicio del informe
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("CampaignData");
var dc = API_KEY.split('-')[1];
var api = 'https://'+ dc +'.api.mailchimp.com/3.0';
var count = 100; // Número máximo de filas devueltas
var campaignList = '/campaigns?&count='+count+'&since_send_time='+REPORT_START_DATE
var options = {"headers": {"authorization": 'apikey '+API_KEY}};
var apiCall = function(endpoint){
apiResponseCampaigns = UrlFetchApp.fetch(api+endpoint,options);
json = JSON.parse(apiResponseCampaigns);
return json
}
var campaigns = apiCall(campaignList);
var total = campaigns.total_items;
var campaignData = campaigns.campaigns;
if (campaignData) {
sheet.clear(); // Borrado de datos de Mailchimp en la hoja de cálculo
// Generación de los títulos de las columnas
sheet.appendRow(["Fecha y hora de envío", "ID de campaña", "Título de campaña", "Asunto", "Emails enviados", "Informes de abuso", "Bajas", "Tasa de abandono", "Rebotes duros", "Rebotes blandos", "Total de rebotes", "Errores de sintaxis", "Número de reenvíos", "Aperturas de reenvíos", "Total de aperturas", "Aperturas únicas", "Tasa de apertura", "Última apertura", "Total de clics", "Clics únicos","Clics por suscriptor", "Tasa de clic", "Último clic"]);
}
for (i=0; i< campaignData.length; i++){
var c = campaignData[i];
var cid = c.id;
var title = c.title;
var subject = c.subject;
var send_time = c.send_time;
if (send_time){
apiResponseReports = UrlFetchApp.fetch('https://'+ dc +'.api.mailchimp.com/3.0/reports/'+cid,options);
reports = JSON.parse(apiResponseReports);
reportsSendTime = reports.send_time;
if(reportsSendTime){
var campaign_title = c.settings.title;
var subject_line = c.settings.subject_line;
var emails_sent = reports.emails_sent;
var abuse_reports = reports.abuse_reports;
var unsubscribed = reports.unsubscribed;
var unsubscribe_rate = unsubscribed/emails_sent;
var hard_bounces = reports.bounces.hard_bounces;
var soft_bounces = reports.bounces.soft_bounces;
var bounces = hard_bounces+soft_bounces;
var syntax_errors = reports.bounces.syntax_errors;
var forwards_count = reports.forwards.forwards_count;
var forwards_opens = reports.forwards.forwards_opens;
var opens_total = reports.opens.opens_total;
var unique_opens = reports.opens.unique_opens;
var open_rate = reports.opens.open_rate;
var last_open = reports.opens.last_open;
var clicks_total = reports.clicks.clicks_total;
var unique_clicks = reports.clicks.unique_clicks;
var unique_subscriber_clicks = reports.clicks.unique_subscriber_clicks;
var click_rate = reports.clicks.click_rate;
var last_click = reports.clicks.last_click;
// Matriz de los elementos que se insertarán en la hoja de cálculo
var report = [send_time, cid, campaign_title, subject_line, emails_sent, abuse_reports, unsubscribed, unsubscribe_rate, hard_bounces, soft_bounces, bounces, syntax_errors, forwards_count, forwards_opens, opens_total, unique_opens, open_rate, last_open, clicks_total, unique_clicks, unique_subscriber_clicks, click_rate, last_click];
sheet.setFrozenRows(1);
sheet.sort(1, false);
sheet.appendRow(report);
}
}
}
}
Ahora puedes guardar tu script y ejecutarlo. Si todo va bien, verás que en la hoja de cálculo se ha creado una tabla con los datos de todas tus campañas desde la fecha definida en la linea 3 del código (puedes modificarla a tu antojo).
Si el código tiene algún problema, el registro de ejecución te dirá en que linea se ha producido el error con algún comentario explicativo que suele ser bastante revelador.
Como te imaginarás no vamos a lanzar manualmente esta solicitud de datos cada vez que queramos consultar el informe actualizado así que vamos a definir un trigger o activador que lo haga por nosotros.
Para ello, desde Apps Scripts haz clic en la pestaña Activadores y crea uno nuevo.

Puedes escoger los ajustes que desees. Lo más adecuado sería que tuviera un frecuencia relacionada con la evolución de tus campañas. Si son frecuentes, puedes hacer que el activador ejecute el script diariamente. Si consultas tus informes los lunes, puedes lanzarlo todos los domingos por la noche. Simplemente ten en cuenta que esta petición consume recursos energéticos y por sostenibilidad y responsabilidad no deberíamos derrocharlos.
Ya tienes todos tus datos dispuestos en Google Sheets. Incluso así ya son tremendamente útiles (los analistas hemos usado Excel o Sheets durante años para nuestros dashboards). Pero ahora vamos a llevárnoslos a Data Studio para jugar con ellos a nuestro antojo y poder cruzarlos con otras fuentes.
Si no necesitas datos sobre tu lista, sáltate la siguiente sección y ve directamente al conector de GDS.
Cómo crear la hoja de cálculo para listas
Para este proceso simplemente debes repetir los pasos anteriores en una nueva hoja de cálculo. En esta ocasión, renombra la pestaña de la primera hoja como ListUpdate.
Puedes volver a usar la misma clave API del caso anterior y añadirla en la línea 2 del script.
En este caso necesitas también la ID de la lista que vas a analizar para añadirla a la linea 3 del script. Recuerda que tu cuenta puede tener varias listas y este conector solo entregará datos de una de ellas, de aquella que indiques su ID. Puedes consultar ese dato en Audience > Settings > Audience name and campaign defaults > Audience ID.
function chimpSubscribers() {
var API_KEY = '<meta charset="utf-8">CLAVE-API-DE-TU-CUENTA-DE-MAILCHIMP'; // Clave API de tu cuenta de MailChimp
var LIST_ID = 'ID-LISTA'; // ID de tu lista de MailChimp. Puedes verla en Audience > Settings > Audience name and campaign defaults > Audience ID
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("ListUpdate");
var dc = API_KEY.split('-')[1];
var api = 'https://'+ dc +'.api.mailchimp.com/3.0';
var memberList = '/lists/'+LIST_ID
options = {"headers": {"authorization": 'apikey '+API_KEY}};
var apiCall = function(endpoint){
apiResponseMembers = UrlFetchApp.fetch(api+endpoint,options);
json = JSON.parse(apiResponseMembers);
return json
}
//Extraemos la fecha la llamada a la API de Mailchimp
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ListUpdate");
// You could use now Date(); on its own but it will not look Nice.
var date = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy")
var endDate = date
var members = apiCall(memberList);
if (members) {
var member_count = members.stats.member_count;
var unsubscribe_count = members.stats.unsubscribe_count;
var cleaned_count = members.stats.cleaned_count;
var member_count_since_send = members.stats.member_count_since_send;
var unsubscribe_count_since_send = members.stats.unsubscribe_count_since_send;
var cleaned_count_since_send = members.stats.cleaned_count_since_send;
var campaign_count = members.stats.campaign_count;
var campaign_last_sent = members.stats.campaign_last_sent;
var merge_field_count = members.stats.merge_field_count;
var avg_sub_rate = members.stats.avg_sub_rate;
var avg_unsub_rate = members.stats.avg_unsub_rate;
var target_sub_rate = members.stats.target_sub_rate;
var open_rate = members.stats.open_rate;
var click_rate = members.stats.click_rate;
var last_sub_date = members.stats.last_sub_date;
var last_unsub_date = members.stats.last_unsub_date;
var list_rating = members.list_rating;
var report = [endDate, member_count, unsubscribe_count, cleaned_count, member_count_since_send, unsubscribe_count_since_send, cleaned_count_since_send, campaign_count, campaign_last_sent, avg_sub_rate, avg_unsub_rate, open_rate, click_rate, last_sub_date, last_unsub_date, list_rating];
Logger.log(report);
// Descomenta la siguiente linea si necesitas borrar de los datos de Mailchimp en la hoja de cálculo en cada llamada a la API, es decir, si no necesitas el historial.
//sheet.clear();
// Generamos de los títulos de las columnas (se sobreescriben en cada llamada)
var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ListUpdate").getRange("A1:P1");
range.setValues([["Fecha", "Suscriptores", "Total de bajas", "Contactos limpiados", "Suscripciones desde el último envío", "Bajas desde el último envío", "Contactos limpiados desde el último envío", "Número de campañas", "Fecha de la última campaña", "Media de suscripción mensual", "Media de bajas mensual", "Tasa de apertura", "Tasa de clic", "Fecha de la última suscripción", "Fecha de la última baja", "Puntuación de la lista"]]);
//Bloqueamos la primera fila para facilitar la consulta de datos de cabecera en la hoja de cálculo
sheet.setFrozenRows(1);
//Añadimos nueva fila con el reporte de los datos recogidos en la llamada a la API de Mailchimp
sheet.appendRow(report);
}
}
Este script funciona un poco distinto que el primero. En este caso añade una linea nueva a la tabla cada vez que se ejecuta (el anterior las sobreescribía todas de nuevo). Esto es así porque como Mailchimp no guarda el histórico de evolución de la lista, usamos esta hoja de cálculo para poder archivarla y ver cómo evoluciona a lo largo del tiempo.
Sabiendo esto, llega el momento de crear el activador. De nuevo, valora la atomización de los datos que requiere tu análisis. En mi caso, con tener este dato guardado de forma semanal suele ser suficiente, pero es algo que debes valorar según tu caso. Simplemente ten en cuenta que si lo haces muy frecuentemente, se generarán decenas o centenares de filas en poco tiempo. En casos en los que necesites trabajar con Big Data, te recomiendo migrar este procedimiento a Big Query para que sea realmente práctico.
Si no necesitas el histórico de la evolución de tu lista y te conformas con el último dato, descomenta la linea 50 y de esta forma se borrarán los datos antiguos en cada carga, de tal forma que tu tabla no crecerá indefinidamente y no necesitará mantenimiento.
Conectar las Google Sheets con Google Data Studio
Esta parte del proceso es la más sencilla. Simplemente ve a tu cuenta de GDS y añade una nueva fuente de datos escogiendo como conector el de Hojas de Cálculo de Google.
Esto te permitirá navegar por los documentos de tu cuenta de Drive hasta seleccionar una de las dos hojas que has creado (evidentemente debes repetir este proceso dos veces para añadir las dos hojas). Si no eres un desarrollador certificado te saltará una advertencia de seguridad. No pasa nada, podrás seguir adelante asumiendo el riesgo.

Mantén seleccionada la opción Usar la primera fila como encabezados para que GDS pueda identificar cada dato.
Llega el momento ahora de configurar los campos de cada dimensión. Puedes cambiar el nombre de los que quieras para que se adapten a la naturaleza de cada informe o de la persona que lo va a consultar. También puedes escoger el tipo de dato y la fórmula de agregación. Esto depende de nuevo de las características de tu informe pero si no sabes cómo elegirlo, no te preocupes porque podrás cambiarlo más adelante en cada caso y hacer pruebas.
Con esto te habrás llevado todos los datos de Mailchimp a las hojas de cálculo y desde allí, a Data Studio. Solo te queda ir añadiendo las nuevas dimensiones a tu escritorio con aquellas herramientas de visualización más adecuadas.
Conclusión
Los informes de Mailchimp son bastante prácticos pero la experiencia de consultarlos es sencillamente infernal. Están demasiado disgregados y no resulta nada cómodo leerlos. Si además necesitas contrastarlos con informes de Analytics, el reto es importante.
Pero ahora puedes llevártelos a Data Studio, combinarlos, compartirlos, mostrárselos a tus clientes y analizarlos cómodamente con un sistema que no te costará ni un solo euro. Genial ¿verdad?
Esperamos que los disfrutes mucho.
Créditos: El código de conexión con la API de Mailchimp es una modificación del trabajo de original de Analytics Boosters.