Mercadona API

Spain's largest supermarket as JSON, priced for the postal code you name

The Mercadona API turns tienda.mercadona.es, the online shop of Spain's largest supermarket chain, into clean JSON in six actions: search, product/detail, category, categories, deals and warehouse/lookup.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Mercadona endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
M
/mercadona/v1

6 active endpoints. Every call is 1 credit.

  • POST/mercadona/v1/search
  • POST/mercadona/v1/product/detail
  • POST/mercadona/v1/category
  • POST/mercadona/v1/categories
  • POST/mercadona/v1/deals
  • POST/mercadona/v1/warehouse/lookup

What Mercadona endpoints does ReefAPI ship?

6 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

6 endpoints

search

1 cr

Search Mercadona's online shop by keyword, priced for a Spanish postal code.

required
query
optional
postal_code, warehouse, lang, page, page_size, sort, brands, category_id, include_fallback_results, max_rotations

product/detail

1 cr

The full Mercadona product record by product_id (or product URL), priced for a postal code.

required
product_id
optional
postal_code, warehouse, lang, max_rotations

category

1 cr

Every product of one Mercadona category (ids from categories), with its sub-categories, price…

required
category_id
optional
subcategory_id, postal_code, warehouse, lang, page, page_size, sort, max_rotations

categories

1 cr

Mercadona's full online category tree.

required
optional
postal_code, warehouse, lang, max_rotations

deals

1 cr

Mercadona's complete price-drop list ('Bajadas de precio'.

required
optional
type, category_id, postal_code, warehouse, lang, page, page_size, sort, max_rotations

warehouse/lookup

1 cr

Check whether Mercadona's online shop delivers to a Spanish postal code and which warehouse (…

required
postal_code
optional
max_rotations

Every parameter, every allowed value →

Mercadona API

3 of 6 endpoints, ready to run

View docs ↗

Mercadona products for a keyword: shelf price, previous price when it just dropped, unit price per kg, litre or unit, pack size, VAT rate, EAN, brand, category path and availability - for the postal code you pass.

1 credit1 required · 3 optional
POST/mercadona/v1/search
ok449 ms · 50 records · sample
{
  "ok": true,
  "meta": {
    "api": "mercadona",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 448.6,
    "record_count": 50,
    "cache_hit": false
  },
  "data": {
    "results": [
      {
        "product_id": "10381",
        "title": "Leche semidesnatada Hacendado",
        "brand": "Hacendado",
        "ean": "8402001002090",
        "packaging": null,
        "main_feature": null,
        "category": {
          "id": "343",
          "name": "Leche semidesnatada",
          "level": 2
        },
        "breadcrumb": [
          {
            "id": "6",
            "name": "Huevos, leche y mantequilla",
            "level": 0
          },
          {
            "id": "72",
            "name": "Leche y bebidas vegetales",
            "level": 1
          },
          {
            "id": "343",
            "name": "Leche semidesnatada",
            "level": 2
          }
        ],
        "category_paths": [
          [
            {
              "id": "6",
              "name": "Huevos, leche y mantequilla",
              "level": 0
            },
            {
              "id": "72",
              "name": "Leche y bebidas vegetales",
              "level": 1
            },
            {
              "id": "343",
              "name": "Leche semidesnatada",
              "level": 2
            }
          ]
        ],
        "url": "https://tienda.mercadona.es/product/10381/leche-semidesnatada-hacendado-pack-6",
        "slug": "leche-semidesnatada-hacendado-pack-6",
        "image": "https://prod-mercadona.imgix.net/images/c15010ddd0e6fc881e5ef94446d43bef.jpg?fit=crop&h=300&w=300",
        "price": 5.04,
        "price_display": "5,04 €",
        "currency": "EUR",
        "original_price": null,
        "original_price_display": null,
        "discount_percent": null,
        "save_amount": null,
        "price_dropped": false,
        "member_price": null,
        "member_price_display": null,
        "member_discount_percent": null,
        "member_program": null,
        "member_unit_price": null,
        "unit_price": 0.84,
        "unit_price_unit": "L",
        "unit_price_measure": "litre",
        "unit_price_display": "0,84 €/L",
        "sold_by": "unit",
        "price_per_quantity": null,
        "price_per_quantity_unit": null,
        "order_increment": null,
        "price_is_estimate": false,
        "size": "6 briks x 1 L",
        "size_value": 6,
        "size_unit": "L",
        "pack_units": 6,
        "pack_unit_name": "briks",
        "drained_weight": null,
        "tax_percent": 4,
        "is_new_price": false,
        "availability": "in_stock",
        "in_stock": true,
        "status": null,
        "unavailable_from": null,
        "unavailable_weekdays": [],
        "max_order_quantity": 999,
        "age_restricted": false,
        "is_water": false,
        "is_new_arrival": null,
        "rating": null,
        "review_count": null,
        "rating_scale": null,
        "sponsored": false
      },
      {
        "product_id": "10379",
        "title": "Leche entera Hacendado",
        "brand": "Hacendado",
        "ean": "8402001002076",
        "packaging": "Pack-6",
        "main_feature": null,
        "category": {
          "id": "342",
          "name": "Leche entera",
          "level": 2
        },
        "breadcrumb": [
          {
            "id": "6",
            "name": "Huevos, leche y mantequilla",
            "level": 0
          },
          {
            "id": "72",
            "name": "Leche y bebidas vegetales",
            "level": 1
          },
          {
            "id": "342",
            "name": "Leche entera",
            "level": 2
          }
        ],
        "category_paths": [
          [
            {
              "id": "6",
              "name": "Huevos, leche y mantequilla",
              "level": 0
            },
            {
              "id": "72",
              "name": "Leche y bebidas vegetales",
              "level": 1
            },
            {
              "id": "342",
              "name": "Leche entera",
              "level": 2
            }
          ]
        ],
        "url": "https://tienda.mercadona.es/product/10379/leche-entera-hacendado-pack-6",
        "slug": "leche-entera-hacendado-pack-6",
        "image": "https://prod-mercadona.imgix.net/images/e471e628a91aef1a7d6473da2cb904c6.jpg?fit=crop&h=300&w=300",
        "price": 5.76,
        "price_display": "5,76 €",
        "currency": "EUR",
        "original_price": null,
        "original_price_display": null,
        "discount_percent": null,
        "save_amount": null,
        "price_dropped": false,
        "member_price": null,
        "member_price_display": null,
        "member_discount_percent": null,
        "member_program": null,
        "member_unit_price": null,
        "unit_price": 0.96,
        "unit_price_unit": "L",
        "unit_price_measure": "litre",
        "unit_price_display": "0,96 €/L",
        "sold_by": "unit",
        "price_per_quantity": null,
        "price_per_quantity_unit": null,
        "order_increment": null,
        "price_is_estimate": false,
        "size": "6 briks x 1 L",
        "size_value": 6,
        "size_unit": "L",
        "pack_units": 6,
        "pack_unit_name": "briks",
        "drained_weight": null,
        "tax_percent": 4,
        "is_new_price": false,
        "availability": "in_stock",
        "in_stock": true,
        "status": null,
        "unavailable_from": null,
        "unavailable_weekdays": [],
        "max_order_quantity": 999,
        "age_restricted": false,
        "is_water": false,
        "is_new_arrival": null,
        "rating": null,
        "review_count": null,
        "rating_scale": null,
        "sponsored": false
      },
      {
        "product_id": "10721",
        "title": "Leche semidesnatada sin lactosa Hacendado",
        "brand": "Hacendado",
        "ean": "8480000104717",
        "packaging": null,
        "main_feature": null,
        "category": {
          "id": "343",
          "name": "Leche semidesnatada",
          "level": 2
        },
        "breadcrumb": [
          {
            "id": "6",
            "name": "Huevos, leche y mantequilla",
            "level": 0
          },
          {
            "id": "72",
            "name": "Leche y bebidas vegetales",
            "level": 1
          },
          {
            "id": "343",
            "name": "Leche semidesnatada",
            "level": 2
          }
        ],
        "category_paths": [
          [
            {
              "id": "6",
              "name": "Huevos, leche y mantequilla",
              "level": 0
            },
            {
              "id": "72",
              "name": "Leche y bebidas vegetales",
              "level": 1
            },
            {
              "id": "343",
              "name": "Leche semidesnatada",
              "level": 2
            }
          ]
        ],
        "url": "https://tienda.mercadona.es/product/10721/leche-semidesnatada-sin-lactosa-hacendado-pack-6",
        "slug": "leche-semidesnatada-sin-lactosa-hacendado-pack-6",
        "image": "https://prod-mercadona.imgix.net/images/6b02e742d27be2ee2db0994bc431fe99.jpg?fit=crop&h=300&w=300",
        "price": 5.64,
        "price_display": "5,64 €",
        "currency": "EUR",
        "original_price": null,
        "original_price_display": null,
        "discount_percent": null,
        "save_amount": null,
        "price_dropped": false,
        "member_price": null,
        "member_price_display": null,
        "member_discount_percent": null,
        "member_program": null,
        "member_unit_price": null,
        "unit_price": 0.94,
        "unit_price_unit": "L",
        "unit_price_measure": "litre",
        "unit_price_display": "0,94 €/L",
        "sold_by": "unit",
        "price_per_quantity": null,
        "price_per_quantity_unit": null,
        "order_increment": null,
        "price_is_estimate": false,
        "size": "6 briks x 1 L",
        "size_value": 6,
        "size_unit": "L",
        "pack_units": 6,
        "pack_unit_name": "briks",
        "drained_weight": null,
        "tax_percent": 4,
        "is_new_price": false,
        "availability": "in_stock",
        "in_stock": true,
        "status": null,
        "unavailable_from": null,
        "unavailable_weekdays": [],
        "max_order_quantity": 999,
        "age_restricted": false,
        "is_water": false,
        "is_new_arrival": null,
        "rating": null,
        "review_count": null,
        "rating_scale": null,
        "sponsored": false
      }
    ],
    "count": 50,
    "total_results": 60,
    "page": 1,
    "page_size": 50,
    "page_count": 2,
    "filters_available": {
      "brands": [
        {
          "name": "Hacendado",
          "count": 41
        },
        {
          "name": "Asturiana",
          "count": 12
        },
        {
          "name": "+Proteínas",
          "count": 3
        }
      ],
      "categories": [
        {
          "id": "6",
          "name": "Huevos, leche y mantequilla",
          "level": 0,
          "count": 55
        },
        {
          "id": "10",
          "name": "Zumos",
          "level": 0,
          "count": 3
        },
        {
          "id": "9",
          "name": "Azúcar, caramelos y chocolate",
          "level": 0,
          "count": 2
        }
      ]
    },
    "sort_applied": "mercadona",
    "area": {
      "postal_code": null,
      "warehouse": "vlc1",
      "source": "default"
    },
    "lang": "es",
    "query": "leche",
    "search_provider": "mercadona",
    "fallback_results_dropped": 0,
    "keyword_index_hits": null,
    "fallback_results": []
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Mercadona API works

Mercadona is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 256 engines.

02
Call
POST /mercadona/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Compare a Mercadona basket across Spanish regions

Mercadona prices its online shop by delivery area, and the Canary Islands are priced differently from the mainland. A tracker that ignores the area mixes prices from different regions. Three calls keep them apart.

01lookup
POST/mercadona/v1/warehouse/lookup
{"postal_code": "35001"}

Whether Mercadona delivers there and which area serves it. A postal code it does not deliver to comes back as delivers: false.

02category
POST/mercadona/v1/category
{"category_id": "112", "postal_code": "35001", "sort": "unit_price_asc"}

Every product of Aceite, vinagre y sal for Las Palmas, cheapest per litre or kg first, with sub-category, price, previous price and VAT rate.

03detail
POST/mercadona/v1/product/detail
{"product_id": "4241", "postal_code": "46001"}

The same olive oil for Valencia: 17.25 EUR, previous price 17.75, against 16.25 EUR in Las Palmas on 2026-09-16.

A basket priced per region, each product with its shelf price, previous price, unit price and VAT rate, and every answer stating the area it was priced for.

request
curl -X POST https://api.reefapi.com/mercadona/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"leche"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "mercadona",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

Which Mercadona price is which

Mercadona has no multi-buy offers and no loyalty card, but its prices still come in several shapes: a price drop with the previous price, counter products sold by weight, and pieces of approximate weight. The API keeps each shape explicit. Measured on 2026-09-16, Valencia area unless stated.

Mercadona productpricePrice fieldsUnit price
Leche semidesnatada Hacendado, 6 briks x 1 L5.04 EURno price drop, tax_percent 40.84 EUR per L
Aceite de oliva 0,4º Hacendado, 5 L17.25 EUR (16.25 EUR in Las Palmas)original_price 17.75, save_amount 0.50 (Valencia)3.45 EUR per L (3.25 in Las Palmas)
Sangría Rosé Casón Histórico, 1.5 L1.00 EURoriginal_price 1.70, discount_percent 410.67 EUR per L
Gambón congelado (counter, sold by weight)1.94 EUR for 0.15 kgsold_by weight, price_per_quantity 0.15 kg12.95 EUR per kg
Mini pelotas de cerdo y vacuno, approx. 330 g4.13 EUR (estimate)price_is_estimate true12.50 EUR per kg

original_price is set only when Mercadona shows a previous price above the current one. For counter products sold by weight, price is the price of the minimum quantity you can order, and the per-kg unit price is the real shelf price. For pieces of approximate weight, price is Mercadona's estimate for one piece and price_is_estimate is true.

Which area, which price, and what Mercadona does not publish

tienda.mercadona.es only - Spain, prices in EUR. Measured on 2026-09-16 across 63 products in 20 departments, 24 searches, 20 category pages, 45/45 controlled cases and an independent source comparison. Four of these lines go against us.

Priced for a postal code

Every action takes a Spanish postal code and returns area.warehouse, the area it was priced for; without one you get Mercadona's default area (Valencia). Valencia, Madrid and Barcelona matched on the products checked; Las Palmas priced 17 of 35 products of one category differently. Postal codes Mercadona does not deliver to, and unknown area ids, are rejected rather than silently priced for another area.

Price drops in their own fields

original_price is the previous price, set only when Mercadona shows one above the current price, with discount_percent and save_amount. deals returns the complete price-drop list: 170 products on 2026-09-16, every one with a higher previous price. On 7/7 products compared against an independent read of the source, title, price, previous price, availability and EAN all matched.

Unit prices, weighed and approximate products

unit_price comes with its unit (L, kg, 100 g, 100 ml, unit, dozen, wash, metre) and a display string. Counter products sold by weight return the price of the minimum quantity with sold_by weight; pieces of approximate weight return price_is_estimate true.

Filters and sorts cover the whole result list

Mercadona returns up to 60 products per search, all at once, so brand and category filters and the sorts apply to the complete list: leche gave 60 results, 14 with two brands, 55 inside the milk category. category returns every product of a category with no cap. Products Mercadona does not sell return an empty result instead of unrelated suggestions.

Search rows agree with product records

Price, previous price, unit price and EAN on search rows were checked against the full product record for 8 products: all agreed.

Against us: no member price

Mercadona has no loyalty scheme, so member_price is always null. If you need loyalty pricing, this API does not provide it.

Against us: no ratings, reviews or nutrition table

Mercadona publishes no ratings or reviews and no nutrition table, only ingredients and allergens; rating, review_count and nutrition are null rather than invented.

Against us: no stock counts, and brand only on search and product records

Availability is in stock, out of stock or not sold in this area, with the order limit - no quantities. Mercadona leaves brand and EAN off category and deals rows; product/detail has them.

Against us: some label fields are category-bound

On 63 sampled products, ingredients were filled on 42, allergens on 27 and origin on 22: non-food products carry none, and Mercadona states origin mostly for fresh and own-brand food.

What people build with Mercadona

The jobs this data is most often used for.

6

endpoints

1

credit per call

01

Spanish grocery price trackers record Mercadona prices per delivery area, with the Canary Islands priced separately and price drops kept apart from the shelf price.

02

FMCG brands and analysts follow Mercadona's complete price-drop list and new-products list with deals.

03

Price-comparison apps compare unit prices per kg, litre or 100 g, with weighed counter products and approximate-weight pieces clearly marked.

04

Food and allergen apps pull EANs, ingredients, allergens and storage instructions with product/detail.

What Mercadona data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 256 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/mercadona/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"leche"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/mercadona/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "leche"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Mercadona.

Get a free key →
Why do I need a postal code?

Because Mercadona prices and stocks its online shop by delivery area. Pass postal_code and the answer is priced for the area that serves it; area.warehouse names that area. Without one you get Mercadona's own default area (Valencia). Most mainland areas share prices, but the Canary Islands differ: on 2026-09-16, 17 of 35 products in the oil, vinegar and salt category had a different price in Las Palmas. warehouse/lookup tells you whether Mercadona delivers to a postal code at all - 29001 (Málaga) was not served on 2026-09-16, and such a code is rejected instead of being priced for somewhere else.

Does Mercadona have a member or loyalty price?

No. Mercadona runs no loyalty scheme and publishes no member price, so member_price, member_program and member_unit_price are always null. They are kept so the fields line up with other grocery APIs, such as Migros, where a loyalty price does exist.

How do I find products whose price just dropped?

Call deals with type price_drops. It returns Mercadona's complete price-drop list - 170 products on 2026-09-16 - and every row carries original_price above price, with discount_percent and save_amount. sort discount_desc puts the biggest drops first; category_id narrows it to one department (16 products in Bodega that day). On search and category rows the same fields are filled whenever a product is on a price drop.

How many results does a search return?

Up to 60 - that is Mercadona's own limit for a search. The whole list comes back at once, so the brand and category filters and the price, unit-price and price-drop sorts apply to all of it, and page and page_size page through it. Measured for leche: 60 results, 14 with brands Puleva and Asturiana, 55 inside the milk category. For a complete list, use category, which returns every product of a category.

What happens when I search for something Mercadona does not sell?

You get an empty result. Mercadona's search suggests loosely related products instead - two perfumes for zapatillas nike on 2026-09-16 - so the API drops them and counts them in fallback_results_dropped; include_fallback_results=true returns them separately, never in results. Real synonyms are kept: espaguetis returns Mercadona's Spaghetti. Across 66 everyday queries, including misspellings such as lehce and choclate, only donuts (answered with two Berlina pastries) was emptied.

Why is the price of a fish-counter product so low?

Because it is the price of the minimum quantity. Counter products sold by weight return sold_by weight, price_per_quantity (for example 0.15 kg) and the per-kg unit price; frozen prawns were 1.94 EUR for 0.15 kg at 12.95 EUR per kg. Some of these products have ids with a dot, such as 81661.2 - keep ids as strings.

Which languages are supported?

Spanish (default), English, Catalan and Valencian names, plus Basque category names. Search in the language you choose: milk with lang en returns English product names.

What does Mercadona NOT publish?

No member price, no ratings or reviews, no nutrition table (only ingredients and allergens) and no stock counts - availability is in stock, out of stock or not sold in this area. On 63 sampled products across 20 departments, EAN, price, unit price, size and images were filled on 63 of 63; ingredients on 42 of 63 and allergens on 27 of 63, because non-food products and products without a declared allergen have none; brand on 60 of 63 (counter fish is unbranded). Brand and EAN appear on search rows and product records, not on category or deals rows.

What is the Mercadona API?

Mercadona API is a ReefAPI endpoint group for spanish supermarket prices by postal code: price drops, unit prices, vat, ean, ingredients and allergens. It returns live JSON through POST requests under /mercadona/v1.

Is the Mercadona API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Mercadona calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Mercadona login or account?

No login to Mercadona is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Mercadona data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Mercadona API use?

Mercadona actions currently cost 1 credit per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Mercadona from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call mercadona actions with the same key, credit pool and JSON envelope used by normal REST requests.

94 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Mercadona, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 255 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-16.