
Congress Stock Trades Scraper
scrape.ly/store/querystone/congress-trades-scraperNewsBusiness
4 monthly users

Look up wines and spirits on Wine-Searcher by name, URL or LWIN code: critic score and reviews, average and cheapest price per bottle in your market, merchant offers, producer, region, style, grape and vintages.
Look up wines and spirits on Wine-Searcher by name, Wine-Searcher URL or LWIN code and get the critic score and critic reviews, the average and the cheapest price per bottle in your market, the merchant offers, producer, region, style, grape, drinking window and every vintage with its score. Paste a list from your shop or cellar system and get one clean row per wine, in seconds, with no account or login.
Petrus 2015), Wine-Searcher wine page links into Wine-Searcher URLs, or LWIN codes into LWIN codes. You can mix all three.| Field | What it does |
|---|---|
wineNames | Wine or spirit names, e.g. Opus One 2019 or Buffalo Trace Bourbon. Add the producer and vintage for the best match. |
urls | Wine-Searcher wine pages (https://www.wine-searcher.com/find/...). |
lwins | LWIN11 codes (wine and vintage), LWIN7 codes (wine, all vintages); LWIN16 and LWIN18 are shortened to LWIN11. |
maxOffersPerWine | Offers to keep in each wine's offers list (default 10). |
bestMatch | When a name matches several wines, save Wine-Searcher's first match (default on). |
market | Country whose shops and prices are shown (default US). |
targetCurrency | Currency for cheapestPriceConverted (default USD). |
browserFallback | Open pages the site keeps refusing in a hosted browser (default on). |
{
"wineNames": ["Petrus 2015", "Opus One 2019", "Dom Perignon 2013"],
"lwins": ["11084042019", "1131644"],
"maxOffersPerWine": 10,
"market": "GB",
"targetCurrency": "EUR"
}
One row per wine found. Main fields:
| Field | Description |
|---|---|
wineName, vintage, wineryName | The wine, its vintage (null for an all-vintages page) and the producer |
appellation, region, regionPath, country | Where it comes from, most specific region first |
style, grapeVariety, spiritType | Style, grape or blend, and the type of spirit for spirits |
score, criticReviewsCount, criticScores, criticReviews | Aggregated critic score (0-100), number of scores, scores by publication, and each review with its note |
userRating, userRatingsCount | User rating out of 5 and the number of ratings |
averagePrice, averagePriceCurrency | Wine-Searcher's average price per 750ml, excluding tax |
cheapestPriceAmount, cheapestPriceCurrency, cheapestPriceConverted | Cheapest price per 750ml in the market, and converted to your currency |
cheapestPriceMerchant, cheapestPriceMerchantCountry, cheapestPriceShopUrl, bottlesPerUnit | Who sells it at that price, and whether it is a case |
offersCount, offers | Number of offers in the market, and the offers themselves |
foodPairing, classification, drinkingWindow, alcoholAbv, sweetness, closure, details | Product details as shown |
vintages | Every vintage with its critic score, average price and page link |
matchType, matchCount | direct, or bestMatch when the name matched several wines |
labelImageUrl, wineSearcherUrl, wineryUrl, market, scrapedAt | Links, the market used and when it was read |
Example (from a real run, trimmed):
{
"inputValue": "Petrus 2015",
"inputType": "wineName",
"status": "ok",
"matchType": "direct",
"wineName": "2015 Petrus",
"vintage": 2015,
"wineryName": "Petrus",
"appellation": "Pomerol, France",
"regionPath": "Pomerol / Bordeaux / France",
"country": "France",
"style": "Red - Savory and Classic",
"grapeVariety": "Merlot",
"score": 97,
"criticReviewsCount": 21,
"criticScores": {
"Jane Anson - Inside Bordeaux": 98,
"Decanter": 96,
"Wine Spectator": 96,
"Robert Parker The Wine Advocate": 100
},
"criticReviews": [
{"author": "JancisRobinson.com", "score": null, "vintage": 2015, "note": "Tasted: Feb 2025. Tasted blind. Very transparent. Hint of..."},
{"author": "Jane Anson - Inside Bordeaux", "score": 98, "vintage": 2015, "note": null}
],
"userRating": 5,
"userRatingsCount": 31,
"averagePrice": 5933,
"averagePriceCurrency": "USD",
"cheapestPriceAmount": 4150,
"cheapestPriceCurrency": "USD",
"cheapestPriceConverted": 4150,
"targetCurrency": "USD",
"cheapestPriceMerchant": "GRW Wine Collection",
"cheapestPriceMerchantCountry": "USA",
"bottlesPerUnit": 1,
"offersCount": 24,
"market": "US",
"drinkingWindow": "2024-2060",
"vintages": [
{"vintage": 2025, "score": 98, "averagePrice": 6795, "url": "https://www.wine-searcher.com/find/petrus+pomerol+bordeaux+france/2025"}
],
"offers": [
{
"merchant": "GRW Wine Collection",
"merchantLocation": "CA (ships to VA)",
"merchantCountry": "USA",
"price": 4150,
"pricePer750ml": 4150,
"currency": "USD",
"taxNote": "ex. sales tax",
"bottleSize": "Bottle (750ml)",
"vintage": 2015,
"offerTypes": [],
"title": "Petrus 2015 750mL",
"shopUrl": "https://grwwine.com/products/petrus-2015-750ml"
}
],
"labelImageUrl": "https://www.wine-searcher.com/images/labels/14/90/11841490.jpg",
"wineSearcherUrl": "https://www.wine-searcher.com/find/petrus+pomerol+bordeaux+france/2015",
"scrapedAt": "2026-10-21T22:12:00.449Z"
}
Inputs without a result (not found, invalid or refused) are not saved as rows and are not charged. The run's OUTPUT record lists each of them with the reason.
You pay $17.00 per 1,000 wines ($0.017 per wine found). Wines that are not found, invalid inputs and duplicates cost nothing.
Platform usage (compute, the residential proxy traffic and, for the few pages the site refuses, the hosted browser) is billed on top. In our tests 1,000 wines used about $0.18 of platform usage, 10,000 wines about $2.14 and 10 wines less than $0.01.
Is it legal to scrape Wine-Searcher? The scraper reads public wine pages that anyone can open without an account. Check Wine-Searcher's terms and your local laws for your use, and don't use the data to identify private people.
Do I need a Wine-Searcher account, an API key or my own proxy? No. No login is used, and proxies are included: residential exits in the market's country by default.
How many wines can I look up? As many as you like in one run; there is no cap on the list. Wines are looked up in parallel. In our tests 10 wines took about 10 seconds, 1,000 wines about 3 minutes and 10,000 wines about 56 minutes.
Why is a field empty?
Wine-Searcher doesn't show every detail for every wine: spirits have no grape or vintage, new or rare wines may have no critic score, average price or offers in your market. When no shop in your market sells a wine, Wine-Searcher shows offers from other countries and the row says so in offersExpandedWorldwide. When the vintage has no offers at all, Wine-Searcher shows other vintages (offersOtherVintages); the cheapest price then stays empty instead of quoting another vintage.
Why do US prices differ a little between runs? Wine-Searcher shows US visitors the shops that ship to their state, and each run may exit from a different state. Pick another market for country-wide offers.
Can I schedule it or use the API? Yes. Save your list as a task, schedule it daily or weekly, and read the results through the API or an integration.
offersCount still gives the full number.OUTPUT record and are not charged.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
wineNamesarrayOptionalWine names
Wines to look up by name, one per line. Add the producer and the vintage for the best match, e.g. 'Petrus 2015' or 'Domaine Leflaive Puligny-Montrachet Les Pucelles 2020'. Spirits work too ('Buffalo Trace Bourbon'). Names exported from a shop or cellar system can be pasted as they are: bottle sizes and commas are cleaned up. Wine-Searcher URLs and LWIN codes pasted here are recognised as well.
urlsarrayOptionalWine-Searcher URLs
Wine pages on wine-searcher.com, one per line, e.g. https://www.wine-searcher.com/find/opus+one/2019. The wine and vintage in the URL are used; the shop location comes from the Market setting below.
lwinsarrayOptionalLWIN codes
LWIN codes (the wine trade's standard wine identifiers), one per line: LWIN11 for a wine and vintage (e.g. 11084042019) or LWIN7 for a wine across vintages (e.g. 1131644). LWIN16 and LWIN18 codes are shortened to LWIN11.
maxOffersPerWineintegerOptionaldefault 10Max offers per wine
How many merchant offers to save in each wine's 'offers' list, cheapest per bottle first as Wine-Searcher sorts them. Wine-Searcher shows visitors up to about 50 offers per wine, so that is the most a wine can have. 0 saves no offer list (the cheapest price, merchant and offer count are always saved).
Name matching, the market whose shops and prices you get, currency conversion and the browser fallback.
bestMatchbooleanOptionaldefault trueUse the best match for ambiguous names
When a name matches several wines (e.g. 'Kistler Chardonnay'), save Wine-Searcher's first match, with the vintage from your name when it has one. The row says so in 'matchType' and 'matchCount'. Off: such names are reported as not found.
marketenumOptionaldefault "US"Market
Country whose shops, offers and prices are shown. When no shop there sells the wine, Wine-Searcher widens the search to other countries (the row says so in 'offersExpandedWorldwide').
targetCurrencyenumOptionaldefault "USD"Convert the cheapest price to
Adds 'cheapestPriceConverted': the cheapest price per 750ml bottle converted to this currency at the latest European Central Bank reference rate. The original price and its currency are always kept.
browserFallbackbooleanOptionaldefault trueUse a browser for refused pages
Wine-Searcher's bot protection refuses some plain requests even after retries on fresh exits. With this on, those pages are opened in a hosted browser instead, which passes the protection (billed as browser usage, only for those pages). Off: such wines are reported as failed.
Residential exits in the market's country are used by default: Wine-Searcher refuses most datacenter addresses after a few pages.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Residential proxies are used by default and their country always follows the Market setting. Datacenter proxies can be chosen for the US market; when Wine-Searcher refuses them, the run switches to residential exits on its own.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| inputValue | string | The wine name, URL or LWIN code you entered. |
| inputType | string | How the input was read: wineName, url or lwin. |
| status | string | Always 'ok' for a saved wine. Inputs without a result are listed in the run's OUTPUT record. |
| matchType | string | 'direct' when the input led straight to the wine's page; 'bestMatch' when the name matched several wines and Wine-Searcher's first match was taken. |
| matchCount | number | null | How many wines the name matched when the best match was taken. |
| wineName | string | null | Wine name as Wine-Searcher shows it, with the vintage first when there is one. |
| vintage | number | null | Vintage year; null for a page covering all vintages or a non-vintage wine. |
| wineryName | string | null | Producer, winery or distillery. |
| appellation | string | null | Appellation and country. |
| region | string | null | Most specific region. |
| regionPath | string | null | Region hierarchy, most specific first. |
| country | string | null | Country of origin. |
| style | string | null | Wine style. |
| grapeVariety | string | null | Grape variety or blend. |
| spiritType | string | null | Type of spirit for spirits (e.g. Bourbon). |
| score | number | null | Wine-Searcher's aggregated critic score (0-100). |
| criticReviewsCount | number | null | Number of critic scores behind the aggregated score. |
| criticScores | object | null | Critic scores keyed by publication, for one column per critic in spreadsheets. |
| criticReviews | array | null | Critic reviews shown on the page: author, score, vintage and the short note when there is one. |
| userRating | number | null | Average user rating (out of 5). |
| userRatingsCount | number | null | Number of user ratings. |
| averagePrice | number | null | Wine-Searcher's average price per 750ml bottle, excluding tax. |
| averagePriceCurrency | string | null | Currency of the average price. |
| cheapestPriceAmount | number | null | Lowest price per 750ml bottle among the market's offers (case prices divided per bottle; auctions, pre-arrival, en primeur and by-request offers are only used when nothing else is listed). |
| cheapestPriceCurrency | string | null | Currency of the cheapest price. |
| cheapestPriceConverted | number | null | Cheapest price per 750ml converted to the target currency. |
| targetCurrency | string | null | Currency of the converted price. |
| cheapestPriceMerchant | string | null | Merchant with the cheapest price. |
| cheapestPriceMerchantCountry | string | null | Country of that merchant. |
| cheapestPriceShopUrl | string | null | Link to that merchant's listing. |
| cheapestPriceOfferTypes | array | null | Offer type of the cheapest offer (empty for a normal retail offer). |
| bottlesPerUnit | number | null | Bottles in the cheapest listing (1 = single bottle; more = a case, price already per bottle). |
| offersCount | number | null | Number of prices Wine-Searcher lists for the wine in this market (or in the widened search when the market or vintage had none). |
| offersExpandedWorldwide | boolean | null | True when the market had no offers and Wine-Searcher showed other countries' offers instead. |
| offersOtherVintages | boolean | null | True when the vintage had no offers and Wine-Searcher showed other vintages' offers instead; the cheapest price then stays empty rather than using another vintage's price. |
| market | string | Market (country) whose shops and prices were shown. |
| currency | string | null | Currency the page showed prices in. |
| foodPairing | string | null | Suggested food pairing. |
| classification | string | null | Classification (e.g. Premier Cru). |
| drinkingWindow | string | null | Suggested drinking window. |
| alcoholAbv | number | null | Alcohol by volume, in percent. |
| sweetness | string | null | Sweetness. |
| closure | string | null | Closure type. |
| details | object | null | All product details shown (maturation, oak, ownership, winemaker, dosage...). |
| vintages | array | null | Other vintages of the wine with their critic score, average price and page link. |
| offers | array | null | Merchant offers, cheapest per bottle first: merchant, location, price, price per 750ml, currency, size, vintage, offer type, tax note, listing title and shop link. |
| labelImageUrl | string | null | Label image. |
| wineSearcherUrl | string | null | Wine page on Wine-Searcher. |
| wineryUrl | string | null | Producer page on Wine-Searcher. |
| regionUrl | string | null | Region page on Wine-Searcher. |
| styleUrl | string | null | Style page on Wine-Searcher. |
| grapeUrl | string | null | Grape page on Wine-Searcher. |
| scrapedAt | string | When the page was read (UTC). |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Wine | One wine found on Wine-Searcher and saved with its scores, prices, offers and details. | $0.017 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('shelfbright/wine-searcher-scraper').call({
"wineNames": [
"Petrus 2015",
"Opus One 2019",
"Dom Perignon 2013"
],
"maxOffersPerWine": 10,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run shelfbright/wine-searcher-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=shelfbright/wine-searcher-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
No examples yet
The developer hasn't published example inputs for this actor.

Scrape Google Maps places for any search term and city, with no code or with one API call. A real run, its output, its log and its exact cost, plus the limits and the legal side.
Read the article
Paste an Amazon search or product URL into a ready-made Actor and get one row per product with price, ASIN, rating and review count. This guide covers the no-code steps, the API, ZIP code pricing, a real run and its cost.
Read the article
Scrape Google search results by query and country and get each results page as JSON: organic results with positions, People Also Ask and related searches. Run it without code or from Python, with a real run, the cost per page and Google's terms.
Read the articleScrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.