Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Pingo Doce API page →
E-commerce & Marketplaces

Pingo Doce API & Scraper

Pingo Doce is one of Portugal's largest supermarket chains and pingodoce.pt its online shop.

6 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

`search` returns the products for a search term with the price anyone pays (per pack, or per kg for fruit, meat and fish sold by weight), the struck-through price of a running promotion, the manufacturer's recommended price (PVPR) when the shop prints one, the promotion badge such as "Poupe 30%" or "Poupe Metade" and its end date, pack size, the price per kg, litre, dose or unit, brand and category. Filters are category, brand, one food choice (organic, vegan, gluten free, lactose free and eight more) and a price range, with sorting by price or name and up to 100 products per page. `category` walks a category of the shop, `promotions` lists everything on promotion and `categories` returns the shop's 492 categories. `product` returns one product with availability, order limits and the label: regulated name, ingredients, allergens, nutrition table, vitamins and minerals, origin, storage, preparation and producer. Pass a Portuguese post code to see the range of that home-delivery area.

Reference

What a Pingo Doce field actually contains

Fields that read differently from how they look. Every row was measured against live pingodoce.pt responses on 2026-11-03.

FieldWhat it holds
price, price_unitThe price anyone pays now, in euros, per price_unit. Goods sold by weight are priced per kg (Cenoura 0.89 per kg, pack about 0.18 kg); packs per unit (un).
regular_priceThe struck-through price of a running promotion (Leite UHT Meio Gordo Mimosa: 0.90 now, 1.00 before). Empty when nothing is struck through.
recommended_retail_priceThe manufacturer's recommended price (PVPR) printed next to some products. It is not a former Pingo Doce price: Iogurte Líquido Proteína Manga showed 1.99 with PVPR 2.69 and no struck-through price.
promotion_label, promotion_endThe shop's promotion badge ("Poupe 10%", "Poupe Metade", "Apenas") and its end date as printed, "Promoção até 09/11". The shop prints no year, so the API returns day and month only.
unit_price, unit_price_unitThe second price the shop prints: per litre, kg, dose or unit (1 L milk: 0.90 per l; 76 doses of detergent: 0.17 per dose). Empty for goods already priced per kg.
storeWhich home-delivery area the rows are for. The range changes with the post code ('leite': 255 products with no area, 155 for Lisboa 1000-001, 200 for Porto 4000-322, 257 for Braga 4700-001); prices on the same product were equal in every area compared.

Pingo Doce does not publish EAN barcodes on its public shop, so the API returns none. Loyalty-card discounts are not shown on public listings; price is what any shopper pays.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/pingodoce/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "leite"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "pingodoce",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 2276.4,
    "record_count": 48,
    "bytes": 671676,
    "cache_hit": false,
    "upstream_requests": 1,
    "total": 255,
    "charged_credits": 3,
    "version": "0.1.0",
    "request_id": "73dbbf9334f143c5",
    "queue_ms": 1.4,
    "fetched_at": "2026-11-03T13:40:20.147Z"
  },
  "data": {
    "store": {
      "postal_code": null,
      "delivery_type": null,
      "store_name": null,
      "store_defaulted": true,
      "resolved_from": "site default for an anonymous visitor (no delivery area chosen; its range is wider than any single area we set: leite 255 rows vs 155 Lisboa, 200 Porto)"
    },
    "query": "leite",
    "category": null,
    "filters": {},
    "sort": "relevance",
    "total": 255,
    "total_is_exact": true,
    "total_note": null,
    "page": 1,
    "per_page": 48,
    "has_more": true,
    "returned": 48,
    "results": [
      {
        "rank": 1,
        "product_id": "554813",
        "name": "Leite de Magnésia Phillips Laxante Antiácido",
        "brand": "Leite Phillips",
        "price": 14.19,
        "price_unit": "un",
        "price_text": "14,19 €",
        "regular_price": null,
        "recommended_retail_price": null,
        "currency": "EUR",
        "on_offer": false,
        "promotion_label": null,
        "promotion_code": null,
        "promotion_end": null,
        "pack_size": "0.2 L",
        "unit_price": 70.95,
        "unit_price_unit": "l",
        "unit_info_text": "0.2 L | 70,95 €/L",
        "category": "Aparelho Digestivo",
        "category_path": "Parafarmácia > Aparelho Digestivo",
        "analytics_price": 14.19,
        "image": "https://static.pingodoce.pt/dw/image/v2/BLJJ_PRD/on/demandware.static/-/Sites-pingo-doce-master/default/dw8cff88d2/images/medium/554813_03326766d5865b745592b9e0671c73fe.png",
        "url": "https://www.pingodoce.pt/home/produtos/parafarmacia/medicamentos-nao-sujeitos-a-receita-medica/aparelho-digestivo/leite-de-magnesia-phillips-laxante-antiacido-leite-phillips-554813.html"
      },
      {
        "rank": 2,
        "product_id": "42132",
        "name": "Leite Creme",
        "brand": "Royal",
        "price": 1.49,
        "price_unit": "un",
        "price_text": "1,49 €",
        "regular_price": null,
        "recommended_retail_price": null,
        "currency": "EUR",
        "on_offer": false,
        "promotion_label": null,
        "promotion_code": null,
        "promotion_end": null,
        "pack_size": "0.092 Kg",
        "unit_price": 16.2,
        "unit_price_unit": "kg",
        "unit_info_text": "0.092 Kg | 16,2 €/Kg",
        "category": "Preparados para Bolos e Sobremesas",
        "category_path": "Mercearia > Preparados para Bolos e Sobremesas",
        "analytics_price": 1.49,
        "image": "https://static.pingodoce.pt/dw/image/v2/BLJJ_PRD/on/demandware.static/-/Sites-pingo-doce-master/default/dw8cff88d2/images/medium/42132_1d80961525d5f07addf04c701b15a043.png",
        "url": "https://www.pingodoce.pt/home/produtos/mercearia/sobremesas/preparados-para-bolos-e-sobremesas/leite-creme-royal-42132.html"
      },
      {
        "rank": 3,
        "product_id": "836925",
        "name": "Leite Achocolatado",
        "brand": "Ucal",
        "price": 3.23,
        "price_unit": "un",
        "price_text": "3,23 €",
        "regular_price": null,
        "recommended_retail_price": null,
        "currency": "EUR",
        "on_offer": false,
        "promotion_label": null,
        "promotion_code": null,
        "promotion_end": null,
        "pack_size": "1 L",
        "unit_price": 3.23,
        "unit_price_unit": "l",
        "unit_info_text": "1 L | 3,23 €/L",
        "category": "Leite Achocolatado e Aromatizado",
        "category_path": "Leite e Bebidas Vegetais > Leite Achocolatado e Aromatizado",
        "analytics_price": 3.23,
        "image": "https://static.pingodoce.pt/dw/image/v2/BLJJ_PRD/on/demandware.static/-/Sites-pingo-doce-master/default/dw8cff88d2/images/medium/836925_9a537d001be4de0f4c62a9b678155791.jpg",
        "url": "https://www.pingodoce.pt/home/produtos/leite-e-bebidas-vegetais/leite/leite-achocolatado-e-aromatizado%E2%80%8B/leite-achocolatado-ucal-836925.html"
      }
    ]
  }
}
Actions

What the Pingo Doce API does

ActionDescriptionConcrete use caseKey params
searchSearch Pingo Doce's online shop: shelf price, was price of a promotion, recommended retail price (PVPR), promotion badge and end date, price per kg/l, pack size, brand, category. `query` required; filters: category, brand, diet, min_price, max_price; sort; paging up to 100 per page; optional post code for that delivery area's range.Pricing teams call search to search Pingo Doce's online shop.query, category, brand, diet, min_price, ...
categoryList one Pingo Doce category (id from `categories`) with the same row fields, filters and paging as `search` — the way to walk the whole catalogue.Marketplace operators call category to list one Pingo Doce category (id from `categories`) with the same row fields, filters and pag….category, brand, diet, min_price, max_price, ...
promotionsPingo Doce products on promotion right now (the shop's Promoções section): offer price, was price or PVPR, badge, end date. Narrow with `query`, `brand`, `diet`, price range.Catalog enrichment teams call promotions to get pingo Doce products on promotion right now (the shop's Promoções section).query, brand, diet, min_price, max_price, ...
productOne Pingo Doce product by the `product_id` a search row returns: price, was price or PVPR, promotion badge and end date, price per kg/l, availability and order limits, category, images, and the label: regulated name, ingredients, allergens, nutrition table, vitamins and minerals, origin, storage, preparation, producer.Retail analysts call product to get one Pingo Doce product by the `product_id` a search row returns.product_id
categoriesPingo Doce's category tree from the shop menu: id, name, URL, children. Ids feed `category` and the `category` filter.Pricing teams call categories to get pingo Doce's category tree from the shop menu.category
storeWhether Pingo Doce delivers to a Portuguese post code (home delivery) or only offers store pickup there — the area `postal_code` selects in the listing actions.Marketplace operators call store to get whether Pingo Doce delivers to a Portuguese post code (home delivery) or only offers store pi….postal_code
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/pingodoce/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"leite"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.pingodoce.search with {"query":"leite"}.
Use cases

Who uses this API and why

  • Track Pingo Doce shelf prices and weekly promotions with their end dates.
  • Compare Portuguese grocery prices per kg or litre across brands and Pingo Doce's own labels.
  • Refresh a full Pingo Doce catalogue daily by walking its categories.
  • Build a product database with ingredients, allergens and nutrition tables.
  • See which products a home-delivery area in Portugal can order.
FAQ

Questions developers ask before integrating

Do I need a Pingo Doce account?

No. Everything is read logged out: the prices, promotions and product labels any visitor sees.

Can I download the whole catalogue?

Yes. `categories` returns every category id; `category` lists one with up to 100 products per page and the shop's own total on page 1. On 2026-11-03 the 25 department categories held 11,808 products, about 131 calls at 100 per page.

What is the difference between regular_price and recommended_retail_price?

regular_price is what Pingo Doce charged before a running promotion. recommended_retail_price is the manufacturer's recommended price (PVPR), printed for comparison; the product was not necessarily ever sold at it.

Do prices depend on the post code?

The range does: each home-delivery area has its own selection, so pass postal_code to see it. On the products we compared across Lisboa, Porto and Braga the price was the same. Post codes the shop serves by store pickup only (for example Funchal) are answered as not found.

Which filters work?

category, brand, one food choice and min_price / max_price, plus sorting by price or name. Each was checked against the unfiltered count in the same minute: 'leite' went from 255 products to 27 Mimosa, 33 lactose free, 2 organic and 94 between 1 and 2 euros.

Are EAN barcodes included?

No. Pingo Doce does not publish them on its public shop. Each product has the shop's own numeric product_id, which is stable and works in the product call.

Does the product call include nutrition and ingredients?

Yes, when Pingo Doce publishes them: regulated name, ingredients, allergens, the nutrition table per 100 g or ml, vitamins and minerals, origin, storage and the producer. Some labels are incomplete at the source and are returned as they are.

How fresh is the data?

Every call reads pingodoce.pt live; nothing is cached. Promotions run in weekly windows and each row carries its printed end date.

What is the Pingo Doce API?

Pingo Doce API is a ReefAPI endpoint group for portuguese supermarket prices from pingodoce.pt: shelf price, promotions with end date, was price, pvpr, price per kg or litre, ingredients and nutrition. It returns live JSON through POST requests under /pingodoce/v1.

Is the Pingo Doce API free to try?

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

Do I need a Pingo Doce login or account?

No login to Pingo Doce 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 Pingo Doce 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 Pingo Doce API use?

Pingo Doce actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Pingo Doce from an AI assistant or MCP client?

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

docs / pingodoce

Pingo Doce

Portuguese supermarket prices from pingodoce.pt: shelf price, promotions with end date, was price, PVPR, price per kg or litre, ingredients and nutrition.

base /pingodoce/v16 endpoints
post/pingodoce/v1/category3 credits

List one Pingo Doce category (id from `categories`) with the same row fields, filters and paging as `search` — the way to walk the whole catalogue.

ParameterAllowed / rangeDescription
categoryoptional—Pingo Doce category id as `categories` returns it (e.g. ec_leitebebidasvegetais_900). An id the site does not know is rejected.
brandoptional—Exact brand name as the shop prints it (e.g. Mimosa, Pingo Doce, Alpro).
dietoptionalorganic · vegan · gluten_free · lactose_free · milk_free · no_added_sugar · light · low_fat · high_protein · source_of_protein · source_of_fibre · source_of_omega3One of the shop's own food-choice facets: organic, vegan, gluten_free, lactose_free, milk_free, no_added_sugar, light, low_fat, high_protein, source_of_protein, source_of_fibre, source_of_omega3.
min_priceoptional0–Minimum shelf price in EUR (the number in `price`, per its `price_unit`).
max_priceoptional0–Maximum shelf price in EUR.
sort = relevanceoptionalrelevance · price_asc · price_desc · name_asc · name_descrelevance · price_asc · price_desc · name_asc · name_desc.
page = 1optional1–2000Result page, 1-based.
per_page = 48optional1–100Products per page, 1-100 (default 48).
postal_codeoptional—Portuguese post code (NNNN-NNN) of a home-delivery area. Pingo Doce's range depends on it (measured: 'leite' 255 rows with no area, 155 Lisboa 1000-001, 200 Porto 4000-322); prices were the same across areas. Omit for the site's default range; the response's `store` says which.
Try in playground →
post/pingodoce/v1/promotions3 credits

Pingo Doce products on promotion right now (the shop's Promoções section): offer price, was price or PVPR, badge, end date. Narrow with `query`, `brand`, `diet`, price range.

ParameterAllowed / rangeDescription
queryoptional—Optional search words inside the promotions.
brandoptional—Exact brand name as the shop prints it (e.g. Mimosa, Pingo Doce, Alpro).
dietoptionalorganic · vegan · gluten_free · lactose_free · milk_free · no_added_sugar · light · low_fat · high_protein · source_of_protein · source_of_fibre · source_of_omega3One of the shop's own food-choice facets: organic, vegan, gluten_free, lactose_free, milk_free, no_added_sugar, light, low_fat, high_protein, source_of_protein, source_of_fibre, source_of_omega3.
min_priceoptional0–Minimum shelf price in EUR (the number in `price`, per its `price_unit`).
max_priceoptional0–Maximum shelf price in EUR.
sort = relevanceoptionalrelevance · price_asc · price_desc · name_asc · name_descrelevance · price_asc · price_desc · name_asc · name_desc.
page = 1optional1–2000Result page, 1-based.
per_page = 48optional1–100Products per page, 1-100 (default 48).
postal_codeoptional—Portuguese post code (NNNN-NNN) of a home-delivery area. Pingo Doce's range depends on it (measured: 'leite' 255 rows with no area, 155 Lisboa 1000-001, 200 Porto 4000-322); prices were the same across areas. Omit for the site's default range; the response's `store` says which.
Try in playground →
post/pingodoce/v1/product3 credits

One Pingo Doce product by the `product_id` a search row returns: price, was price or PVPR, promotion badge and end date, price per kg/l, availability and order limits, category, images, and the label: regulated name, ingredients, allergens, nutrition table, vitamins and minerals, origin, storage, preparation, producer.

ParameterAllowed / rangeDescription
product_idrequired—The numeric product id a search row returns, or its https://www.pingodoce.pt/home/produtos/…-<id>.html URL.
Try in playground →
post/pingodoce/v1/categories3 credits

Pingo Doce's category tree from the shop menu: id, name, URL, children. Ids feed `category` and the `category` filter.

ParameterAllowed / rangeDescription
categoryoptional—Return only this category's subtree; omit for the whole tree.
Try in playground →
post/pingodoce/v1/store1 credit

Whether Pingo Doce delivers to a Portuguese post code (home delivery) or only offers store pickup there — the area `postal_code` selects in the listing actions.

ParameterAllowed / rangeDescription
postal_coderequired—Portuguese post code (NNNN-NNN).
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.