Hipercor APIhipercor.es ↗
Retrieve Hipercor.es supermarket product listings with prices, promotions, unit prices, EAN barcodes, and delivery availability. 24 products per page.
What is the Hipercor API?
The Hipercor supermarket API exposes one endpoint — list_products — that returns up to 24 products per page from any category on hipercor.es. Each response includes 10+ fields per product: product ID, name, brand, package size, current and regular prices, promotional price, unit price, EAN barcode, and home-delivery availability. It covers the full /supermercado/ section of the Hipercor online store.
curl -X GET 'https://api.parse.bot/scraper/4a712023-0bd7-47eb-b2c0-890f081328d9/list_products?category_path=alimentacion%2Falimentacion-general%2Faceites' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace hipercor-es-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Hipercor supermarket — browse category products with prices."""
from parse_apis.hipercor_es_api import Hipercor, SortOrder, CategoryNotFound
client = Hipercor()
# List cheapest oils first, capped at 10 products total.
for product in client.products.list(
category_path="alimentacion/alimentacion-general/aceites",
sort=SortOrder.PRICE_ASC,
limit=10,
):
on_sale = f" (was {product.regular_price:.2f}€)" if product.promotional_price else ""
print(f"{product.brand} — {product.name}: {product.current_price:.2f}€{on_sale}")
# Drill into the first best-seller to inspect full detail.
try:
hit = client.products.list(
category_path="alimentacion/alimentacion-general/conservas-vegetales",
sort=SortOrder.BEST_SELLERS,
limit=1,
).first()
except CategoryNotFound:
hit = None
print("Category not found — check the path slug.")
if hit is not None:
print(f"\nTop seller: {hit.name} ({hit.brand})")
print(f" EAN: {hit.ean}")
print(f" Size: {hit.package_size}")
print(f" Unit price: {hit.unit_price}")
print(f" In stock: {hit.is_available} ({hit.available_units} units)")
print(f" Link: {hit.product_url}")
print("\nexercised: products.list (two categories, two sort orders, limit, first, error catch)")
Returns one page (24 products) of a Hipercor supermarket category listing. Each row is one sellable product: product_id (site code starting with 'B'), name and brand (the brand is the trailing upper-case maker name the site appends to the product label; name is the remaining label, which the site itself sometimes truncates), package_size (format | quantity, null when the site shows none), current_price (euros, promotional price when one is active otherwise regular_price), regular_price, promotional_price (null when no promotion), unit_price (site text such as '3,59 € / Litro'), product_url, image_url, ean (GTIN-13 barcode), availability (site purchase status code; 'ADD' means purchasable), is_available (home delivery available at the site's default delivery centre) and available_units. Two site requests per call (listing page plus a stock/barcode lookup); if the stock lookup fails the ean/availability fields are null and the cause is listed in errors. total_products and total_pages come from the site; paginate by incrementing page while has_more is true. A page beyond the last returns an empty products list with total_pages null. An unknown category path yields a stale_input error because the site redirects to a parent section. Prices are in EUR as shown for the default Madrid delivery area.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based listing page; each page holds up to 24 products. |
| sort | string | Listing sort order from the site's sort menu. |
| category_path | string | Category path as it appears in the site URL after /supermercado/, lowercase slugs separated by slashes (e.g. alimentacion/alimentacion-general/aceites for oils, alimentacion/alimentacion-general/conservas-vegetales). Omitted = the oils category. |
{
"type": "object",
"fields": {
"page": "page number returned",
"errors": "array of error strings for partial failures (empty on a clean run)",
"has_more": "true when a further page exists",
"products": "array of product rows: product_id, name, brand, package_size, current_price, regular_price, promotional_price, unit_price, product_url, image_url, ean, availability, is_available, available_units",
"total_pages": "site-reported page count for the category (null when the page is beyond the last)",
"category_path": "echo of the category path queried",
"products_found": "number of products in this page",
"total_products": "site-reported product count for the category (null when the page is beyond the last)"
},
"sample": {
"data": {
"page": 1,
"errors": [],
"has_more": true,
"products": [
{
"ean": "8410010009689",
"name": "aceite de oliva suave 0,4º",
"brand": "CARBONELL",
"image_url": "https://cdn.grupoelcorteingles.es/SGFM/dctm/MEDIA03/202504/08/00118044800037____1__325x325.jpg",
"product_id": "B001018044800037",
"unit_price": "3,59 € / Litro",
"product_url": "https://www.hipercor.es/supermercado/B001018044800037-carbonell-aceite-de-oliva-suave-04-garrafa-5-l/",
"availability": "ADD",
"is_available": true,
"package_size": "garrafa | 5 l",
"current_price": 17.95,
"regular_price": 22.95,
"available_units": 54,
"promotional_price": 17.95
}
],
"total_pages": 8,
"category_path": "alimentacion/alimentacion-general/aceites",
"products_found": 24,
"total_products": 189
},
"status": "success"
}
}About the Hipercor API
What list_products Returns
The list_products endpoint returns a paginated slice of a Hipercor supermarket category. Each call covers one page of up to 24 products and includes pagination metadata: page, total_pages, total_products, products_found, and has_more to signal whether a subsequent page exists. If the requested page exceeds the last available page, total_pages and total_products return null.
Product Fields
Each entry in the products array carries: product_id (the site's internal code, prefixed with 'B'), name, brand (extracted from the trailing uppercase maker label), package_size, current_price, regular_price, promotional_price, unit_price (for per-kg or per-litre comparison), and a flag for home-delivery availability. EAN barcodes are also returned where present, making the data directly joinable with external product databases.
Filtering and Sorting
The endpoint accepts three optional parameters. category_path takes the URL slug path after /supermercado/ — for example, lacteos-y-huevos/leche — to scope results to a specific category. page is a 1-based integer for stepping through results. sort mirrors the ordering options from the site's own listing menu, allowing results to be ordered consistently with what a shopper would see. The errors array in the response surfaces any partial failures without a full call failure.
Data Coverage
Coverage maps to the Hipercor online supermarket catalogue under the /supermercado/ section. Promotional pricing (promotional_price) is returned alongside regular_price, so price-drop detection is possible without a secondary lookup. The unit_price field enables cross-pack comparison for grocery price intelligence use cases.
The Hipercor API is a managed, monitored endpoint for hipercor.es — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when hipercor.es changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official hipercor.es API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track regular vs. promotional price changes for grocery products over time using current_price and regular_price.
- Build a unit-price comparison tool across pack sizes using the unit_price field.
- Monitor which Hipercor products have active promotions by filtering on promotional_price.
- Enrich an internal product database by matching EAN barcodes returned in the products array.
- Check home-delivery availability across a product category before surfacing items in a delivery-focused app.
- Index Hipercor's supermarket catalogue by iterating category_path slugs and paginating with has_more.
- Identify brand-level product ranges by grouping results on the brand field within a category.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.