Nutriinfo.es

2026 · En producción · Proyecto propio, en solitario

Cada etiqueta de Mercadona, leída con visión por computador y convertida en un dato que se puede buscar: nutrientes, ingredientes en árbol, alérgenos y el precio de hoy. Un producto de datos completo, del pipeline de IA a la API y al servidor MCP, diseñado y construido en solitario.

Portada de nutriinfo.es: «Cada etiqueta de Mercadona, convertida en dato», junto a una respuesta real de la API con el estado del catálogo.Portada de nutriinfo.es: «Cada etiqueta de Mercadona, convertida en dato», junto a una respuesta real de la API con el estado del catálogo.

El problema

La información de un producto está en su etiqueta, pero en una etiqueta no se puede buscar. Mercadona publica en su tienda online el nombre, el precio y las fotos de cada envase; la tabla nutricional está dentro de una imagen y los ingredientes, en un texto corrido.

Para quien tiene un hijo alérgico a los frutos secos, es celíaco, entrena o es nutricionista, la pregunta real no es qué lleva este producto, sino qué productos cumplen esto: yogures con menos de 5 g de azúcares, cenas veganas con más de 10 g de proteína, galletas sin huevo ni siquiera dentro del chocolate. Hasta ahora, la única forma de responderla era leer envase por envase en el pasillo.

Ya existen bases de datos nutricionales abiertas. La diferencia de Nutriinfo.es es que sus datos están atados a productos que cualquiera en España puede comprar esta tarde, con el precio de hoy. Mercadona es el supermercado con más cuota del país, así que una lista de la compra hecha con estos datos la puede usar casi cualquier persona.

El producto

A 19 de octubre de 2026, Nutriinfo.es tiene 3.013 productos de alimentación con ficha publicada, 121 nutrientes distintos y un histórico de precios que crece cada día. Se consulta de tres formas, cada una pensada para un usuario distinto:

  • Una API REST, para quien construye aplicaciones de nutrición, menús o comparadores. Es la pieza central: las decisiones técnicas se tomaron pensando en ella como un contrato público.
  • Desde ChatGPT o Claude, a través de un servidor MCP. Un nutricionista sin perfil técnico pregunta en lenguaje natural y el asistente consulta los datos reales.
  • La web, con una ficha por producto que enseña la calidad del dato, pensada para que la encuentren los buscadores y la citen los asistentes de IA.
Ficha de las Galletas Cookies Hacendado en Nutriinfo.es: origen declarado, NOVA 4, aceite de palma, precio y tabla nutricional con barras.Ficha de las Galletas Cookies Hacendado en Nutriinfo.es: origen declarado, NOVA 4, aceite de palma, precio y tabla nutricional con barras.
Una ficha de producto, diseñada para que parezca una respuesta de la API renderizada: el protagonista es el dato.

Cómo está hecho

La arquitectura parte de un principio: el esquema se versiona y el dato crudo se conserva. Cada etapa guarda lo que leyó el modelo, con qué versión del prompt y del esquema, y si alguien lo corrigió a mano. Así, ampliar lo que se extrae es reprocesar solo lo que falta, nunca empezar de cero.

Un pipeline que no inventa

En un producto donde un error puede llegarle a un niño alérgico, la fiabilidad va primero. Todo el pipeline gira alrededor de una idea: lo que no se sabe no se rellena.

  1. 01Catálogo4.320 productos, recorridos a diario con una cola que nunca va a ráfagas
  2. 02ClasificarReglas primero; un modelo solo para lo dudoso. Lo que no se come no gasta visión
  3. 03Leer la etiquetaClaude con visión, en lote, sobre las fotos del envase
  4. 04ComprobarCada cifra tiene que ser físicamente posible
  5. Publicadocon el origen de cada cifra
    Revisión humanasi algo no cuadra o la confianza baja del 80 %
El pipeline de cada producto. Cada etapa tiene su propio esquema y su versión: mejorar una no obliga a reprocesar las demás.
  • Una cola, no un cron. Las funciones de Vercel tienen límite de tiempo y a Mercadona no se le puede pedir el catálogo de golpe. Por eso el trabajo se parte en tareas pequeñas que se consumen poco a poco, con pausas aleatorias. Si Mercadona responde con un 429, el sistema frena solo y vuelve más tarde. La carga inicial y la actualización diaria son el mismo código a distinto ritmo.
  • Clasificar antes de leer. Droguería, mascotas y perfumería se resuelven con reglas sobre el árbol de categorías, sin llamar a ningún modelo. Un modelo de decisiones tipadas (Jev, de TypeSafe) resuelve lo que la regla no cubre. Así no se gasta una llamada de visión en un detergente.
  • Claude lee la etiqueta en lote, que cuesta la mitad. Como se guarda la respuesta cruda, recuperar un campo que no se extrajo no obliga a volver a leer la etiqueta.
  • Comprobaciones físicas antes de publicar: ningún valor negativo, azúcares no mayores que los hidratos, y grasas, hidratos, proteínas, fibra y sal sumando como mucho 100,5 g por cada 100 g. Lo que no cuadra va a revisión humana con la foto al lado, y una corrección manual no la pisa ningún reproceso posterior.
  • La IA transcribe, no corrige. Si una etiqueta trae un error de imprenta, como unas galletas que declaran 14 g de grasas saturadas sobre 20,7 g de grasa total y solo 2,4 g por ración, se guarda tal cual y se anota la incoherencia. Es la etiqueta lo que se publica, no lo que el modelo cree que debería poner.

Un modelo de datos que respeta la etiqueta

Lo difícil no era leer la etiqueta, sino decidir cómo guardarla para que sirviera a preguntas que nadie ha hecho todavía. Principio: ningún esquema cerrado donde el dato real es abierto.

Lo que publica Mercadona

Harina de trigo, pepitas de chocolate 29 % (azúcar, pasta de cacao, dextrosa, manteca de cacao, emulgente (lecitina de soja)), azúcar, grasa vegetal (palma), pepitas de chocolate con leche 11 % (azúcar, leche en polvo, manteca de cacao, pasta de cacao, lactosa (leche), emulgente (lecitinas), aroma natural de vainilla), almidón de trigo…

Lo que guarda Nutriinfo.es
  • Harina de trigogluten
  • Pepitas de chocolate29 %
  • azúcar
  • pasta de cacao
  • dextrosa
  • manteca de cacao
  • emulgente
  • lecitina de sojasoja · nivel 3
  • Azúcar
  • Grasa vegetal (palma)palma
  • Pepitas de chocolate con leche11 %
  • leche en polvoleche
  • lactosa (leche)leche
  • …y 8 ingredientes más

sin_ingrediente=soja → descartada, aunque la soja vaya escondida tres niveles más abajo.

Datos reales de las Galletas Cookies Hacendado: de texto corrido a un árbol en el que se puede buscar.
  • Ingredientes en árbol, no en lista. Aplanar la lista haría que el azúcar del chocolate y el azúcar de la galleta fueran el mismo elemento, y eso es falso. Los porcentajes de un subingrediente son relativos a su compuesto: si el chocolate es el 20 % de una galleta y el cacao el 40 % del chocolate, el cacao es el 8 % de la galleta. Se guardan los dos, el declarado y el real.
  • Un diccionario abierto de nutrientes, no columnas fijas. La vitamina B12 de un producto y el omega-3 de otro caben sin tocar el modelo, y la API puede ordenar por cualquiera de ellos sin desplegar código.
  • Varias bases por producto: por 100 g, por ración, escurrido y reconstituido. Son respuestas distintas a la misma pregunta: el atún en aceite ronda las 186 kcal por 100 g en lata y unas 128 escurrido, y nadie se bebe el aceite.
  • Alérgenos con tres estados: contiene, trazas y libre de, para los 14 del Reglamento (UE) 1169/2011. «No menciona el gluten» y «declara sin gluten» no son lo mismo, y esa diferencia no se puede perder.
  • Cada cifra dice de dónde sale. Declarado es lo que pone la etiqueta; estimado, un valor medio para la fruta o el pescado frescos, que no traen tabla, y nunca se presenta como dato de etiqueta; ausente, cuando estimar no tiene sentido, como en el agua. Los rankings públicos solo usan valores declarados.
  • El precio, por tramos. Es el único dato que no se puede recuperar después: la nutrición se puede volver a extraer, pero el precio de un día que no se registró se pierde para siempre. Se guarda un registro por cambio, no una foto diaria, separando las ofertas de los cambios de tarifa. Con la cantidad de cada envase, se detecta la reduflación.

Diseñar para un usuario que es un modelo

Con el servidor MCP, quien consulta los datos no es una persona, sino un asistente que actúa en su nombre. Eso cambia el trabajo de diseño: la interfaz son los nombres de las herramientas, sus descripciones y las instrucciones que el servidor le da al modelo.

ClaudeNutriinfo.es conectado

Yogures de Mercadona con menos de 5 g de azúcares por 100 g, de etiqueta. ¿Cuáles tienen más proteína?

buscar_productostexto: yogur · azucares ≤ 5 · origen: declarado · orden: -proteinas

Hay 15. Estos son los que más proteína tienen, con los valores declarados en la etiqueta por 100 g:

  1. Yogur griego natural ligero Hacendado5,8 g proteína · 4,7 g azúcares · 1,45 €
  2. Yogur griego natural ligero 2 % MG, bote5,8 g proteína · 4,7 g azúcares · 2,10 €
  3. Yogur natural edulcorado 0 % MG4,5 g proteína · 4,9 g azúcares · 1,05 €
  4. Yogur natural 0 % MG 0 % azúcares añadidos4,3 g proteína · 4,5 g azúcares · 1,05 €

Comprueba la etiqueta en la tienda antes de comprar, sobre todo si hay alergias.

Con datos reales del servidor MCP: el asistente elige la herramienta, filtra y, como le indica el servidor, distingue lo declarado y recuerda revisar la etiqueta.
  • Herramientas con la forma de las preguntas reales, no de las tablas: buscar combinando nutrientes, alérgenos e ingredientes; comparar hasta cinco productos; buscar un ingrediente a cualquier profundidad; ver qué ha subido hoy o qué envases han encogido.
  • Instrucciones que trasladan el criterio de producto al asistente: distinguir lo declarado de lo estimado, comparar siempre por 100 g, no afirmar nunca que un producto es seguro para una alergia y recordar que hay que comprobar la etiqueta.
  • Un bucle de calidad conversacional. Si la persona o el propio asistente detecta un dato que no cuadra, el asistente redacta el aviso con los productos afectados y le llega a una persona.
  • Conectar sin saber qué es MCP. Por debajo hay OAuth 2.1 con PKCE y registro dinámico de clientes; por encima, entrar con el email y pulsar «Permitir».
Página para conectar Nutriinfo.es a ChatGPT o Claude, con ejemplos de preguntas para copiar.Página para conectar Nutriinfo.es a ChatGPT o Claude, con ejemplos de preguntas para copiar.
La página de conexión se trata como adquisición, no como documentación: sin «servidor» ni «endpoint», con preguntas listas para copiar, porque la primera consulta que funciona es la que convierte.

Una API pensada para desarrolladores

Una API pública con terceros enganchados convierte el esquema en un contrato: un campo mal normalizado en una web se arregla en silencio, en una API es una ruptura. Por eso está versionada desde el primer día.

200GET /api/v1/productos/ean/8480000142122
{
  "nombre": "Galletas Cookies Hacendado",
  "precio": { "precio": 1.35, "precio_por_unidad": 6, "unidad_referencia": "kg" },
  "nutricion": [{ "base": "por_100", "origen": "declarado", … }],
  "alergenos": [
    { "alergeno": "soja", "estado": "contiene", "fuente": "etiqueta" },
    { "alergeno": "frutos_de_cascara", "estado": "trazas", "fuente": "etiqueta" }, …
  ],
  "derivados": {
    "nova": 4,
    "nova_origen": "regla",
    "nova_justificacion": "aditivos o ingredientes industriales: dextrosa, emulgente, …",
    "contiene_aceite_palma": true,
    "apto_vegano": false
  }
}
Extracto de una respuesta real. El grado NOVA dice cómo se decidió y por qué: si alguien pregunta, la respuesta está en el propio dato.
  • Contrato completo en OpenAPI y un playground con consultas reales sin registro ni clave, para probarla antes de escribir una línea de código.
  • Filtros combinables por cualquier nutriente, alérgeno, ingrediente a cualquier profundidad, NOVA, precio o marca, y orden por cualquier nutriente o por proteína por euro. La búsqueda por código de barras es de primera clase, porque es la integración más obvia para un tercero.
  • Claves por proyecto, con caducidad configurable, que se pueden rotar o pausar sin borrarlas.
  • Protección del dataset por la forma de uso, no solo por volumen. Un cliente legítimo consulta productos dispersos; quien copia recorre el catálogo en orden. El sistema mide qué parte del catálogo ha visto cada clave en 30 días y avisa si supera el 60 %. Los límites también son diarios, para que nadie pueda descargar el catálogo en una tarde.

Operarlo en producción

Un sistema que corre solo todo el día necesita una ventana para verlo. Nutriinfo.es tiene un panel de administración propio: salud de la ingesta, cola de revisión con la foto de la etiqueta junto al dato extraído y editable, coste de IA y uso.

La métrica que guía el producto es la tasa de activación, es decir, cuántas personas que se dan de alta llegan a hacer una primera consulta real. Si es baja, el problema está en la página de conexión, no en el dato.

El potencial

El valor de Nutriinfo.es no está solo en lo que responde hoy, sino en lo que acumula.

  • Un histórico que nadie podrá reconstruir. Con meses de serie, Nutriinfo.es es un observatorio del precio real de la cesta de la compra y de la reduflación, útil para periodismo de datos, organizaciones de consumidores o análisis de inflación.
  • Un pipeline que no depende de Mercadona. La lectura de etiquetas, el modelo de datos y las comprobaciones sirven para cualquier supermercado con catálogo online. Con varias cadenas, la misma consulta compara productos y precios entre tiendas.
  • Infraestructura para terceros: aplicaciones de nutrición, planificadores de menús, herramientas para dietistas, apps para personas alérgicas o celíacas y plataformas de salud que necesitan datos fiables de lo que se compra de verdad.
  • Un canal que acaba de empezar. Los asistentes de IA se están convirtiendo en la forma de preguntar por cualquier cosa, y los modelos citan a quien les da el dato limpio. Un dato estructurado, con su origen y servido por MCP, ya está preparado para cuando preguntarle a la IA qué comprar sea lo normal.

Stack: Next.js · TypeScript · Supabase (PostgreSQL, cola y autenticación) · Vercel · Vercel Blob · Claude con visión, en lote · Jev (TypeSafe) · API REST con OpenAPI · MCP con OAuth 2.1 · Stripe.

Más proyectos

Otros productos que he ideado, construido y lanzado por mi cuenta.

Contacto

Escríbeme a hola@miquelgomis.es o en LinkedIn. El código está en GitHub.