Alcampo API & Scraper
Alcampo's online supermarket prices every product by the store that serves the delivery address.
🤖 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.
On 2026-10-18, 11 of 32 milk products shared by the default store (Vaguada, Madrid) and a Barcelona address had different prices (a 6-pack 5.28 vs 5.04), and a third of the results differed. Without a location the answer uses the site default store and says store_defaulted=true; pass latitude and longitude to read another area. `search` returns products with EUR price, unit price, promotion texts with their dates ("Producto en Folleto", "2ª unidad -50%"), the maximum quantity the site allows, rating and review count, availability and brand; `category`, `categories` and `product` (full sheet with nutrition and the EAN when the label prints one) complete it.
What a Alcampo field actually contains
Fields that read differently from how they look. Every row was measured against live responses on 2026-10-18.
| Field | What it holds |
|---|---|
| price, currency | The price at the serving store in euros. Checked against the price printed on the product page for 8 of 8 products in each of two runs. |
| location | Which store area the price belongs to: store_defaulted=true means the site default (Vaguada); with latitude/longitude, the region_id that serves that point. |
| promotions | Promotion texts with their validity dates, e.g. "Producto en Folleto (08/10/26_21/10/26)" or "2ª unidad -50%" with required_quantity 2. The shelf price is not recomputed. |
| max_available_quantity | The most units the site lets you order (seen on 8 of 192 rows, e.g. 21). |
| rating, review_count | Customer rating and number of reviews; null when a product has no reviews (the site sends 0.0). |
| gtin | The EAN when Alcampo prints it in the product's features table, with a valid check digit (2 of 8 sampled sheets). Never Alcampo's own id. |
Alcampo publishes no total count for a search; total is filled only when the first page is the whole answer.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/alcampo/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "leche",
"limit": 24
}
}{
"ok": true,
"meta": {
"api": "alcampo",
"endpoint": "search",
"mode": "live",
"latency_ms": 652.4,
"record_count": 24,
"bytes": 293540,
"cache_hit": false,
"upstream_requests": 1,
"warnings": [
"Unknown parameter ignored: include_pii"
],
"charged_credits": 3,
"version": "1.0.0",
"request_id": "a375dbd3d9cf474c",
"queue_ms": 1,
"fetched_at": "2026-10-18T17:44:56.109Z"
},
"data": {
"products": [
{
"id": "54180",
"product_uuid": "176cfd5e-afa9-4aa1-8b6f-fe3d757c535e",
"title": "AUCHAN Leche semidesnatada de vaca 6 x 1l Producto Alcampo.",
"brand": "PRODUCTO ALCAMPO",
"pack_size": "6000ml",
"price": 5.28,
"currency": "EUR",
"unit_price": 0.88,
"unit": "litre",
"promo_price": null,
"promo_unit_price": null,
"lowest_price_30d": null,
"deposit_price": null,
"price_is_estimate": false,
"typical_weight": null,
"available": true,
"max_available_quantity": 1034,
"in_current_catalog": true,
"is_new": false,
"alcohol": false,
"promotions": [],
"dietary_labels": [
"Producto Alcampo"
],
"category_path": [
"Leche, Huevos, Lácteos, Yogures y Bebidas vegetales",
"Leche",
"Leche semidesnatada"
],
"rating": 5,
"review_count": 1,
"seller": null,
"sponsored": false,
"image": "https://www.compraonline.alcampo.es/images-v3/37ea0506-72ec-4543-93c8-a77bb916ec12/1aec1514-3cce-46d9-8133-20fdebbdb2cc/300x300.jpg",
"url": "https://www.compraonline.alcampo.es/products/54180/details",
"group_type": "personalized"
},
{
"id": "54178",
"product_uuid": "6ab4700b-58f9-4d2c-942a-7ddce3286b57",
"title": "AUCHAN Leche entera de vaca 6 x 1 l Producto Alcampo.",
"brand": "PRODUCTO ALCAMPO",
"pack_size": "6000ml",
"price": 5.76,
"currency": "EUR",
"unit_price": 0.96,
"unit": "litre",
"promo_price": null,
"promo_unit_price": null,
"lowest_price_30d": null,
"deposit_price": null,
"price_is_estimate": false,
"typical_weight": null,
"available": true,
"max_available_quantity": null,
"in_current_catalog": true,
"is_new": false,
"alcohol": false,
"promotions": [],
"dietary_labels": [
"Producto Alcampo"
],
"category_path": [
"Leche, Huevos, Lácteos, Yogures y Bebidas vegetales",
"Leche",
"Leche entera"
],
"rating": null,
"review_count": 0,
"seller": null,
"sponsored": false,
"image": "https://www.compraonline.alcampo.es/images-v3/37ea0506-72ec-4543-93c8-a77bb916ec12/845a9f8d-6b50-4055-81ce-1b7e621987f3/300x300.jpg",
"url": "https://www.compraonline.alcampo.es/products/54178/details",
"group_type": "personalized"
},
{
"id": "99193",
"product_uuid": "24b9f612-265c-4a43-ab41-65e362e3c96c",
"title": "L.R. Leche entera 6 x 1 l.",
"brand": "L.R.",
"pack_size": "6000ml",
"price": 5.7,
"currency": "EUR",
"unit_price": 0.95,
"unit": "litre",
"promo_price": null,
"promo_unit_price": null,
"lowest_price_30d": null,
"deposit_price": null,
"price_is_estimate": false,
"typical_weight": null,
"available": true,
"max_available_quantity": null,
"in_current_catalog": true,
"is_new": false,
"alcohol": false,
"promotions": [
{
"id": "[trimmed-depth]",
"description": "[trimmed-depth]",
"terms": "[trimmed-depth]",
"type": "[trimmed-depth]",
"required_quantity": "[trimmed-depth]",
"multibuy": "[trimmed-depth]"
}
],
"dietary_labels": [],
"category_path": [
"Folletos y Promociones",
"Folleto Alimentación Canarias",
"Leche, Huevos, Yogures y Lácteos"
],
"rating": 5,
"review_count": 2,
"seller": null,
"sponsored": false,
"image": "https://www.compraonline.alcampo.es/images-v3/37ea0506-72ec-4543-93c8-a77bb916ec12/65cac3c5-effc-4633-8285-bcf801a5a2b5/300x300.jpg",
"url": "https://www.compraonline.alcampo.es/products/99193/details",
"group_type": "personalized"
}
],
"returned": 24,
"duplicate_rows_dropped": 0,
"sponsored_rows": 0,
"facets": [
{
"id": "boolean",
"label": "boolean",
"type": "BOOLEAN",
"values": [
{
"id": "[trimmed-depth]",
"label": "[trimmed-depth]"
}
]
},
{
"id": "brands",
"label": "brands",
"type": "BRANDS",
"values": [
{
"id": "[trimmed-depth]",
"label": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"label": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"label": "[trimmed-depth]"
}
]
},
{
"id": "dummyValue",
"label": "Filtros",
"type": "RETAILER",
"values": [
{
"id": "[trimmed-depth]",
"label": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"label": "[trimmed-depth]"
}
]
}
],
"sort_options": [
"favorite",
"pricePerAscending",
"pricePerDescending"
],
"has_more": true,
"next_cursor": "eyJ0IjoiZDVmODhkNjgtYzdlMC00MWRiLTk1NTItZTVkOGIxMWI1Mjg3IiwiYyI6IlZJU0lUT1JJRD1nXzh5YU5ObFZEM0ZVaTh6SWlVcXE0UUNQZkpBYkdYM0VpZzk5S09kRUNia0hjTG8yU04xX3lpOW4wR01BNHJ3M1NqZzVLSnhLVjJhZE5HWklmckhBOEFLNTZsUE55dF9CZm10MkE9PTsgZ2xvYmFsX3NpZD1JUGNSQzQyXzN0dWFSendNeFpBbUJuNlhBZm9PUjNOT0d4V1VfT1Mzd0NTVEg3elZ1WG1udmNJMmo1WjZqUzBSQ0tBY1BNakU0Ui1MOW03UEI0QUt2TUQxNkQ5cWVZcnUxWTVYblE9PTsgQVdTQUxCPXhkRzAxclFuV3l1RmJKN0NIcllRd0hRQ2wweXJUY0FBeXlIL214cThPckpWUkNzTlpvQUROa3BYS3NXS1J0cG5zK2d5WWRBVHpYKys1dVM5anZQZHp6SktGTExtcjEvQUxMV2t6MlNsTWZiZnNrYmJNYjlDbkY1dENSWGQ7IEFXU0FMQkNPUlM9eGRHMDFyUW5XeXVGYko3Q0hyWVF3SFFD",
"total": null,
"total_basis": "unknown (source publishes no search total)",
"currency": "EUR",
"location": {
"store_defaulted": true,
"region_name": "Vaguada",
"note": "site default region for visitors without a location"
}
}
}What the Alcampo API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search the Alcampo online grocery catalogue (EUR). Alcampo prices follow the store that serves the delivery address (pass latitude/longitude). | Pricing teams call search to search the Alcampo online grocery catalogue (EUR). | query |
| category | Browse one Alcampo category by its id from categories. | Marketplace operators call category to get browse one Alcampo category by its id from categories.. | category_id |
| product | Full Alcampo product sheet: description, ingredients, allergens, nutrition table, every label field, all images, promotions with terms. | Catalog enrichment teams call product to get full Alcampo product sheet. | id |
| categories | Alcampo category tree (top level and one child level) with the ids the category action takes. | Retail analysts call categories to get alcampo category tree (top level and one child level) with the ids the category action takes.. | none |
Call search from your stack
curl -X POST https://api.reefapi.com/alcampo/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"leche","limit":24}'import requests
r = requests.post(
"https://api.reefapi.com/alcampo/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "leche",
"limit": 24
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/alcampo/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "leche",
"limit": 24
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.alcampo.search with {"query":"leche","limit":24}.Who uses this API and why
- Compare Alcampo prices between Spanish cities and stores.
- Track folleto and 2ª unidad promotions with their dates.
- Match Alcampo products to other retailers by EAN where printed.
- Monitor own-brand (Producto Alcampo) prices by aisle.
- Build a Spanish grocery price index with unit prices.
Questions developers ask before integrating
Do I need an Alcampo account?
No. Everything is read as a visitor before signing in.
Why does the price depend on the address?
Alcampo prices by store. Barcelona vs the default Madrid store: 11 of 32 shared milk products priced differently. Pass latitude/longitude of the delivery address.
Does on_offer work?
Yes: 48 of 48 rows with on_offer=true carried a promotion, against 5 of 48 without it.
Is there a Club Alcampo member price?
No member price is published on the public site; the API returns the price everyone pays plus the promotion texts.
How many products per page?
Up to 48 (24 by default). Three pages in a row returned 72 different products.
Are EAN barcodes included?
When the product sheet prints one: 2 of 8 sampled sheets did. Otherwise gtin is null.
How fresh is the data?
Every call reads the site live; nothing is cached.
What is the Alcampo API?
Alcampo API is a ReefAPI endpoint group for alcampo online supermarket (compraonline.alcampo.es) as json: eur prices per store area, folleto promotions, ean where printed, nutrition. It returns live JSON through POST requests under /alcampo/v1.
Is the Alcampo API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Alcampo calls use the same shared credit balance as every other ReefAPI engine.
Do I need an Alcampo login or account?
No login to Alcampo 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 Alcampo 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 Alcampo API use?
Alcampo 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 Alcampo from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call alcampo actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Alcampo API an Alcampo scraper?
It is the managed alternative to a DIY Alcampo scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same alcampo online supermarket (compraonline.alcampo.es) as json: eur prices per store area, folleto promotions, ean where printed, nutrition back as clean JSON.