Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
Google Apps Script es una plataforma basada en JavaScript que permite automatizar y ampliar Google Workspace desde el navegador. Puede leer y modificar hojas de cálculo, enviar correos, crear documentos, organizar archivos de Drive, generar eventos de Calendar y conectar servicios externos mediante APIs.
Es especialmente útil si tu trabajo ya ocurre en Sheets, Gmail, Drive o Forms y necesitas una automatización con lógica propia. En este tutorial crearás un ejemplo funcional para enviar un correo desde una fila de Google Sheets y conocerás los permisos, activadores, límites y errores que debes tener en cuenta.
¿Qué es Google Apps Script?
Google Apps Script es un entorno de ejecución en la nube que usa JavaScript junto con servicios y objetos propios de Google. El código se escribe en un editor del navegador, se guarda en Google Drive y normalmente se ejecuta en servidores de Google, por lo que no necesitas instalar Node.js, un servidor local ni un entorno de desarrollo completo.
Free tools Windows power users keep installed
One-click scans. No signup required.
No es un lenguaje independiente ni se limita a las macros de Sheets: es JavaScript dentro del runtime de Apps Script. Sus servicios integrados incluyen SpreadsheetApp, GmailApp, MailApp, DriveApp, DocumentApp y CalendarApp. También puedes realizar solicitudes HTTP con UrlFetchApp para consumir APIs externas.
#1 Best Overall
La documentación oficial de Apps Script lo presenta como una herramienta para automatizar tareas, crear funciones personalizadas, añadir interfaces a archivos de Workspace, publicar aplicaciones web y desarrollar complementos.
Proyectos vinculados e independientes
Un proyecto puede estar vinculado a un archivo de Sheets, Docs, Slides o Forms. En ese caso, el script tiene un contexto natural para trabajar con ese archivo y resulta sencillo crear funciones, menús y activadores relacionados.
También puedes crear un proyecto independiente desde Apps Script. Esta opción es más apropiada cuando el código coordina varios archivos, funciona como servicio central o no debe depender de un documento concreto.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Qué no es
Apps Script no es automáticamente un backend de producción, una base de datos ni una plataforma ilimitada. Sus ejecuciones tienen cuotas, límites de tiempo y permisos. Puede ser una solución de producción para automatizaciones internas bien diseñadas, pero una API pública de alta disponibilidad, un sistema con millones de registros o una aplicación que requiera colas y observabilidad avanzadas suele necesitar otra arquitectura.
¿Para qué sirve?
Google Sheets
- Limpiar, transformar y validar datos.
- Copiar filas entre hojas o consolidar varios archivos.
- Generar informes periódicos.
- Crear funciones personalizadas.
- Añadir botones y menús propios.
- Generar documentos a partir de una plantilla.
- Enviar una notificación cuando una fila cumple una condición.
Gmail
Puede crear borradores, enviar notificaciones, leer mensajes bajo autorización, aplicar etiquetas y procesar correos. También permite crear procesos de combinación de correspondencia, aunque el envío está sujeto a cuotas y políticas de la cuenta.
Drive
Puedes crear carpetas, buscar archivos, renombrarlos, moverlos, copiarlos, convertir documentos y organizar archivos que llegan mediante formularios.
Docs y Slides
Una automatización puede duplicar una plantilla, sustituir marcadores como {{nombre}}, crear contratos o certificados y producir presentaciones desde los datos de una hoja.
Forms y Calendar
Apps Script puede reaccionar al envío de un formulario, guardar o transformar sus respuestas, crear eventos, enviar confirmaciones y sincronizar datos con calendarios.
Rank #2
Interfaces y aplicaciones
Además de automatizaciones invisibles, puedes crear menús, diálogos y barras laterales HTML; publicar una web app; desarrollar complementos para Workspace o crear bots y aplicaciones de Google Chat.
Cómo empezar paso a paso
- Abre o crea un archivo de Google Sheets, Docs, Slides o Forms.
- En Sheets, Docs, Slides o Forms, abre Extensiones > Apps Script. Para un proyecto independiente, entra en el editor de Apps Script y crea un proyecto nuevo.
- Escribe una función y guarda el proyecto.
- Selecciona la función en el editor y pulsa Ejecutar.
- En la primera ejecución, revisa y acepta los permisos solicitados.
- Consulta el registro de ejecución si aparece un error.
- Si la función debe ejecutarse sola, crea un activador desde el panel de activadores.
La autorización depende de los servicios que utilice el código. Un script que solo calcula un valor necesitará menos permisos que otro que lea Gmail o envíe correos.
Primer ejemplo: enviar un correo desde Sheets
Prepara una hoja con estos datos:
| Celda | Contenido |
|---|---|
| A2 | Dirección del destinatario |
| B2 | Asunto |
| C2 | Mensaje |
En el editor de Apps Script, pega este código:
function enviarCorreoDesdeFila() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const destinatario = hoja.getRange("A2").getValue();
const asunto = hoja.getRange("B2").getValue();
const mensaje = hoja.getRange("C2").getValue();
if (!destinatario || !asunto || !mensaje) {
throw new Error("Faltan datos en A2, B2 o C2.");
}
MailApp.sendEmail(destinatario, asunto, mensaje);
}
Guarda el proyecto, selecciona enviarCorreoDesdeFila y pulsa Ejecutar. Google mostrará una pantalla de autorización porque MailApp necesita permiso para enviar correo.
Este ejemplo es para aprender, no para enviar miles de mensajes. En un flujo real conviene validar la dirección, añadir una columna de estado, guardar la fecha de envío y evitar procesar dos veces la misma fila. Si el correo no debe duplicarse, registra un identificador o marca la fila como enviada solo después de una ejecución correcta.
Ejemplos útiles para seguir aprendiendo
Crear una función personalizada
function PRECIO_CON_DESCUENTO(precio, descuento) {
return precio * (1 - descuento);
}
En Sheets puedes usarla así:
=PRECIO_CON_DESCUENTO(A2, B2)
Con A2 = 100 y B2 = 0.20, el resultado será 80. Una función personalizada debería devolver un valor. No es recomendable que modifique celdas, envíe correos o llame repetidamente a servicios externos. Para cambiar datos, utiliza una función ejecutada manualmente o un activador.
Añadir un menú personalizado
function onOpen() {
SpreadsheetApp.getUi()
.createMenu("Mis herramientas")
.addItem("Enviar correo", "enviarCorreoDesdeFila")
.addToUi();
}
Cierra y vuelve a abrir la hoja. Aparecerá el menú Mis herramientas. onOpen(e) es un activador simple habitual para crear menús en archivos editables de Sheets, Docs, Slides y Forms.
Reaccionar a una edición
function onEdit(e) {
const rango = e.range;
if (rango.getColumn() === 4 && rango.getValue() === "Completado") {
rango.setNote(`Completado el ${new Date().toLocaleString()}`);
}
}
Cuando un usuario escriba Completado en la columna D, la celda recibirá una nota con la fecha. El parámetro e es el objeto de evento y e.range identifica el rango modificado.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Este activador responde a una edición manual. Una modificación realizada por otro script no dispara automáticamente onEdit.
Rank #3
Crear una web app mínima
function doGet() {
return HtmlService
.createHtmlOutput("<h1>Hola desde Apps Script</h1>");
}
Para publicarla:
- Abre el proyecto y selecciona Deploy > New deployment.
- Elige Web app.
- Configura quién puede acceder.
- Elige si se ejecutará como el propietario o como el usuario que accede.
- Pulsa Deploy y copia la URL publicada.
Una web app debe incluir doGet(e) o doPost(e) y devolver un objeto HtmlOutput o TextOutput. La opción de ejecución determina qué datos puede leer y con qué identidad actúa el código. La guía oficial de web apps explica estas diferencias.
Activadores simples e instalables
Los activadores son eventos que ejecutan una función sin que tengas que pulsar el botón Ejecutar.
| Característica | Simple | Instalable |
|---|---|---|
| Configuración | Se activa por el nombre reservado, como onEdit |
Se crea desde el panel de activadores o mediante código |
| Ejemplos | onOpen, onEdit, onInstall |
Al abrir, editar, cambiar, enviar un formulario o según un horario |
| Autorización | Tiene restricciones y normalmente no puede usar servicios que requieren autorización | Puede usar servicios autorizados |
| Identidad | Está limitada por las reglas del activador simple | En general se ejecuta con la autorización de quien lo creó |
| Tiempo máximo | 30 segundos | Está sujeto a los límites de Apps Script y a las cuotas |
Por eso un onEdit simple puede añadir una nota, pero no es la opción adecuada para enviar un correo con MailApp. Para esa tarea crea un activador instalable de tipo Al editar y autoriza el proyecto.
Recommended Free Tools
Recuerda que un activador instalable no necesariamente usa los permisos de la persona que provocó el evento. Normalmente actúa con la identidad del usuario que creó el activador. Si esa persona pierde acceso al archivo, cambia de dominio o abandona la organización, el flujo puede dejar de funcionar.
Permisos y seguridad
Apps Script analiza los servicios usados por el código y solicita los permisos correspondientes. La documentación de autorización explica cómo funcionan los scopes y la autorización de activadores.
- Solicita solo los permisos necesarios.
- Usa
@OnlyCurrentDoccuando el script solo necesita el archivo actual. - Revisa el archivo
appsscript.jsonen proyectos publicados y define scopes explícitos cuando corresponda. - No copies código de terceros sin entender qué datos lee y qué servicios puede controlar.
- No guardes contraseñas, tokens ni claves API directamente en el código.
- Usa propiedades protegidas o un servicio apropiado para la configuración sensible.
- Revoca el acceso de un script que ya no utilices.
Una advertencia de aplicación no verificada no demuestra por sí sola que el script sea malicioso, pero sí exige comprobar quién lo creó, qué permisos pide y si realmente necesitas concedérselos.
Cuotas y límites
Las cuotas dependen del tipo de cuenta y del servicio. La siguiente tabla recoge valores mostrados en la documentación oficial el 18 de agosto de 2026; no son garantías permanentes.
| Recurso diario | Cuenta de consumidor | Google Workspace |
|---|---|---|
Destinatarios de correo con MailApp |
100 | 1.500 |
| Destinatarios dentro del dominio | 100 | 2.000 |
| Lectura/escritura de correo | 20.000 | 50.000 |
| Tiempo total de activadores | 90 minutos | 6 horas |
Llamadas UrlFetchApp |
20.000 | 100.000 |
| Documentos creados | 250 | 1.500 |
| Presentaciones creadas | 250 | 1.500 |
| Hojas de cálculo creadas | 250 | 3.200 |
| Lectura/escritura de propiedades | 50.000 | 500.000 |
| Eventos de Calendar creados | 5.000 | 10.000 |
| Activadores por usuario y proyecto | 20 | 20 |
Las cuotas suelen ser por usuario y se reinician 24 horas después de la primera solicitud correspondiente. Google puede cambiarlas o eliminarlas sin aviso, y algunos servicios aplican límites adicionales. Si superas una cuota, la ejecución puede detenerse con una excepción.
Rank #4
Consulta siempre la página de cuotas de Apps Script antes de diseñar un proceso de volumen. No presentes esos números como la capacidad garantizada de una aplicación comercial.
Rendimiento: evita trabajar celda por celda
Las llamadas a Sheets, Gmail y APIs externas suelen ser mucho más lentas que procesar datos en memoria. Evita este patrón:
for (let i = 1; i <= 1000; i++) {
hoja.getRange(i, 2).setValue("Procesado");
}
Lee y escribe en bloques:
const rango = hoja.getRange(1, 2, 1000, 1);
const valores = Array.from({ length: 1000 }, () => ["Procesado"]);
rango.setValues(valores);
La guía de buenas prácticas de Apps Script recomienda reducir las llamadas a servicios, leer rangos en arrays, procesar en memoria y escribir el resultado de una vez.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
También puede ser útil:
CacheServicepara datos temporales.PropertiesServicepara configuración y progreso pequeño.LockServicepara impedir que dos ejecuciones modifiquen el mismo recurso simultáneamente.- Procesar por páginas o bloques y guardar el progreso.
- Diseñar funciones idempotentes para que repetirlas no cree duplicados.
- Separar configuración, lógica y funciones de entrada.
- Usar Shared Drives cuando el modelo de propiedad del equipo lo requiera.
- Registrar errores, resultados e identificadores de procesamiento.
Errores frecuentes y cómo recuperarse
“Authorization required”
Puede aparecer al añadir un servicio nuevo, al ejecutar un activador sin autorización o cuando el creador del activador perdió acceso.
- Ejecuta manualmente una función desde el editor.
- Acepta los permisos solicitados.
- Guarda y vuelve a probar.
- Revisa el panel de activadores instalables.
- Comprueba que el propietario del activador mantiene acceso al archivo.
El onEdit no se ejecuta
Comprueba que la función se llame exactamente onEdit, que la edición sea manual, que el proyecto esté vinculado a una hoja compatible y que no estés esperando que una modificación realizada por otro script dispare el evento.
El correo no se envía
Revisa la autorización de MailApp o GmailApp, la cuota diaria, la dirección del destinatario, los registros de ejecución y las políticas de tu organización. Si el envío ocurre desde un evento, utiliza un activador instalable cuando el servicio requiera autorización.
La web app devuelve 403, 405 o permisos
Comprueba quién puede acceder, con qué identidad se ejecuta, si estás usando la URL publicada /exec en lugar de la URL de prueba /dev y si desplegaste de nuevo después de cambiar el código. Los parámetros c y sid están reservados y pueden provocar un error 405. Un cambio de propietario entre dominios o hacia un Shared Drive también puede exigir un nuevo despliegue. Consulta la documentación de web apps.
“Exceeded maximum execution time”
Reduce llamadas externas, reemplaza operaciones fila por fila por operaciones por lotes, divide el trabajo en varias ejecuciones y guarda el progreso en propiedades. Si la carga sigue siendo grande, trasládala a Cloud Run, Cloud Functions, BigQuery, Dataflow u otro backend adecuado.
Best Value
Apps Script frente a macros, Zapier y Make
| Necesidad | Opción más adecuada |
|---|---|
| Repetir una acción de formato dentro de una hoja | Macro |
| Automatizar Gmail, Drive, Calendar y Sheets con lógica propia | Apps Script |
| Conectar muchas aplicaciones sin programar | Zapier o Make |
| Crear una herramienta interna personalizada | Apps Script |
| Crear una API pública robusta | Backend tradicional |
| Procesar millones de filas | BigQuery, Cloud Run, Dataflow u otra plataforma escalable |
Apps Script ofrece control fino del código, integración nativa con Google y un coste de entrada bajo. A cambio, exige entender JavaScript, permisos, despliegues y cuotas.
Zapier suele ser más rápido para conectar aplicaciones con una interfaz visual. Según la página de precios consultada el 18 de agosto de 2026, dispone de un plan gratuito con 100 tareas mensuales y planes de pago desde 19,99 dólares mensuales; el coste depende del número de tareas y del flujo.
Make está orientado a escenarios visuales con filtros, routers y transformaciones. En la misma fecha mostraba un plan gratuito de hasta 1.000 créditos mensuales y planes desde 12 dólares al mes para 10.000 créditos. Cada acción de un módulo consume créditos según el plan y el escenario.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Los precios y límites pueden cambiar. Para una automatización casi completamente interna a Google, con validaciones y lógica específica, escribir código puede ser más flexible. Para una conexión sencilla entre aplicaciones, una plataforma visual puede ahorrar tiempo de desarrollo y mantenimiento.
¿Quién debería usar Google Apps Script?
Elige Apps Script cuando:
- La información ya está en Sheets, Gmail, Drive, Forms o Calendar.
- La automatización es interna y el volumen es moderado.
- Una fórmula o macro no resuelve la lógica necesaria.
- El equipo acepta depender de Google Workspace.
- Quieres evitar mantener un servidor propio para un proceso pequeño o mediano.
Evalúa otra solución cuando necesites una API pública de alta disponibilidad, ejecuciones muy largas, grandes volúmenes, transacciones, colas, observabilidad avanzada, una base de datos robusta o independencia de una cuenta de Google.
Apps Script puede usarse con cuentas de consumidor y con Google Workspace, pero las cuotas, políticas del administrador y servicios disponibles pueden variar. Tampoco debe describirse como completamente gratuito en todos los contextos: el acceso a Workspace, los servicios utilizados y una arquitectura avanzada pueden tener costes.
Conclusión
Google Apps Script merece la pena aprenderlo si tu trabajo ocurre principalmente dentro de Google Workspace. Con unas pocas funciones puedes convertir una hoja en una herramienta interna, generar documentos, enviar notificaciones, procesar formularios o sincronizar calendarios sin administrar un servidor.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errorsEmpieza con una automatización pequeña, autoriza solo los permisos necesarios, usa activadores instalables cuando el flujo requiera servicios protegidos y procesa los datos por lotes. Cuando aparezcan límites de tiempo, cuotas, alta disponibilidad o volúmenes grandes, no fuerces Apps Script: cambia a un backend o servicio especializado.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

