1. Inicio
  2. Blog
  3. KPIs y operaciones
  4. Monta tu app: detector de stock muerto con análisis ABC

KPIs y operaciones · 12 min de lectura

Monta tu app: detector de stock muerto con análisis ABC

El stock que no se vende no avisa: ocupa sitio, inmoviliza dinero y envejece. Aquí tienes cómo montar una hoja que lo detecta sola con un análisis ABC por venta y por margen, y una automatización que cada lunes te manda la lista con acciones propuestas. Las cuentas las hacen las fórmulas; la IA solo explica.

En 30 segundos

  • Exporta dos ficheros de tu TPV, de Holded o del BI de la empresa: ventas por referencia y stock de hoy.
  • Una hoja con fórmulas calcula la clase ABC por venta y por margen, los días sin venta y el valor del stock, y marca cada referencia como Vigilar (60 días) o Muerto (90 días).
  • La IA no calcula nada: recibe la tabla terminada y propone una acción por referencia (traspaso, exposición, pack, rebaja, devolución, no recomprar).
  • Cada lunes te llega un correo con el resumen de la hoja, la lectura de la IA y la lista ordenada por dinero parado.

Tiempo para montarlo: ~2 tardes: una para dejar la hoja con tus datos y otra para el envío automático del lunes.
Necesitas: la exportación de ventas por referencia (doce meses) y la de stock con coste, una hoja de Google, n8n o Make y acceso por API a una IA. Sin automatizar, la hoja funciona sola.

En todas las tiendas que he llevado había un rincón del almacén que nadie miraba. No por dejadez: el día a día está en lo que se vende, y lo que no se vende no hace ruido. El problema es que ese rincón es dinero, y cuanto más tarda en salir, más cuesta sacarlo.

Si quieres la teoría corta, la tienes en el glosario: stock muerto y análisis ABC. Aquí vamos a la práctica: qué exportar, qué fórmulas poner, qué hace la IA y cómo te llega cada lunes.

Qué vas a montar

DisparadorExportación de ventas y stock en CSV
Paso 2Pestañas Ventas y Stock
Paso 3Fórmulas: ABC por venta y margen, días sin venta
Paso 4Referencias en Vigilar y Muerto, por valor
Paso 5Explica y propone acciones, sin recalcular
ResultadoInforme cada lunes
Mediadificultad: lo más delicado es dejar limpia la exportación
1 tardepara la hoja con tus datos; otra para el envío automático
0 cálculoshechos por la IA: todo lo calculan las fórmulas o el código

Tienda pequeña o cadena: de dónde salen los datos

Tienda pequeñaCadena con SAP, Oracle o Dynamics
OrigenExportación del TPV (Shopify POS, Square, Lightspeed…) o de Holded a Excel o CSVEl informe de BI que ya recibes (BW, BusinessObjects, Power BI…) exportado a Excel o CSV
Dónde se calculaHoja de Google con fórmulas, o n8n con un nodo de códigoHoja o Excel de la empresa; n8n autoalojado o Power Automate si lo tenéis aprobado
IAAPI de tu proveedor con cuenta del negocioSolo la que la empresa permita (Copilot, por ejemplo, si es la aprobada)
Qué no hacerFiarte de la primera exportación sin revisarConectar nada al ERP o pedir accesos que no tienes. Se trabaja sobre exportaciones

En una cadena, la central ya calcula ABC, pero de toda la cadena. Hacerlo para tu tienda o tu zona con el informe que ya te llega sirve para ver lo que el dato global esconde: una referencia que es A en la cadena y C en tu tienda es una conversación para tener con compras, con datos.

Qué exportar y cómo dejarlo limpio

Crea una hoja de Google con dos pestañas de entrada. Pega cada exportación en la suya con estas columnas, en este orden (renombra las cabeceras si tu sistema las llama distinto):

  • Ventas (una fila por referencia, del periodo que elijas; doce meses es lo habitual): SKU · Descripción · Familia · Unidades · Venta neta · Margen bruto · Última venta.
  • Stock (foto de hoy): SKU · Stock · Coste unitario.

Venta neta y margen, sin IVA. Si tu informe no trae margen, calcúlalo como venta neta menos coste de lo vendido; tienes la definición en margen bruto.

Si la exportación no trae «Última venta», exporta las líneas de venta de los últimos 120 días (fecha y SKU por línea) a una pestaña Lineas y saca la fecha con =MAX.SI.CONJUNTO(Lineas!A:A; Lineas!B:B; A2), donde A es la fecha y B el SKU. Si da 0, no hay venta en ese periodo.

Antes de calcular, limpia: que los SKU sean texto (si empiezan por cero, la hoja se los come); que los importes sean números y no texto con «€» o con punto de miles; que las fechas sean fechas. Un SKU mal escrito en una pestaña y bien en la otra es una referencia «sin ventas» que sí se vende.

¿Cómo se hace un análisis ABC en Google Sheets?

Crea una pestaña Calculo. En la fila 1, las cabeceras: SKU · Descripción · Familia · Venta neta · Margen bruto · Última venta · Stock · Coste unitario · Valor stock · Acum venta · ABC venta · Acum margen · ABC margen · Días sin venta · Estado. En la fila 2, estas fórmulas (hoja en español, con punto y coma), y cópialas hacia abajo:

Col.Qué esFórmula en la fila 2
ASKU (todos, con venta o con stock)=UNICO(FILTRAR({Ventas!A2:A; Stock!A2:A}; {Ventas!A2:A; Stock!A2:A}<>""))
BDescripción=SI.ERROR(BUSCARV(A2; Ventas!A:G; 2; FALSO); "")
CFamilia=SI.ERROR(BUSCARV(A2; Ventas!A:G; 3; FALSO); "")
DVenta neta=SI.ERROR(BUSCARV(A2; Ventas!A:G; 5; FALSO); 0)
EMargen bruto=SI.ERROR(BUSCARV(A2; Ventas!A:G; 6; FALSO); 0)
FÚltima venta=SI.ERROR(BUSCARV(A2; Ventas!A:G; 7; FALSO); "")
GStock=SI.ERROR(BUSCARV(A2; Stock!A:C; 2; FALSO); 0)
HCoste unitario=SI.ERROR(BUSCARV(A2; Stock!A:C; 3; FALSO); 0)
IValor stock=G2*H2
J% de venta de las que venden más=SI(D2<=0; 1; SUMAR.SI($D$2:$D; ">"&D2) / SUMAR.SI($D$2:$D; ">0"))
KABC por venta=SI(J2<0,8; "A"; SI(J2<0,95; "B"; "C"))
L% de margen de las que dejan más=SI(E2<=0; 1; SUMAR.SI($E$2:$E; ">"&E2) / SUMAR.SI($E$2:$E; ">0"))
MABC por margen=SI(L2<0,8; "A"; SI(L2<0,95; "B"; "C"))
NDías sin venta=SI(F2=""; "sin venta"; HOY()-F2)
OEstado=SI(G2<=0; ""; SI(O(F2=""; HOY()-F2>=90); "Muerto"; SI(HOY()-F2>=60; "Vigilar"; "")))

La fórmula de la columna A va solo en A2: rellena la columna entera. Las demás, copiadas hacia abajo hasta donde llegue.

Cómo funciona el ABC sin ordenar nada: la columna J suma lo que venden todas las referencias que venden más que esta y lo divide por el total. Si las que van por delante no llegan al 80 %, esta es A; si no llegan al 95 %, B; el resto, C. Es el mismo criterio que ordenar de mayor a menor y mirar el acumulado. Los cortes 80 y 95 son los habituales; cámbialos si tu surtido lo pide.

Si tu hoja está en inglés: SI es IF, SI.ERROR es IFERROR, BUSCARV es VLOOKUP, SUMAR.SI es SUMIF, UNICO es UNIQUE, FILTRAR es FILTER, HOY es TODAY, O es OR, FALSO es FALSE; el separador es la coma y el decimal, el punto (0.8).

Ejemplo Una referencia de bufandas: venta neta del año 100 €, margen 10 €, última venta hace 155 días, 7 unidades en stock a 5,50 € de coste. La hoja dice: ABC venta C, ABC margen C, 155 días sin venta, valor stock 38,50 €, Estado Muerto. Es poco dinero, pero ocupa una balda que podría tener una referencia A.
Ejemplo Pestaña Calculo con cuatro referencias. Resumida: se ocultan las columnas de apoyo (acumulados, coste, venta y margen).
SKUDescripciónFamiliaABC ventaABC margenDías sin ventaStockValor stockEstado
00127Taza cerámica blancaHogarAA24080,00 €
00318Manta de sofáHogarCB7412180,00 €Vigilar
00560Cojín terciopeloHogarCCsin venta1590,00 €Muerto
00412Bufanda punto grisComplementosCC155738,50 €Muerto

La pestaña de resumen

Una pestaña Resumen con los totales. Es lo que encabeza el correo, y sale de la hoja, no de la IA:

  • Referencias A, B y C por venta: =CONTAR.SI(Calculo!K:K; "A"), y lo mismo con "B" y "C".
  • Valor del stock muerto: =SUMAR.SI(Calculo!O:O; "Muerto"; Calculo!I:I). Y el de vigilar, con "Vigilar".
  • Una celda de texto para el correo, en B1: ="Muerto: "&CONTAR.SI(Calculo!O:O; "Muerto")&" refs, "&REDONDEAR(SUMAR.SI(Calculo!O:O; "Muerto"; Calculo!I:I); 0)&" € a coste. Vigilar: "&CONTAR.SI(Calculo!O:O; "Vigilar")&" refs, "&REDONDEAR(SUMAR.SI(Calculo!O:O; "Vigilar"; Calculo!I:I); 0)&" €."

Con esto ya tienes el detector funcionando, sin automatizar nada. Filtra Calculo por Estado y ordena por Valor stock: esa es tu lista de la semana.

¿Qué hacer con el stock muerto según su clase ABC?

Mirar solo la venta engaña: hay referencias que venden mucho y dejan poco, y otras que venden poco y dejan mucho. Por eso la hoja calcula las dos clases. Una forma práctica de leerlas:

Venta / margenQué suele significarQué hacer
A / AEl corazón de la tiendaQue nunca falte. Mejor sitio y vigilancia de roturas
A / CVende mucho, deja pocoRevisar precio y coste (sin confundir markup y margen). No es la que hay que promocionar
C / AVende poco, deja muchoExposición y venta sugerida. Puede subir si se ve
C / C con VigilarSe está parandoCambiar de sitio, pack con una A, no volver a pedir
C / C con MuertoDinero paradoTraspaso a otra tienda, rebaja escalonada, devolución si el acuerdo lo permite, liquidar o donar

Lo que no aparece en la tabla es la temporada y la fecha de entrada. Un abrigo sin ventas en septiembre no es lo mismo que en marzo, y una novedad de hace tres semanas no puede tener 90 días sin venta. Si tienes la fecha de entrada, añádela al Stock y excluye lo que lleva menos de 90 días en tienda. Lo que liberes de stock muerto vuelve a tu open to buy: dinero para comprar lo que sí se vende.

La IA solo explica: la instrucción

Una IA de lenguaje puede equivocarse sumando, redondeando o copiando una cifra, y no avisa. Por eso aquí no calcula: recibe la lista ya filtrada y ordenada (como mucho 25 filas) y redacta.

Copia y adapta:
Eres la persona responsable de surtido de una tienda. Te paso una tabla YA CALCULADA con las referencias que tienen stock y llevan tiempo sin venderse: SKU, descripción, familia, clase ABC por venta, clase ABC por margen, días sin venta, unidades en stock y valor del stock a coste. No recalcules ni cambies ninguna cifra: si citas una, cópiala tal cual. Empieza con dos frases sobre el resumen. Después, para cada referencia, por orden de valor de stock, propone UNA acción de esta lista y explica en una frase por qué: traspasar a otra tienda, cambiar la ubicación o la exposición, hacer pack o venta cruzada con un producto A, rebaja escalonada, devolver al proveedor si el acuerdo lo permite, liquidar o donar, no volver a comprar. Si falta información para decidir (temporada, fecha de entrada, acuerdos con el proveedor), dilo en lugar de suponer. Máximo 25 líneas, en español de España.

La lista cerrada de acciones evita respuestas genéricas («optimiza tu inventario») y te deja propuestas que se pueden hacer el lunes. Las decisiones son tuyas: la IA no sabe qué acuerdos tienes con cada proveedor ni qué pasa en la tienda de al lado.

Datos: aquí no hay datos de clientes, pero sí datos de negocio (ventas, márgenes, costes). Usa una IA con cuenta del negocio, y en una cadena, solo la aprobada por la empresa. Más en qué datos no compartir con una IA.

El envío automático de cada lunes

DisparadorCada lunes a las 7:30
Paso 2Lee Ventas y Stock (o la pestaña Calculo)
Paso 3Código o fórmulas: ABC, días y estado
Paso 4Explica la lista y propone acciones
ResultadoCorreo con resumen, propuestas y tabla

Dos formas de montarlo, con el mismo resultado:

  • n8n con nodo de código: la plantilla lee las pestañas Ventas y Stock, hace los cálculos en un nodo de código (mismos criterios que las fórmulas de arriba), escribe el resultado en una pestaña Resultado y manda el correo. Útil si no quieres mantener fórmulas o tienes muchas referencias.
  • Make leyendo la hoja: las fórmulas calculan y Make solo busca las filas en Vigilar o Muerto, lee la celda de resumen, llama a la IA y envía el correo.

En los dos casos, el correo empieza por el resumen de la hoja o del código, sigue con la lectura de la IA y termina con la tabla tal cual. Si la IA cita una cifra distinta de la tabla, lo ves en el mismo correo.

Ejemplo El correo del lunes con esas mismas cuatro referencias: primero la hoja, luego la IA, al final la tabla.
De: Stock parado (automático)Asunto: Stock parado · lunes 2 de noviembre · Tienda Centro

Resumen (de la hoja)

Muerto: 2 refs, 129 € a coste. Vigilar: 1 refs, 180 €.

Propuestas (borrador de la IA)

  • 00318 Manta de sofá (180,00 €, 74 días, Vigilar): cambiar la ubicación o la exposición antes de que pase a Muerto. Es B por margen.
  • 00560 Cojín terciopelo (90,00 €, sin venta): no volver a comprar. Sin fecha de entrada no sé si es una novedad: revisarlo antes de rebajar.
  • 00412 Bufanda punto gris (38,50 €, 155 días): rebaja escalonada o pack con un producto A.

Lista completa

SKUDescripciónValor stockEstado
00318Manta de sofá180,00 €Vigilar
00560Cojín terciopelo90,00 €Muerto
00412Bufanda punto gris38,50 €Muerto

Lo que queda manual en una tienda que trabaja con exportaciones: pegar cada semana los dos ficheros. Si tu TPV o Holded se conecta con Make o n8n, puedes automatizar también esa parte; empieza a mano hasta que confíes en las cifras.

Descarga las plantillas

Son una plantilla de partida, no probada en tu cuenta. Revisa las columnas, los días y los cortes, crea tus credenciales (no llevan ninguna clave) y compara el resultado con cinco referencias que conozcas bien antes de fiarte.

JSONFlujo n8n: stock muerto y ABC cada lunesCálculo en nodo de código, pestaña de resultado, lectura de la IA y correo.Descargar (.json) MDGuía Make: stock muerto y ABC cada lunesLas fórmulas calculan; Make filtra, llama a la IA y envía el informe.Descargar (.md)

Si estás eligiendo herramienta, tienes la comparativa de Make, n8n y Zapier.

Cómo probarlo

  1. Diez referencias inventadas antes de pegar datos reales: tres que vendan mucho, unas con última venta hace 70 días, otras hace 120, una con stock y sin ventas, una sin stock.
  2. Comprueba a mano que el ABC tiene sentido: las tres grandes deben salir A, y la suma de las A debe rondar el 80 % de la venta.
  3. Comprueba el Estado: 70 días es Vigilar, 120 es Muerto, sin stock no se marca.
  4. Pega tus datos reales y mira cinco referencias que conozcas de memoria. Si alguna sale rara, casi siempre es la exportación.
  5. Lanza el envío a mano y lee el correo buscando una cosa: que la IA no haya cambiado ninguna cifra.

Fallos típicos y cómo arreglarlos

Lo que pasaPor qué suele serCómo se arregla
Todo sale C o todo AVenta neta como texto («1.234,56 €»)Quita el símbolo y el punto de miles al exportar o con Buscar y reemplazar; comprueba que la columna se alinea a la derecha
Días sin venta da #¡VALOR!La fecha es texto, no fechaFormato › Número › Fecha, o convierte con FECHANUMERO
Referencias que se venden salen sin ventasSKU distinto entre pestañas (ceros delante, espacios)Formato texto en las dos columnas de SKU y ESPACIOS() para limpiar
Novedades marcadas como MuertoLlevan poco en tienda y aún no han vendidoAñade fecha de entrada y exclúyelas hasta los 90 días
Margen negativo o raroDevoluciones, regalos o coste mal cargadoRevísalo en el sistema; la hoja las deja en C y el dato malo se ve
La IA cambia cifras o propone cosas imposiblesRecibe demasiadas columnas o le falta contextoMáximo 25 filas, solo las columnas de la tabla, y la frase «no recalcules»
En la cadena, la exportación cambia de columnasEl informe de BI se ha modificadoPega en una pestaña intermedia y mapea las columnas con BUSCARV por cabecera

¿Y si trabajas en Excel?

Las fórmulas de la guía funcionan igual en Excel. La diferencia está en la IA y en el envío del lunes.

Microsoft 365

Excel, Copilot y Power Automate

Copilot en Excel, según tu licencia, puede explicar la lista de stock muerto y proponer acciones, igual que el paso de ChatGPT. Un flujo programado de Power Automate te la manda cada lunes por Outlook.

Google Workspace

Sheets con Gemini

Si sigues en Google, Gemini en Sheets (Business Standard o superior) crea la tabla dinámica por clase ABC y el gráfico sin escribir fórmulas.

Más sobre Copilot en Copilot en Excel para ventas y stock.

Tu primer paso hoy

  • Exporta ventas por referencia de los últimos doce meses y el stock de hoy, y pégalos en una hoja.
  • Pon solo dos columnas: Días sin venta y Estado. En diez minutos tienes tu primera lista de stock parado.
  • Elige las cinco referencias con más valor parado y decide una acción para cada una esta semana.
El stock muerto no se arregla con un informe. Se arregla cuando alguien lo ve a tiempo y decide qué hacer con él el lunes.

Preguntas frecuentes

¿60 y 90 días valen para cualquier tienda?

Son un punto de partida. En alimentación fresca son demasiado; en hogar o en productos de temporada larga, quizá poco. Ajusta los días por familia si tu surtido es muy distinto entre secciones, y revisa la rotación habitual de cada una.

¿Por qué no le paso el CSV entero a la IA y que lo calcule ella?

Porque puede equivocarse con las cuentas sin avisar, y con miles de filas es más probable. Las fórmulas o el código no se cansan ni redondean a su manera. La IA es buena explicando y proponiendo, y para eso le basta la lista final.

¿Cada cuánto tengo que actualizar los datos?

Una vez por semana es suficiente para el stock muerto. Si pegas las exportaciones el lunes a primera hora, el informe sale después con los datos de esa semana.

Trabajo en una cadena y la central ya hace ABC. ¿Para qué esto?

Para tu tienda o tu zona. El ABC de la cadena mezcla tiendas muy distintas. Con el informe que ya recibes, ves qué es A en la cadena y C en tu tienda, y llevas ese dato a la reunión con compras.

Fuentes

Consultadas en noviembre de 2026.

Para seguir: Cuadros de mando y KPIs automáticos · Stock muerto: qué es, cómo detectarlo y qué hacer con él · Programas e IA para controlar el stock de tu tienda: qué ofrece cada opción

Colaborar

¿Te ha resultado útil?

Escribo sobre retail, operaciones e IA. Si quieres comentar el artículo o colaborar en algo parecido, escríbeme.