Caskers Scraper avatar

Caskers Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Caskers Scraper

Caskers Scraper

Scrape Caskers (caskers.com) - US craft wine & spirits online retailer. Search by keyword, browse spirit categories, fetch products by ID or URL, and collect product reviews. Includes prices, bottle size, ABV/proof, tasting notes, ratings, images, and availability.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Scrape Caskers (caskers.com) — one of the largest US online retailers of craft wine & spirits — and get product-level data for whiskey, bourbon, scotch, tequila, rum, vodka, gin, cognac, mezcal, champagne, non-alcoholic drinks and more. Search by keyword, browse spirit categories, fetch products by ID or URL, and pull per-product customer reviews. Includes prices, bottle size, proof/ABV, tasting notes, ratings, review counts, images and stock status. HTTP-only via the public website — no login, no API key, no proxy required.

Data Source

Replacement actor: this actor replaces the former Total Wine & More (totalwine.com) slot. Total Wine was hard-blocked from Apify cloud egress (403 on every path — product API, search, homepage, direct and US-proxy requests). The replacement platform is Caskers (caskers.com), a US craft wine & spirits online retailer in the same category (wine/liquor retail). All pages are served as server-side-rendered Magento 2 HTML over plain HTTPS and are reachable from Apify cloud datacenter egress without a proxy.

Data comes from three public HTML surfaces:

  • Category pageshttps://www.caskers.com/<category>/ (e.g. /spirits/, /spirits/whiskey/bourbon/, /non-alcoholic-drinks/). Each page renders 20–80 product cards plus the total result count. Pagination via ?p=, sort via ?product_list_order=&product_list_dir=, price bands via ?price=, brand via ?brand_dropdown=.
  • Search resultshttps://www.caskers.com/catalogsearch/result/?q=<keyword> — the same product-card grid, with the same pagination and sort controls.
  • Product detail pageshttps://www.caskers.com/<product-slug>/ — rich SSR markup (bottle size, proof/ABV, description, tasting notes, rating summary) plus a schema.org/Product JSON-LD block (brand, SKU, GTIN, aggregate rating, offer price/availability, US states the item cannot ship to, and sample reviews).
  • Reviews endpointhttps://www.caskers.com/review/product/listAjax/id/<productId>/ — per-product customer reviews (title, body, Quality/Value/Price star ratings, author, date).

Caskers has no wine/beer categories (those paths return 404); the catalog is spirits-focused. The REST API (/rest/) is Cloudflare-protected and not used.

What this actor does

  • Five modes: search, byCategory, byProductIds, byUrls, productReviews
  • Complete catalog coverage: ~11,000 product URLs are exposed via the public sitemap; category totals run to 10,000+ spirits
  • Rich product records: price, bottle size, proof/ABV, tasting notes, description, ratings, review counts, gallery images, stock status
  • Filters: sort order, price band, brand
  • Typed error records: failed lookups surface as recordType: "error" entries with the reason
  • Empty fields are omitted

Output per product

  • productId, sku — Caskers entity ID (use for byProductIds / productReviews) + SKU
  • name, brand, category
  • price, currency — final USD price
  • size — bottle size (e.g. 750mL)
  • proof, abv — e.g. 80, 40.0
  • availabilityIn stock / Out of stock
  • rating, reviewCount — customer rating (0–5) and count
  • description, tastingNote
  • gtin
  • restrictedStates[] — US states where this item cannot ship
  • imageUrl, imageUrls[] — CDN product images (cdn.caskers.com)
  • badges[] — e.g. Limited-Edition, PREORDER-NOW
  • sourceUrl, recordType: "product", scrapedAt

Output per review

  • productId, productUrl
  • reviewTitle, reviewContent, reviewAuthor, reviewDate
  • ratings — per-dimension star scores (Quality, Value, Price)
  • overallRating — average of the dimensions
  • sourceUrl, recordType: "review", scrapedAt

Output per error

  • errorTypeinvalidInput / notFound / blocked / rateLimited / httpError / parseError
  • subject — the input that failed
  • message, sourceUrl
  • recordType: "error", scrapedAt

Input

FieldTypeDefaultDescription
modestringsearchsearch / byCategory / byProductIds / byUrls / productReviews
searchQuerystringwhiskeyFree-text keyword (mode=search)
categorystringspiritsCaskers category path (mode=byCategory)
sortBystringrelevancerelevance / nameAsc / nameDesc / priceAsc / priceDesc
priceRangestringanyany / 0-50 / 50-100 / 100-200 / 200-500 / 500-plus (mode=byCategory)
brandIdintCaskers brand_dropdown ID, e.g. 3369 = Hennessy (mode=byCategory)
productIdsarrayNumeric product IDs (mode=byProductIds / productReviews)
productUrlsarrayFull product URLs (mode=byUrls)
maxReviewsPerProductint10Cap on review records per product (mode=productReviews)
maxItemsint50Hard cap on emitted records (1–1000)
limitint20Products per page (20 / 40 / 80)
proxyConfigurationobjectoffOptional Apify AUTO proxy; not needed for normal use

Example: search whiskey, cheapest first

{
"mode": "search",
"searchQuery": "whiskey",
"sortBy": "priceAsc",
"maxItems": 20
}

Example: browse tequila in a price band

{
"mode": "byCategory",
"category": "spirits/tequila",
"priceRange": "50-100",
"sortBy": "nameAsc",
"maxItems": 40
}

Example: fetch specific products by ID

{
"mode": "byProductIds",
"productIds": ["7582", "1023"]
}

Product IDs are the numeric productId values that appear on scraped product records (or data-product-id on category cards) — not SKUs, which live in a different namespace.

Example: collect reviews for a product

{
"mode": "productReviews",
"productIds": ["1023"],
"maxReviewsPerProduct": 10
}

Use cases

  • Price & product intelligence — track whiskey, bourbon and tequila prices across Caskers' 10,000+ item catalog
  • Category benchmarking — compare product counts, price bands and ratings per spirit type
  • Market research — analyze tasting notes, ABV distribution and brand presence in the US craft spirits market
  • Retail dropship / aggregation — enrich a product feed with prices, sizes, images and availability
  • Review mining — pull Quality/Value/Price customer ratings per product for sentiment analysis

FAQ

Is this affiliated with Caskers? No. This is an independent third-party actor that reads publicly served HTML pages from caskers.com.

Do I need a proxy or account? No. All surfaces are public server-rendered HTML. The optional Apify AUTO proxy exists as a fallback only if Caskers starts rate-limiting datacenter IPs.

Why is Total Wine & More mentioned in the README? This actor replaced the Total Wine & More scraper slot: totalwine.com hard-blocks all Apify cloud egress (403 on every endpoint), so the slot was repurposed to Caskers, a US wine & spirits retailer in the same category.

How fresh is the data? Every run fetches pages live — prices, availability and ratings are as of the request moment. Caskers updates its catalog continuously.

Why are some products missing fields? Fields are only emitted when the page actually contains them (e.g. a product with zero reviews has no rating/reviewCount). Empty fields are always omitted.

What does restrictedStates mean? Caskers publishes the US states to which an item cannot ship (from the product's schema.org offer data). Products that ship everywhere simply omit the field.

Are there rate limits? No documented API limits — the actor keeps polite delays between requests and retries with backoff on 429/5xx, auto-escalating on 403.

Which categories are available? Whiskey (bourbon, scotch, Irish, rye, Japanese, moonshine, American single malts), vodka, tequila, rum, gin, brandy, cognac, mezcal, absinthe, liqueur, vermouth, non-alcoholic drinks, champagne & sparkling, plus curated lists (best sellers, limited editions, new arrivals, rare finds, gift sets, price-sliced "under $50/100/200" pages).

How reliable is sortBy: priceAsc / priceDesc? Caskers sometimes prepends a small "featured products" widget to the first category page, which arrives unsorted regardless of the sort parameter. To guarantee the documented sort contract, the actor applies a client-side final sort by price on every listing run — priceAsc/priceDesc output is always price-ordered (records without a visible price sort last).