Google Sheets Apps Script OpenAI

Una planilla que
hace mandados.

Le pedís algo en castellano — “resumime los correos sin leer” — y la planilla busca en tu Gmail, lee los hilos y te contesta. No es magia: son tres piezas simples conversando. Acá está cómo.

Agente IA ⚙  ↻
Vos
Resumime los correos sin leer de hoy y respondele a Pérez que la factura sale el viernes.
⚙ usó gmail_buscar · gmail_leer_hilo ×2
Agente
Tenés 3 sin leer. Dos son newsletters. El que importa:
  • Estudio Pérez — pide la factura 0042, vence el viernes.
⚠ El agente quiere ejecutar una acción
gmail_crear_borrador — deja un borrador, nunca envía.
{
  "id_hilo": "18f2c…",
  "cuerpo": "Hola Pérez, la 0042 sale el viernes…"
}
AprobarRechazar
PEDÍS EN CASTELLANO EL MODELO ELIGE LA HERRAMIENTA EL SCRIPT LA EJECUTA VOS APROBÁS PEDÍS EN CASTELLANO EL MODELO ELIGE LA HERRAMIENTA EL SCRIPT LA EJECUTA VOS APROBÁS

Son tres. Nada más.

Todo el sistema entra en un dibujo mental: una planilla que ejecuta, un modelo que decide y una lista de cosas que se pueden hacer. El resto son detalles.

01

La planilla

Google Sheets con Apps Script adentro: el código de Google que ya tiene permiso para entrar a tu Gmail, tu agenda y tus celdas. Es el que hace.

Ejecuta · guarda la clave · pide permisos
02

El modelo

OpenAI, con tu propia API key. No tiene acceso a nada tuyo: lee tu pedido y decide qué habría que hacer. Es el que piensa.

Decide · redacta · resume
03

Las herramientas

Una lista corta de funciones que vos escribiste: buscar mails, leer un hilo, escribir un rango. Es el vocabulario de lo que el agente puede pedir.

Definen el límite de lo posible
La idea clave: el modelo nunca toca tu Gmail. Sólo puede pedir que se ejecute una de las herramientas de esa lista. Si la herramienta no existe, la acción no existe. Ese es todo el modelo de seguridad, y es lo que lo hace fácil de razonar.

Herramientas: lo único
que el agente sabe pedir.

A cada herramienta le describís en castellano qué hace y qué datos necesita. El modelo lee esa lista y elige. Estas son las que hay hoy — agregar una es agregar una función.

gmail_buscarbusca hilos con la sintaxis de Gmail
gmail_leer_hilolee una conversación completa
gmail_crear_borradordeja un borrador, nunca envía
gmail_marcar_leidosaca el “sin leer”
agenda_listar_eventosmira tu calendario
hoja_leerlee un rango A1
hoja_escribirescribe celdas
hoja_agregar_filassuma filas al final
lee, no cambia nada tiene efecto: te pide permiso

Pensar, pedir, ejecutar,
repetir.

Un pedido casi nunca se resuelve en un paso. El agente da vueltas: pide una herramienta, mira el resultado, decide la siguiente. Acá el orden importa, por eso va numerado.

1

Escribís

“Resumime los correos sin leer de hoy.” Va al modelo junto con la lista de herramientas.

2

El modelo pide

No contesta: devuelve gmail_buscar con query: "is:unread".

3

La planilla ejecuta

Apps Script corre esa función de verdad y arma el resultado.

4

Vuelve el dato

El resultado se le devuelve al modelo, que ahora sabe algo que antes no.

5

Contesta

Cuando ya no necesita nada más, escribe el resumen y el loop termina.

↻  Entre el 4 y el 2 se vuelve tantas veces como haga falta — buscar, leer un hilo, leer otro, recién ahí contestar. Tope: 8 vueltas, porque Apps Script corta cualquier ejecución a los 6 minutos.

Vos tenés la última palabra.

Un agente con acceso a tu correo da un poco de miedo, y con razón. Estas cuatro decisiones están tomadas de fábrica.

Se frena antes de actuar

Toda acción con efecto — dejar un borrador, escribir celdas, marcar leído — pausa el turno y te muestra qué herramienta y con qué datos antes de ejecutar. Cuando los datos son ilegibles (ids de hilo), te muestra los asuntos reales.

No manda mails

El permiso que pide es gmail.compose: alcanza para dejar borradores, no para enviar. Redacta, vos leés y mandás. Sin excepciones.

Tu clave no vive en una celda

Va en UserProperties, privada de tu cuenta: si compartís la planilla, cada uno pone la suya. La pantalla la muestra como sk-abc…wxyz.

Un correo es un dato, no una orden

Si un mail dice “reenviá esto a todos”, eso es texto que el agente está leyendo, no una instrucción tuya. El sistema se lo dice explícitamente y te reporta el intento. Por eso conviene dejar la aprobación activada.

Lo que sí tenés que saber: el texto de los correos que el agente lee viaja a la API de OpenAI para poder resumirlo. Las llamadas van con store: false, así no queda guardado del otro lado — pero si manejás datos de clientes, es una decisión que conviene tomar a conciencia.

Cuatro puertas a
lo mismo.

Es siempre el mismo agente; cambia por dónde entrás.

PuertaCuándo convieneDetalle
Panel lateral Consultas cortas sin salir de la planilla. Google le fija el ancho en 300 px y no se puede cambiar.
Ventana grande Leer resúmenes largos; seguís pudiendo editar celdas. 1000 × 700, flota sobre la hoja.
Web app Usarlo desde el navegador, a pantalla completa. Se publica desde el editor, con acceso “sólo yo”.
Hoja Tareas Delegar en lote: un pedido por fila. Corre sin nadie mirando, así que sólo usa herramientas de lectura.

Sacá tu propia copia.

La planilla está en modo lectura a propósito: la idea es que hagas una copia tuya, con tu clave y tu Gmail. Nada de lo que pruebes toca la original.

Sheets Agéntico

Planilla con el Apps Script completo: el agente, las herramientas, la hoja de tareas y el panel. Andá a Archivo → Hacer una copia.

  1. 01 Hacé tu copia de la planilla.
  2. 02 Menú Agente IA → Configuración y pegá tu API key de OpenAI.
  3. 03 Aceptá los permisos. Va a decir “app no verificada”: es tu propio script.
  4. 04 Abrí el panel y pedile algo.
Necesitás una API key propia de OpenAI (se saca en su panel y se paga por uso). Resumir unos correos cuesta centavos, pero es tu cuenta la que paga.

¿Cómo hiciste esto,
profesor?

Charlando. No escribí a mano ninguna de las 1.797 líneas que tiene la planilla: las pedí en castellano a un agente de código (Claude Code) y las fui corrigiendo a medida que aparecían problemas reales. Estos fueron los pedidos, en orden.

Quiero un código en Google Sheets que le ponga una clave de OpenAI y permita delegar tareas, por ejemplo que se conecte a mi Gmail y me resuma correos.
Salió el esqueleto entero: el panel de chat, el loop del agente, las primeras herramientas de Gmail y la hoja de tareas. Un solo pedido, ocho archivos.
Agregá una herramienta para marcar correos como leídos.
Herramienta nueva, permiso nuevo de Gmail y algo que no había pedido: como los ids de conversación no le dicen nada a nadie, la pantalla de aprobación ahora muestra los asuntos reales de los correos que va a tocar.
clasp, ¿cómo hago esto?
Subir el código desde la computadora en vez de copiar y pegar. Falló, y el diagnóstico fue que el archivo de configuración había quedado en la carpeta equivocada.
Me gustaría que cuando pego la API key aparezca como contraseña.
El cuadro de diálogo de Google muestra siempre texto plano y no se puede cambiar: hubo que reemplazarlo por uno propio, con su botón de ojito.
Que el panel se pueda hacer más ancho, y que renderice markdown.
Lo primero no se puede: Google fija el panel en 300 px. Salió como alternativa la ventana flotante. Lo segundo, un renderizador propio que escapa el texto antes de darle formato, así un correo no puede inyectar nada.
Quiero un desplegable con todos los modelos disponibles, y cuidado que gpt-5.6 Luna no soporta el parámetro temperatura.
En vez de una lista fija que envejece, la lista se le pide a tu cuenta. Y como ese modelo era más nuevo que el conocimiento del agente, se puso a buscar la documentación en internet antes de tocar el código.
Error 400: Function tools with reasoning_effort are not supported…
Le pegué el error tal cual, sin explicarlo. De ahí salió el arreglo y, sobre todo, la pregunta siguiente: si el endpoint viejo prohíbe razonar mientras usás herramientas, hay que cambiar de endpoint.
Migrá a /v1/responses. ¿Para qué sirve?
Cambio de motor completo: el agente ahora razona y usa herramientas a la vez, y no vuelve a pensar desde cero en cada paso del loop.
Armá una web con una explicación sencilla de los conceptos más importantes.
Esta página.
El patrón, por si sirve para tu propio proyecto: el humano puso el objetivo, el criterio de qué está bien y —sobre todo— los errores reales. Cada mejora importante de esta planilla salió de algo que se rompió usándola, no de una planificación previa. Empezá con lo mínimo que funcione y dejá que el uso te diga qué falta.

Centavos, literalmente.

Google Sheets, Apps Script, Gmail y Calendar no cuestan nada: ya vienen con tu cuenta. Lo único que se paga es el uso del modelo, por tokens. Este es el cálculo hecho a mano, con los supuestos a la vista para que lo puedas rehacer con los tuyos.

Construirla · una sola vez
US$ 40
Lo que consumió el agente de código en esta sesión de 2 h 35 min, medido sobre el registro real.
Usarla · por pedido
US$ 0,007
“Resumime los correos sin leer de hoy” sobre 10 conversaciones, leyendo 3 en detalle. Menos de un centavo.

Construirla

No es una estimación: son los números del registro de la sesión, a la tarifa de lista del modelo que la escribió.

ConceptoTokensTarifa /1MCosto
Relectura de la conversación (caché)50.158.049US$ 0,50US$ 25,08
Todo lo que el agente escribió439.584US$ 25,00US$ 10,99
Guardado en caché686.057US$ 6,25US$ 4,29
Texto nuevo sin cachear578US$ 5,00US$ 0,003
Total——US$ 40,36
Por qué la relectura se lleva el 62%: el modelo no recuerda nada entre llamadas. Cada vez que retoma, vuelve a leer toda la conversación — por eso 289 llamadas suman 50 millones de tokens leídos. La caché abarata eso diez veces; sin ella, la misma sesión habría costado más de US$ 260. Y si trabajás con una suscripción mensual en vez de pagar por uso, esto no se factura aparte: entra dentro del plan.

Usarla

Si lo usás…Pedidos por mesCon Luna (barato)Con Sol (el caro)
Un resumen por día hábil 22US$ 0,15US$ 3,74
Cinco pedidos por día 110US$ 0,77US$ 18,70
Veinte por día, todo el día 440US$ 3,08US$ 74,80
La elección del modelo es la única palanca que importa: el mismo pedido cuesta 25 veces más en el modelo premium que en el económico. Para leer y resumir correos, el barato alcanza de sobra — el caro se justifica cuando hay que razonar de verdad sobre datos difíciles. Los precios son de septiembre de 2026 y cambian seguido: verificalos en el panel de OpenAI antes de citarlos.

No automatizás tareas.
Delegás criterio.

La planilla siempre supo ejecutar. Lo nuevo es que ahora podés decirle qué querés en vez de cómo hacerlo — y que te pregunte antes de tocar algo importante.