Mercadona API: productos y precios en JSON
Mercadona no publica una API para desarrolladores. Lo que hay aquí es lo que su tienda online muestra públicamente, devuelto como JSON: el catálogo, los precios y las bajadas de precio. Un detalle que conviene tener claro desde el principio: en Mercadona el precio y el surtido dependen del almacén, y el almacén depende del código postal.
Endpoints
| endpoint | Qué devuelve | Obligatorios |
|---|---|---|
| search | Búsqueda por palabra clave en la tienda online, con el precio correspondiente a un código postal español. | query |
| product/detail | La ficha completa de un producto por `product_id` o por su URL, con el precio para el código postal que indiques. | product_id |
| category | Todos los productos de una categoría, con sus subcategorías y precios. | category_id |
| categories | El árbol completo de categorías de la tienda online: cada sección con los ids que se pasan a `category`. | todos opcionales |
| deals | La lista completa de 'Bajadas de precio': cada producto cuyo precio acaba de bajar. Es la consulta más directa para seguir cambios. | todos opcionales |
| warehouse/lookup | Si la tienda online reparte a un código postal y desde qué almacén. Úsalo antes de comparar precios entre zonas. | postal_code |
Cada llamada se cobra en créditos. Las llamadas fallidas y bloqueadas son gratuitas.
Ejemplo que funciona
Comparar precios entre dos códigos postales sin pasar por warehouse/lookup lleva a conclusiones falsas: si uno de los dos no tiene reparto, no estás comparando dos precios, estás comparando un precio con nada.
curl -X POST https://api.reefapi.com/mercadona/v1/search \
-H "x-api-key: TU_CLAVE" \
-H "content-type: application/json" \
-d '{"query": "aceite de oliva", "postal_code": "28001"}'{
"ok": true,
"data": {
"results": [
{
"product_id": "...",
"display_name": "...",
"price": 7.95,
"unit_price": 7.95,
"unit": "L"
}
]
},
"meta": { "record_count": 24, "cache_hit": false, "mode": "live" }
}En lugar de tu propio scraper de Mercadona
Escribir un scraper de Mercadona funciona el primer día. Lo que cuesta viene después: cuando cambia la estructura de la ficha, el parser devuelve vacío en lugar de un error, y cuando salta la protección anti-bot la ejecución se corta a medias. Las dos cosas se parecen demasiado a 'no hay productos'.
Hay además una trampa propia de Mercadona: si tu scraper no fija el código postal, recoge precios de un almacén cualquiera y los datos parecen correctos aunque no lo sean. Aquí el código postal es un parámetro normal.
Para una extracción puntual, tu propio script sale más barato y lo decimos sin rodeos. Para un seguimiento que deba funcionar cada día, lo caro no es el código sino las averías que nadie ve.
Límites y notas honestas
- No es la API oficial de Mercadona y no tenemos ningún acuerdo con Mercadona.
- El precio y el surtido dependen del almacén, y el almacén del código postal. Sin código postal obtienes el valor por defecto, no un precio 'medio'.
- Solo cubre la tienda online. Lo que haya en un supermercado físico no se publica y no lo inventamos.
- Sin caché: cada llamada refleja el estado en ese momento.