KheperlabKheperlab
Tutoriales

Cómo crear un formulario web que guarde datos en una hoja de cálculo, sin backend

No todo formulario necesita una base de datos completa. Si lo que necesitas es capturar información y revisarla después, una hoja de cálculo puede ser el backend perfecto.

Cuándo esta solución es suficiente (y cuándo no)

Un formulario de contacto, una lista de espera, un registro de asistencia o una encuesta interna funcionan perfectamente guardando cada respuesta como una fila en una hoja de cálculo. El límite aparece cuando necesitas lógica compleja, validaciones cruzadas con otros sistemas, o volúmenes muy altos de envíos por minuto: ahí una hoja de cálculo deja de ser la herramienta correcta y conviene una base de datos real.

Las dos formas de lograrlo

Opción A: Apps Script

  • Cero código de servidor, todo vive dentro de Google Sheets
  • Gratis, sin límites de uso preocupantes para un negocio pequeño
  • Requiere publicar el script como aplicación web

Opción B: servicio intermedio de formularios

  • Plataformas que reciben el formulario y lo reenvían a Sheets
  • Más rápido de configurar, pero depende de un tercero
  • Suele tener un límite gratuito de envíos mensuales

Esta guía se enfoca en la Opción A, porque te da control total sin que tengas que contratar ni configurar un servidor.

Paso 1: el script en Google Apps Script

Desde tu hoja de cálculo, entra a Extensiones → Apps Script, y pega un código que reciba los datos enviados y los agregue como una nueva fila:

function doPost(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Respuestas');
  var datos = JSON.parse(e.postData.contents);

  sheet.appendRow([
    new Date(),
    datos.nombre,
    datos.email,
    datos.mensaje
  ]);

  return ContentService
    .createTextOutput(JSON.stringify({ status: 'ok' }))
    .setMimeType(ContentService.MimeType.JSON);
}

Paso 2: publicar el script como aplicación web

Guarda el proyecto
Dale un nombre reconocible, por ejemplo "Formulario contacto".
Implementa como aplicación web
Desde el menú de implementación, elige "Nueva implementación" y selecciona tipo "Aplicación web".
Configura el acceso
Define que se ejecute como tú, y que cualquiera pueda acceder, para que el formulario público pueda enviarle datos.
Copia la URL generada
Esa URL es el destino al que tu formulario HTML va a enviar los datos.

Paso 3: el formulario HTML

<form id="miForm">
  <input name="nombre" placeholder="Nombre" required>
  <input name="email" type="email" placeholder="Correo" required>
  <textarea name="mensaje" placeholder="Mensaje"></textarea>
  <button type="submit">Enviar</button>
</form>

<script>
document.getElementById('miForm').addEventListener('submit', function(e) {
  e.preventDefault();
  var datos = {
    nombre: this.nombre.value,
    email: this.email.value,
    mensaje: this.mensaje.value
  };
  fetch('URL_DE_TU_APP_SCRIPT', {
    method: 'POST',
    body: JSON.stringify(datos)
  }).then(function() {
    alert('Enviado correctamente');
  });
});
</script>
Seguridad básica: nunca compartas el link directo del formulario en foros públicos sin control; solo publica el formulario HTML final, no la URL cruda del script, para reducir el riesgo de envíos automatizados por bots.

Cuándo pasar a algo más robusto

Si empiezas a recibir cientos de envíos por hora, o necesitas que el formulario dispare acciones automáticas complejas, es el momento de considerar una base de datos y un backend propio. Para la gran mayoría de negocios pequeños y medianos, sin embargo, esta combinación de formulario más hoja de cálculo cubre la necesidad real durante mucho tiempo.

¿Necesitas un formulario conectado a tu propio sistema?

Conversemos sobre tu caso →