Denner.ch Scraper — Swiss Wine & Grocery Prices
Pricing
from $1.20 / 1,000 result scrapeds
Denner.ch Scraper — Swiss Wine & Grocery Prices
Scrape wine and grocery products, prices, promotions, ratings and images from denner.ch, Migros-owned Denner's Swiss wine and discount grocery shop. Search any keyword and export clean structured product data.
Pricing
from $1.20 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape wine and grocery products, prices, promotions, ratings, and images from denner.ch, the online wine and discount grocery shop of Denner — Switzerland's third-largest grocery chain, owned by Migros. Browse the buyable wine catalogue by category or search any keyword, and export clean, structured product data.
Why use this actor?
Denner is a Migros Group brand with a large national footprint of discount stores and its own online wine shop (Weinshop) with real cart checkout. Its wine assortment, prices, and weekly promotions are useful for price monitoring, competitor benchmarking, and market research alongside the other Swiss grocery chains (Migros, Coop). This actor turns a category browse or keyword search into a structured dataset you can drop straight into a spreadsheet, database, or price-comparison pipeline. Every product comes with its Denner product ID, current price, unit price, and — when discounted — the original price and the promotion percentage shown on the site.
How to scrape Denner data
- Choose a mode:
- Category URL (recommended): paste a denner.ch Weinshop category URL, e.g.
https://www.denner.ch/de/weinshop/wein/champagner~c1144373. This returns the actual webshop-orderable wine catalogue for that category. - Search query: a German keyword (e.g.
wein,rotwein,schokolade,kaffee). This searches Denner's weekly flyer/in-store promotions across wine and grocery.
- Category URL (recommended): paste a denner.ch Weinshop category URL, e.g.
- Set Max Results to how many products you want.
- Run the actor. Results land in the dataset and can be exported as JSON, CSV, Excel, or via the API.
Input
| Field | Type | Required | Description |
|---|---|---|---|
categoryUrl | String | No | A denner.ch Weinshop category URL ending in ~c{id}. Takes priority over searchQuery when set. |
searchQuery | String | No | Search keyword in German (default: rotwein). Used only when categoryUrl is empty. |
maxResults | Integer | No | Maximum products to return (default: 100) |
proxyConfiguration | Object | No | Apify Proxy settings. Automatic proxy works out of the box — denner.ch has no anti-bot wall on its search API. |
Output
Each result contains:
| Field | Type | Example |
|---|---|---|
name | String | "Leopardo Spumante Extra Dry" |
brand | String | "Denner" (only for Denner's own-label line; most wine is unbranded private-label) |
price | Number | 59.7 |
currency | String | "CHF" |
originalPrice | Number | 71.7 (only when on promotion) |
pricePerUnit | String | "Flasche: 9.95" (per-bottle price for multi-packs) |
discount | String | "31%" or "½ PREIS" (only when on promotion) |
quantity | String | "Italien, 75 cl" |
sku / productId | String | "1027008" |
inStock | Boolean or null | true — whether the item is orderable via the webshop |
rating | Number | 4.5 |
reviewCount | Number | 116 |
imageUrl | String | Product image URL |
description | String | Wine tasting notes ("character"), when available |
category | String | "Schaumwein" |
specs | Object | {"country": "Italien", "region": "Toskana", "vintage": "2024"} (wine items) |
url | String | Full product page URL |
scrapedAt | String | ISO 8601 timestamp |
Example output
{"name": "Leopardo Spumante Extra Dry","brand": "","price": 59.7,"currency": "CHF","url": "https://www.denner.ch/de/weinshop/leopardo-spumante-extra-dry~p1027008","scrapedAt": "2026-08-26T14:15:40.882Z","pricePerUnit": "Flasche: 9.95","quantity": "Italien, 75 cl","sku": "1027008","productId": "1027008","inStock": true,"rating": 4.5,"reviewCount": 116,"imageUrl": "https://denner.imgix.net/assets/72df2377-2ea7-43a5-94dd-cc6d036ad091/web/051072_23_02_21.tif_PACK_ITEM.png","description": "Helles Strohgelb mit grünen Reflexen. Aromatisch, mit feinem Duft von gelben Früchten. Lebhafte Perlage, mittlerer Körper und lang anhaltender Abgang.","category": "Schaumwein","specs": { "country": "Italien", "region": "verschiedene Regionen" }}
How it works
denner.ch (a Nuxt 3 frontend) runs Prediggo, a merchandising/search engine, behind a JSON API at /search-api/simplePageContent. The frontend calls this endpoint server-side to render every category-listing and search-results page — this actor calls the same endpoint directly, so it gets full structured product data (name, price, promo, rating, images, tasting notes) in one lightweight request per page, without parsing HTML or running a browser.
There are two distinct product feeds behind this one API:
- Category browsing (
categoryUrlinput) hits the "Wine Shop Listing" block (24 results/page) and returns products that are genuinely orderable through the webshop (isBuyable: trueon every item tested). - Keyword search (
searchQueryinput) hits the "Pre-search" block (5 results/page, fixed) and returns Denner's weekly flyer/in-store promotions — real price and discount data, but not addable to an online cart (isBuyable: falseon every item tested). Both are exposed here; the actor is honest about which mode you're in via theinStockfield.
No anti-bot protection sits in front of either endpoint (plain nginx, confirmed live) — no proxy escalation or browser automation is needed.
Cost estimate
Each page fetch is a single lightweight JSON POST request (no browser, no rendering). A run of 100 results costs roughly 5 requests in category mode (24/page) or 20 requests in search mode (5/page), each completing in well under a second. Apify platform compute for a typical run is a few seconds. The run's usage cost only settles after the run status reports SUCCEEDED — reading the dataset mid-run undercounts the actual cost.
Limitations
inStockreflects the "orderable via the webshop" signal (isBuyable); it isnullon any item where that signal isn't present, and it isfalseon every keyword-search result by design (search surfaces in-store-only weekly promotions, not the webshop catalogue — usecategoryUrlfor buyable items).- Prices and promotions are the national online values; results are in Swiss Francs (CHF) only.
- Most wine and grocery items are unbranded / Denner private-label —
brandis only populated for the "Denner"-branded own-label line. - Data is scraped from the public website and may change without notice.
- Respect the website's terms of service and use responsibly.
Related Scrapers
- Migros Scraper — Switzerland's #1 grocery retailer, Denner's parent company
- Coop Switzerland Scraper — Switzerland's #2 grocery retailer
- Tutti.ch Scraper — Swiss classifieds marketplace
- Local.ch Scraper — Swiss business directory
Need this data on a schedule, or a custom version?
We run this scraper as a managed service for businesses: scheduled runs, deduplication, delta detection, and delivery to your inbox, Google Sheets, or API — maintenance included. We can also build a custom version with your exact fields and filters, or combine multiple sources into one feed.
See studioamba.dev/services or email hello@studioamba.dev for a free data sample. We maintain 300+ European web scrapers and answer within one business day.