# Vivino Scraper — Wine Ratings, Prices & Wineries (`technicaldost/vivino-wine-scraper-ratings-prices`) Actor

Scrape Vivino wines by type, country, rating and price: name, vintage, winery, region, grapes, average rating, number of ratings, best price and shop link, taste profile and image. Any Vivino market and currency. No login.

- **URL**: https://apify.com/technicaldost/vivino-wine-scraper-ratings-prices.md
- **Developed by:** [Technical Dost Solutions](https://apify.com/technicaldost) (community)
- **Categories:** E-commerce, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 wines

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Vivino Wine Scraper extracts wines from [Vivino](https://www.vivino.com), the world's largest wine marketplace and rating community. Filter by **wine type, country of origin, minimum rating and price range**, choose your **market and currency**, and get each wine's **name, vintage, winery, region, country, style, grapes, average rating, number of ratings, best available price with shop link, taste profile (acidity, sweetness, tannin, intensity) and label image**. Ideal for wine retailers, importers, price comparison and wine apps.

### What you get

- Filters: red, white, sparkling, rosé, dessert and fortified wines; countries of origin; minimum rating; price range.
- Any Vivino market and currency (US/USD, GB/GBP, DE/EUR, FR/EUR, AU/AUD...).
- Ratings you can trust: average rating and number of ratings for every wine.
- Best available price, bottle size, discount and the shop link from Vivino's marketplace.
- Taste profile (acidity, sweetness, tannin, intensity, fizziness), style and grapes.
- Sort by most rated, top rated, price or discount; up to 10,000 wines per run.

### How to use Vivino Wine Scraper

1. Choose **Wine types**, **Countries** of origin and a **Minimum rating**.
2. Optionally set a **Price range**, your **Market** and **Currency**.
3. Pick **Sort by** and **Maximum wines**.
4. Run the Actor and export to Excel, CSV or JSON, or connect it to your app through the API.

### Input example

```json
{
  "wineTypes": [
    "red"
  ],
  "minRating": 4,
  "priceMin": 10,
  "priceMax": 40,
  "maxItems": 50
}
```

All fields are described in the **Input** tab.

### Output example

```json
{
  "wineId": 15238,
  "vintageId": 182459221,
  "name": "Belle Glos Clark & Telephone Vineyard Pinot Noir 2025",
  "wine": "Clark & Telephone Vineyard Pinot Noir",
  "year": 2025,
  "winery": "Belle Glos",
  "type": "red",
  "style": "Californian Santa Maria Valley Pinot Noir Red",
  "grapes": [
    "Pinot Noir"
  ],
  "region": "Santa Maria Valley",
  "country": "United States",
  "rating": 4.4,
  "ratingsCount": 58337,
  "price": 31.95,
  "currency": "USD",
  "bottleSize": "Bottle (0.75l)",
  "discountPercent": null,
  "shopUrl": "https://www.capitalfinewine.com/products/belle-glos-pinot-noir-clark-tel-coast-stan-2025-750ml",
  "acidity": 3.38,
  "sweetness": 1.88,
  "tannin": 2.04,
  "intensity": 3.3,
  "fizziness": null,
  "isNatural": false,
  "imageUrl": "https://images.vivino.com/thumbs/90WvGviRRGyS_stN6b8sTw_pl_480x640.png",
  "url": "https://www.vivino.com/w/15238?year=2025",
  "market": "US",
  "scrapedAt": "2026-10-22T23:10:59.062Z"
}
```

#### Output fields

| Field | Description |
|---|---|
| `wineId` | Vivino wine ID. |
| `vintageId` | Vivino vintage ID. |
| `name` | Full wine name with vintage. |
| `wine` | Wine name without winery. |
| `year` | Vintage year (empty for non-vintage). |
| `winery` | Winery. |
| `type` | red, white, sparkling, rose, dessert or fortified. |
| `style` | Wine style. |
| `grapes` | Grape varieties. |
| `region` | Region. |
| `country` | Country of origin. |
| `rating` | Average Vivino rating (1-5). |
| `ratingsCount` | Number of ratings. |
| `price` | Best available price. |
| `currency` | Price currency. |
| `bottleSize` | Bottle size of the offer. |
| `discountPercent` | Discount on the offer, when any. |
| `shopUrl` | Link to the shop offer. |
| `acidity` | Taste: acidity (1-5). |
| `sweetness` | Taste: sweetness (1-5). |
| `tannin` | Taste: tannin (1-5). |
| `intensity` | Taste: intensity (1-5). |
| `fizziness` | Taste: fizziness (1-5), sparkling wines. |
| `isNatural` | Natural wine. |
| `imageUrl` | Label image. |
| `url` | Vivino wine page. |
| `market` | Market used for prices. |
| `scrapedAt` | Time of extraction. |

Export results as JSON, CSV, Excel, XML or HTML, or read them with the API.

### Use cases

- Wine shops and importers: find highly rated wines in a price band to stock.
- Price comparison and deal alerts: track Vivino prices and discounts over time.
- Wine apps and AI sommeliers: build a catalogue with ratings, grapes and taste profiles.
- Market research: compare regions, grapes and price points by rating.

### How much does Vivino Wine Scraper cost?

This Actor uses **pay-per-event** pricing: **$0.003 per wine** ($3 per 1,000). Platform usage is included. Searches with no matching wines are free.

Set **Maximum cost per run** in the run options to cap your spend; the Actor stops when the limit is reached.

### Use Vivino Wine Scraper with AI agents (MCP)

Give Claude, ChatGPT, Cursor or any MCP client this Actor as a tool through the hosted [Apify MCP server](https://mcp.apify.com):

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=technicaldost/vivino-wine-scraper-ratings-prices" --header "Authorization: Bearer YOUR_APIFY_TOKEN"
```

Or in a JSON MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=technicaldost/vivino-wine-scraper-ratings-prices",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

The tool is named `technicaldost--vivino-wine-scraper-ratings-prices`. Ask your agent, for example, to *"run Vivino Wine Scraper with {"wineTypes": \["red"], "minRating": 4, "priceMin": 10, "priceMax": 40, "maxItems": 50}"*.

### Run Vivino Wine Scraper via API

```bash
curl -X POST "https://api.apify.com/v2/acts/technicaldost~vivino-wine-scraper-ratings-prices/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"wineTypes": ["red"], "minRating": 4, "priceMin": 10, "priceMax": 40, "maxItems": 50}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("technicaldost/vivino-wine-scraper-ratings-prices").call(run_input={"wineTypes": ["red"], "minRating": 4, "priceMin": 10, "priceMax": 40, "maxItems": 50})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('technicaldost/vivino-wine-scraper-ratings-prices').call({"wineTypes": ["red"], "minRating": 4, "priceMin": 10, "priceMax": 40, "maxItems": 50});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Integrations

Schedule runs (daily, hourly) in Apify Console and send results to Google Sheets, Slack, Make, Zapier, n8n, Airbyte or your own webhook.

### FAQ

#### Which countries can I filter by?

Use two-letter country codes for the country of origin, for example FR, IT, ES, US, AR, CL, AU, NZ, PT, DE, ZA.

#### Why do prices differ by market?

Vivino shows offers from shops that deliver to your market. Set Market and Currency to the country you buy in, for example GB and GBP.

#### How many wines can I get?

Up to 10,000 per run. Vivino returns up to 50 wines per page and reports how many wines match your filters; the number is in the run log.

#### Does it include reviews?

This version returns ratings and rating counts, not individual review texts.

#### Is it legal to scrape this data?

The Actor collects publicly available information only and does not log in or bypass access controls. Use the data in line with the website's terms and the laws that apply to you, especially when processing personal data.

# Actor input Schema

## `wineTypes` (type: `array`):

Types to include. Leave empty for all.

## `countries` (type: `array`):

Two-letter country codes of where the wine is made, e.g. FR, IT, ES. Leave empty for all countries.

## `minRating` (type: `number`):

Only wines rated at least this (1-5).

## `priceMin` (type: `integer`):

Minimum price in the selected currency.

## `priceMax` (type: `integer`):

Maximum price in the selected currency.

## `market` (type: `string`):

Two-letter country code of the market whose shops and prices to use, e.g. US, GB, DE, AU.

## `currency` (type: `string`):

Currency code for prices, e.g. USD, GBP, EUR, AUD.

## `sortBy` (type: `string`):

Order of results.

## `sortDirection` (type: `string`):

Descending or ascending (price defaults to low to high).

## `maxItems` (type: `integer`):

Maximum wines to save.

## Actor input object example

```json
{
  "wineTypes": [
    "red"
  ],
  "minRating": 4,
  "priceMin": 10,
  "priceMax": 40,
  "market": "US",
  "currency": "USD",
  "sortBy": "most_rated",
  "maxItems": 50
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "wineTypes": [
        "red"
    ],
    "minRating": 4,
    "priceMin": 10,
    "priceMax": 40,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("technicaldost/vivino-wine-scraper-ratings-prices").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "wineTypes": ["red"],
    "minRating": 4,
    "priceMin": 10,
    "priceMax": 40,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("technicaldost/vivino-wine-scraper-ratings-prices").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "wineTypes": [
    "red"
  ],
  "minRating": 4,
  "priceMin": 10,
  "priceMax": 40,
  "maxItems": 50
}' |
apify call technicaldost/vivino-wine-scraper-ratings-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,technicaldost/vivino-wine-scraper-ratings-prices"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Akgbn2U0pbVgEmzAK/builds/ZY0AOSvSrLb5DQz4f/openapi.json
