# whiskybase-scraper (`jordan-byte/whiskybase-scraper`) Actor

the online store run by Whiskybase, one of the largest whisky communities in the world. Point it at a category page, the "new arrivals" list, or an individual product page, and it returns clean, structured data.

- **URL**: https://apify.com/jordan-byte/whiskybase-scraper.md
- **Developed by:** [Jordan Byte](https://apify.com/jordan-byte) (community)
- **Categories:** Automation, Travel, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Whiskybase Shop Scraper

### What does Whiskybase Shop Scraper do?

Whiskybase Shop Scraper extracts **whisky product data** from [shop.whiskybase.com](https://shop.whiskybase.com/), the online store run by Whiskybase, one of the largest whisky communities in the world. Point it at a category page, the "new arrivals" list, or an individual product page, and it returns clean, structured data - **title, brand, price, availability, tasting notes, images, bottle weight and volume, categories and tags** - ready to download or pipe into another system.

Try it instantly by clicking **Start** with the default input, which scrapes the newest whiskies added to the shop.

Because it runs on the Apify platform, you get API access, one-click scheduling (e.g. run daily to track new listings or price changes), integrations with Zapier/Make/Google Sheets, automatic proxy rotation, and full run monitoring - none of which you get from a script running on your own machine.

### Why use Whiskybase Shop Scraper?

- **Price and availability monitoring** - track whisky prices and stock levels over time to spot deals or restocks.
- **Market research** - build a dataset of bottlings, bottlers, brands, and regions for analysis.
- **Catalog enrichment** - pull tasting notes, images, and specs to enrich your own product listings or app.
- **Collector tooling** - feed a personal or community tracker with new releases from a favorite bottler or region.

### How to use Whiskybase Shop Scraper

1. Click **Try for free** or **Start** on the Actor page.
2. In the **Start URLs** field, add one or more shop.whiskybase.com pages you want to scrape (see [Input](#input) below for exactly which URLs are supported).
3. Optionally adjust **Max items per start URL** and **Scrape full product details**.
4. Click **Start** and wait for the run to finish.
5. Open the **Dataset** tab to browse, filter, and export your results.

### Input

Configure the Actor using the **Input** tab in Apify Console, or by passing a JSON object via the API. The following fields are available:

| Field                  | Type    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ---------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`            | array   | Pages to scrape. **Listing pages** (a category or the "new arrivals" page) must include the page number in the URL, e.g. `https://shop.whiskybase.com/us/new/page1.html` or `https://shop.whiskybase.com/us/whisky/single-malt-whisky/page1.html`. To scrape a filtered category, browse to that filter on the site and copy the resulting URL (including any `?filter[0]=...` parameters). **Product pages**, e.g. `https://shop.whiskybase.com/us/some-product-name.html`, are also supported and are scraped directly. |
| `maxItems`             | integer | Maximum number of products to scrape per start URL. The Actor follows pagination automatically until this limit is reached. Set to `0` for unlimited (default: `5`).                                                                                                                                                                                                                                                                                                                                                      |
| `scrapeProductDetails` | boolean | When `true` (default), the Actor also opens each product's page to collect full tasting notes, stock level, bottle weight/volume, categories, tags, and every product image. When `false`, only the data already shown on the listing page is saved - faster and cheaper.                                                                                                                                                                                                                                                 |
| `proxyConfiguration`   | object  | Proxy settings. Disabled by default since the site does not require a proxy for reliable scraping - enable it only if you notice blocked or failed requests.                                                                                                                                                                                                                                                                                                                                                              |

Example input:

```json
{
    "startUrls": [
        { "url": "https://shop.whiskybase.com/us/new/page1.html" },
        { "url": "https://shop.whiskybase.com/us/whisky/single-malt-whisky/page1.html" }
    ],
    "maxItems": 20,
    "scrapeProductDetails": true,
    "proxyConfiguration": { "useApifyProxy": false }
}
```

### Output

Each scraped product is saved as one item in the dataset. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Example output item (with `scrapeProductDetails` enabled):

```json
{
    "id": 163673767,
    "title": "BenRiach 2015 Signatory Vintage - Oloroso Finish",
    "fulltitle": "Benriach BenRiach 2015 Signatory Vintage - Oloroso Finish",
    "brand": "Benriach",
    "price": 45,
    "currency": "EUR",
    "available": true,
    "stockLevel": 3,
    "url": "https://shop.whiskybase.com/us/benriach-2015-sv-signatory-vintage.html",
    "imageUrl": "https://cdn.webshopapp.com/shops/242291/files/499606940/image.jpg",
    "images": [
        "https://cdn.webshopapp.com/shops/242291/files/499606940/image.jpg",
        "https://cdn.webshopapp.com/shops/242291/files/499609509/image.jpg"
    ],
    "description": "The Un-Chillfiltered Collection from quality bottler Signatory Vintage offers good whiskies at a great price...",
    "weight": 1800,
    "volume": 0,
    "tags": [],
    "categories": [
        { "title": "Single Malt Whisky", "url": "https://shop.whiskybase.com/whisky/single-malt-whisky" },
        { "title": "Scotland", "url": "https://shop.whiskybase.com/regions/scotland" }
    ]
}
```

#### Data table

| Field                 | Description                                                                |
| --------------------- | -------------------------------------------------------------------------- |
| `id`                  | Whiskybase Shop's internal product ID                                      |
| `title` / `fulltitle` | Product title, with and without the brand prefix                           |
| `brand`               | Distillery or bottler brand name                                           |
| `price`               | Price in the shop's active currency                                        |
| `currency`            | ISO currency code                                                          |
| `available`           | Whether the bottle is currently in stock                                   |
| `stockLevel`          | Number of units in stock (detail scrape only)                              |
| `url`                 | Public product page URL                                                    |
| `imageUrl`            | Primary product image                                                      |
| `images`              | All product images (detail scrape only)                                    |
| `description`         | Short tasting-note / product description                                   |
| `content`             | Extended product content, when available (detail scrape only)              |
| `weight` / `volume`   | Shipping weight and bottle volume (detail scrape only)                     |
| `tags`                | Product tags (detail scrape only)                                          |
| `categories`          | Categories the product belongs to, with title and URL (detail scrape only) |

### Pricing / Cost estimation

Whiskybase Shop Scraper is lightweight - it uses fast HTTP requests (no browser) and no proxy is required by default, so it runs cheaply on any Apify plan, including the free tier. A run with the default input (5 items, full details) typically finishes in well under a minute. Scraping with `scrapeProductDetails` enabled uses one extra request per product; disable it if you only need listing-level data (title, brand, price, availability) at a lower cost.

### Tips and advanced options

- Use a lower `maxItems` while testing, then raise it for full production runs.
- Disable `scrapeProductDetails` if you don't need tasting notes, stock level, weight/volume, or the full image gallery - this roughly halves the number of requests.
- Combine multiple category or filter URLs in `startUrls` to cover several whisky types or bottlers in a single run.
- Schedule the Actor to run daily or weekly to track new arrivals or price/availability changes over time.

### FAQ, disclaimers, and support

This Actor only collects publicly available product data from shop.whiskybase.com. You are responsible for ensuring your use complies with the website's Terms of Service and applicable laws in your jurisdiction.

Found a bug or have a feature request? Open an issue on the Actor's **Issues** tab in Apify Console. Need a customized version of this scraper for your specific use case? Reach out via the same Issues tab.

# Actor input Schema

## `startUrls` (type: `array`):

Pages to scrape from shop.whiskybase.com. Two kinds of URLs are supported:<br><br>- <b>Listing pages</b> - a category or the "new arrivals" page. These URLs must include the page number, e.g. <code>https://shop.whiskybase.com/us/new/page1.html</code> for new arrivals, or <code>https://shop.whiskybase.com/us/whisky/single-malt-whisky/page1.html</code> for a whisky category. To scrape a filtered category (e.g. cask strength only), browse to that filter on the site and copy the resulting URL, including any <code>?filter\[0]=...</code> query parameters.<br><br>- <b>Product pages</b> - a single bottle, e.g. <code>https://shop.whiskybase.com/us/some-product-name.html</code>.<br><br>The Actor automatically follows pagination on listing pages until <b>Max items per start URL</b> is reached.

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

Maximum number of products to scrape for each start URL. Set to 0 for unlimited (only recommended for small categories, since it will follow every page of results).

## `scrapeProductDetails` (type: `boolean`):

When enabled, the Actor opens each product's page to collect extra details: full tasting notes, stock level, bottle weight and volume, categories, tags, and all product images. When disabled, only the data already shown on the listing page is saved (title, brand, price, availability, description, one image), which is faster and uses fewer requests.

## `proxyConfiguration` (type: `object`):

The Actor works reliably without a proxy, so this is disabled by default to minimize run costs. Enable it only if you notice blocked or failed requests.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://shop.whiskybase.com/us/new/page1.html"
    }
  ],
  "maxItems": 5,
  "scrapeProductDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://shop.whiskybase.com/us/new/page1.html"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jordan-byte/whiskybase-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 = { "startUrls": [{ "url": "https://shop.whiskybase.com/us/new/page1.html" }] }

# Run the Actor and wait for it to finish
run = client.actor("jordan-byte/whiskybase-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://shop.whiskybase.com/us/new/page1.html"
    }
  ]
}' |
apify call jordan-byte/whiskybase-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jordan-byte/whiskybase-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/sqyfmO48nrCuf0koF/builds/dPNCUhG8cKsFF33Jr/openapi.json
