Para conocer el rendimiento de nuestras acciones de marketing y tomar decisiones estratégicas, es importante contar con informes claros.
Si gestionas fichas de Google Business Profile (GBP), sabrás las limitaciones que tiene para mostrar la evolución del negocio mes a mes.
Y si no dispones de herramientas de pago, como Supermetrics o Coupler.io, Looker Studio es tu mejor alternativa gratuita.
Este post es una guía paso a paso para que puedas crear informes de Google Business Profile en Looker Studio, y no tengas que pagar por herramientas de terceros.
Además, te regalo una plantilla de Looker Studio (la herramienta gratuita de Google para crear dashboards personalizados), para que ahorres tiempo y comiences hoy mismo a disfrutar de tus informes.
Requisitos previos para crear informes
Asegurate de tener acceso a la cuenta de Google Bussines Profile para descargar los informes locales del proyecto que quieras medir.
También vas a necesitar una cuenta de Google Drive.
Te recomiendo que utilices la misma cuenta que en Google Bussines Profile, porque vas a tener que conceder permisos más adelante.
Prepara tus carpetas en Google Drive
Crea 2 carpetas en Google Drive:
1. Para guardar tu fuente de datos.
2. Para almacenar los archivos .csv que vas a descargar.
Después crea una hoja de cálculo de Google y ponle un nombre identificativo. Por ejemplo: ‘Fuente de Datos GBP [Nombre Proyecto]’.
En la hoja de cálculo, crea las siguientes pestañas:
- Informes GBP [Nombre Proyecto] (pestaña principal)
- DesgloseDinámico
- DesgloseInteracciones
- DesgloseBusquedas (extra opcional)
- RawSearches (extra opcional)
Descarga los informes de Bussines Profile
Ahora, ves a tu cuenta de Google Bussines y selecciona el negocio que quieras medir.
Desplega el menú de ‘Acciones’ y selecciona ‘Estadísticas’.
Cuando se abra el menú para seleccionar el periodo, fija el último mes completo.
Pulsa en ‘Descargar Informe’ y listo.
Como estás configurando el informe por primera vez, te recomiendo repitas el proceso con los meses anteriores para descargar todo el histórico disponible.
Cuando hayas descargado todos los informes, súbelos a la carpeta de Google Drive que has creado para almacenar los archivos .csv.
Inserta el script de automatización
Ahora ves a la Hoja de Cálculo que has creado para comenzar a crear tu fuente de datos.
Abre ‘Apps Script’ en ‘Extensiones’ para introducir el script con el que vas a automatizar el proceso de importar datos.
Elimina las líneas de código que te aparecen por defecto e inserta el script para importar los datos que contienen los archivos .csv.
Como imagino que no sabes hacer scripts, puedes usar los que he creado con ayuda de ChatGPT (los tienes aquí, al final de este post).
Si utilizas mi script, deberás cambiar las líneas de ‘INBOX_ID’ y ‘SHEET_MAIN’ con tus datos.
- SHEET_MAIN es el nombre de la pestaña principal de tu hoja de cálculo.
- INBOX_ID es la parte final de la URL de la carpeta que has creado para almacenar los .csv en Google Drive.
Cuando hayas terminado de insertar el script, guarda el proyecto en Apps Script pulsando el icono del disco, o pulsando en el teclado CTRL + S.
Crea tus fuentes de datos para Looker Studio
Una vez configurado el script, vuelve a tu hoja de cálculo y refresca la página pulsando F5.
Debe aparecerte una opción nueva en el menú.
Contiene las 3 macros con las que vas a crear las 3 fuentes de datos que necesitas en Looker Studio.
Importa los informes de Bussines Profile
Aviso: Si es la primera vez que utilizas esta función, te pedirá que le concedas permisos para ejecutar. Si tienes alguna duda con esto, consulta este apartado al final del post.
Ahora importa los datos de los informes que has dejado en tu carpeta de Google Drive, haciendo clic en la primera opción: ‘Importar informes’.
Asegurate de que estás en la pestaña principal de tu hoja de cálculo.
Esta acción primero comprueba si hay documentos nuevos en tu carpeta de Drive y luego extrae los datos que no tengas en la tabla.
Así que cuando subas un archivo nuevo a la carpeta de Drive y pulses en ‘Importar informes’, no te duplicará los datos porque solo importará los que no estén en tu hoja de cálculo.
Genera el pívot de búsquedas
La siguiente acción: ‘Regenerar pívot de búsquedas’ es para que puedas comparar en Looker Studio, los datos de los canales de búsqueda de un mes con otro.
Al hacer clic, se creará automáticamente un desglose en la pestaña ‘DesgloseDinámico’.
Genera el pívot de interacciones
La última acción: ‘Regenerar pívot de interacciones’ es para que puedas comparar en Looker Studio, los datos de las acciones que han llevado a cabo los usuarios cuando han visualizado el perfil de Google Bussines.
Al hacer clic, se creará automáticamente un desglose en la pestaña ‘DesgloseInteracciones’.
Con esto ya tienes preparadas las 3 fuentes de datos que necesitas para crear los informes en Looker Studio y medir la evolución con comparativas año a año.
Para mantenerlo actualizado, cada mes deberás seguir 3 sencillos pasos:
- Descargar el informe mensual en la cuenta de Google Bussines.
- Subir el archivo a tu carpeta de Google Drive.
- Activar los 3 scripts en tu hoja de cálculo.
[Extra Opcional] Crea un informe con las Consultas de Búsqueda de GBP
Aunque esta parte la pongo como opcional, es interesante.
Te supondrá un pequeño extra de trabajo cada mes, pero podrás medir los términos de búsqueda locales que activan tu ficha de Bussines Profile.
Incluso te sirve para cruzar datos con los informes de Google Search Console.
Importante: Debes tener en cuenta que las consultas con menos de 15 búsquedas mensuales Google las muestra así ‘<15’. Por este motivo, en la importación de datos se le asignará un valor de 7 para tener una media y analizar por buckets.
Para generar este informe, sigue los siguientes pasos.
Inserta el Script para crear la fuente de datos con las Consultas de Búsqueda de GBP
Abre de nuevo Apps Script en tu hoja de cálculo.
Añade un archivo nuevo de script y ponle un nombre identificativo, por ejemplo: Querys.
Ahora, introduce el script para crear el Desglose de Búsquedas.
Haz clic aquí para ir al script que comparto en este post.
Guarda el proyecto (CTRL +S), vuelve a tu hoja de cálculo y refresca la página (F5).
Ahora en la nueva sección de tu menú te aparecerá una cuarta opción: ‘Importar Desglose Búsquedas’.
Genera la pestaña de Querys
Ves al perfil de Google Bussines y pulsa en ‘Rendimiento’.
En la pestaña que se te abre, baja hasta ‘Búsquedas que han mostrado tu Perfil de Empresa en los resultados de búsqueda’.
Clica en el botón de ‘Más información’.
Selecciona con el ratón todas las consultas de búsqueda y dale a copiar (atajo de teclado: CTRL + C).
Ahora ves en tu hoja de cálculo a la pestaña ‘RawSearches’.
Asegurate de que la hoja está vacía.
Para pegar los términos de búsqueda, sitúate en la casilla A1 y pulsa en tu teclado CTRL + SHIFT + V.
Después, en la casilla B1, debes introducir la fecha que corresponda al mes de los datos en este formato: día/mes/año.
Por ejemplo: 1/04/2025
Como solo vas a tener en cuenta en los informes de Looker Studio el mes y el año, para que no te haga cosas raras pon siempre el día 1 de cada mes.
La información de la tabla te tiene que quedar así:
Ahora activa la macro 4) en tu menú GBP Autom. para importar los datos a tu pestaña ‘DesgloseBusquedas’.
Ya tienes las 4 fuentes de datos que necesitas para aprovechar mi plantilla gratuita de Looker Studio.
Conecta las fuentes de datos en Looker Studio
1. Inicia sesión en Looker Studio.
2. Clica en el botón de ‘crear’ y selecciona ‘Fuente de datos’ (esto lo tendrás que repetir 4 veces, una por cada pestaña en la hoja de cálculo).
3. Selecciona la hoja de cálculo que has creado como fuente de datos y añade una de las pestañas.
- Informes GBP [Nombre Proyecto]
- DesgloseDinámico
- DesgloseInteracciones
- DesgloseBusquedas
En el menú de opciones marca ‘usar la primera fila como encabezados’ e ‘incluir celdas ocultas y excluidas’.
Dale a conectar en la esquina superior derecha y repite el proceso con las 3 pestañas de datos restantes.
Ahora ya puedes trabajar en tus dashboards de Looker Studio y crear informes personalizados de Bussines Profile para ti o tus clientes.
Aunque si no sabes todavía como crear informes en la aplicación, o no quieres perder mucho tiempo creando, te invito a que utilices mi plantilla.
Cómo importar la plantilla de Looker Studio
Cuando hayas conectado todas tus fuentes de datos, haz clic en este enlace para que se te cargue mi plantilla en otra ventana.
Una vez abierta, haz clic en; ‘Usar mis propios datos’ > ‘Sustituir’, para conectar tus fuentes de datos a la plantilla.
Se te abrirá desde abajo de la pantalla el panel de tus ‘Hojas de Cálculo’, para seleccionar las fuentes de datos.
Cuando las hayas sustituido todas, haz clic en ‘Editar y compartir’… ¡y ya lo tienes!
¿Qué puedes medir es este informe de GBP?
Este informe consta de 4 hojas, cada una con un propósito de análisis y diferentes filtros que puedes utilizar a tu conveniencia (fecha, categoría de dispositivo, país, término de búsqueda…).
1. Rendimiento mensual: Se trata de la visión general del último mes completo, con los valores totales de visualizaciones e interacción en tu perfil de GBP.
Incluye el desglose y el porcentaje de cambios respecto al mismo mes del año anterior.
Puedes ver los meses anteriores cambiando la fecha en el calendario.
2. Gráficas de Evolución: Aquí puedes ver la evolución de las visualizaciones y las interacciones en los últimos 18 meses.
Cómo están desglosadas, es muy fácil determinar cuales son las interacciones más importantes para el negocio y qué canales son los que más impacto tienen.
3. Desglose de Búsquedas: Aquí puedes consultar las Búsqueda que han mostrado tu Perfil de Empresa.
Puedes segmentar por grupos según su volumen (buckets) y por Query.
4. Histórico de Rendimiento: Aquí tienes el total de visualizaciones e interacciones de tu perfil de Google Bussines que has introducido.
Tienes un calendario para filtrar fechas concretas y ver el rendimiento de ese periodo concreto.
Ahora te toca a tí aplicar lo aprendido
Ponte manos a la obra y sigue el paso a paso para crear tu informe personalizado.
A continuación tienes los scripts para que puedas automatizar la importación de datos y a la plantilla puedes acceder desde este enlace.
¿Qué hago si tengo varios locales en el mismo perfil de GBP?
Si gestionas varias ubicaciones o negocios diferentes, puedes duplicar la hoja de cálculo para cada uno, o adaptar el script para que distinga por código de tienda.
Scripts de automatización
Para volver a la explicación del script 1 haz clic aquí.
Para ir al script 2 haz clic aquí.
Script 1: (Haz clic en ‘Copy’ en la esquina superior derecha del código)
/***** CONFIG *******************************************************/
const INBOX_ID = 'INSERTA AQUÍ EL ID DE TU URL';
const DONE_ID = '';
const SHEET_MAIN = 'INSERTA AQUÍ EL NOMBRE DE TU PESTAÑA PRINCIPAL';
const SHEET_PIVOT = 'DesgloseDinámico';
const SHEET_INT = 'DesgloseInteracciones';
/*******************************************************************/
/** Extrae 'YYYY-MM' de un filename tipo '2025-3-1…' */
function getPeriodo(fn) {
const m = fn.match(/(\d{4})-(\d{1,2})-\d{1,2}/);
return m ? m[1] + '-' + ('0' + m[2]).slice(-2) : null;
}
/** Menú con 3 opciones */
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('GBP Autom.')
.addItem('1) Importar informes', 'importarInformesGbp')
.addItem('2) Regenerar pivot búsquedas', 'generarDesglose')
.addItem('3) Regenerar pivot interacciones', 'generarDesgloseInteracciones')
.addToUi();
}
/** 1) Importa solo CSVs nuevos y actualiza ambos pivots */
function importarInformesGbp() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
let main = ss.getSheetByName(SHEET_MAIN);
if (!main) main = ss.insertSheet(SHEET_MAIN);
// 1. AÑADE ENCABEZADOS SI NO HAY NADA
if (main.getLastRow() === 0) {
main.appendRow([
'Periodo','Año','Mes','Código de tienda','Nombre de la empresa','Dirección',
'Total Búsquedas','Búsq. Google (móvil)','Búsq. Google (ordenador)',
'Maps (móvil)','Maps (ordenador)',
'Total Int.','Llamadas','Mensajes','Reservas','Cómo llegar',
'Clics web','Pedidos comida','Clics menú','Reservas hoteles'
]);
}
// 2. CREA EL SET DE CLAVES EXISTENTES NORMALIZANDO A 'YYYY-MM|CODIGO'
const last = main.getLastRow();
const valores = last > 1
? main.getRange(2, 1, last - 1, 4).getValues()
: [];
const claves = new Set();
valores.forEach(r => {
let per = r[0];
if (per instanceof Date) {
per = Utilities.formatDate(per, Session.getScriptTimeZone(), 'yyyy-MM');
} else {
per = per.toString().slice(0, 7);
}
const cod = r[3];
if (per && cod) claves.add(`${per}|${cod}`);
});
// 3. LEER CSVs de la carpeta
const inbox = DriveApp.getFolderById(INBOX_ID);
const done = DONE_ID ? DriveApp.getFolderById(DONE_ID) : null;
const archivos = [];
const it = inbox.getFilesByType(MimeType.CSV);
while (it.hasNext()) {
const f = it.next();
const p = getPeriodo(f.getName());
if (p) archivos.push({ file: f, periodo: p });
}
archivos.sort((a, b) => a.periodo.localeCompare(b.periodo));
// 4. IMPORTAR SOLO LOS NUEVOS
let importados = 0;
archivos.forEach(o => {
const p = o.periodo;
const f = o.file;
const data = Utilities.parseCsv(f.getBlob().getDataAsString('UTF-8'));
if (data.length < 3) return;
const r = data[2];
const cod = r[0];
const key = `${p}|${cod}`;
if (claves.has(key)) return; // YA ESTÁ
// parseo valores
const vals = r.map(x => Number(x) || 0);
const bMov = vals[4], bOrd = vals[5], mMov = vals[6], mOrd = vals[7];
const tBus = bMov + bOrd + mMov + mOrd;
const llam = vals[8], mens = vals[9], resv = vals[10], clg = vals[11];
const cWeb = vals[12], pCom = vals[13], cMen = vals[14], rHot = vals[15];
const tInt = llam + mens + resv + clg + cWeb + pCom + cMen + rHot;
const [yyyy, mm] = p.split('-').map(n => +n);
main.appendRow([
p, yyyy, mm, cod, r[1], r[2],
tBus, bMov, bOrd, mMov, mOrd,
tInt, llam, mens, resv, clg,
cWeb, pCom, cMen, rHot
]);
claves.add(key);
importados++;
// mover a DONE si toca
if (done && inbox.getId() !== done.getId()) {
done.addFile(f);
inbox.removeFile(f);
}
});
SpreadsheetApp.getUi().alert(
importados
? `✅ Se importaron ${importados} informe(s).`
: 'No había informes nuevos por importar.'
);
// 5. Regenerar ambos pivots
generarDesglose();
generarDesgloseInteracciones();
}
/** 2) Reconstruye la hoja DesgloseDinámico (búsquedas) */
function generarDesglose() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const main = ss.getSheetByName(SHEET_MAIN);
if (!main) return;
let piv = ss.getSheetByName(SHEET_PIVOT);
if (piv) piv.clear(); else piv = ss.insertSheet(SHEET_PIVOT);
const datos = main.getDataRange().getValues();
const out = [['Periodo','Canal','Valor']];
for (let i = 1; i < datos.length; i++) {
const r = datos[i];
const p = r[0]; if (!p) continue;
out.push([p, 'Búsq. Google (móvil)', r[7]]);
out.push([p, 'Búsq. Google (ordenador)', r[8]]);
out.push([p, 'Google Maps (móvil)', r[9]]);
out.push([p, 'Google Maps (ordenador)', r[10]]);
}
piv.getRange(1, 1, out.length, 3).setValues(out);
}
/** 3) Reconstruye la hoja DesgloseInteracciones */
function generarDesgloseInteracciones() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const main = ss.getSheetByName(SHEET_MAIN);
if (!main) return;
let piv = ss.getSheetByName(SHEET_INT);
if (piv) piv.clear(); else piv = ss.insertSheet(SHEET_INT);
const datos = main.getDataRange().getValues();
const out = [['Periodo','Canal','Valor']];
for (let i = 1; i < datos.length; i++) {
const r = datos[i];
const per = r[0]; if (!per) continue;
out.push([per, 'Llamadas', r[12]]);
out.push([per, 'Mensajes', r[13]]);
out.push([per, 'Reservas', r[14]]);
out.push([per, 'Cómo llegar', r[15]]);
out.push([per, 'Clics sitio web', r[16]]);
out.push([per, 'Pedidos de comida', r[17]]);
out.push([per, 'Clics en el menú de comida', r[18]]);
out.push([per, 'Reservas de hoteles', r[19]]);
}
piv.getRange(1, 1, out.length, 3).setValues(out);
}
Para volver a la explicación del script 2 haz clic aquí.
Script 2: (Haz clic en ‘Copy’ en la esquina superior derecha del código)
/**
* 4) Importa la lista de RawSearches (3 líneas por registro)
* y la va añadiendo en DesgloseBusquedas sin perder el histórico.
*/
function importarDesgloseBusquedaManual() {
const ss = SpreadsheetApp.getActive();
const raw = ss.getSheetByName('RawSearches');
if (!raw) {
SpreadsheetApp.getUi().alert('❗ La hoja RawSearches no existe.');
return;
}
// 1) Leer periodo de B1 (o cadena vacía si no hay nada)
const periodo = raw.getRange('B1').getValue().toString().trim() || '';
// 2) Leer columna A, filtrar líneas vacías
const lines = raw
.getRange('A1:A' + raw.getLastRow())
.getValues()
.flat()
.map(String)
.map(s => s.trim())
.filter(s => s !== '');
// 3) Agrupar de 3 en 3 en [periodo, consulta, volumen]
const rows = [];
for (let i = 0; i < lines.length; i += 3) {
const term = lines[i + 1] || '';
const vol = lines[i + 2] || '';
rows.push([ periodo, term, vol ]);
}
if (rows.length === 0) {
SpreadsheetApp.getUi().alert('❗ No hay registros en RawSearches.');
return;
}
// 4) Obtener (o crear) la hoja DesgloseBusquedas
let target = ss.getSheetByName('DesgloseBusquedas');
if (!target) {
target = ss.insertSheet('DesgloseBusquedas');
target.appendRow(['Periodo','Consulta','Volumen']);
}
// 5) Leer los periodos ya importados para no duplicar
const lastRow = target.getLastRow();
const existingPer = lastRow > 1
? target.getRange(2, 1, lastRow - 1, 1).getValues().flat()
: [];
if (existingPer.includes(periodo)) {
SpreadsheetApp.getUi().alert(`❗ El periodo "${periodo}" ya fue importado.`);
return;
}
// 6) Añadir filas al final
target.getRange(lastRow + 1, 1, rows.length, 3).setValues(rows);
SpreadsheetApp.getUi().alert(`✅ Importadas ${rows.length} consultas para "${periodo}".`);
}
/**
* Menú personalizado “GBP Autom.” con todas las opciones
*/
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('GBP Autom.')
.addItem('1) Importar informes', 'importarInformesGbp')
.addItem('2) Regenerar pivot búsquedas', 'generarDesglose')
.addItem('3) Regenerar pivot interacciones', 'generarDesgloseInteracciones')
.addSeparator()
.addItem('4) Importar desglose búsquedas', 'importarDesgloseBusquedaManual')
.addToUi();
}
Cómo autorizar el permiso de ejecución
La primera vez que vayas a ejecutar el script, Google te pedirá que concedas permisos para poder ejecutarlo.
Primero te informará que el documento tiene una secuencia de comandos configurada.
Dale a ‘Aceptar’ y continua.
A continuación, si no tienes una cuenta verificada de desarrollador, te informará que no ha podido verificar la aplicación.
Para poder utilizar el script, primero haz clic en ‘configuración avanzada’.
Al desplegarse, debes pulsar en ‘Ir a [Nombre de proyecto] (no seguro).
Por último, tendrás que seleccionar los tipos de permiso que necesitas conceder para que funcione el script.
Seleccionas todo y pinchas en ‘Continuar’.