Cómo unificar datos de Google Ads y Meta Ads en Google Sheets sin pagar por Supermetrics

Automatiza la extracción y unificación de datos de Google Ads y Meta Ads en Google Sheets con un script gratuito de Google Apps Script. Sin Supermetrics, sin coste mensual.

Persona analizando datos de campañas publicitarias en Google Sheets

Al final de este artículo encontrarás el enlace a GitHub con el script listo para usar.

El problema real del reporting multicanal: tres fricciones que frenan tu análisis

Si gestionas campañas en Google Ads y Meta Ads al mismo tiempo, probablemente reconoces alguna de estas situaciones:

1. No puedes ver los datos agregados de ambas plataformas en un solo sitio

Google Ads tiene su interfaz. Meta tiene la suya. Cada una con sus propias métricas, sus propias columnas y su propia lógica de navegación. Cuando necesitas una vision global — cuanto has gastado en total, cuantas impresiones has generado entre los dos canales, cual tiene mejor coste por clic — tienes que abrir dos pestanas, exportar dos archivos y cruzar los datos manualmente. Cada vez.

2. Tu informe tiene dos bloques separados, uno por canal, en vez de una vista unificada

La consecuencia directa del punto anterior es que la mayoria de informes acaban estructurados asi: una seccion para Google, una seccion para Meta. Dos tablas, dos graficos, dos logicas. Eso funciona si tu objetivo es revisar cada canal por separado, pero no si quieres tomar decisiones de distribucion de presupuesto entre canales, identificar sinergias o analizar el rendimiento agregado de toda tu inversion publicitaria.

3. Los conectores directos a Looker Studio son lentos e inestables

Herramientas como Dataslayer o Supermetrics permiten conectar Google Ads y Meta directamente a Looker Studio sin pasar por Google Sheets. Sobre el papel es la solucion mas comoda. En la practica, tiene un problema tecnico importante: cada vez que el informe se abre o se refresca, el conector hace una llamada en tiempo real a la API de cada plataforma para reconstruir los datos desde cero. Eso se traduce en tiempos de carga elevados y en fallos intermitentes cuando la API no responde correctamente.

Google Sheets, en cambio, actua como una base de datos ya construida. Los datos estan ahi, almacenados, y Looker Studio los lee de forma instantanea sin necesidad de hacer ninguna llamada externa en el momento de cargar el informe. La diferencia en velocidad y fiabilidad es notable.

Importante: este script no elimina la necesidad de un conector para extraer los datos iniciales de cada plataforma. Seguirás necesitando Dataslayer u otra herramienta similar para llevar los datos a Google Sheets. Lo que el script hace es darte mucha más flexibilidad sobre como estructuras y consolidas esos datos, sin tener que ampliar tu licencia ni depender de funcionalidades avanzadas del conector.

Qué hace este script: consolidación automática de campañas multicanal

El script que vas a ver en este artículo es una función de Google Apps Script — el motor de automatización nativo de Google Sheets — que realiza tres tareas en una sola ejecución:

  • Lee datos de dos hojas de origen: una con los datos de Google Ads y otra con los de Meta Ads.
  • Normaliza los nombres de campaña: los convierte todos a mayúsculas, eliminando errores por inconsistencias tipográficas.
  • Escribe todos los datos en una hoja unificada: llamada "All Ads", limpiando primero cualquier dato anterior para evitar duplicados.

El resultado es una hoja de cálculo que contiene todas tus campañas — de Google y de Meta — en el mismo formato, con los mismos campos, lista para conectar con cualquier dashboard o para analizar directamente con tablas dinámicas.

Estructura de pestañas del Google Sheet: Google Ads, Meta Ads y All Ads
Figura 1. Estructura de pestañas del Google Sheet con datos de origen y hoja consolidada.

Cómo llegan los datos a Google Sheets

Antes de ejecutar el script, necesitas tener los datos de Google Ads y Meta Ads en dos hojas separadas dentro del mismo Google Sheet. Hay varias formas de conseguirlo:

  • Dataslayer: un conector gratuito (con plan de pago para mayor volumen) que extrae datos directamente desde las APIs de Google Ads y Meta Ads hacia Google Sheets. Es la opción que se ha utilizado en el ejemplo de este artículo.
  • Google Ads Reports: Google tiene su propio add-on nativo para exportar datos de campañas a Sheets.
  • Exportación manual: si el volumen de datos es pequeño, puedes exportar los CSVs desde cada plataforma e importarlos en las hojas correspondientes.

Regla clave: mismo orden de columnas en ambas hojas

El script lee las columnas por posición, no por nombre. Esto significa que el orden en que configures las métricas y dimensiones en una plataforma debe ser exactamente el mismo en la otra. Si en Google Ads la primera columna es el nombre de campaña, la segunda es la fecha y la tercera es impresiones, Meta Ads debe tener exactamente ese mismo orden.

Ejemplo correcto: Campaña → Fecha → Impresiones → Clics → Coste → Fuente (en ambas hojas, en este orden). Si una hoja tiene las columnas en un orden distinto, los datos se mezclarán incorrectamente en la hoja unificada.

La columna Source: por qué es imprescindible

La última columna de cada hoja debe ser una columna personalizada llamada Source (o Fuente) que identifique el canal de origen de cada fila. Esta columna no la exporta ninguna plataforma de forma nativa — la tienes que añadir tú manualmente como columna fija con un valor constante.

  • En la hoja de Google Ads: todas las filas tienen el valor GOOGLE en esta columna.
  • En la hoja de Meta Ads: todas las filas tienen el valor FACEBOOK en esta columna.

El script usa esta columna como filtro de calidad: descarta cualquier fila en la que la columna Source esté vacía. Además, una vez consolidados los datos en la hoja unificada, la columna Source se convierte en una dimensión de filtro en Looker Studio — puedes segmentar cualquier gráfico por canal con un solo clic.

Hoja de Google Ads en Google Sheets con columna Source añadida
Figura 2. Ejemplo de la hoja de Google Ads con columna Source añadida manualmente.
Hoja de Meta Ads en Google Sheets con columna Source añadida
Figura 3. Ejemplo de la hoja de Meta Ads con la misma estructura y columna Source.

El script: código completo y explicación línea por línea

A continuación tienes el código completo del script. En el siguiente apartado lo explicamos en detalle para que puedas entender exactamente qué hace cada parte, incluso si nunca has trabajado con Google Apps Script.

function combinarFilas() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // Hojas de origen
  var hojas = ["Google Ads", "Meta Ads"];

  // Hoja de destino
  var combinedSheet = ss.getSheetByName("All Ads");
  if (!combinedSheet) {
    combinedSheet = ss.insertSheet("All Ads");
  }

  // Copiamos cabeceras de la primera hoja
  var headers = ss.getSheetByName("Google Ads")
    .getRange(1, 1, 1, 6).getValues()[0];

  // Limpiamos datos anteriores
  combinedSheet.clear();
  combinedSheet.getRange(1, 1, 1, headers.length).setValues([headers]);

  var data = [];

  // Iteramos por cada hoja de origen
  hojas.forEach(function(hoja) {
    var sheet = ss.getSheetByName(hoja);
    if (sheet) {
      var lastRow = sheet.getLastRow();
      if (lastRow > 1) {
        var values = sheet.getRange(2, 1, lastRow - 1, 6).getValues();
        // Convertir columna 1 (Campaña) a MAYÚSCULAS
        for (var i = 0; i < values.length; i++) {
          if (values[i][0]) {
            values[i][0] = String(values[i][0]).trim().toUpperCase();
          }
        }
        data = data.concat(values);
      }
    }
  });

  // Filtra filas con valor en columna 6 (métrica clave)
  var filteredData = data.filter(function(row) {
    return row[5] !== '';
  });

  // Escribe datos combinados
  if (filteredData.length > 0) {
    combinedSheet.getRange(2, 1, filteredData.length, headers.length)
      .setValues(filteredData);
  }

  Logger.log(filteredData.length + " filas combinadas.");
}

¿Qué hace cada parte del script?

1. Identificar las hojas de origen

El script empieza declarando un array con los nombres exactos de las dos hojas que quieres combinar: "Google Ads" y "Meta Ads". Si en tu caso las hojas tienen otro nombre, simplemente cambia esas cadenas de texto por el nombre que hayas usado. El script no impone ningún nombre concreto — lo único importante es que el nombre en el código coincida exactamente con el nombre de la pestaña en el Google Sheet.

2. Crear la hoja de destino si no existe

El script busca una hoja llamada "All Ads". Si no la encuentra, la crea automáticamente. Esto significa que puedes ejecutar el script en un Google Sheet nuevo sin necesidad de preparar nada manualmente. Al igual que con las hojas de origen, puedes cambiar este nombre en el código si prefieres otro.

3. Limpiar datos anteriores

Antes de escribir nada, el script limpia todo el contenido de la hoja de destino. Esto evita que cada ejecución acumule datos duplicados encima de los anteriores. Es un comportamiento importante: el script siempre parte de cero y reescribe con los datos actuales.

4. Convertir nombres de campaña a mayúsculas

Este es uno de los puntos más útiles del script. Los nombres de campaña en Google Ads y en Meta Ads a veces tienen mayúsculas y minúsculas mezcladas según cómo fueron creados. Si quieres hacer análisis comparativos o cruzar datos más adelante, necesitas que el mismo nombre de campaña siempre tenga el mismo formato. El script convierte todos los nombres a mayúsculas automáticamente.

5. Filtrar filas vacías

El script elimina cualquier fila en la que la columna 6 (la fuente: GOOGLE o FACEBOOK) esté vacía. Esto actúa como una limpieza básica de datos, descartando filas sin información relevante que podrían distorsionar los análisis.

6. Escribir los datos consolidados

Una vez combinados y filtrados los datos de ambas hojas, el script los escribe de una sola vez en la hoja de destino. Esta operación en bloque es mucho más rápida que escribir fila por fila, lo cual es especialmente relevante cuando tienes miles de filas de datos.

Guía de implementación paso a paso

A continuación tienes las instrucciones exactas para configurar y ejecutar este script en tu Google Sheet. No necesitas conocimientos de programación previos.

Paso 1: Prepara tu Google Sheet

Asegúrate de que tu Google Sheet tiene al menos dos hojas con datos de campaña: una para Google Ads y otra para Meta Ads. Puedes llamarlas como quieras, pero recuerda que el nombre que uses aquí deberá coincidir exactamente con el que pongas en el script más adelante.

Las columnas deben estar en el mismo orden en ambas hojas. El script lee los datos por posición, no por nombre de columna. Elige las métricas y dimensiones que necesites en tu conector (Dataslayer u otro), pero configúralas en el mismo orden en Google Ads y en Meta Ads. Por ejemplo:

  • Columna 1: Nombre de campaña
  • Columna 2: Fecha
  • Columna 3: Impresiones
  • Columna 4: Clics
  • Columna 5: Coste
  • Columna 6: Source (ver instrucciones a continuación)

Añade una columna Source de forma manual. Ninguna plataforma exporta esta columna de forma nativa, así que debes añadirla tú como columna fija al final de cada hoja. En la hoja de Google Ads, rellena toda la columna con el valor GOOGLE. En la hoja de Meta Ads, rellena toda la columna con el valor FACEBOOK. Si usas Dataslayer, puedes configurar esta columna como una dimensión personalizada directamente en la consulta.

Esta columna cumple dos funciones: el script la usa como filtro de calidad (descarta filas sin valor en esta columna) y, una vez consolidados los datos, te permite filtrar por canal en cualquier dashboard de Looker Studio.

Paso 2: Abre el editor de Apps Script

  1. En tu Google Sheet, haz clic en el menú superior "Extensiones".
  2. Selecciona "Apps Script".
  3. Se abrirá una nueva pestaña con el editor de código.
Menú Extensiones de Google Sheets mostrando la opción Apps Script
Figura 6. Acceso al editor de Apps Script desde el menú de Google Sheets.

Paso 3: Pega el script

  1. Borra cualquier código que aparezca por defecto en el editor (normalmente una función vacía llamada myFunction).
  2. Copia el código completo que aparece en la sección anterior de este artículo.
  3. Pégalo en el editor.
  4. Haz clic en el icono de guardar (disco) o pulsa Ctrl+S / Cmd+S.
El código del script pegado en el editor de Apps Script
Figura 7. El código del script pegado en el editor de Apps Script.

Paso 4: Ejecuta el script por primera vez

  1. Con el script guardado, haz clic en el botón "Ejecutar" (triángulo de reproducción) en la barra superior del editor.
  2. La primera vez, Google te pedirá que autorices el script para que pueda acceder a tu hoja de cálculo. Acepta los permisos.
  3. Espera unos segundos. Cuando termine, verás un mensaje en el registro de ejecución en la parte inferior del editor.
  4. Vuelve a tu Google Sheet. Deberías ver una nueva pestaña llamada "All Ads" con todos los datos combinados.
Hoja All Ads con datos de Google Ads y Meta Ads unificados
Figura 8. Los datos de ambas hojas correctamente juntados en "All Ads"

Paso 5 (opcional): Programar la ejecución automática

Si quieres que el script se ejecute automáticamente — por ejemplo, cada mañana para tener los datos del día anterior actualizados — puedes configurar un activador temporal desde el propio editor de Apps Script:

  1. En el editor de Apps Script, haz clic en el icono del reloj en el panel lateral izquierdo ("Activadores").
  2. Haz clic en "Añadir activador" en la esquina inferior derecha.
  3. Selecciona la función combinarFilas, el tipo de activador "Basado en tiempo" y la frecuencia que necesites (cada día, cada hora, etc.).
  4. Guarda el activador. A partir de ese momento el script se ejecutará automáticamente.

Por qué esto es relevante para un Growth o Demand Gen Manager

Este script resuelve directamente las tres fricciones descritas al inicio del artículo:

  • Una única fuente de verdad: en lugar de tener una pestaña para Google y otra para Meta, tienes una sola hoja con todos los datos en el mismo formato. Cualquier análisis que hagas — por canal, por fecha, por campaña — parte del mismo origen.
  • Informes unificados desde el primer momento: puedes conectar la hoja consolidada a Looker Studio y construir un único informe con métricas agregadas de ambos canales, sin duplicar gráficos ni hacer cálculos manuales.
  • Carga instantánea en Looker Studio: al leer desde Google Sheets en lugar de llamar a las APIs de Google Ads y Meta en tiempo real, los informes cargan de forma inmediata y sin fallos intermitentes. Google Sheets actúa como caché de los datos.
  • Flexibilidad sin ampliar la licencia del conector: si usas Dataslayer, Supermetrics u otro conector en su plan básico, este script te permite consolidar y estructurar los datos a tu medida sin necesitar funcionalidades avanzadas de pago.
  • Normalización automática de nombres de campaña: los nombres en mayúsculas garantizan que las mismas campañas siempre se agrupan correctamente, independientemente de cómo fueron creadas en cada plataforma.

La diferencia entre un informe que tarda 30 segundos en cargar y uno que carga en 2 segundos no es un detalle técnico. Es la diferencia entre un informe que se usa y uno que se evita.

Conclusión

El reporting multicanal no debería ser un problema de infraestructura. Si tienes los datos en Google Sheets, tienes todo lo que necesitas para construir una vista consolidada que cargue rápido, que no falle y que puedas personalizar a tu medida.

Este script no reemplaza tu conector de datos — seguirás necesitando Dataslayer o una herramienta similar para traer los datos de cada plataforma. Lo que hace es eliminar la fricción que viene después: los informes fragmentados por canal, los tiempos de carga elevados en Looker Studio y la dependencia de funcionalidades avanzadas que no siempre necesitas. Con 40 líneas de código y una configuración inicial de menos de una hora, tienes un sistema de reporting que funciona.

Descarga el script en GitHub

Accede al repositorio de GitHub con el código completo, listo para copiar y pegar en tu Google Sheet. Sin registro, sin coste, sin condiciones.

github.com/ferrerponseti

Si quieres llevar esta automatización más lejos — integrando datos de más canales, conectando el sheet a un dashboard de Looker Studio, o construyendo un sistema de reporting a medida — puedes reservar una sesión de consultoría conmigo en el formulario que tienes en el artículo o puedes escribirme en pau@ferrerponseti.com