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
Dale un nombre reconocible, por ejemplo "Formulario contacto".
Desde el menú de implementación, elige "Nueva implementación" y selecciona tipo "Aplicación web".
Define que se ejecute como tú, y que cualquiera pueda acceder, para que el formulario público pueda enviarle datos.
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>
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 →