Sistema de Cotizaciones Automáticas con Generación de PDF en Google Sheets y Gmail

Para muchas micro, pequeñas y medianas empresas, adquirir un software ERP o CRM complejo y costoso no siempre es viable de inmediato. Sin embargo, con el poder de Google Workspace y Google Apps Script, es posible crear un sistema ágil y 100% automatizado para generar y despachar cotizaciones en formato PDF profesional en segundos.

El Problema de las Cotizaciones Manuales#
En la gestión comercial diaria de servicios o productos B2B, el proceso de elaboración de presupuestos suele presentar cuellos de botella:
- El vendedor copia y pega datos de una plantilla antigua de Word o Excel, cometiendo errores tipográficos o de precios.
- Se exporta el archivo manualmente a PDF y se redacta un correo electrónico repetitivo en Gmail.
- No existe un registro centralizado ni métricas de seguimiento para saber qué cotizaciones fueron enviadas, aprobadas o expiradas.
Automatizar este flujo utilizando herramientas que tu equipo ya domina (como Google Sheets, Google Docs y Gmail) ahorra horas de trabajo repetitivo y asegura que cada propuesta tenga un diseño corporativo impecable.
Arquitectura de la Solución con Google Workspace#
La solución se compone de tres elementos interconectados:
Hoja de Cálculo Central (Google Sheets):
- Pestaña
Clientes: Directorio de contactos y empresas. - Pestaña
Catálogo: Lista de precios unitarios, códigos de producto y descripciones. - Pestaña
Generador: Interfaz donde el asesor selecciona el cliente, los ítems y las cantidades mediante menús desplegables. - Pestaña
Historial: Base de datos donde se registran todas las cotizaciones emitidas, números de serie, totales y enlaces a los PDFs en Google Drive.
- Pestaña
Plantilla de Diseño (Google Docs): Un documento prediseñado con el membrete, logo, términos comerciales y marcadores de posición dinámicos (
{{NUMERO}},{{CLIENTE}},{{RUC}},{{FECHA}},{{TOTAL}},{{TABLA_ITEMS}}).Script de Automatización (Google Apps Script): Código JavaScript que se ejecuta directamente en la nube de Google al presionar un botón en Sheets o al completar un formulario web.
Código Completo en Google Apps Script#
A continuación, se muestra el script modular para clonar la plantilla de Google Docs, reemplazar las etiquetas, convertir el archivo a PDF y enviarlo por Gmail:
/**
* Genera una cotización en PDF y la envía por correo electrónico
*/
function generarYEnviarCotizacion() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("Generador");
// 1. Obtener datos del cliente y de la cotización
const clienteNombre = sheet.getRange("C4").getValue();
const clienteEmail = sheet.getRange("C5").getValue();
const numeroCotizacion = sheet.getRange("C6").getValue();
const validezDias = sheet.getRange("C7").getValue();
const total = sheet.getRange("H15").getValue();
if (!clienteEmail || !numeroCotizacion) {
SpreadsheetApp.getUi().alert("Por favor complete los datos obligatorios del cliente.");
return;
}
// 2. IDs de carpetas y plantilla en Google Drive
const TEMPLATE_DOC_ID = "1aBcD_EJEMPLO_ID_PLANTILLA_DOCS";
const FOLDER_PDF_ID = "1xYz_EJEMPLO_ID_CARPETA_DRIVE";
const templateFile = DriveApp.getFileById(TEMPLATE_DOC_ID);
const targetFolder = DriveApp.getFolderById(FOLDER_PDF_ID);
// 3. Crear una copia temporal de la plantilla
const copyDoc = templateFile.makeCopy(`Cotización #${numeroCotizacion} - ${clienteNombre}`, targetFolder);
const doc = DocumentApp.openById(copyDoc.getId());
const body = doc.getBody();
// 4. Reemplazar variables dinámicas
const fechaHoy = Utilities.formatDate(new Date(), "America/Lima", "dd/MM/yyyy");
body.replaceText("{{NUMERO}}", numeroCotizacion);
body.replaceText("{{CLIENTE}}", clienteNombre);
body.replaceText("{{FECHA}}", fechaHoy);
body.replaceText("{{VALIDEZ}}", `${validezDias} días`);
body.replaceText("{{TOTAL}}", `S/ ${Number(total).toFixed(2)}`);
doc.saveAndClose();
// 5. Convertir a PDF y eliminar el doc temporal
const pdfBlob = copyDoc.getAs("application/pdf").setName(`Cotizacion_${numeroCotizacion}.pdf`);
const pdfFile = targetFolder.createFile(pdfBlob);
copyDoc.setTrashed(true);
// 6. Enviar correo vía GmailApp
const asunto = `Propuesta Comercial #${numeroCotizacion} - Brayan Developer`;
const cuerpoMensaje = `
Hola ${clienteNombre},\n\n
Adjunto encontrarás la cotización formal #${numeroCotizacion} solicitada.\n
El presupuesto tiene una validez de ${validezDias} días.\n\n
Quedamos a tu entera disposición para resolver cualquier duda.\n\n
Saludos cordiales,\n
Equipo Comercial
`;
GmailApp.sendEmail(clienteEmail, asunto, cuerpoMensaje, {
attachments: [pdfBlob],
name: "Brayan Developer Soluciones",
});
// 7. Guardar en el Historial de Cotizaciones
const historialSheet = ss.getSheetByName("Historial");
historialSheet.appendRow([
new Date(),
numeroCotizacion,
clienteNombre,
clienteEmail,
total,
pdfFile.getUrl(),
"ENVIADO"
]);
SpreadsheetApp.getUi().alert(`Cotización #${numeroCotizacion} enviada con éxito a ${clienteEmail}`);
}
Escalabilidad: Integración con N8N y WhatsApp#
Una vez consolidado el sistema en Google Sheets, es muy sencillo dar el siguiente paso de madurez tecnológica:
- Disparador Webhook: Conectar formularios de la página web con N8N para crear la fila en Google Sheets en tiempo real.
- Notificación por WhatsApp: Enviar un mensaje de aviso con el enlace al PDF al número del cliente a través de Evolution API.
- Alertas de Seguimiento: Programar recordatorios automáticos 48 horas después del envío si el cliente no ha respondido.
¿Deseas Automatizar la Gestión Comercial de tu Negocio?#
Implementar flujos automatizados con Google Workspace y N8N elimina tareas manuales y proyecta una imagen de máxima seriedad y rapidez frente a tus prospectos.
Si quieres diseñar un sistema de cotizaciones o CRM a la medida de tu empresa, ponte en contacto con nosotros para recibir asesoría personalizada.
¿Te gustaría profundizar en estos temas?
Aprende sobre desarrollo de software, apps a medida, automatizaciones con N8N, Next.js y Cloud con casos reales.


