El destino de webhook de Sheetgo: envía datos de Google Sheets a cualquier parte (con un ejemplo de Slack)

Una hoja de cálculo es donde vive gran parte de los datos operativos, pero rara vez es donde tu equipo está mirando. Cuando algo cambia — se cierra un negocio, baja el stock, vence una factura — las personas que necesitan saberlo están en Slack, en un CRM o en otra app. Llevar la actualización hasta ahí suele recaer en alguien que se acuerde de publicarla, o en un Apps Script que se dispara con un activador temporal y se rompe la próxima vez que se mueve una columna.

Neither holds up well. The manual version depends on someone being at their desk. The script version means you now own code — UrlFetchApp calls, hardcoded column indexes, a trigger to debug when it stops running — for what amounts to sending a formatted message.

El destino de webhook de Sheetgo elimina ese paso. En lugar de terminar un flujo de trabajo en otra hoja de cálculo, lo terminas con una petición HTTP al endpoint que elijas — un canal de Slack, un CRM, una API interna, otra herramienta de automatización. El flujo de trabajo que filtra tus datos los envía directamente, con la programación que definas.

Es una inversión de cómo han funcionado los webhooks en Sheetgo hasta ahora. Un webhook as a source envía datos a una hoja de cálculo desde una app externa; el destino de webhook envía datos hacia fuera. Para mostrar cómo funciona, esta guía construye uno de principio a fin usando Slack como ejemplo — publicando en un canal un resumen semanal de ventas “closed won”. Configurarás la hoja de origen, los filtros, una app de Slack y la plantilla del cuerpo de la petición, que es donde se va la mayor parte del tiempo de configuración (y donde una regla falla en silencio, sin ningún error en Slack ni en el registro de ejecución de Sheetgo). El destino de webhook está actualmente en beta.

Prueba Sheetgo Workflows gratis y crea tu primer destino de webhook.

Qué hace la automatización de Google Sheets a Slack

En cada ejecución, Sheetgo lee una hoja de pipeline de ventas, conserva solo los negocios marcados como Closed Won en los últimos siete días y los publica en #sales-wins como un único resumen con formato:

Google Sheets to Slack — the finished Sheetgo alert posted in a Slack #sales-wins channel showing two closed-won deals

Cuatro componentes: la hoja de cálculo de origen, dos procesadores de filtro de Sheetgo, una app de Slack que aporta la URL receptora y el destino de webhook que realiza la llamada.

Paso 1: la hoja de cálculo de origen

We start with a spreadsheet named Sales_Pipeline, con negocios en distintas etapas. Tiene cinco negocios, con el nombre del negocio, el importe, el representante asignado, el estado y la fecha de cierre.

Google Sheets to Slack — Sales_Pipeline source sheet with deal, amount, rep, status, close date, Send, and Digest columns

Junto a esas cinco columnas, la hoja tiene dos más — Send y Digest. Ambas son fórmulas, no datos escritos a mano, y son las que convierten una hoja de pipeline estática en algo sobre lo que la automatización puede actuar.

La columna Send: elegir qué negocios se envían

La columna Send decide qué negocios llegan a Slack. En F2, introduce esta fórmula y arrástrala hacia abajo:

=IF(AND($D2="Closed Won", $E2>=TODAY()-7), "YES", "")

Un negocio se marca como YES solo cuando el estado es Closed Won y la fecha de cierre cae dentro de los últimos siete días. Todo lo demás queda en blanco.

La alternativa obvia es marcar los negocios como Notified a mano una vez anunciados. Eso se rompe en cuanto la automatización se ejecuta con una programación, porque Sheetgo no escribe de vuelta en la hoja de origen: tendrías que editar filas manualmente después de cada ejecución para evitar que los mismos negocios se publiquen dos veces.

Una ventana de fechas móvil lo resuelve por sí sola: cada ejecución solo recoge lo que se ha cerrado desde la anterior. Este tutorial usa siete días porque enviamos un informe semanal, pero el número debe coincidir con la frecuencia con la que ejecutas la automatización. Los equipos de ventas que quieran enterarse de las ganancias al instante usarían TODAY()-1 y una programación diaria en su lugar.

Por eso también Sales_Pipeline incluye Fabrikam, un negocio Closed Won cerrado el 2026-07-02. Queda fuera de la ventana de siete días, así que permanece en blanco mientras las dos ganancias recientes se marcan como YES. Sin una fila así, no puedes saber si el filtro funciona de verdad o simplemente deja pasar todo.

Google Sheets to Slack — the Send column formula marking Closed Won deals from the last seven days as YES

La columna Digest: construir el mensaje de Slack en la hoja

La columna Digest arma el mensaje en sí. En G2, introduce:

=ARRAYFORMULA(TEXTJOIN(CHAR(10),TRUE,IF($F$2:$F="YES","*"&$A$2:$A&"* · "&TEXT($B$2:$B,"$#,##0")&" · "&$C$2:$C,"")))

Es una sola celda — deja G3 y las de abajo vacías. Recorre cada fila, conserva las marcadas como YES, da formato a cada una en una línea y las une con saltos de línea CHAR(10). El resultado se ve así:

*Acme Corp* · $5,000 · Sarah
*Vertex Labs* · $12,500 · Miguel

Los asteriscos son el formato Markdown de Slack para negrita, así que *Acme Corp* se muestra como Acme Corp cuando llega al canal. TEXT($B$2:$B,"$#,##0") se encarga de la moneda, porque la fórmula lee el valor bruto de la celda en vez del valor con formato que ves en la columna B — sin ello, $5,000.00 acabaría en el resumen como 5000.

Google Sheets to Slack — the Digest column formula joining each winning deal into one formatted line

Construir el mensaje en la hoja de cálculo en lugar de en el cuerpo de la petición del webhook es una decisión deliberada — mantiene la plantilla JSON en un único marcador de posición y esquiva la parte de la sintaxis que más problemas causa.

Un aviso: como la fórmula del resumen está en G2, el webhook la toma de la primera fila que pasa tus filtros. Si esa fila cambia — alguien ordena la hoja, o un negocio sale de la ventana — el resumen podría moverse. Para dejarlo listo para producción, mueve la fórmula a su propia pestaña de una sola fila y apunta el flujo de trabajo a esa.

Paso 2: crear la app de Slack y generar la URL del webhook

Antes de construir nada en Sheetgo, Slack necesita un lugar donde recibir el mensaje: una app de Slack con incoming webhooks activados, que te da una única URL que acepta una carga JSON y la publica en un canal.

Empieza creando el canal si aún no existe — aquí, #sales-wins. Tiene que existir primero, porque Slack te pide elegir uno durante la configuración.

1. Crea la app. Ir a Slack API: Your Apps y haz clic en Create an App. Slack ofrece varios puntos de partida — AI agent, Starter app, From a manifest y Blank app. Elige Blank app.

Google Sheets to Slack — creating a Slack app by choosing the Blank app option

Ponle un nombre (Sheetgo Alerts Testing sirve) y elige tu workspace.

Google Sheets to Slack — naming the Slack app Sheetgo Alerts Testing and picking a workspace

2. Activa los incoming webhooks. En la barra lateral izquierda, bajo Features, haz clic en Incoming Webhooks, y luego cambia Activate Incoming Webhooks a On. Puedes saltarte OAuth & Permissions por completo — activar este interruptor gestiona el permiso, y Slack añade un bot user automáticamente si la app no tiene uno.

Google Sheets to Slack — activating Incoming Webhooks in the Slack app settings

3. Añade un webhook al workspace. Baja hasta Webhook URLs for Your Workspace y haz clic en Add New Webhook. Slack pregunta en qué canal publicar — selecciona #sales-wins y haz clic en Allow.

Google Sheets to Slack — allowing the Slack app to post to the #sales-wins channel

4. Copia la URL. Vuelves a la página Incoming Webhooks con una nueva fila que muestra la URL, el canal y quién la añadió. Haz clic en Copy.

Google Sheets to Slack — copying the generated Slack incoming webhook URL

La URL está vinculada a un solo canal — no puedes redirigirla añadiendo un campo de canal a la carga, ya que Slack lo eliminó para las apps modernas. Para publicar en un segundo canal, genera un segundo webhook y añade una segunda conexión de Sheetgo. Trata esta URL como una credencial: cualquiera que la tenga puede publicar en tu canal como tu app, sin más autenticación.

Paso 3: construir el flujo de trabajo de Google Sheets a Slack

1. Crea un nuevo flujo de trabajo. In your Sheetgo Workflows app, click + New → New Automation → Create a workflow.

Google Sheets to Slack — creating a new workflow in the Sheetgo Workflows app

2. Select the source. En la pantalla Select source, elige Google Sheets, busca Sales_Pipeline, y selecciona la pestaña con tus datos — aquí, Sheet1. Haz clic en Siguiente paso.

Google Sheets to Slack — selecting the Sales_Pipeline Google Sheet as the source

El paso del procesador de datos es opcional en la mayoría de los flujos de trabajo. Aquí hace un trabajo real — sin él, se envía cada fila, incluidos los negocios aún en negociación y los que se perdieron. Añadimos dos procesadores, y el orden importa.

3. Añade Filter rows. Configura la condición a Column F : Send | Text is exactly | YES, haz clic en Confirm en la tarjeta de condición y luego en Next step.

Esto reduce cinco negocios a dos. Northwind sigue en negociación, Contoso se perdió y Fabrikam se cerró fuera de la ventana de siete días — ninguno está marcado como YES, así que ninguno llega a Slack.

Google Sheets to Slack — Filter rows condition keeping only rows where Send is exactly YES

4. Añade Filter columns. En la siguiente pantalla del procesador, haz clic en Filter columns y selecciona Deal Name, Amount, Rep Name, and Digest. Deja Status, Close Date y Send sin marcar.

Send es andamiaje — impulsa el filtro de filas, no está pensado para enviarse a ninguna parte. Status es redundante, ya que toda fila que sobrevive es Closed Won por definición, y Close Date no aparece en el mensaje del resumen. Quitarlas mantiene la carga pequeña y legible cuando la inspeccionas en el siguiente paso. El orden importa: el filtro de filas lee la columna Send, así que si filtraras columnas primero y quitaras Send, el filtro de filas no tendría nada con qué coincidir.

Una nota práctica: si añades la columna Digest a tu hoja después de configurar este paso, Sheetgo no la conocerá. Haz clic en Sync columns para actualizar la lista y luego márcala. Saltarse esto es una causa habitual de un mensaje vacío más tarde. Haz clic en Next step.

Google Sheets to Slack — Filter columns keeping Deal Name, Amount, Rep Name, and Digest

Paso 4: configurar el destino de webhook

En la pantalla de destino, selecciona Webhook. El panel de configuración tiene tres partes: la URL de la petición, las cabeceras y el cuerpo de la petición.

Google Sheets to Slack — the Sheetgo webhook destination panel with request URL, headers, and body template

1. Configura la URL de la petición. Deja el método como POST y pega la URL del webhook de Slack. El desplegable también ofrece PUT, PATCH y DELETE para otros endpoints, pero los incoming webhooks de Slack solo aceptan POST.

2. Revisa las cabeceras. Content-Type: application/json está configurado por defecto, que es lo que Slack requiere.

3. Escribe el cuerpo de la petición. La nota encima del campo del cuerpo explica lo básico: el cuerpo es una plantilla que se procesa cuando se ejecuta la conexión, y referencias la salida del flujo de trabajo con DATOS para la tabla completa o ROWS para un objeto por registro. Los marcadores de posición van entre dobles llaves, así que una plantilla que envía cada registro superviviente se ve así:

{"rows": {{ROWS}}}

Las llaves son fáciles de olvidar, y hacerlo provoca un fallo difícil de diagnosticar. Escribir ROWS sin ellas no es un marcador de posición, es JSON inválido — y en lugar de dar un error, Sheetgo envía la petición con un cuerpo vacío. Slack la rechaza, no aparece nada en el canal y no hay ningún mensaje que explique por qué. Lo mismo pasa con las comillas: {{ROWS}} procesa un array JSON completo, incluidos sus corchetes, así que escribir "rows": "{{ROWS}}" te daría una cadena entre comillas que contiene JSON en lugar del array en sí. El panel lo dice directamente — no envuelvas los marcadores de posición en comillas adicionales.

Inspeccionar la carga antes de enviarla a Slack

Slack rechaza las cargas mal formadas con una escueta invalid_payload y no te muestra nada sobre lo que recibió, lo que lo convierte en un mal sitio para afinar una plantilla que aún estás resolviendo. Un inspector de peticiones es más fácil. Hay varios; este tutorial usa Webhook.site.

Abrir webhook.site, copia la URL única que genera y pégala en el campo REQUEST URL en lugar de tu URL de Slack. Acepta cualquier carga y muestra el cuerpo en bruto tal como llegó.

Google Sheets to Slack — copying a webhook.site inspection URL to preview the payload

Con {"rows": {{ROWS}}} en el cuerpo, haz clic en Review automation y en Finish and run. La carga llega como un filas array — un objeto por registro superviviente, con cada clave igual a un encabezado de columna tal como está escrito en la hoja, espacios incluidos:

{  "rows": [    {      "Deal Name": "Acme Corp",      "Amount": "$5,000.00",      "Rep Name": "Sarah",      "Digest": "*Acme Corp* · $5,000 · Sarah\n*Vertex Labs* · $12,500 · Miguel"    },    {      "Deal Name": "Vertex Labs",      "Amount": "$12,500.00",      "Rep Name": "Miguel",      "Digest": ""    }  ]}

Dos registros en lugar de cinco, con Status y Send eliminados. Fíjate en que el resumen completo cae en el campo Digest de la primera fila — esa grafía exacta del encabezado es como lo referenciarás a continuación, así que tiene que ser “Digest”, no “digest” ni “Message”.

Construir el mensaje de Slack y ejecutarlo

Vuelve a apuntar la REQUEST URL a tu webhook de Slack y reemplaza el cuerpo por esta plantilla de Block Kit de Slack:

{  "text": "Closed Won this week",  "blocks": [    { "type": "header", "text": {"type": "plain_text", "text": "🏆 Closed Won this week"} },    { "type": "section", "text": {"type": "mrkdwn", "text": {{ROWS[0]["Digest"]}}} },    { "type": "context", "elements": [{"type": "mrkdwn", "text": "Pushed by Sheetgo"}] }  ]}
Google Sheets to Slack — the Slack Block Kit request body using the Digest placeholder

En {{ROWS[0]["Digest"]}} extrae todo el resumen con formato de la primera fila — y, siguiendo la regla del panel, no va entre comillas, porque se procesa como una cadena JSON entre comillas por sí solo.

Programar la automatización

Para ejecutarla con una programación en lugar de a mano, activa Enable automation triggers en la pantalla de revisión y cambia Run automatically a On. En Trigger options tienes cuatro opciones, y la que elijas depende de cómo trabaja tu equipo:

  • Basado en un calendario ejecuta la automatización a una hora fija — cada hora, cada día o cada semana, en los días que elijas y en tu zona horaria. Es la opción adecuada para un resumen, donde lo importante es un resumen periódico y no una alerta instantánea.
  • On form submission la ejecuta cada vez que se envía un formulario de Sheetgo — útil cuando la hoja se alimenta con un formulario y quieres que la alerta siga a la entrada.
  • On workflow run encadena esta automatización a otra, de modo que se dispara cuando se completa una automatización anterior. Así es como construyes una secuencia — una automatización limpia y combina los datos, y esta envía el resultado.
  • On webhook event ejecuta la automatización cuando llega un webhook entrante, dejando que un sistema externo decida cuándo enviar — por ejemplo, un proveedor de pagos que registra una nueva venta en la hoja.

Estas tres últimas no encajan con este resumen concreto, pero muestran que la configuración puede adaptarse a cualquier arreglo que necesite tu flujo de trabajo. Para un resumen de Google Sheets a Slack, elige Basado en un calendario, ajusta la frecuencia a semanal para que coincida con la ventana de siete días, y elige la hora y los días.

Google Sheets to Slack — Review automation screen with the four-step flow and Enable automation triggers

Haz clic en Finish and run. El mensaje aparece en #sales-wins:

Google Sheets to Slack — the scheduled Sheetgo digest posted automatically to the Slack channel

Qué más puedes enviar con un destino de webhook

Enviar Google Sheets a Slack es el ejemplo más fácil de mostrar, pero el destino de webhook envía una petición HTTP a cualquier endpoint que la acepte, así que la misma configuración funciona mucho más allá de las notificaciones de chat.

  • Alertas de stock bajo: filtra una hoja de inventario a los artículos por debajo de su punto de reposición y envía la lista a tu canal de compras con una programación diaria.
  • Resúmenes de facturas vencidas: filtra a las facturas impagadas pasada su fecha de vencimiento y envía un resumen semanal a finanzas, con el texto controlado desde la hoja de cálculo.
  • Otras APIs y herramientas: el destino admite POST, PUT, PATCH y DELETE con cabeceras personalizadas, así que puedes actualizar registros en un CRM, llamar a una API interna o disparar una ejecución en otra herramienta.

Conclusión

El destino de webhook es el último paso de un flujo de trabajo de Sheetgo, lo que significa que todo lo demás de la plataforma sigue disponible antes de él. En una sola automatización podrías combinar varias hojas de cálculo regionales en una, eliminar duplicados, pasar los datos por el Procesador de datos de IA, filtrar los registros de prueba y luego enviar el resultado a Slack.

También puedes combinarlo con la dirección entrante, usando dos automatizaciones separadas. Un webhook as a source permite que una app externa envíe datos a una hoja de cálculo sin la API de Google Sheets. Una segunda automatización lee esa hoja de cálculo, la procesa y envía el resultado a través de un destino de webhook. La hoja de cálculo queda entre las dos como una capa de procesamiento que tu equipo puede leer y editar.

¿Listo para enviar Google Sheets a Slack donde tu equipo ya trabaja? Regístrate en Sheetgo y crea hoy tu primer destino de webhook.

También te puede gustar...

Mask PII in Google Sheets — laptop showing a padlock and Secured badge, representing anonymized data

Securing data pipelines: how to automatically mask PII in Google Sheets

Use Sheetgo’s Anonymize processor to automatically mask PII in Google Sheets — redact, hash, or partially mask sensitive columns as data moves from source to destination. Three practical use cases.

Google Sheets webhook — Python code on a dark editor screen for posting data to a spreadsheet

Google Sheets webhooks: push data to your sheet without the API

Use a Google Sheets webhook to push data straight into a sheet — no Google Sheets API, OAuth, or service accounts. A practical Sheetgo guide with a working Python example.

Odoo Google Sheets integration — laptop displaying analytics dashboards from automated Odoo to Google Sheets reporting workflow

Odoo to Google Sheets: How to automate your reporting with Sheetgo

Odoo Google Sheets integration with Sheetgo: replace manual exports with a single automated workflow that keeps your reports current, runs AI-powered cleanup, and feeds the spreadsheets your team already uses.