GAQL promete todos los datos; la realidad pone límites: de tiempo, de cuota, de privacidad, de frescura y de versión. Un proceso que no los conoce falla un martes a las 3 de la mañana sin que nadie lo vea. Esta lección es la lista de límites y el diseño que los sobrevive.
Límites de los scripts de Google Ads
| Límite | Valor | Consecuencia |
|---|---|---|
| Tiempo por ejecución | 30 min (60 en algunos de MCC en paralelo) | Trabajos largos se cortan: hay que partir en tandas y reanudar |
| Frecuencia | Una ejecución programada por hora por script | No hay "cada 10 minutos" |
| Llamadas a servicios externos (UrlFetch) | Cuota diaria por usuario: ~20.000 en Gmail, ~100.000 en Workspace | Scripts que llaman a IA o a un servidor consumen cuota; el ejecutor con Workspace tiene cinco veces más |
| Hojas de cálculo | Límites de celdas y de llamadas a Sheets | Escribir por bloques, no celda a celda |
| Cuota diaria de envío | Avisos agrupados, no uno por evento | |
| Ejecuciones concurrentes | Limitadas por cuenta | Varios scripts a la misma hora se pisan |
Límites de la API
- Operaciones y filas por petición: grandes pero finitos; las consultas se paginan.
- Cuotas diarias por token de desarrollador (acceso básico vs estándar): un volumen alto de consultas exige el acceso estándar.
- Mutaciones: límites por petición y validaciones estrictas (presupuestos en micros múltiplos, targets dentro de rangos).
Datos que no existen o llegan tarde
- Umbral de privacidad: términos de búsqueda (y combinaciones de AI Max) de poco volumen no aparecen; la suma de lo visible no es el total.
- Retraso de métricas: las de hoy están incompletas; conversiones llegan con latencia; algunas métricas (IS, calidad) se actualizan con horas o un día de retraso. Regla: consultar hasta ayer y re-consultar los últimos días en cada ejecución (re-descarga incremental con solape).
- Histórico del QS: no existe en la API; solo el valor actual.
- Comparativa de subastas: acceso limitado.
- PMax: ubicaciones solo con impresiones; términos por categorías.
Versiones de la API
La API de Google Ads publica versiones varias veces al año y retira las antiguas al cabo de un tiempo; campos y recursos se renombran o desaparecen. Por ejemplo, la v22 quedará obsoleta el 7 de octubre de 2026 y a partir de esa fecha todas las solicitudes que la usen fallarán. Los scripts de Google Ads usan una versión gestionada por Google (menos mantenimiento), pero los campos también cambian. Diseño: consultas con los campos mínimos, y una comprobación de compatibilidad (vista previa) tras cada aviso de versión.
Diseñar procesos que sobrevivan
- Tandas y reanudación: partir el trabajo (por cuenta, por campaña, por rango de fechas), guardar un cursor (dónde se quedó) en la hoja o en las propiedades del script, y reanudar en la siguiente ejecución. El trabajo pesado una vez al día por cuenta; lo ligero, cada hora.
- Ventanas de fechas congeladas: calcular el rango una vez al empezar el trabajo y guardarlo; si el trabajo dura varias ejecuciones, todas usan el mismo rango (si no, las tandas no cuadran).
- Descarga incremental con solape: cada día, los últimos N días (3-7) se vuelven a descargar y sustituyen lo guardado: así entran las conversiones tardías.
- Reintentos con espera ante errores transitorios de la API; y si falla, no toca en las escrituras.
- Escritura por bloques en hojas; lectura por bloques de configuración.
- Medidor de consumo: contar llamadas externas por ejecución y por cuenta, y reportarlas (para no chocar con la cuota a fin de mes).
- Diagnóstico: una pestaña con la traza de la última ejecución y los errores resaltados; sin ella, el fallo de las 3 de la mañana es invisible.
- Cuentas grandes: muestreo o agregación previa (GAQL permite ordenar y limitar: los 2.000 términos de más gasto en vez de 50.000).
Trampas concretas
- Consultar
segments.datesin rango → error. - Seleccionar diez segmentos "por si acaso" → millones de filas → tiempo agotado.
- IDs guardados como número en Sheets → redondeados → cruces rotos.
- Micros sumados como euros.
- Olvidar la zona horaria de la cuenta (
customer.time_zone) al calcular "ayer". - Un script que llama a la IA por cada fila → cuota de UrlFetch agotada a mediodía: agrupar en lotes.
💡 Truco ninja: varios de estos diseños son hoy estándar en la suite por haber chocado con el límite: el Agente tiene compuerta diaria (trabajo pesado una vez al día por cuenta, pendientes primero, KPIs ligeros cada hora) y cursor rotativo para reanudar; el Smart Mode del Shield descarga datos RAW de forma incremental con ventana congelada; todos los scripts llevan medidor de UrlFetch por cuenta y una pestaña de Diagnóstico con la traza. Y los análisis que no caben en 30 minutos (el Site Analyzer sobre miles de dominios) se mudaron a un servidor propio.
Qué debes recordar
- Scripts: 30 min, una por hora, cuota de UrlFetch (Workspace ×5), Sheets y email por bloques.
- Datos: umbral de privacidad, retraso (consultar hasta ayer con solape), sin histórico de QS, límites de PMax.
- Versiones de API cambian: campos mínimos y comprobación.
- Diseño: tandas con cursor, ventanas congeladas, incremental con solape, reintentos, si falla no toca, medidor, diagnóstico.