Wine-Searcher scraper from list: wine and spirits avatar

Wine-Searcher scraper from list: wine and spirits

Pricing

from $10.00 / 1,000 wine data extracteds

Go to Apify Store
Wine-Searcher scraper from list: wine and spirits

Wine-Searcher scraper from list: wine and spirits

Extract popularity, critic scores, cheapest prices and merchant info from Wine-Searcher.com, for wines and spirits alike: bourbon, tequila, cognac and whisky all work. Input names, URLs or LWIN codes and get structured JSON back. Billing is success-only, errors are free. By MrBridge (mr-bridge.com)

Pricing

from $10.00 / 1,000 wine data extracteds

Rating

5.0

(1)

Developer

MrBridge

MrBridge

Maintained by Community

Actor stats

2

Bookmarked

107

Total users

13

Monthly active users

16 hours

Issues response

19 hours ago

Last modified

Share

Wine-Searcher Scraper from List: popularity, scores & prices

What is Wine-Searcher Scraper from List?

Wine-Searcher Scraper from List is an Apify Actor that extracts structured wine data from Wine-Searcher.com, the world's largest wine price comparison site with 18M+ searches per month. Provide wine names, Wine-Searcher URLs or LWIN codes, and the scraper returns popularity rankings, critic scores, cheapest worldwide prices and winery details in JSON or CSV format.

No Wine-Searcher account needed, no API key, no rate limits. A pay-per-event alternative to the official Wine-Searcher API, billed only when a wine is actually extracted. Failed extractions, blocked pages, missing wines and empty results are reported in the dataset but never charged to your account.

Features

  • Three input modes: search by wine name, paste Wine-Searcher URLs, or use industry-standard LWIN codes
  • Critic scores & reviews: aggregated ratings from Wine-Searcher's critic database, plus criticScores keyed by publication so a spreadsheet gets one stable column per critic
  • Cheapest worldwide prices: lowest available price with merchant name, excluding auctions and pre-arrival offers
  • Always per-bottle pricing: case listings (e.g. EU merchants selling "Case of 12") are auto-normalized so cheapestPriceAmount is always the price for one 75cl bottle. The bottlesPerUnit field tells you whether normalization happened.
  • Your currency, on every row: pick one of 30 ISO currencies and every price comes back converted in cheapestPriceConverted, at a live rate fetched once per run. The original amount and its detected currency are always kept.
  • Winery info & popularity: producer details, the Wine-Searcher popularity ranking as published, and winePopularityRank as a plain integer you can sort on
  • Every row states its outcome: a status field with a fixed vocabulary (ok, not_found, blocked, timeout, parse_empty, invalid_input, failed), so you never have to guess whether a row is a result or a failure
  • POS / inventory-ready: paste wine names from your point-of-sale system as-is. Category prefixes, bottle sizes and commas are stripped automatically.
  • LWIN auto-detection: LWIN7, LWIN11, LWIN16 and LWIN18 codes all accepted. Numeric or string format, with or without inputType.
  • Retries failed requests and saves partial results on timeout: one bad input never kills the run, memory stays bounded, and on a soft deadline the actor exits gracefully with whatever it already extracted
  • Only successful extractions are billed at $0.025/wine: errors, blocked requests, timeouts, missing wines and empty results are reported in the dataset for visibility but never billed.

Which wine scraper should I use?

NeedBest scraperWhat it does
Look up specific wines by name, URL or LWINWine-Searcher Scraper from List (this one)Critic scores, cheapest prices, winery info & popularity for each wine
Discover all wines for a grape varietyWine-Searcher Grape ScraperBrowse and extract wines by grape variety on Wine-Searcher
Get Vivino user ratings & taste profilesVivino Wine Data ScraperVivino ratings, prices, taste profiles & reviews
Browse wines by region on VivinoVivino Wine ScraperBrowse and extract all wines from a Vivino region
Monitor Millesima prices & stockMillesima Wine ScraperPrices, stock and critic ratings from Millesima

In short: Use this actor when you have a known list of wines and want Wine-Searcher data (critic scores, market prices, popularity). Use the Grape Scraper when you want to discover wines by grape variety.

Tip: Use the Grape Scraper to discover wines by grape variety, then this actor to get detailed data for each wine.

Why scrape Wine-Searcher?

Wine-Searcher aggregates 20M+ offers from 80,000+ merchants worldwide. The data is used by wine retailers (competitor pricing, catalog benchmarking), sommeliers and buyers (scores and market prices before purchase), collectors and investors (cellar valuation, popularity tracking), and data teams (recommendation engines, pricing models, BI dashboards).

What data can this scraper extract?

Data PointDescriptionAlways included
StatusOutcome of the row: ok, not_found, blocked, timeout, parse_empty, invalid_input or failedYes
Wine nameFull name as listed on Wine-SearcherYes
AppellationAppellation and country of originYes
Critic scoreAggregated critic score (0–100)Yes
Critic reviews countNumber of critic reviewsYes
Wine styleStyle descriptor (e.g. "Red - Savory and Classic")Yes
Grape varietyGrape variety or blend (e.g. "Chardonnay", "Bordeaux Blend Red")Yes
VintageStructured vintage, falling back to a leading four-digit year in the wine name; null only when neither source provides a year, including non-vintage winesYes
Label image URLAbsolute URL to the wine label imageYes
Critic reviewsPer-critic reviews - array of { author, score } (e.g. Robert Parker 95, Jasper Morris 90). Nested array: a CSV column number is a position, not a criticYes
Critic scores by publicationThe same reviews as an object keyed by publication name, so a CSV carries criticScores/Wine Spectator and similar stable columns you can sort and filterYes
Cheapest priceLowest available price worldwide, always per 75cl bottle (case listings auto-divided)Yes
CurrencyCurrency code of the original offer (EUR, USD, GBP…)Yes
Cheapest price (target currency)Cheapest price converted to the currency you selected. It is identical to cheapestPriceEur when the target is EUR (null if no rate is available)Yes
Target currencyThe ISO code you asked for, stated on every row even when the conversion could not be doneYes
Cheapest price (EUR)Backward-compatible euro price. It is identical to cheapestPriceConverted when the target is EUR (null if conversion unavailable)Yes
MerchantMerchant offering the lowest priceYes
Bottles per unit1 = single bottle, ≥2 = case (price already normalized to per-bottle)Yes
Offers countTotal number of merchant offersYes
Winery nameProducer / winery nameYes
Winery URLWinery page URL on Wine-SearcherYes
Popularity rankingWine-Searcher popularity ranking as published, e.g. "1,826th"Yes
Popularity rank (number)The same ranking as an integer, e.g. 1826, so you can sort a spreadsheet on it. A smaller number is a better rankYes
Wine-Searcher URLDirect link to the wine pageYes
Scraped atISO timestamp of extractionYes

Most fields are populated for the large majority of wines. A few depend on Wine-Searcher having the relevant page for that wine and may be null for niche or very new entries: winePopularity and winePopularityRank and wineryUrl (require a producer page on Wine-Searcher), criticReviews (requires listed critic reviews), and cheapestPriceEur and cheapestPriceConverted (require a known exchange rate). A missing popularity rank is an empty cell, never a zero.

Quick start: test in 60 seconds

  1. Click "Try for free" to open this actor in Apify Console
  2. The default input includes sample wines. Leave them or paste your own.
  3. Click "Start"
  4. Download your results from the Dataset tab (JSON, CSV, Excel)

That's it! No Wine-Searcher account needed, no API key, no rate limits.

Maximum 500 wines per run. For larger catalogs, split your list across multiple runs.

Option 1: Search by wine name

  1. Go to the Wine-Searcher Scraper from List on Apify
  2. Select "Wine Names" from the input type dropdown
  3. Enter wine names, one per line. Include the full domaine name and the vintage year for the most accurate match.
  4. Click Start to run the scraper

Example:

Domaine Leflaive Puligny-Montrachet Les Pucelles 2020 Château Beaucastel Hommage à Jacques Perrin 2019

Tips: The more specific the name, the more accurate the match. "Petrus 2015" works, but "Domaine du Château de Meursault Meursault Les Charmes 2020" is more precise.

Always include the vintage when you care about price. A name with or without a year resolves equally well, but the year decides which vintage's price you get back - and prices vary widely between vintages of the same wine. Send "Petrus 2015" to price the 2015; send "Petrus" and you get whatever vintage Wine-Searcher surfaces first.

POS / inventory systems? If your wine list comes from a point-of-sale or inventory system with category prefixes and bottle sizes (e.g. Champagne, Dom Perignon Brut, 2013, Champagne, France or Dessert Wine, Dolce Late Harvest (375ml), Napa Valley), just paste them as-is. The actor automatically cleans the names before searching.

Option 2: Provide Wine-Searcher URLs

  1. Select "Wine-Searcher URLs" from the input type dropdown
  2. Paste one Wine-Searcher URL per line. Any URL from wine-searcher.com/find/... works.
  3. Click Start

Example:

https://www.wine-searcher.com/find/lwin11316442021 https://www.wine-searcher.com/find/petrus/2015

Option 3: Use LWIN codes

  1. Select "LWIN Codes" from the input type dropdown
  2. Enter one LWIN code per line. Supports all formats:
    • LWIN11 (10-11 digits): specific wine + vintage, e.g. 11316442021
    • LWIN7 (7 digits): wine across all vintages, e.g. 1131644
    • LWIN16/LWIN18: automatically truncated to LWIN11
  3. Click Start

Example:

11316442021 11084042019 1131644

LWIN (Liquid Wine Identifier Number) is the global standard for identifying wines. You can find LWIN codes on Liv-ex, Wine-Searcher, or your wine management software.

From the MrBridge wine suite

Built by MrBridge. More on this Wine-Searcher tool and the other MrBridge scrapers. See it applied in Champagne Hidden Gems 2026.

How do I configure the scraper?

ParameterTypeDefaultDescription
inputTypestringauto-detectedHow wines are identified: wineNames, urls or lwins. Auto-detected if omitted
wineNamesarray-Wine names to search on Wine-Searcher (max 500)
urlsarray-Direct Wine-Searcher URLs (max 500)
lwinsarray-LWIN codes, string or number format (max 500)
targetCurrencystringUSDISO code every price is converted to in cheapestPriceConverted. 30 currencies available. Leave it out and you get US Dollars

Example: Search by wine name

{
"inputType": "wineNames",
"wineNames": [
"Domaine Leflaive Puligny-Montrachet Les Pucelles 2020",
"Petrus 2015",
"Opus One 2019"
]
}

Example: Scrape by LWIN codes, priced in euros

{
"inputType": "lwins",
"lwins": ["11316442021", "11084042019", "1131644"],
"targetCurrency": "EUR"
}

Output example

The Overview export starts with a stable 23-column core, from inputValue through targetCurrency. Publication-specific criticScores/<publication> columns follow as a variable tail, so their number depends on the critics present in that batch. Read CSV fields by header, not by total column count.

The output inputType reports the route actually used to resolve that row. A wine submitted by name can therefore show lwin when the Actor upgrades it to a more reliable identifier lookup; it does not mean your input mode was misread.

{
"inputValue": "11316442021",
"inputType": "lwin",
"status": "ok",
"wineSearcherUrl": "https://www.wine-searcher.com/find/lwin11316442021",
"wineName": "2021 Domaine Jean-Claude Bachelet et Fils Blanchot du Dessus",
"appellation": "Chassagne-Montrachet Premier Cru, France",
"score": 92,
"criticReviewsCount": 2,
"style": "White - Buttery and Complex",
"grapeVariety": "Chardonnay",
"vintage": 2021,
"labelImageUrl": "https://www.wine-searcher.com/images/labels/12/16/11921216.jpg",
"criticReviews": [
{ "author": "Jasper Morris - Inside Burgundy", "score": 90 },
{ "author": "Robert Parker The Wine Advocate", "score": 95 }
],
"criticScores": {
"Jasper Morris - Inside Burgundy": 90,
"Robert Parker The Wine Advocate": 95
},
"cheapestPriceAmount": 459.76,
"cheapestPriceCurrency": "EUR",
"cheapestPriceConverted": 496.54,
"targetCurrency": "USD",
"cheapestPriceEur": 459.76,
"cheapestPriceMerchant": "Lay & Wheeler Wine Merchants",
"bottlesPerUnit": 1,
"offersCount": 5,
"offersPages": 1,
"wineryName": "Jean-Claude Bachelet",
"wineryUrl": "https://www.wine-searcher.com/merchant/22937-jean-claude-bachelet",
"winePopularity": "2,622nd",
"winePopularityRank": 2622,
"scrapedAt": "2025-03-07T10:00:00.000Z"
}

A row that did not produce a wine carries the same status field with a different value, plus error explaining what happened in plain language:

{
"inputValue": "Chateau Nonexistent 1999",
"inputType": "wineName",
"status": "not_found",
"wineSearcherUrl": "https://www.wine-searcher.com/find/Chateau+Nonexistent+1999",
"error": "Redirect led to another results page - no direct wine page found",
"targetCurrency": "USD",
"scrapedAt": "2025-03-07T10:00:00.000Z"
}

How to read a result

status is the one field to filter on. It has exactly seven values and every row carries one:

statusWhat it meansCharged
okWine extracted with non-empty dataYes
not_foundNo wine page on Wine-Searcher for this inputNo
blockedWine-Searcher refused the request after retriesNo
timeoutThe request for this wine expiredNo
parse_emptyPage fetched, nothing extractable from itNo
invalid_inputMalformed LWIN, wrong-domain URL or empty nameNo
failedProcessing or an upstream service failed, read error for the detailNo

The vocabulary is fixed. A new failure mode gets a new value and a changelog entry, never a free-text status, so a filter you write today keeps working. Each value states only what we can actually establish: a request that came back with a service error is failed rather than blocked, because we cannot tell you Wine-Searcher refused it when it did not.

How much does it cost?

TierCostWhat you get
Per wine$0.025/wineCharged only when a wine is genuinely extracted
Free tier$5 free credits/month~200 wines for free every month
Starter plan$29/month~1,160 wines/month

This Actor uses Apify's pay-per-event pricing with a success-only billing rule. A wine record is submitted for billing as it is written, through Actor.pushData(row, 'wine-extracted'), so the platform decides whether the row can be charged before the row lands. Only a non-empty wine record is ever submitted. The write and the charge are two steps inside that one call and not a transaction, which is why a run that hits a delivery problem stops rather than continuing (see the reconciliation note below). No setup fee, no monthly minimum. Start with $5 free credits.

Estimates based on event pricing only. Actual costs may include minimal platform compute fees. The free $5 credit covers both.

Cost estimates

WinesCost
10$0.25
100$2.50
500$12.50

What you pay for vs what you don't

ScenarioPushed to dataset?Charged $0.025?
Wine successfully extracted (full data)✅ Yes (status: "ok")✅ Yes
Wine not found on Wine-Searcher✅ Yes (status: "not_found")Free
Page returned empty / parse-empty (site change canary)✅ Yes (status: "parse_empty")Free
Blocked by anti-bot after retries✅ Yes (status: "blocked")Free
Network or scraping service error✅ Yes (status: "failed")Free
Timeout on a single wine✅ Yes (status: "timeout")Free
Invalid input (malformed LWIN, wrong-domain URL)✅ Yes (status: "invalid_input")Free
Run aborted by user / migration / soft deadlinepartial dataset preservedonly paid wines counted

Check your bill against your data. On a run that finishes normally, the number of rows with status: "ok" is the number of charged events for that run: one ok row, one billed event, and no other status is ever billed. So a reconciliation is a single count:

billed = sum(1 for w in wines if w["status"] == "ok")

That equality holds by construction rather than by promise. An ok row is submitted for billing as it is written, so the platform decides whether it can be charged before the row lands. If you set a maximum total charge and the run reaches it, the remaining wines are not delivered at all rather than delivered unbilled, and the run says so in its log.

A run that ends in failure is the one case where the counts may differ. Writing a row and charging for it are two steps inside a single call, not a transaction. When one of those calls fails, the Actor stops launching new work, but the wines already being processed keep going: one or more writes already in flight may have stored an ok row while its matching charge cannot be confirmed from inside the run. The Actor does not paper over it. The run fails rather than continuing with a dataset that no longer matches your invoice, and the log names every wine affected. Everything already written is kept. If a run of yours ever ends this way and the counts do not add up, open the Actor's Issues tab with the run ID and it will be sorted out.

To continue from there, open the failed run in the Apify Console and click Resurrect. A resurrected run restarts on the same dataset, so the wines already delivered are detected and skipped, and only the rest are scraped and billed. Starting a new run does the opposite: it gets a new, empty dataset, so it has no way of knowing what the failed run delivered and will scrape and bill your whole list again.

Tips for best results

  • Use LWIN codes when available. They're the most reliable input mode, with zero ambiguity. Otherwise include the full producer name + vintage year in wine names ("Petrus 2015", not "Petrus").
  • POS / inventory lists: paste as-is. Category prefixes, bottle sizes and commas are stripped automatically.
  • Pick your currency once, in the Target Currency field. Every price then comes back converted in cheapestPriceConverted, at a single live rate fetched at the start of the run, so the whole batch is comparable. The original cheapestPriceAmount and cheapestPriceCurrency are preserved, and cheapestPriceEur still gives you euros whatever you selected.
  • Export the Overview view for spreadsheets. Its first 23 columns are a stable core: popularity is in columns 5 and 6, and prices start at column 13. The criticScores/<publication> columns come after that core and vary with the publications found in each batch.
  • Know when a row was reused. By default, an extraction made within the previous 30 days may be served again. The all-fields data keeps the original scrapedAt timestamp, while the Overview deliberately omits it; the run log reports how many rows came from an earlier extraction and how many inputs required source fetching.
  • Keep the default timeout (4 h). A measured 500-wine production batch completed in 2 h 09 on 25 August 2026, which leaves a wide margin under the 4 h ceiling. Your own runs will vary with how many of your wines Wine-Searcher has to search for by name, so treat this as an order of magnitude rather than a guarantee.

Integrate into your workflow

Push results into Google Sheets, Airtable, your DB, or call the actor from your own code. Common patterns below.

Programmatic API call

Use the Apify API or the official client libraries. Get your token from Settings → Integrations.

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("mrbridge/wine-searcher-scraper-from-list").call(run_input={
"inputType": "lwins",
"lwins": ["11316442021", "11084042019"],
"targetCurrency": "USD",
})
wines = client.dataset(run["defaultDatasetId"]).list_items().items
# Keep the rows that produced a wine. This is also the count you were billed for.
extracted = [w for w in wines if w["status"] == "ok"]

The same pattern works in Node.js (ApifyClient), or via raw cURL against /v2/acts/{actorId}/run-sync-get-dataset-items for batches under 50 wines (300 s sync limit).

Dataset export formats

For spreadsheets, ask for the Overview view. Its first 23 columns form a stable core: winePopularity and winePopularityRank are columns 5 and 6, and cheapestPriceAmount starts the price block at column 13. The publication-specific criticScores/<publication> columns follow that core as a variable tail. The view omits the positional criticReviews array, but its total width still depends on which critics appear in the batch.

https://api.apify.com/v2/datasets/{DATASET_ID}/items?view=overview&format=csv

The same view is available on the Dataset tab of any run, and on the run's Output tab as a ready-made link. For everything else, append ?format= to the dataset URL: json (default), csv, xlsx, xml, jsonl. Filter fields with ?fields=wineName,status,cheapestPriceConverted or exclude with ?omit=wineSearcherUrl,inputType.

No-code integrations

Connect this actor to your tools without writing code via the Integrations tab in the Apify Console:

PlatformSetup
Google SheetsAuto-export results to a sheet; map wineName, score, cheapestPriceAmount and run on a schedule
AirtableSync wine data to an Airtable base with field mapping
ZapierTrigger Zaps on Run succeeded → push to 5,000+ apps
MakeVisual workflows: scrape → transform → insert into DB
n8nSelf-hosted workflow automation with the Apify trigger node

See the Apify Integrations docs for full setup.

Scheduled runs and webhooks

Schedule recurring runs (Apify Console → Schedules) using cron, e.g. 0 2 * * * for daily at 2 AM UTC or 0 8 * * 1 for weekly on Monday. Combine with a webhook (Integrations tab → Run succeeded) to push the dataset to your endpoint when each run finishes. No polling needed.

Handling catalogs larger than 500 wines

Split your list into batches of 500 and chain the runs:

batches = [all_lwins[i:i+500] for i in range(0, len(all_lwins), 500)]
for batch in batches:
client.actor("mrbridge/wine-searcher-scraper-from-list").call(
run_input={"inputType": "lwins", "lwins": batch},
)

Troubleshooting

"Wine not found" in results

  • Check for typos in the wine name
  • Include the full producer name (e.g., "Domaine Leflaive Puligny-Montrachet" instead of "Puligny-Montrachet")
  • Add or remove the vintage year
  • Very rare or brand-new wines may not be in Wine-Searcher's database
  • The result will carry "status": "not_found". No charge applies.

Prices differ from what I see on Wine-Searcher

  • Prices reflect the UK fine-wine merchant market (the deepest source of offers, including in-bond pricing) and the cheapest offer available at scrape time, which changes as merchants update stock and pricing
  • Use cheapestPriceConverted for a figure in the currency you selected, or cheapestPriceEur for euros, both comparable across wines regardless of the merchant's local currency
  • Auctions, pre-arrival and "by request" offers are always excluded

The converted price column is empty

  • The row still names the currency you asked for in targetCurrency. An empty cheapestPriceConverted means there was no amount to convert, or no live rate available for that pair during the run.
  • Nothing is ever converted at a stale or guessed rate. An empty cell is the honest answer, and cheapestPriceAmount with cheapestPriceCurrency still gives you the merchant's own figure.

Sorting the popularity column gives nonsense

  • Sort on winePopularityRank, the integer, not on winePopularity, which is the published string with its ordinal suffix and thousands separator
  • A smaller rank is a better rank. An unknown rank is an empty cell rather than a zero, so it never sorts to the top.
  • Use LWIN codes or full Wine-Searcher URLs for zero-ambiguity matching
  • Include the full domaine name and vintage year in name searches

Blocked by Wine-Searcher (403 errors)

  • Use wine names (wineNames mode) instead of manual URLs. The actor handles encoding and search optimization automatically.
  • If using URLs, avoid adding country/currency filters (/usa/usd); they increase blocking risk.
  • Retries and request pacing are handled automatically; transient blocks usually clear on a re-run.

Run timed out

The default 4 h timeout is sized for the 500-wine run limit at the target-friendly default concurrency of 6. A measured 500-wine batch took 2 h 09 in August 2026. If your run reaches the 4 h timeout, inspect its log for repeated upstream failures or interruptions. Split larger catalogs across multiple runs instead of raising the per-run batch size.

Which bottle format is used for prices?

Standard 75cl bottles. If no 75cl offer exists, falls back to 62.5cl (Tokaji, dessert wines) then 50cl. Auctions, pre-arrival and "by request" offers are always excluded. Case listings are auto-divided to per-bottle (see bottlesPerUnit).

FAQ

Does Wine-Searcher have an official API? Yes, but it's expensive and restricted. This actor provides a pay-per-event alternative at $0.025/wine with no monthly commitment.

How fast is the scraper? The actor scrapes 6 wines in parallel by default - a conservative pace that keeps blocks under control on Wine-Searcher - at roughly 3–4 wines per minute. The default of 6 is the recommended balance; power users calling the actor via the API can override maxConcurrency (1–10) to tune throughput.

What are LWIN codes and where can I find them? LWIN (Liquid Wine Identifier Number) is the wine industry's universal identification system managed by Liv-ex. LWIN7 identifies a wine regardless of vintage; LWIN11 adds the vintage year. You can look up LWINs on Liv-ex, Wine-Searcher itself, or your wine management platform.

Is there a rate limit? No. Built-in rate limiting and retry logic handle blocking automatically, and concurrency is auto-optimised for the batch size.

Why is the cheapest price sometimes lower than what I see on Wine-Searcher? The actor normalizes case listings to per-bottle pricing. If a merchant lists "Case of 12, €408" on Wine-Searcher, the actor returns cheapestPriceAmount: 34 (= €408 ÷ 12) and sets bottlesPerUnit: 12. Prices are always per 75cl bottle as documented. To reconstruct the case price, multiply cheapestPriceAmount × bottlesPerUnit.

Which currency do prices come back in? The merchant's own currency in cheapestPriceAmount and cheapestPriceCurrency, plus a conversion to whichever of the 30 ISO currencies you selected in cheapestPriceConverted. US Dollars if you select nothing. cheapestPriceEur is always euros, whatever you selected, so anything already reading it keeps working. One exchange rate is fetched at the start of each run and applied to the whole batch, which is what makes the rows comparable with each other.

How do I tell a real result from a failure? Read status. A row with status: "ok" is a wine that was extracted, and it is the only kind of row that is billed. Any other value tells you what went wrong, with error giving the plain-language detail beside it. You never have to test whether a field is missing.

What is the difference between blocked, timeout and failed? They say how much we actually know. blocked means Wine-Searcher itself refused the request. timeout means the request expired. failed covers everything else that went wrong on our side or on a service between us and the site, where naming a specific cause would be a guess. In all three cases the row is free and error carries the detail.

Why does my CSV have a different number of columns from one run to the next? The all-fields export flattens criticReviews by position. The Overview view replaces that unstable block with a stable 23-column core followed by criticScores keyed by publication. Each critic column is named and sortable, but the critic tail is still variable: a batch containing more publications produces more columns. Build fixed imports against the first 23 headers and accept the remaining criticScores/* columns dynamically.

Can I send LWIN codes as numbers or omit the inputType field? Yes to both. Numbers and strings both work for LWINs. If inputType is omitted, the actor auto-detects from whichever array is populated (lwins, urls, or wineNames).

Is my data stored anywhere outside my Apify account? No. Results are stored only in your Apify dataset (default 31-day retention, fully under your control). Nothing is shared with third parties.

Can I export to Google Sheets, Excel, or my database? Yes. CSV/Excel/JSON downloads from the Dataset tab, automated push via the Google Sheets/Airtable/Zapier/Make/n8n integrations, or programmatic access via the Apify API. For spreadsheet work, pick the Overview view first. See the Integrate section above.

Resources

What this Actor extracts. This Actor extracts only publicly available data displayed on Wine-Searcher.com, the same information any visitor sees when browsing the site. It does not bypass paywalls, log into accounts, scrape private user data or extract personal information.

Your responsibilities as a user.

  • Use the extracted data in compliance with applicable laws in your jurisdiction (data protection, copyright, fair-use)
  • Respect Wine-Searcher's Terms of Service
  • Do not redistribute the raw scraped content as a competing price-comparison product
  • Aggregated insights, internal pricing intelligence, and integration into your own catalog are typical legitimate uses

Affiliation. This tool is independent. It is not affiliated with, endorsed by, or sponsored by Wine-Searcher, Liv-ex, or any wine merchant.

Data minimization. The Actor stores results only in your own Apify dataset (default 31-day retention, fully under your control). No data is shared with third parties or transmitted outside the Apify run.

License. Provided as-is for personal and commercial use under standard Apify Store terms.

Feedback

This Actor is actively maintained, and every reported issue is tracked and addressed. If you spot a bug, a wine that returns the wrong popularity, or a feature you'd like to see, open a thread on the Actor's Issues tab in the Apify Console. Reviews on the Apify Store help us prioritise the roadmap, so if the Actor saved you time, please consider leaving one.

Built with Apify.