# Vivino $1.2💰 Wine Ratings, Prices, Reviews & Offers (`abotapi/vivino-wine-data-scraper`) Actor

From $1.2/1K. Scrape Vivino.com for wine ratings, prices, taste profiles, food pairings, grapes, and reviews. Search by wine names or URLs, or discover wines by type, price, rating, country, and grape. Returns 50+ fields, including multi-merchant offers and value scores.

- **URL**: https://apify.com/abotapi/vivino-wine-data-scraper.md
- **Developed by:** [AbotAPI](https://apify.com/abotapi) (community)
- **Categories:** E-commerce, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 wine results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Vivino Wine Data Scraper

Pull structured wine data from Vivino: ratings, prices, taste profiles, food pairings, grapes, value scores, and user reviews. Look up a list of wine names or paste Vivino URLs, or skip the list entirely and discover wines by type, price, rating, origin country, and grape, with full sorting. Fast, returns clean ready-to-use fields, and runs on any Apify plan.

### Why this scraper

- Two ways to work: a mixed list of wine names and URLs (one record each), or a filter-and-sort discovery mode that walks the catalog with no list at all.
- 50+ fields per wine, including a full taste profile, multi-merchant price offers, and Vivino value and competitiveness scores.
- Real filters and real sort: wine type, minimum rating, price range, origin country, grape, sorted by rating, price, or popularity.
- Optional taste profile and user reviews per wine (reviews keep the language, reviewer alias, and tagged note).
- Market aware: choose the pricing country and currency, and echo a ship-to country on every record.
- Low cost and reliable: runs on every Apify plan, with automatic retries for large jobs.

### Data you get

> Sample shape, values are illustrative placeholders, not from a live listing.

| Field | Example |
| --- | --- |
| wineId | 1234567 |
| vintageId | 89012345 |
| name | Sample Winery Reserve Red 2019 |
| winery | Sample Winery |
| vintage | 2019 |
| wine_type | Red |
| region | Sample Region |
| country | France |
| country_code | fr |
| appellation | Sample Appellation |
| grape_varieties | ["Cabernet Sauvignon", "Merlot"] |
| average_rating | 4.3 |
| ratings_count | 1200 |
| wine_average_rating | 4.2 |
| wine_ratings_count | 25000 |
| price | 49.9 |
| currency | EUR |
| merchant_url | https://www.vivino.com/checkout/... |
| discount_percent | 10 |
| bottle_volume_ml | 750 |
| vfm_score | 4.1 |
| vfm_category | great |
| cmp_score | 3.8 |
| is_natural | false |
| image_url | https://images.vivino.com/thumbs/000000000_pb_x960.png |
| label_image_url | https://images.vivino.com/thumbs/000000000_pl_375x500.png |
| food_pairings | ["Beef", "Lamb", "Game"] |
| description | Style description text appears here. |
| taste_profile | { body, acidity, tannins, sweetness, fizziness, intensity, flavor_notes, flavor_groups } |
| reviews | [ { rating, note, language, user_name, created_at } ] |
| prices | [ { amount, currency, merchant_url, discount_percent } ] |
| vivino_url | https://www.vivino.com/sample-winery-reserve-red/w/1234567?year=2019 |

### How to use

Look up wines by name (one record per wine you list):

```json
{
  "mode": "lookup",
  "wines": ["Opus One 2019", "Dom Pérignon", "Cloudy Bay Sauvignon Blanc"],
  "countryCode": "US",
  "currencyCode": "USD"
}
````

Look up wines by URL, with taste profile and reviews:

```json
{
  "mode": "lookup",
  "wines": [
    "https://www.vivino.com/cloudy-bay-sauvignon-blanc/w/18978",
    "https://www.vivino.com/chateau-margaux-premier-grand-cru-classe/w/1127795?year=2015"
  ],
  "includeTasteProfile": true,
  "includeReviews": true,
  "maxReviewsPerWine": 20
}
```

Discover top-rated French reds between 50 and 150, sorted by rating (collects up to maxItems):

```json
{
  "mode": "discovery",
  "wineTypes": ["Red"],
  "originCountries": ["fr"],
  "minRating": 4,
  "priceMin": 50,
  "priceMax": 150,
  "sortBy": "rating_desc",
  "countryCode": "US",
  "currencyCode": "USD",
  "maxItems": 50
}
```

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| mode | string | lookup | lookup: scrape the wines you list. discovery: find wines by filter + sort. |
| wines | array | sample | Lookup mode: mixed list of wine names and Vivino URLs (one record each). |
| searchMode | string | auto | Vintage handling for name lookups: auto, name\_and\_vintage, name\_only. |
| matchingMode | string | basic | basic takes the top match; advanced also surfaces one alternative (unbilled). |
| wineTypes | array | \[] | Discovery filter: Red, White, Sparkling, Rosé, Dessert, Fortified. |
| minRating | integer | (none) | Discovery filter: minimum Vivino average rating (1 to 4.5). |
| priceMin / priceMax | integer | (none) | Discovery price range in the selected currency. |
| originCountries | array | \[] | Discovery filter by wine origin (ISO alpha-2 codes, e.g. fr, it, us). |
| grapes | array | \[] | Discovery filter by Vivino grape IDs. |
| sortBy | string | relevance | relevance, rating\_desc, rating\_asc, price\_asc, price\_desc, popularity. |
| includeTasteProfile | boolean | true | Fetch body, acidity, tannins, sweetness, fizziness, intensity, flavor notes. |
| includeReviews | boolean | false | Fetch user reviews per wine. |
| maxReviewsPerWine | integer | 10 | Maximum reviews per wine (1 to 100). |
| countryCode | string | FR | Market country for pricing (ISO alpha-2). |
| currencyCode | string | EUR | Currency for prices (ISO 4217). |
| shipTo | string | (none) | Optional ship-to country, echoed on each record. |
| maxItems | integer | 20 | The only cap on records. Set 0 for unlimited. |
| maxPages | integer | 0 | Safety bound on discovery pages. 0 means no page limit; the run stops at Max wines. |
| proxy | object | Apify Proxy | Proxy settings. Works on all plans; Residential is recommended for large runs. |

### Send results into your apps (MCP connectors)

Optionally pipe each record into the apps you already use through Model Context Protocol (MCP) connectors. Authorize a connector under Apify, Settings, API & Integrations, then select it in the input. For Notion, also set the parent page URL. The connector receives a condensed, human-readable summary per wine (a title plus key fields as plain text), not the full JSON; the complete record always stays in the Apify dataset. Leave the connectors field empty to skip this entirely; it never changes the dataset output.

### Output example

> Sample shape, values are illustrative placeholders, not from a live listing.

```json
{
  "wineId": 1234567,
  "vintageId": 89012345,
  "name": "Sample Winery Reserve Red 2019",
  "winery": "Sample Winery",
  "vintage": 2019,
  "wine_type": "Red",
  "region": "Sample Region",
  "country": "France",
  "country_code": "fr",
  "grape_varieties": ["Cabernet Sauvignon", "Merlot"],
  "average_rating": 4.3,
  "ratings_count": 1200,
  "price": 49.9,
  "currency": "EUR",
  "vfm_category": "great",
  "is_natural": false,
  "food_pairings": ["Beef", "Lamb"],
  "taste_profile": {
    "body": 5,
    "acidity": 3.1,
    "tannins": 3.8,
    "sweetness": 1.6,
    "fizziness": null,
    "intensity": 3.7,
    "flavor_notes": ["black fruit", "oak", "leather"]
  },
  "reviews": [
    { "rating": 4.5, "note": "Sample review text.", "language": "en", "user_name": "reviewer", "created_at": "2026-01-01T00:00:00.000Z" }
  ],
  "vivino_url": "https://www.vivino.com/sample-winery-reserve-red/w/1234567?year=2019",
  "scrapedAt": "2026-01-01T00:00:00.000Z",
  "inputSource": "search"
}
```

### Plan requirement

The actor runs on every Apify plan, including Free. For large jobs, the Residential proxy option gives the most consistent results; it is included on the Apify Starter plan and above. Select it in the proxy input when you need maximum reliability.

# Actor input Schema

## `mode` (type: `string`):

Lookup: scrape the exact wines you list below (by name or Vivino URL). Discovery: ignore the list and find wines by filter + sort.

## `wines` (type: `array`):

Mixed list of wine names (e.g. "Opus One 2019") and Vivino wine URLs (e.g. https://www.vivino.com/.../w/1127795?year=2015). One record per entry. Required for Lookup mode; ignored in Discovery mode.

## `searchMode` (type: `string`):

How vintages are handled when looking up by name. auto: use the vintage when present. name\_and\_vintage: keep the vintage in the query. name\_only: strip the year and match the wine.

## `matchingMode` (type: `string`):

basic: take the top match. advanced: also surface one alternative candidate per name (unbilled) for uncertain matches.

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

Filter by wine type. Leave empty for all types.

## `minRating` (type: `integer`):

Only wines with a Vivino average rating at or above this value (1 to 4.5).

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

Lowest price (in the selected currency) for discovery results.

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

Highest price (in the selected currency) for discovery results.

## `originCountries` (type: `array`):

Filter by the wine's country of origin (ISO 3166-1 alpha-2 codes, e.g. fr, it, us). Leave empty for all.

## `grapes` (type: `array`):

Filter by Vivino grape IDs. Leave empty for all grapes.

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

Sort discovery results. Sponsored placements are not used.

## `countryCode` (type: `string`):

Market used for pricing and availability (ISO 3166-1 alpha-2, e.g. FR, US, GB).

## `currencyCode` (type: `string`):

Currency for displayed prices (ISO 4217, e.g. EUR, USD, GBP).

## `shipTo` (type: `string`):

Optional shipping destination (ISO 3166-1 alpha-2). Echoed on each record.

## `includeTasteProfile` (type: `boolean`):

Fetch body, acidity, tannins, sweetness, fizziness, intensity, and flavor notes per wine.

## `includeReviews` (type: `boolean`):

Fetch user reviews per wine (rating, note, language, reviewer, date). Increases run time and cost.

## `maxReviewsPerWine` (type: `integer`):

Maximum reviews fetched per wine when reviews are enabled (1 to 100).

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

Caps the total wine records returned. In Lookup mode you get one record per wine you list, so the result count is your list length (this only caps it). In Discovery mode the run collects up to this many. Set 0 for unlimited.

## `maxPages` (type: `integer`):

Discovery mode only: safety bound on pages walked. Leave 0 for no page limit, the run stops at Max wines.

## `proxy` (type: `object`):

Proxy settings. The default works on the Free plan. Choose Residential for higher reliability.

## `mcpConnectors` (type: `array`):

Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).

## `notionParentPageUrl` (type: `string`):

URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on items written to each connector per run. Does not affect the dataset.

## Actor input object example

```json
{
  "mode": "lookup",
  "wines": [
    "Dom Pérignon",
    "Opus One 2019",
    "https://www.vivino.com/cloudy-bay-sauvignon-blanc/w/18978"
  ],
  "searchMode": "auto",
  "matchingMode": "basic",
  "wineTypes": [],
  "originCountries": [],
  "grapes": [],
  "sortBy": "relevance",
  "countryCode": "FR",
  "currencyCode": "EUR",
  "includeTasteProfile": true,
  "includeReviews": false,
  "maxReviewsPerWine": 10,
  "maxItems": 20,
  "maxPages": 0,
  "proxy": {
    "useApifyProxy": true
  },
  "maxNotifyListings": 50
}
```

# Actor output Schema

## `overview` (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 = {
    "wines": [
        "Dom Pérignon",
        "Opus One 2019",
        "https://www.vivino.com/cloudy-bay-sauvignon-blanc/w/18978"
    ],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/vivino-wine-data-scraper").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 = {
    "wines": [
        "Dom Pérignon",
        "Opus One 2019",
        "https://www.vivino.com/cloudy-bay-sauvignon-blanc/w/18978",
    ],
    "proxy": { "useApifyProxy": True },
}

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

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

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

```

## CLI example

```bash
echo '{
  "wines": [
    "Dom Pérignon",
    "Opus One 2019",
    "https://www.vivino.com/cloudy-bay-sauvignon-blanc/w/18978"
  ],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call abotapi/vivino-wine-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=abotapi/vivino-wine-data-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Vivino $1.2💰 Wine Ratings, Prices, Reviews & Offers",
        "description": "From $1.2/1K. Scrape Vivino.com for wine ratings, prices, taste profiles, food pairings, grapes, and reviews. Search by wine names or URLs, or discover wines by type, price, rating, country, and grape. Returns 50+ fields, including multi-merchant offers and value scores.",
        "version": "1.0",
        "x-build-id": "mgsgLWwRG04bZyPRa"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~vivino-wine-data-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-vivino-wine-data-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/abotapi~vivino-wine-data-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-vivino-wine-data-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/abotapi~vivino-wine-data-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-vivino-wine-data-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "lookup",
                            "discovery"
                        ],
                        "type": "string",
                        "description": "Lookup: scrape the exact wines you list below (by name or Vivino URL). Discovery: ignore the list and find wines by filter + sort.",
                        "default": "lookup"
                    },
                    "wines": {
                        "title": "Wine names or URLs",
                        "type": "array",
                        "description": "Mixed list of wine names (e.g. \"Opus One 2019\") and Vivino wine URLs (e.g. https://www.vivino.com/.../w/1127795?year=2015). One record per entry. Required for Lookup mode; ignored in Discovery mode.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchMode": {
                        "title": "Vintage handling (Lookup, name entries)",
                        "enum": [
                            "auto",
                            "name_and_vintage",
                            "name_only"
                        ],
                        "type": "string",
                        "description": "How vintages are handled when looking up by name. auto: use the vintage when present. name_and_vintage: keep the vintage in the query. name_only: strip the year and match the wine.",
                        "default": "auto"
                    },
                    "matchingMode": {
                        "title": "Matching effort (Lookup, name entries)",
                        "enum": [
                            "basic",
                            "advanced"
                        ],
                        "type": "string",
                        "description": "basic: take the top match. advanced: also surface one alternative candidate per name (unbilled) for uncertain matches.",
                        "default": "basic"
                    },
                    "wineTypes": {
                        "title": "Wine types",
                        "type": "array",
                        "description": "Filter by wine type. Leave empty for all types.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Red",
                                "White",
                                "Sparkling",
                                "Rosé",
                                "Dessert",
                                "Fortified"
                            ]
                        },
                        "default": []
                    },
                    "minRating": {
                        "title": "Minimum rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Only wines with a Vivino average rating at or above this value (1 to 4.5)."
                    },
                    "priceMin": {
                        "title": "Minimum price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Lowest price (in the selected currency) for discovery results."
                    },
                    "priceMax": {
                        "title": "Maximum price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Highest price (in the selected currency) for discovery results."
                    },
                    "originCountries": {
                        "title": "Origin countries",
                        "type": "array",
                        "description": "Filter by the wine's country of origin (ISO 3166-1 alpha-2 codes, e.g. fr, it, us). Leave empty for all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "grapes": {
                        "title": "Grape IDs",
                        "type": "array",
                        "description": "Filter by Vivino grape IDs. Leave empty for all grapes.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "sortBy": {
                        "title": "Sort order",
                        "enum": [
                            "relevance",
                            "rating_desc",
                            "rating_asc",
                            "price_asc",
                            "price_desc",
                            "popularity"
                        ],
                        "type": "string",
                        "description": "Sort discovery results. Sponsored placements are not used.",
                        "default": "relevance"
                    },
                    "countryCode": {
                        "title": "Market country",
                        "type": "string",
                        "description": "Market used for pricing and availability (ISO 3166-1 alpha-2, e.g. FR, US, GB).",
                        "default": "FR"
                    },
                    "currencyCode": {
                        "title": "Currency",
                        "type": "string",
                        "description": "Currency for displayed prices (ISO 4217, e.g. EUR, USD, GBP).",
                        "default": "EUR"
                    },
                    "shipTo": {
                        "title": "Ship-to country",
                        "type": "string",
                        "description": "Optional shipping destination (ISO 3166-1 alpha-2). Echoed on each record."
                    },
                    "includeTasteProfile": {
                        "title": "Include taste profile",
                        "type": "boolean",
                        "description": "Fetch body, acidity, tannins, sweetness, fizziness, intensity, and flavor notes per wine.",
                        "default": true
                    },
                    "includeReviews": {
                        "title": "Include reviews",
                        "type": "boolean",
                        "description": "Fetch user reviews per wine (rating, note, language, reviewer, date). Increases run time and cost.",
                        "default": false
                    },
                    "maxReviewsPerWine": {
                        "title": "Max reviews per wine",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum reviews fetched per wine when reviews are enabled (1 to 100).",
                        "default": 10
                    },
                    "maxItems": {
                        "title": "Max wines",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Caps the total wine records returned. In Lookup mode you get one record per wine you list, so the result count is your list length (this only caps it). In Discovery mode the run collects up to this many. Set 0 for unlimited.",
                        "default": 20
                    },
                    "maxPages": {
                        "title": "Max discovery pages",
                        "minimum": 0,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Discovery mode only: safety bound on pages walked. Leave 0 for no page limit, the run stops at Max wines.",
                        "default": 0
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. The default works on the Free plan. Choose Residential for higher reliability.",
                        "default": {
                            "useApifyProxy": true
                        }
                    },
                    "mcpConnectors": {
                        "title": "Pipe results into your apps (optional)",
                        "type": "array",
                        "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
                    },
                    "notionParentPageUrl": {
                        "title": "Notion parent page (Notion connector only)",
                        "type": "string",
                        "description": "URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
                    },
                    "maxNotifyListings": {
                        "title": "Max items to export per connector",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on items written to each connector per run. Does not affect the dataset.",
                        "default": 50
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
