Coop APIcoop.ch ↗
Search and browse Coop.ch's product catalog via API. Get prices, nutrition facts, ingredients, reviews, and category listings for Swiss grocery products.
What is the Coop API?
The Coop.ch API provides 4 endpoints for searching and browsing Switzerland's Coop supermarket product catalog. Use search_products to find items by keyword and get back pricing, brand, availability, and ratings, or use get_category_products for paginated browsing through specific departments. Product detail responses include structured nutrition facts, ingredient lists with allergen markup, customer reviews, and image URLs.
curl -X GET 'https://api.parse.bot/scraper/99465d88-0759-4842-bad2-6aac9ca985b2/search_products?query=milch' \ -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 coop-ch-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.
from parse_apis.coop.ch_grocery_api import Coop, Product, ProductDetail, Category, CategoryProduct
coop = Coop()
# Search for products by keyword
for product in coop.products.search(query="milch"):
print(product.name, product.price, product.currency, product.available)
# Get full details for a search result
products = list(coop.products.search(query="brot", limit=3))
if products:
detail = products[0].details()
print(detail.name, detail.brand_name)
print(detail.price.formatted_value, detail.price.currency_iso)
for review in detail.reviews:
print(review.alias, review.rating, review.date)
# List all available categories
for category in coop.categories.list():
print(category.id, category.name, category.url)
# Browse products in a specific category
fruit_veg = coop.category(id="m_0001")
for item in fruit_veg.products(slug="food/fruit-vegetables"):
print(item.code, item.name, item.brand, item.price, item.rating_value)
Search for products by keyword on Coop.ch. Returns matching products with basic info (name, brand, price, rating) plus related sub-categories via the suggest layer. Returns up to 5 product results per query. Not paginated; use get_category_products for paginated browsing.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search keyword. |
{
"type": "object",
"fields": {
"total": "integer - total number of results across all result types",
"products": "array of product objects with code, name, brandName, price, currency, priceValue, available, averageRating, numberOfRatings, url, imageUrl, primaryCategory",
"pagination": "object with totalNumberOfResults, numberOfPages, currentPage, pageSize",
"subCategories": "array of related category objects with code, name, productsCount"
},
"sample": {
"data": {
"total": 18,
"products": [
{
"url": "/food/dairy-products-eggs/milk/uht-milk/milchdrink-uht-15/p/6849615",
"code": "6849615",
"name": "Milchdrink UHT 1.5%",
"price": "0.95",
"currency": "CHF",
"imageUrl": "//www.coop.ch/img/produkte/90_90/RGB/6849615_001.jpg",
"available": true,
"brandName": "Coop",
"priceValue": 0.95,
"averageRating": 4.5,
"numberOfRatings": 98,
"primaryCategory": "UHT Milk"
}
],
"pagination": {
"pageSize": 15,
"currentPage": 0,
"numberOfPages": 1,
"totalNumberOfResults": 13
},
"subCategories": [
{
"code": "milchprodukte_glutenfrei",
"name": "Gluten-free Dairy Products",
"productsCount": 50
}
]
},
"status": "success"
}
}About the Coop API
What the API Covers
The Coop.ch API exposes four endpoints covering the full product discovery workflow on Switzerland's Coop online grocery store. search_products accepts a keyword query and returns up to 5 matching products per call, each with code, name, brandName, price, priceValue, currency, available, averageRating, and numberOfRatings, alongside a subCategories array identifying related departments. For broader catalog browsing, get_category_products supports 0-based pagination via the page and limit parameters and returns product tiles including imageUrl, ratingValue, and ratingAmount.
Product Detail and Category Structure
get_product_details takes a numeric product_id — sourced from either search or category results — and returns the most complete view: full description, ingredients (including HTML-marked allergen highlights), a structured price object with formattedValue and value, an images array with format and usage metadata, labels (e.g. dietary certifications), and a reviews array with per-review alias, comment, date, and rating. get_categories requires no inputs and returns the complete navigation tree of top-level and sub-level categories, each with an id (e.g. m_0001), display name, and relative url path usable as a category_slug in get_category_products.
Pagination and Search Limits
search_products is not paginated and caps results at 5 products per query. The pagination object in the response still reports totalNumberOfResults and numberOfPages, which is useful for gauging how much deeper a category browse might go. For full traversal of a department, pass the category_id from get_categories into get_category_products along with an optional category_slug to ensure the correct URL path is resolved. Page numbering is 0-based across all paginated endpoints.
The Coop API is a managed, monitored endpoint for coop.ch — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when coop.ch 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 coop.ch 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 CHF price changes on specific Coop products over time using
priceValuefrom search or category results - Build a Swiss grocery price comparison tool pulling
brandName,price, andavailablefields across product categories - Extract allergen and ingredient data from
ingredientsHTML for dietary restriction filtering applications - Aggregate customer sentiment by collecting
averageRatingandnumberOfRatingsacross a product category - Populate a recipe cost estimator by mapping ingredient names to Coop product prices via
search_products - Catalog Coop's full product taxonomy using
get_categoriesto enumerate all department IDs and URL slugs - Monitor product availability (
availableboolean) for out-of-stock alerting on specific product codes
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Coop.ch have an official public developer API?+
What does get_product_details return beyond what search results include?+
get_product_details adds fields not present in search or category listings: a full description, an ingredients string with HTML allergen markup, a labels array (e.g. organic or dietary certifications), an images array with format and usage metadata, and a reviews array with individual review text, date, and rating. The product_id input maps directly to the code field returned by search_products or get_category_products.Why does search_products only return up to 5 results?+
search_products uses the suggest layer of the Coop catalog and is designed for quick keyword lookups, not full catalog traversal. The pagination object in the response reports the true totalNumberOfResults, so you can gauge scope. For paginated access to all products in a department, use get_category_products with a category_id from get_categories.Does the API return stock levels, promotional pricing, or delivery slot data?+
available field and standard shelf pricing via priceValue and formattedValue, but does not include store-level stock quantities, promotional or multi-buy pricing, or delivery availability. You can fork this API on Parse and revise it to add an endpoint targeting those data surfaces.Are nutrition facts (calories, macros) included in the product detail response?+
get_product_details endpoint returns a description and ingredients field but does not currently expose a structured nutrition facts object with per-nutrient values like calories or macronutrients. You can fork this API on Parse and revise it to add a nutrition-focused endpoint for products where that data is published on the product page.