
Vivino Wine Ratings & Prices Scraper
hipersoft/vivino-scraper
Scrape wines from Vivino with ratings, review counts, prices, region and winery. Filter by country, currency, wine type, price range and minimum rating — export one clean row per wine as JSON, CSV or Excel.
Total users
2Monthly users
1Total runs
50Per wine scraped
$0.003Last rebuilt
Oct 26, 2026Overview
Scrape wines from Vivino, the world's largest wine marketplace and ratings community, into clean, structured JSON, CSV or Excel. Filter by country, currency, wine type, price range and minimum rating, and pull one tidy row per wine: name, winery, vintage, type, region, country, average rating, review count, price and the wine's URL. Built for price tracking, wine market research, catalog building and automations.
Features
- ⭐ Ratings & reviews — the community average rating and the number of ratings for every wine.
- 💰 Prices — the current price in the currency you choose, ready for tracking and comparison.
- 🍇 Wine type filter — narrow to red, white, sparkling, rosé, dessert or fortified wines.
- 🌍 Country & currency — see availability and prices for the market you care about (US, GB, FR, and more).
- 🎚️ Price range — set a minimum and maximum price to focus the results.
- 🏅 Minimum rating — collect only top-rated wines by setting a rating floor.
- 🏰 Winery & region — the producer, region and country of origin for each wine.
- 🖼️ Bottle image — a direct image URL for every wine.
- 🔗 Direct wine URL — a ready-to-open link to each wine on Vivino.
- 📄 Volume control — set
maxItemsto balance coverage and cost.
Input
{
"countryCode": "US",
"currencyCode": "USD",
"wineTypes": ["red"],
"priceMin": 10,
"priceMax": 100,
"minRating": 4,
"maxItems": 100
}
| Field | Description |
|---|---|
countryCode |
Two-letter country code that sets which market's availability and prices you see (e.g. US, GB, FR). Defaults to US. |
currencyCode |
Three-letter currency code for the prices (e.g. USD, EUR, GBP). Defaults to USD. |
wineTypes |
Optional. Limit to specific types — names (red, white, sparkling, rose, dessert, fortified) or ids (1, 2, 3, 4, 7, 24). |
priceMin |
Lowest wine price to include, in the chosen currency. |
priceMax |
Highest wine price to include, in the chosen currency. |
minRating |
Optional. Only return wines rated at or above this value (1–5). |
maxItems |
Maximum wines to collect (0 = no limit). |
maxConcurrency |
How many requests to run in parallel. Leave at the default unless you have a reason to change it. |
proxyConfiguration |
Proxy settings. Not required by default. |
How to search
Pick a countryCode and currencyCode, then optionally narrow the results with wineTypes, a priceMin/priceMax range and a minRating floor. Set maxItems to control how much you collect, then run. With no input at all, the Actor returns top-rated wines for the US market in USD.
Use cases
- Track wine prices across markets and over time.
- Build and refresh a wine catalog with ratings and review counts.
- Find top-rated wines within a price band for buying or resale decisions.
- Research a region's or a wine type's rating and price distribution.
- Feed structured wine records into a store, spreadsheet or analytics pipeline.
What you get
Each wine is one dataset record:
{
"wineId": 2716483,
"wineName": "Pietro Dal Cero Amarone della Valpolicella",
"winery": "Cà dei Frati",
"vintageYear": 2019,
"wineType": "red",
"region": "Amarone della Valpolicella",
"country": "Italy",
"rating": 4.6,
"ratingsCount": 1986,
"price": 72.44,
"currency": "USD",
"imageUrl": "https://images.vivino.com/thumbs/GLOBHWGQQvi5InBjDLFV3Q_pl_480x640.png",
"url": "https://www.vivino.com/w/2716483"
}
Output schema
| Field | Type | Description |
|---|---|---|
wineId |
integer | Vivino's unique identifier for the wine. |
wineName |
string | Wine name. |
winery |
string | Producer / winery name. |
vintageYear |
integer | Vintage year of the bottle. |
wineType |
string | Wine type: red, white, sparkling, rose, dessert or fortified. |
region |
string | Region the wine comes from. |
country |
string | Country of origin. |
rating |
number | Average community rating (out of 5). |
ratingsCount |
integer | Number of ratings behind the average. |
price |
number | Wine price in the chosen currency. null when no price is listed. |
currency |
string | Currency code of the price (e.g. USD). |
imageUrl |
string (URL) | Bottle image URL. |
url |
string (URL) | Direct link to the wine on Vivino. |
FAQ
Do I need a Vivino account? No. Just set your filters and run.
Which country and currency can I use?
Set countryCode to a two-letter code (e.g. US, GB, FR) and currencyCode to a three-letter code (e.g. USD, EUR, GBP). Prices reflect the market you choose.
Can I filter by wine type?
Yes. Use wineTypes with names (red, white, sparkling, rose, dessert, fortified) or their ids.
How many wines can I collect?
As many as your filters return. Use maxItems to control volume and cost.
What export formats are supported? JSON, CSV, Excel and XML, plus the Apify API for programmatic access.
Can I use this with n8n? Yes. Use the Apify node for n8n to run this Actor and pull its dataset straight into an n8n workflow — trigger it on a schedule, then route the wine rows to a database, spreadsheet or messaging step.
Can I connect it to other tools? This Actor connects with almost any cloud service or web app thanks to integrations on the Apify platform. It works with Make, Zapier, Slack, Airbyte, GitHub, Google Drive and many more, plus the Apify API, JavaScript/Python clients and MCP. Or use webhooks to trigger an action whenever a run finishes.
Notes
Returns only public Vivino wine data — the same information any visitor can see. This is an independent tool and is not affiliated with, endorsed by or connected to Vivino; "Vivino" is a trademark of its respective owner. Original clean-room implementation.
Input
| Field | Type | Description |
|---|---|---|
countryCodeCountry | string | Two-letter country code that sets which market's wine availability and results you see — for example US, GB, FR, DE, IT, ES. Defaults to US. Default: "US" |
currencyCodeCurrency | string | Three-letter currency code for the prices in the results — for example USD, EUR, GBP. Defaults to USD. Default: "USD" |
wineTypesWine types | array | Optional. Limit results to specific wine types. Use names (red, white, sparkling, rose, dessert, fortified) or their ids (1, 2, 3, 4, 7, 24). Leave empty for all types. |
priceMinMinimum price | integer | Lowest wine price to include, in the chosen currency. Default: 0 |
priceMaxMaximum price | integer | Highest wine price to include, in the chosen currency. Default: 1000 |
minRatingMinimum rating | integer | Optional. Only return wines with an average rating at or above this value (1–5). Leave empty for no rating filter. |
maxItemsMax items | integer | Maximum number of wines to collect (0 = no limit; collect everything the search returns). Default: 100 |
maxConcurrencyMax concurrency | integer | How many requests to run in parallel. Leave at the default unless you have a reason to change it. Default: 3 |
proxyConfigurationProxy configuration | object | Proxy settings. Not required by default. If you experience reduced results, enable Apify Residential proxy for the most reliable access. Default: {"useApifyProxy": false} |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~vivino-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"wineTypes": [
"red"
]
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/vivino-scraper").call(run_input={
"wineTypes": [
"red"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/vivino-scraper').call({
"wineTypes": [
"red"
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Wine scraped Charged for each wine record returned, with its ratings, price and details. | $0.003 | $0.0015 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Carousell Scraper
Scrape Carousell search listings: title, price, condition, location, seller, photo and URL. Requires your own Carousell app token.
242 runs · 2 users · $0.003 / listing scrapedGoogle Flights Scraper
Scrape flight options from Google Flights by route and date: airline, flight number, departure and arrival times, duration, stops, layovers and price. One-way or round-trip, any cabin and currency. For travel and price monitoring.
216 runs · 4 users · $0.004 / flight scrapedPinterest Scraper
Search Pinterest and scrape pins (title, description, destination link, image, pinner, board, saves), boards and users. Fast. For visual research, e-commerce, trend and marketing analysis.
151 runs · 2 users · $0.0034 / item scrapedGoogle Trends Scraper
Scrape Google Trends for any keyword: interest over time, related and rising queries, and interest by region. Per country and timeframe. For SEO, market and trend research. No setup.
139 runs · 6 users · $0.001 / keyword scrapedAliExpress Product Search Scraper
Search AliExpress by keyword and export one clean row per product — title, sale price, original price, image and product URL. Export to JSON, CSV or Excel.
135 runs · 3 users · $0.003 / product scrapedGoogle Maps Scraper
Search Google Maps and scrape places: name, category, full address, city, coordinates, rating, phone, website, Place ID and map link. Fast browser-free via Google's internal endpoint, no setup. For local lead generation and market research.
130 runs · 2 users · $0.005 / place scrapedSend the site and the fields. We build it and you get it first.