Ir al contenido principal

Analítica – Tus informes se actualizan solos: envía cada respuesta de Survio a Google Sheets

Envía automáticamente cada respuesta completada en Survio a una hoja de Google y crea un gráfico en tiempo real o una tabla dinámica al instante. Aquí tienes la guía paso a paso para hacerlo con n8n y un flujo de trabajo listo para descargar.

Escrito por Success Team Survio

¿Qué caso es el tuyo?

Caso A – rápido y para cualquiera: un gráfico con tus respuestas que se actualiza en cuanto llega una nueva respuesta.

Caso B – para equipos que comparan grupos: una tabla dinámica que puedes filtrar por canal, idioma o cualquier otra columna.

Cada vez que tu encuesta recopila una respuesta, esta llega como una nueva fila en una hoja de Google, al instante. Haz el gráfico o la tabla dinámica una sola vez y tendrás tu informe siempre actualizado, sin exportaciones, ni copias, ni esperar a que alguien prepare los datos.
​

Este es el informe que obtienes en el Caso A: un gráfico que se actualiza solo con cada respuesta nueva:
​

The report tab with response counts and a column chart


​

Y esta es la tabla dinámica en el Caso B, filtrada por canal usando un segmentador:
​

Pivot table with a slicer on the Channel column

¿Cómo funciona esto? Survio envía cada respuesta completada a una URL de Webhook. Una herramienta de automatización (usamos n8n en esta guía) la recibe y escribe una fila en tu hoja. Survio hace el envío, n8n escribe y la hoja muestra el informe.

¿Eres nuevo en los webhooks de Survio? Empieza con Webhooks: envía respuestas a tus otras herramientas en tiempo real, luego regresa aquí.
​

Lo que vas a construir

Ambos informes se alimentan con la misma configuración: cada respuesta completada se convierte en una fila en una pestaña llamada responses.

De un vistazo

Caso A: un gráfico

Caso B: informe por segmento

Resultado

Un gráfico de cómo se distribuyen las respuestas, actualizado con cada respuesta nueva

Una tabla dinámica que puedes filtrar por canal, idioma u otra columna

Herramientas

Survio, n8n, Google Sheets

Survio, n8n, Google Sheets (tabla dinámica y segmentador)

Ideal para

Un negocio pequeño que quiere un gráfico simple y siempre actualizado

Un equipo que compara grupos, por ejemplo clientes online y en tienda

Antes de empezar

  • Una encuesta de Survio en un plan de pago. Los webhooks no están disponibles en el plan Free y cada plan permite un número determinado de webhooks por encuesta (consulta el artículo de webhooks).

  • Una cuenta de n8n, en n8n Cloud o autohospedada.

  • Una cuenta de Google para Google Sheets.

En esta guía usamos una encuesta de satisfacción del cliente: una clasificación por estrellas, una pregunta de elección simple "En general, ¿qué tan satisfecho estás?", una pregunta de elección simple "¿Cómo compraste esta vez?", un campo abierto de comentario y una pregunta opcional de e-mail. Tu encuesta puede ser distinta; tendrás que mapear tus propias preguntas en el paso 5.
​

Paso 1 — Prepara la hoja

  1. Crea una nueva hoja de Google y renombra su primera pestaña a responses.

  2. En la fila 1, escribe los encabezados de columna. Usamos Response ID, Submitted, Rating (1-5), Satisfaction, Channel, What could we do better, E-mail, Order ID, Language y Source.

Mantén Response ID como la primera columna. Es el identificador único de Survio para cada respuesta. n8n lo usa para actualizar la fila existente en vez de añadir duplicados cuando se repite una entrega.

Paso 2 — Crea el webhook en n8n

  1. En n8n, crea un nuevo flujo de trabajo y añade un nodo Webhook como disparador.

  2. Configura HTTP Method en POST.

  3. Ve a la pestaña Production URL y copia la dirección.

  4. Haz clic en Publish. La Production URL solo acepta entregas cuando el flujo está publicado.

n8n Webhook node with HTTP Method POST and the Production URL tab
Published button in the n8n editor

Usa la Production URL, no la Test URL. La Test URL solo escucha mientras el editor espera un evento de prueba, así que los envíos de Survio fallan en cuanto cierras el editor. Survio reintenta un fallo durante aproximadamente un día, y después de 5 días desactiva el webhook.

Paso 3 — Conecta la encuesta en Survio

  1. Abre tu encuesta y ve a Recopilar respuestas.

  2. En la barra lateral izquierda, bajo Automations & Integrations, selecciona Webhooks y haz clic en + Añadir un webhook.

  3. Pega la Production URL de n8n en Webhook URL y haz clic en Guardar webhook. El webhook queda activado enseguida.

Add a webhook dialog in Survio with the n8n Production URL filled in
Saved webhook in Survio, switched on


​

Paso 4 — Envía una respuesta de prueba y encuentra los ids de tus preguntas

  1. Abre tu encuesta con el enlace habitual y envía una respuesta completa. Survio solo envía respuestas completas, así que haz clic hasta el final.

  2. En n8n, abre la pestaña Executions. La entrega llegará en pocos segundos.

  3. Abre la ejecución y haz clic en el nodo Webhook. Expande body, luego data y después answers. Cada respuesta muestra su question.id, el label de la pregunta y la answer.

  4. Apunta el id de cada pregunta que quieras como columna. También puedes hacer clic en Pin para seguir construyendo con esta respuesta sin tener que volver a enviar la encuesta.

Executions tab in n8n with successful runs
Webhook node output in n8n: body, data, answers

Elige siempre las respuestas por id de pregunta. Las respuestas llegan en una lista. Si luego agregas una pregunta a la encuesta, las posiciones cambian y las columnas se llenarían con respuestas erróneas. Los ids de pregunta nunca cambian.

¿Buscas el e-mail del encuestado? No uses data.email: se queda vacío si el e-mail viene de una pregunta de e-mail o de un parámetro de URL. Léelo de la respuesta a tu pregunta de e-mail o de data.parameters.

Paso 5 — Convierte cada respuesta en una fila

Esto lleva dos nodos: Prepare row recoge las respuestas, y Save response to sheet las escribe en tu hoja.

Prepare row

  1. Agrega un nodo Edit Fields (Set) después del nodo Webhook y renómbralo como Prepare row.

  2. En Fields to Set, añade un campo por cada columna de tu hoja y deja el tipo como String. El nombre debe coincidir exactamente con el encabezado de columna; el valor es la expresión que viene debajo.

  3. Reemplaza los ids de pregunta (90403153, etc.) por tus propios ids del paso 4 y Europe/Prague por tu zona horaria.

Nombre del campo

Valor

Response ID

{{ $json.body.data.responseId }}

Submitted

{{ DateTime.fromISO($json.body.data.submitted).setZone('Europe/Prague').toFormat('yyyy-MM-dd HH:mm') }}

Rating (1-5)

{{ $json.body.data.answers.find(a => a.question.id === 90403153)?.answer ?? "" }}

Satisfaction

{{ $json.body.data.answers.find(a => a.question.id === 90403151)?.answer?.labels?.[0] ?? "" }}

Channel

{{ $json.body.data.answers.find(a => a.question.id === 90403154)?.answer?.labels?.[0] ?? "" }}

What could we do better

{{ $json.body.data.answers.find(a => a.question.id === 90403152)?.answer ?? "" }}

E-mail

{{ $json.body.data.answers.find(a => a.question.id === 90403187)?.answer || $json.body.data.parameters?.email || "" }}

Order ID

{{ $json.body.data.parameters?.['order-id'] ?? '' }}

Language

{{ $json.body.data.langCode }}

Source

{{ $json.body.data.source }}

Prepare row node in n8n with Fields to Set and their expressions


​

Save response to sheet

  1. Añade un nodo Google Sheets después de Prepare row, renómbralo como Save response to sheet y elige la operación Append or Update Row.

  2. Conecta tu cuenta de Google y elige tu hoja en Document (desde la lista o pega el ID con By ID) y la pestaña responses en Sheet.

  3. Configura Mapping Column Mode en Map Automatically y Column to match on en Response ID.

Google Sheets node: Append or Update Row, Map Automatically, Column to match on Response ID

¿Por qué un paso aparte para Prepare row? Cuando eliges otra hoja o pestaña en el nodo de Google Sheets, n8n borra el mapeo de columnas ahí. Con las expresiones en Prepare row nunca pierdes nada: el nodo de Google Sheets solo compara nombres de campo con encabezados de columna.

Haz clic otra vez en Publish. Los cambios se aplican solo cuando vuelvas a publicar.

n8n workflow: Survio Webhook, Prepare row, Save response to sheet

Algunos detalles sobre estas expresiones:

  • Las preguntas de elección llegan como { ids, labels, value }. labels[0] es el texto de la opción elegida. Para una pregunta de elección múltiple, usa labels.join(', ') para poner todas las opciones seleccionadas en una celda. value muestra el texto tipeado en "Otra" opción.

  • Las horas están en UTC. La expresión de Submitted las convierte a tu zona horaria y Google Sheets trata la columna como fecha/hora para que puedas ordenar y agrupar.

  • Los parámetros de URL con guion en el nombre, como order-id, se usan con la forma de corchetes parameters['order-id']. Survio no acepta guión bajo en los parámetros.

  • El título de la encuesta no va en los datos que Survio envía. Si varias encuestas escriben en una hoja, añade una columna Survey y un campo Survey en Prepare row con el nombre de tu encuesta.

Envía otra respuesta. En segundos verás una fila nueva en la hoja.

The responses tab in Google Sheets with one row per response


​

Caso A — Gráfico de respuestas

  1. Añade una pestaña llamada report.

  2. Escribe Satisfaction en A1 y Responses en B1. En A2 a A6, pon las opciones de respuesta tal como aparecen en tu encuesta.

  3. En B2, escribe =COUNTIF(responses!D:D,A2) y arrástralo hasta B6.

  4. Selecciona A1:B6 y elige Insertar → Gráfico. Google Sheets sugiere un gráfico de columnas. Para cambiar el título, ve a Personalizar → Títulos de gráfico y ejes.

Cada respuesta nueva añade una fila en responses y los recuentos y el gráfico se actualizan solos, como el del principio de este artículo.
​

Caso B — Compara grupos con una tabla dinámica

  1. En la pestaña responses, selecciona la tabla y elige Insertar → Tabla dinámica, luego Hoja nueva.

  2. En Filas, añade Satisfaction. En Valores, añade Response ID y cambia Resumir por de SUM a COUNTA.

  3. Elige Datos → Añadir un segmentador y escoge la columna Channel. Selecciona los valores que quieras ver y confirma con OK. El resultado será como la tabla dinámica al principio de este artículo.

Puedes segmentar por cualquier columna: Channel (tu propia pregunta), Language (el idioma de la encuesta que respondió el encuestado), Source (cómo llegó la respuesta, por ejemplo un enlace directo o una invitación de e-mail) u Order ID.

Una selección de segmentador no se guarda para la próxima vez. Cuando abras el archivo de nuevo, el segmentador tendrá todos los valores. Para dejar guardada una selección, guárdala como predeterminada en el menú del segmentador.

Descarga el flujo de trabajo listo

En vez de montar a mano los pasos 2 y 5, arranca desde nuestro flujo. Descarga el archivo survio-responses-to-google-sheets.json de los adjuntos al final de este artículo y luego:

  1. En n8n, crea un flujo vacío. Abre el menú (los tres puntos) junto al nombre del flujo y selecciona Import, después From file. Elige el archivo que descargaste.

  2. Abre Prepare row y reemplaza los ids de pregunta y Europe/Prague por los tuyos y tu zona horaria.

  3. Abre Save response to sheet. Verás un icono de advertencia rojo hasta que lo configures. Conecta tu cuenta de Google y elige la hoja y su pestaña responses. En n8n estará Mapping Column Mode como Map Each Column Manually: ponlo como Map Automatically y configura Column to match on como Response ID.

  4. Abre Survio Webhook, copia la Production URL en Survio (paso 3) y haz clic en Publish.

n8n workflow menu with Import and From file
Imported workflow: Survio Webhook, Prepare row, Save response to sheet

Prueba que funcione de principio a fin

  1. Envía una respuesta usando el enlace de la encuesta. Aparecerá una fila en la pestaña responses en segundos.

  2. Verifica que Response ID esté completo. Es lo que evita duplicados.

  3. Revisa la pestaña Executions en n8n. Todas las entregas y sus datos aparecerán ahí.

¿Problemas? Soluciónalos aquí

Síntoma

Causa

Solución

Nada llega a n8n

Pusiste la Test URL en Survio o el flujo no está publicado

Copia la Production URL en Survio y dale a Publish

Survio no acepta la URL del webhook de tu n8n autohospedado

n8n muestra una dirección interna en vez de la pública

Configura WEBHOOK_URL de n8n con tu dirección https pública y copia la URL de nuevo

"Listen for test event" no muestra nada aunque enviaste la encuesta

Survio envía a la Production URL; la escucha está en la Test URL

Revisa la pestaña Executions mejor

Tu último cambio no tiene efecto

El flujo está publicado, pero el cambio no (el botón Publish tiene un punto)

Haz clic en Publish otra vez

La misma respuesta aparece dos veces

La acción es Append Row, o no usas columna de comparación

Usa Append or Update Row y compara con Response ID

Una columna queda vacía y aparece una nueva al final

El campo en Prepare row no coincide exactamente con el encabezado

Renombra el campo en Prepare row para que coincida, y borra la columna extra

Ves [object Object] en una celda

Mapeaste una respuesta de elección sin labels

Usa ?.answer?.labels?.[0]

Las columnas se desordenan tras editar la encuesta

Elegiste las respuestas por posición en la lista

Elige siempre por question.id

La columna de e-mail queda vacía

Mapeaste desde data.email

Léelo desde la pregunta de e-mail o parámetro de URL

Faltan respuestas anteriores a la configuración

Los webhooks solo envían respuestas después de crearse

Exporta las anteriores desde Survio y pégalas tú

Survio desactivó el webhook

La URL falló durante 5 días seguidos

Corrige y luego vuelve a activar el webhook en Survio

Cosas que conviene saber

  • Survio solo envía respuestas completadas, un mensaje por respuesta, en segundos.

  • Nada se envía de forma retroactiva: ni respuestas de antes de crear el webhook, ni respuestas de cuando estuvo en pausa.

  • Un fallo se reintenta hasta 8 veces a lo largo de unas 27 horas, y cada intento espera hasta 30 segundos. Gracias a que comparas por Response ID, los reintentos nunca duplican filas.

  • Si las entregas fallan durante 5 días, Survio apaga el webhook y tendrás que reactivarlo.

  • Pausar un webhook mantiene su lugar; borrarlo es definitivo.

  • Survio no guarda el historial de entregas en la app. Tu log está en la pestaña Executions de n8n.

  • Enviar respuestas a webhooks no consume más respuestas de tu plan.

¿Prefieres que te lo montemos nosotros? En la página Webhooks de Survio, haz clic en Get expert setup, cuéntanos qué quieres que pase y el equipo te lo crea, prueba y deja funcionando el webhook.

¿Ha quedado contestada tu pregunta?