Vivino Scraper — Wine Prices, Ratings & Reviews
Pricing
from $1.20 / 1,000 result scrapeds
Vivino Scraper — Wine Prices, Ratings & Reviews
Scrapes wine data from vivino.com: name, vintage, winery, region, rating, review count, and merchant price. No login required.
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
2 days ago
Last modified
Categories
Share
Vivino Scraper
Scrapes wine data from vivino.com: name, vintage, winery, region, community rating, review count, and a merchant offer with price.
Why use this actor?
Vivino aggregates ratings from millions of users and prices from dozens of wine merchants, but there's no official public API for buyers who want that data in bulk. This actor pulls it directly from Vivino's own search backend — useful for wine retailers tracking competitor pricing, for building a rating-based wine recommender, or for market research on which regions/varietals are trending by rating volume.
How to scrape Vivino data
- Set a
searchQuery(a wine name, grape variety, region, or winery — e.g."chateau margaux","rioja","chardonnay") or leave it blank and setwineType/minRating/price filters instead to browse without a keyword. - Optionally filter by
wineType(red, white, rosé, sparkling, dessert, fortified),minRating(1-5), and a price range. - Pick a
marketCountryto control which currency prices are shown in. - Run the actor. Each result is one wine vintage with its current rating and a merchant price.
The actor talks directly to Vivino's /api/explore/explore JSON endpoint (the same one the vivino.com search page itself calls) rather than parsing rendered HTML, so results are clean and fast.
Input
| Field | Type | Required | Description |
|---|---|---|---|
searchQuery | String | No | Wine, grape, region, or winery to search for. Leave blank (with no other filters) to fall back to a default search. Leave blank while setting other filters to browse by those filters alone — this field has no schema default on purpose, so it never silently narrows a filter-only search. |
wineType | String | No | red, white, rose, sparkling, dessert, fortified, or blank for any |
marketCountry | String | No | ISO country code controlling currency (default BE → EUR) |
minRating | Integer | No | Minimum Vivino rating, 1-5 scale (default 1, i.e. no filter) |
minPrice | Integer | No | Minimum price in the market country's currency (default 0) |
maxPrice | Integer | No | Maximum price in the market country's currency (default 1000) |
sortBy | String | No | rating_desc (default), rating_asc, price_asc, price_desc |
maxResults | Integer | No | Maximum wines to return, hard-capped at 2000 (default 50) |
proxyConfiguration | Object | No | Apify Proxy settings (automatic works — see Limitations) |
Output
Each result contains:
| Field | Type | Example |
|---|---|---|
vintageId | Integer | 183041714 |
wineId | Integer | 2169229 |
wineName | String | "Cabernet Sauvignon" |
vintageName | String | "Terre di Rai Cabernet Sauvignon 2025" |
vintageYear | Integer or null | 2025 |
winery | String or null | "Terre di Rai" |
region | String or null | "delle Venezie" |
country | String or null | "Italy" |
wineType | String or null | "Red" |
rating | Number or null | 3.4 |
ratingCount | Integer or null | 128 |
price | Number or null | 24.99 |
currency | String or null | "EUR" |
originalPrice | Number or null | 29.99 |
discountPercent | Number or null | 17 |
bottleVolumeMl | Integer or null | 750 |
merchantId | Integer or null | 34978 |
merchantUrl | String or null | Outbound link to buy at that merchant |
available | Boolean or null | true |
imageUrl | String or null | Bottle/label image URL |
wineUrl | String | Canonical vivino.com wine page |
scrapedAt | String | ISO 8601 timestamp |
searchQuery | String or null | Input echo |
marketCountry | String or null | Input echo |
Example output
{"vintageId": 183041714,"wineId": 2169229,"wineName": "Cabernet Sauvignon","vintageName": "Terre di Rai Cabernet Sauvignon 2025","vintageYear": 2025,"winery": "Terre di Rai","region": "delle Venezie","country": "Italy","wineType": "Red","rating": 3.4,"ratingCount": 128,"price": 5.72,"currency": "EUR","originalPrice": null,"discountPercent": null,"bottleVolumeMl": 750,"merchantId": 34978,"merchantUrl": "https://www.seulementproduitsitaliens.be/scheda.php?codice=ZPP2621","available": true,"imageUrl": "https://images.vivino.com/thumbs/MYqT_2abQ4uWByvXg25kNg_pb_x600.png","wineUrl": "https://www.vivino.com/w/2169229","scrapedAt": "2026-08-13T09:10:33.942Z","searchQuery": "chateau margaux","marketCountry": "BE"}
Cost estimate
This actor uses approximately 0.5-1 compute unit per 1,000 results — it's a lightweight JSON API scraper with no browser rendering. At standard Apify pricing that's a few cents per 1,000 wines, well under the actor's own per-result price. Usage cost only settles once a run reports SUCCEEDED — reading a dataset mid-run will show a cost far below the real total.
Limitations
- Each result carries one merchant's price, not a full cross-retailer comparison — Vivino's search endpoint returns a single representative offer per wine, not every merchant carrying it.
- Grape variety composition isn't returned by the search endpoint used here (only available from the site's per-wine detail page, which this actor doesn't fetch to keep runs fast and single-request-per-result).
- No anti-bot wall was found on this endpoint during recon (plain HTTPS, no cookies/session, automatic Apify Proxy works fine at normal volume). If you run very high volumes and start seeing block/rate-limit warnings in the run log, switch
proxyConfigurationto a Residential proxy group. - Data is scraped from the public website and may change without notice.
- Respect vivino.com's terms of service and use responsibly.
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.