El problema es que la mayoría se rompen. Un pipeline tracker funciona bien como un SUMIF sobre un export de Salesforce — hasta que un representante renombra una etapa a mitad del trimestre, el CRM agrega una columna nueva, y tu número de pipeline ponderado silenciosamente cae a cero a las 6:45 a.m. del lunes. Construir uno que aguante significa diseñarlo para el export que vas a recibir de verdad, no para los 10 registros limpios del demo de YouTube.
La estructura central es una pestaña de datos crudos alimentada por el export del CRM (o por IMPORTRANGE desde una hoja conectada), una capa de cálculo que maneja datos sucios, y una vista de resumen que responde las 3 preguntas que tu director hace cada lunes: ¿cuál es el pipeline ponderado total?, ¿qué representantes tienen deals sin actividad?, ¿dónde están cayendo las oportunidades en el embudo?
Cómo llega realmente el export del CRM
Los exports de Salesforce y HubSpot aterrizan en Sheets con una apariencia razonablemente ordenada — hasta que revisas la columna de Fecha de Cierre. Un export real de 30,000 filas de Salesforce va a contener "2026-05-01", "5/1/2026", "1 de mayo de 2026" y varios en blanco, todo en la misma columna, porque tres flujos distintos de captura de datos tocaron esos registros durante 18 meses. El campo Etapa tiene "Propuesta", "propuesta", "PROPUESTA - REVISADA" y lo que sea que el SDR nuevo escribió antes de que alguien lo corrigiera.
Esto no es un caso borde. Este es el export. Tu tracker tiene que manejarlo antes de que llegue a cualquier fórmula.
Cómo construir un sales pipeline tracker que no se rompa
Deja la pestaña del export crudo intacta — nunca transformes en el lugar. Construye una pestaña Pipeline_Limpio que estandariza mientras lee. Siete columnas cubren el 90% de las necesidades de reporte de pipeline:
| Columna | Encabezado | Notas |
|---|---|---|
| A | ID de Deal | Clave única para deduplicación |
| B | Nombre del Deal | Texto, sin transformaciones |
| C | Responsable | TRIM + UPPER para normalizar mayúsculas |
| D | ARR | Requiere wrapper VALUE() |
| E | Etapa | Normalizada vía tabla de mapeo |
| F | Fecha de Cierre | Parseada con DATEVALUE() |
| G | Última Actividad | Para marcar deals sin movimiento |
La columna de Etapa rompe la mayoría de los trackers. No intentes limpiarla en el export crudo — mantén una pestaña pequeña Mapa_Etapas que relacione cada variante ("propuesta", "Propuesta - Revisada", "PROP") con un valor canónico. Luego tráelo al Pipeline_Limpio:
=IFERROR(VLOOKUP(TRIM(LOWER(Crudo!E2)), Mapa_Etapas!$A:$B, 2, 0), "DESCONOCIDO")
El IFERROR es obligatorio. Cuando aparezca un nombre de etapa nuevo (y va a aparecer, casi siempre a mitad del trimestre), la fórmula devuelve "DESCONOCIDO" en lugar de romper cada SUMIF aguas abajo. Un "DESCONOCIDO" que aparece en tu tabla del embudo es visible. Un SUMIF roto que devuelve cero no lo es.
Tracker de pipeline de ventas ponderado: el número que tu director realmente quiere
El pipeline ponderado multiplica el ARR de cada deal por su probabilidad de cierre según la etapa actual. La mayoría de los equipos de ventas asignan porcentajes aproximados: Descubrimiento al 10%, Propuesta al 30%, Negociación al 60%, Compromiso Verbal al 85%. Pon esos pesos en una pestaña llamada Pesos, no hardcodeados en la fórmula — las etapas se renombran y se reajustan cada pocos trimestres y no vas a querer revisar 12 llamadas SUMPRODUCT para actualizarlos.
Para menos de 5,000 filas, SUMPRODUCT funciona bien:
=SUMPRODUCT(
(Pipeline_Limpio!E2:E5001<>"Cerrado Perdido") *
(Pipeline_Limpio!E2:E5001<>"Cerrado Ganado") *
IFERROR(VLOOKUP(Pipeline_Limpio!E2:E5001, Pesos!$A:$B, 2, 0), 0) *
IFERROR(VALUE(Pipeline_Limpio!D2:D5001), 0)
)
Por encima de 5,000 filas, SUMPRODUCT empieza a ser lento. Cambia a QUERY para las agregaciones:
SELECT E, SUM(D)
WHERE E <> 'Cerrado Perdido' AND E <> 'Cerrado Ganado' AND D IS NOT NULL
GROUP BY E
LABEL SUM(D) 'ARR Total'
Luego multiplica contra la pestaña Pesos en una columna auxiliar. Menos elegante, pero recalcula en menos de 2 segundos en una hoja de 30,000 filas. El SUMPRODUCT anidado equivalente tarda 18+ segundos sobre los mismos datos.
Conversión por etapa: dónde se muere el embudo
El total ponderado te dice qué tan grande es el pipeline. La conversión por etapa te dice dónde van a morir los deals. Para el standup con el director, ese suele ser el número más importante.
Construye una tabla de embudo basada en COUNTIF donde cada fila es una etapa canónica, con columnas para conteo de deals, ARR total y tasa de conversión a la siguiente etapa:
=COUNTIF(Pipeline_Limpio!$E:$E, A2)
La tasa de conversión entre etapas adyacentes es:
=IFERROR(B3/B2, 0)
Donde B2 es el conteo en la etapa N y B3 es el conteo en la etapa N+1. Envuélvelo en IFERROR porque Descubrimiento a veces va a estar en cero el primer lunes de un trimestre nuevo, y un #¡DIV/0! en el dashboard del director es una mala manera de empezar una reunión.
Los benchmarks de la industria para SaaS B2B sugieren que alrededor del 20-25% del pipeline calificado se convierte a cerrado-ganado, según el informe State of Sales de Salesforce (6.ª edición, 2024) — aunque los equipos con ciclos de venta consultiva en mercados emergentes suelen ver tasas más bajas en etapas tempranas. Tus propios datos históricos del mismo export valen más que cualquier benchmark. La tabla del embudo es cómo construyes ese historial.
Detectar deals sin actividad antes de la llamada del lunes
Un deal que no ha tenido actividad en 30 días y no ha cerrado está muerto o necesita un empuje — y en cualquiera de los dos casos, el equipo de operaciones necesita saberlo antes de la reunión, no durante. Agrega una columna Flag_Inactivo al Pipeline_Limpio:
=IF(
AND(
E2<>"Cerrado Ganado",
E2<>"Cerrado Perdido",
IFERROR(HOY()-VALUE(G2), 999)>30
),
"INACTIVO",
""
)
El IFERROR(HOY()-VALUE(G2), 999) está haciendo trabajo real. Si Última Actividad está en blanco o llegó como texto, VALUE() falla, IFERROR devuelve 999, y el deal queda marcado como inactivo — lo cual es la decisión correcta. Un deal sin fecha de actividad registrada es efectivamente un deal muerto. Jala el conteo de inactivos a tu dashboard de resumen con =COUNTIF(Pipeline_Limpio!H:H, "INACTIVO") y acompáñalo con un desglose por responsable.
Dónde empieza a flaquear Sheets
| Volumen de filas | Enfoque recomendado |
|---|---|
| Menos de 5,000 | ARRAYFORMULA + SUMPRODUCT sin restricciones |
| 5,000–20,000 | QUERY para agregaciones, ARRAYFORMULA para transformaciones por fila |
| 20,000–50,000 | Solo QUERY para agregaciones; minimizar funciones volátiles (HOY, AHORA) |
| 50,000+ | Arquitectura dividida — Sheets solo como capa de visualización |
Según la documentación oficial de Google Sheets (Google Workspace, 2025), el límite estricto es 10 millones de celdas por hoja de cálculo. Pero el rendimiento real de las fórmulas se degrada mucho antes. Una hoja de pipeline con 50,000 filas y 15 columnas de fórmulas alcanza tiempos de recálculo de 30+ segundos, lo que destruye completamente el caso de uso de "dashboard en vivo".
La solución arquitectónica: mantén el export crudo en una hoja de cálculo, ejecuta la limpieza y las agregaciones en una segunda hoja con IMPORTRANGE jalando solo los datos procesados de resumen, y apunta el dashboard del director a la hoja de resumen. Tres pestañas, una sola fuente de verdad, tiempos de carga bajo 3 segundos.
La columna que rompe todo (una advertencia honesta)
Este es el modo de falla que nadie advierte: el administrador del CRM agrega una columna al export de Salesforce entre el lunes y el martes. Tu rango de IMPORTRANGE está fijo en Crudo!A:M. La nueva columna desplaza ARR de la columna D a la columna E. Cada fórmula que referencia la columna D por posición ahora jala el campo equivocado — en silencio, sin ningún error, solo con números incorrectos.
La solución es la referencia defensiva: usa MATCH para encontrar la posición del encabezado de columna, luego INDEX para jalar por nombre y no por letra de columna.
=INDEX(Crudo!$A:$Z, FILA(), COINCIDIR("ARR", Crudo!$1:$1, 0))
Esto agrega carga a las fórmulas, pero sobrevive a los cambios de esquema — que en una integración de CRM en vivo ocurren con más frecuencia de lo que nadie admite. En mayo de 2026, Google Sheets no tiene referencia nativa por nombre de columna fuera de las funciones de tabla estructurada, así que MATCH/INDEX sigue siendo el enfoque estándar para trackers resilientes a cambios de esquema.
La parte que nadie arregla: el export manual
El mayor costo operativo de cualquier pipeline tracker no son las fórmulas — es el ritual del lunes por la mañana de descargar un CSV de Salesforce, subirlo a Drive, volver a apuntar el IMPORTRANGE, y esperar que nada se haya desplazado. Son 20 minutos cada semana, y se rompe en cuanto alguien falta por enfermedad.
ModelMonkey se conecta directamente a Salesforce (solo lectura) y HubSpot, trae el export a tu estructura de Sheets según un horario programado, y ejecuta la lógica de limpieza en la importación. Su motor SQL — que corre consultas como SELECT Etapa, SUM(ARR) FROM pipeline GROUP BY Etapa directamente contra los datos de tu hoja — maneja las agregaciones que de otra manera requerirían fórmulas QUERY anidadas. Para los equipos de sales ops que hacen revisiones semanales de pipeline, ese paso manual puede desaparecer por completo.
Preguntas frecuentes
¿Cuántas filas puede manejar un sales pipeline tracker en Google Sheets?
Con fórmulas bien estructuradas, un tracker de pipeline funciona fluidamente hasta 5,000 filas usando SUMPRODUCT y ARRAYFORMULA. Entre 5,000 y 20,000 filas conviene migrar las agregaciones a QUERY, que es significativamente más eficiente. Por encima de 50,000 filas, Sheets deja de ser viable como motor de cálculo y debe usarse solo como capa de visualización, con la lógica pesada ejecutándose en otro sistema.
¿Cómo se calcula el pipeline ponderado en Google Sheets?
El pipeline ponderado multiplica el ARR de cada deal por el porcentaje de probabilidad asignado a su etapa actual. La fórmula práctica es un SUMPRODUCT que excluye los deals cerrados (ganados y perdidos) y hace un VLOOKUP contra una tabla de pesos por etapa. La clave es mantener esa tabla de pesos en una pestaña separada — no hardcodeada en la fórmula — para poder ajustar probabilidades sin tocar la lógica de cálculo.
¿Cada cuánto tiempo debo actualizar el tracker de pipeline de ventas?
La frecuencia depende del ciclo de ventas. Para equipos con ciclos cortos (7-30 días), una actualización diaria automatizada es lo ideal. Para ciclos de 60-180 días, como es común en ventas B2B empresariales en la región, una actualización semanal sincronizada con la reunión de pipeline del lunes es suficiente. Lo crítico no es la frecuencia sino la consistencia: un tracker que se actualiza de forma irregular genera más confusión que uno con cadencia fija, aunque sea semanal.
¿Qué diferencia hay entre un CRM y un tracker de pipeline en Google Sheets?
El CRM (Salesforce, HubSpot, Pipedrive) es el sistema de registro: captura actividades, almacena el historial de cada deal y gestiona el flujo de trabajo de ventas. El tracker en Sheets es una capa analítica encima del CRM: toma los datos exportados, los normaliza y los presenta en el formato exacto que necesita tu equipo de operaciones o finanzas para tomar decisiones rápidas. Ambos cumplen roles distintos y se complementan; el tracker no reemplaza al CRM, lo hace más útil para los equipos que analizan los datos.