Vivino Wine Scraper icon

Vivino Wine Scraper

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…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Vivino Wine Scraper at a glance

Vivino Wine Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes name, change type (incremental mode), winery, vintage and type, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $3.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Ecommerce, Developer Tools, Other
Pricing
$3.00 per 1,000 results (Free plan), from $1.20 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
27 options

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.

What Vivino Wine Scraper $1.2💰 Ratings, Prices, Reviews & Offers can do

  • Two ways to find wines. Paste an exact list of names and/or Vivino URLs (one record each), or set filters and a sort order and let the actor walk the catalog for you.
  • 50+ fields per wine, including a full taste profile, multi merchant price offers, and Vivino's value and competitiveness scores.
  • Real discovery filters and sort. Wine type, minimum rating, price range, origin country and grape, sorted by rating, price, popularity or biggest discount first.
  • Enrichment on demand. Taste profile (acidity, tannins, sweetness, intensity, flavor notes) is fetched by default and can be turned off; user reviews are off by default and can be turned on. Any wine that gets either adds one combined enrichment charge, not two.
  • Market aware. Choose the pricing country and currency, and echo a ship-to country on every record.
  • Resume and recurring updates. One interrupted run resumes automatically, and Incremental mode returns only new and updated wines by default on every scheduled run.

Choose what to collect

These inputs let you configure Vivino Wine Scraper $1.2💰 Ratings, Prices, Reviews & Offers. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestringLookup: scrape the exact wines you list below (by name or Vivino URL). Discovery: ignore the list and find wines by filter + sort.

Choices: lookup, discovery

winesarrayMixed list of wine names (e.g. "Opus One 2019") and Vivino URLs: wine pages (/w/, with optional ?year=, market/language prefix), search and explore pages, grape / region / winery pages, and the explore and reviews JSON API URLs. One record per wine. Required for Lookup mode; ignored in Discovery mode. Left untouched, it scrapes the example list.
searchModestringHow 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.

Choices: auto, name_and_vintage, name_only

matchingModestringbasic: take the top match. advanced: also surface one alternative candidate per name for uncertain matches. The alternative is a normal record: it counts toward Max wines, gets the same enrichment, and is billed the same as any other row.

Choices: basic, advanced

wineTypesarrayFilter by wine type. Leave empty for all types.
minRatingintegerOnly wines with a Vivino average rating at or above this value (1 to 4.5).
priceMinintegerLowest price (in the selected currency) for discovery results.
Show 20 more inputs
More input fields
InputWhat it controls
priceMaxintegerHighest price (in the selected currency) for discovery results.
originCountriesarrayFilter by the wine's country of origin (ISO 3166-1 alpha-2 codes, e.g. fr, it, us). Leave empty for all.
grapesarrayFilter by Vivino grape IDs. Leave empty for all grapes.
sortBystringSort discovery results. Sponsored placements are not used.

Choices: relevance, rating_desc, rating_asc, price_asc, price_desc, popularity, discount_desc

countryCodestringMarket used for pricing and availability (ISO 3166-1 alpha-2, e.g. FR, US, GB). Supported markets: AR AT AU BE BR CA CH CL CN CZ DE DK ES FI FR GB GR HR HU IE IL IT JP KR LU MX NL NO NZ PL PT RO SE SG SK US ZA.
currencyCodestringCurrency for displayed prices (ISO 4217, e.g. EUR, USD, GBP). Supported: EUR USD GBP CHF AUD CAD NZD ZAR BRL ARS CLP MXN CNY JPY KRW HKD SGD ILS CZK DKK HUF NOK PLN RON SEK HRK.
shipTostringOptional shipping destination (ISO 3166-1 alpha-2). Echoed on each record. Free text is accepted. Markets Vivino supports: AR AT AU BE BR CA CH CL CN CZ DE DK ES FI FR GB GR HK HR HU IE IL IT JP KR LU MX NL NO NZ PL PT RO SE SG SK US ZA.
includeTasteProfilebooleanFetch body, acidity, tannins, sweetness, fizziness, intensity, and flavor notes per wine.
includeReviewsbooleanFetch user reviews per wine (rating, note, language, reviewer, date). Increases run time and cost.
maxReviewsPerWineintegerMaximum reviews fetched per wine when reviews are enabled (1 to 100).
maxItemsintegerCaps 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 no limit (a hard ceiling of 1,000,000 wines applies).
maxPagesintegerDiscovery mode only: optional bound on pages walked. Leave empty to walk every result page; the run still stops at Max wines.
resumeFromRunIdstringOptional: paste a previous run ID (or dataset ID) from this actor. Wines already collected there are skipped, so this run only returns new ones. Leave empty for a normal run. For recurring daily monitoring of the same wines/filters, use Incremental mode below instead.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the wine list / discovery filters and enrichment settings -- different setups then never mix state with each other.
emitUnchangedbooleanOff by default. Turn on to also return wines that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return wines that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked wines/filters, not when Max wines capped it or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayOptional. Field names to exclude from UPDATED change detection, in addition to the built-in exclusion of the scrape timestamp (scrapedAt). Use a dotted path for a nested field (for example prices.merchant_name); a list on the path applies to every element. Ignored fields are still returned in the row, they just never turn an unchanged wine into UPDATED or appear in changedFields.
mcpConnectorsarrayOptionally 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).
notionParentPageUrlstringURL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

nameName (text)
changeTypeChange type (incremental mode) (text)
wineryWinery (text)
vintageVintage (number)
wine_typeType (text)
regionRegion (text)
countryCountry (text)
average_ratingRating (number)
ratings_countRatings (number)
pricePrice (number)
currencyCurrency (text)
is_on_saleOn sale (boolean)
Show 11 more fields
discount_amountSavings (number)
vfm_categoryValue (number)
grape_varietiesGrapes (array)
vivino_urlURL (link)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
reviewsReview (object)
taste_profileTaste profile (object)
food_pairingsFood pairings (array)
wine_descriptionDescription (text)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "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": null,
    "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",
  "scrapedAt": "2026-01-01T00:00:00.000Z",
  "inputSource": "search"
}

Ways to use this data

  • Wine shops and marketplaces: track competitor pricing, discounts and merchant offers for the wines you carry.
  • Wine apps and recommendation engines: build a searchable catalog with ratings, taste profiles and food pairings.
  • Price and deal monitoring: schedule Incremental mode against a watch list and get only the wines whose price, rating or availability changed.
  • Sommeliers and content teams: pull tasting notes, food pairings and reviews to write wine guides and shelf talkers.
  • Market research and data science: build historical rating and pricing datasets across countries and currencies.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Vivino Wine Scraper return?

The documented output for Vivino Wine Scraper includes name, change type (incremental mode), winery, vintage, type, region, country and rating. Availability of each field depends on the source page and the selected mode.

How much does Vivino Wine Scraper cost?

It costs $3.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed wines on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated wines by default, plus reappeared wines once an earlier run with Emit expired on has marked one gone, and unchanged ones are not billed. Lookup mode with pinned-vintage URLs gives the most stable results; see "Read this before you schedule a discovery run" above if you're scheduling discovery mode.

Why does a scheduled discovery run keep reporting changes even when nothing looks different?

Vivino answers from the location a request appears to come from, so a discovery walk run minutes apart can return a different set of wines, or quote the same wine as a different vintage from a different merchant. That reads as UPDATED because the record genuinely differs from what was stored, not because change detection is wrong. Pin your market with countryCode/currencyCode and a Residential connection, or switch to lookup mode with ?year= URLs, to reduce it.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

Ready to collect with Vivino Wine Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.