mercadona-cli: compra en Mercadona desde la terminal
Un CLI en Go que busca productos, consulta precios y hace checkout en tienda.mercadona.es. Output JSON para agentes. Single binary, sin deps.

Qué es
mercadona-cli es un CLI no oficial para tienda.mercadona.es. Busca productos, lee precios, monta un carrito y hace checkout. Todo desde la terminal.
Un binario estático en Go. Sin dependencias en runtime. Output estructurado con --json para que agents y scripts lo consuman sin parsear texto.
Mercadona no tiene API pública. El CLI habla con los mismos endpoints HTTP que la web. Traes tus credenciales.
Instalación
# npm (descarga el binario precompilado)
npm install -g @ivorpad/mercadona
# o curl (macOS / Linux)
curl -fsSL https://raw.githubusercontent.com/ivorpad/mercadona-cli/main/install.sh | sh
# o desde source (Go 1.26+)
go build -o mercadona ./cmd/mercadona
Lo que puedes hacer sin login
Búsqueda, precios y categorías. Anónimo:
mercadona search queso
mercadona search --limit 5 --json mayonesa
mercadona batch -f lista.txt # varios términos en una sola petición
mercadona product 13406 # detalle + precio
mercadona categories # árbol de categorías
Output a stdout. Errores a stderr. Exit code 1 si algo falla. Pensado para pipes y scripts.
Los precios varían por almacén. Hay que fijar el tuyo desde el código postal:
mercadona set-postal 28022 # → resuelve almacén mad1, lo guarda como default
Ejemplo de batch con una lista de compra:
$ mercadona batch -f lista.txt
• queso → [51110] Queso rallado mozzarella pizza-Roma Hacendado — 1.60€ (8.000€/kg)
• carne → [34157] Carne de pimiento choricero Hacendado — 1.55€ (11.072€/kg)
• mayonesa → [13406] Mayonesa Hacendado — 1.20€ (2.400€/L)
Login y checkout
Aquí está la parte interesante. Mercadona authentica con un Bearer token (SimpleJWT). El primer login necesita navegador — el login con contraseña requiere Google reCAPTCHA Enterprise, y los usuarios con cuenta Google no tienen contraseña.
Después de eso, el refresh token renueva la sesión indefinidamente. Headless. Sin captcha.
Método preferido: import-har. Un login en navegador, exportas el HAR, y el CLI extrae el refresh token:
# DevTools → Network → Export HAR (después de login)
mercadona import-har --file tienda.mercadona.es.har
mercadona whoami # confirma que está autenticado
El token se guarda en ~/.mercadona/config.toml (permisos 0600). Cada 401 token_not_valid dispara un refresh automático. Sin navegador. Sin intervención.
Una vez autenticado:
mercadona cart add 51110 2 # 2 unidades de queso rallado
mercadona cart # ver carrito
mercadona total # total exacto en céntimos
mercadona checkout # finalizar compra
Detalles técnicos
- Lenguaje: Go 1.26+, single static binary
- Sin dependencias en runtime — el binario funciona sin instalar nada más
- Almacén por código postal:
28022 → mad1,28013 → mad3. Los IDs de producto y precios son por almacén - Precedencia de almacén: flag
--wh>config.toml> built-inmad1 - Auth: Bearer token (SimpleJWT), refresh automático headless
- Seguridad: el HAR solo lee respuestas de auth y headers Bearer/Cookie. La contraseña del body nunca se toca
- Output: stdout para datos, stderr para logs, exit code 1 en error
- CI/CD: release pipeline con actions pinned a SHA, least-privilege permissions, npm publish vía OIDC Trusted Publishing
Por qué importa
Es un ejemplo limpio de cómo construir un CLI agent-friendly sobre una API no oficial. Estructura de output predecible. Auth que sobrevive sin navegador. Binario que funciona en cualquier sitio.
Para devs en España, además, es útil de forma inmediata: automatizar la compra semanal, comparar precios por almacén, integrar Mercadona en un workflow.
Enlaces
- Repo: github.com/ivorpad/mercadona-cli
- npm:
@ivorpad/mercadona - Releases: github.com/ivorpad/mercadona-cli/releases
📎 Fuente original: GitHub - ivorpad/mercadona-cli ↗