# Liquor Legends Product Scraper (`mrdoe/liquor-legends-actor`) Actor

Scrapes product listings (price, brand, availability, image) from liquorlegends.com.au category and search pages, paging through the full result set.

- **URL**: https://apify.com/mrdoe/liquor-legends-actor.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

![Liquor Legends Product Scraper hero](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/liquor-legends-actor--hero.png)

### What does Liquor Legends Product Scraper do?

**Liquor Legends Product Scraper** collects clean, structured product data from any category or search results page on [liquorlegends.com.au](https://liquorlegends.com.au), an independent Australian liquor retailer group. Give it a listing URL — a beer, wine, or spirits category, or a search results page — and it pages through the full result set to return structured data for every product, not just the first screen.

Running on the Apify platform means automatic proxy handling, one-click scheduling for recurring price checks, dataset export in multiple formats, and an API for pulling results straight into your own systems — no infrastructure to manage.

### Why use Liquor Legends Product Scraper?

- **Price monitoring** — track prices and sale status across the Liquor Legends catalog over time.
- **Competitor research** — benchmark your own pricing against Liquor Legends's listed prices.
- **Catalog and product research** — pull clean product names, images, sizes, and availability to enrich your own product database.
- **Assortment analysis** — see which products Liquor Legends stocks in a given category.
- **Recurring monitoring** — schedule runs to keep price and availability data current.

Designed for practical, cost-efficient product data collection: clean structured output without unnecessary data, and control over run size with `maxItems`.

### What data can you extract?

![Liquor Legends Product Scraper dataset output](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/liquor-legends-actor--output.png)

![Liquor Legends Product Scraper data fields](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/liquor-legends-actor--fields.png)

- SKU / product ID
- Product name
- Product URL
- Image URL
- Size / pack size
- Price and currency
- Availability (in stock / out of stock)
- Sponsored listing flag
- Sale flag
- Source category URL

### How to use it

![How Liquor Legends Product Scraper works](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/liquor-legends-actor--how-it-works.png)

1. Click **Try for free** or **Run** on the Actor page.
2. In **Start URLs**, paste one or more Liquor Legends category or search URLs (e.g. `https://liquorlegends.com.au/beer`).
3. Optionally adjust **Max products per start URL**. Leave it at `0` to collect the entire listing.
4. Click **Start** and wait for the run to finish.
5. Open the **Dataset** tab to preview, filter, and export your results.

### Input Parameters

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `startUrls` | array | Yes | `[{ "url": "https://liquorlegends.com.au/beer" }]` | Category or search listing pages to scrape. Add multiple URLs to scrape several listings in one run. |
| `maxItems` | integer | No | `5` | Maximum products to collect **per start URL**. `0` = no limit — page through the entire listing. |
| `proxyConfiguration` | object | No | Apify Proxy | Proxy settings for the crawl. |

Example input:

```json
{
    "startUrls": [{ "url": "https://liquorlegends.com.au/beer" }],
    "maxItems": 0,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output Data

Each dataset item represents one product. Every start URL you provide gets its own `maxItems` budget, and duplicate products (matched by SKU) are removed automatically as pages are collected.

```json
{
    "sku": "154692",
    "name": "Tradie Zero Carb Mid Lager Can 6X375ML",
    "url": "https://liquorlegends.com.au/beer/tradie-zero-carb-mid-lager-can-6x375ml",
    "imageUrl": "https://assets.liquorlegends.com.au/products/web/thumbs/154692.png",
    "size": "375ML",
    "packSize": "Pack (6)",
    "price": 18.99,
    "currency": "AUD",
    "availability": "InStock",
    "inStock": true,
    "sponsored": true,
    "onSale": false,
    "categoryUrl": "https://liquorlegends.com.au/beer"
}
```

| Field | Description |
| --- | --- |
| `sku` | Liquor Legends's internal product ID. |
| `name` | Full product name, including pack description. |
| `url` | Canonical product page URL. |
| `imageUrl` | Product image URL. |
| `size` | Bottle/can size (e.g. `375ML`), when available. |
| `packSize` | Pack configuration (e.g. `Pack (6)`), when available. |
| `price` | Current listed price. |
| `availability` | Raw availability status reported by the site (`InStock` / `OutOfStock`). |
| `inStock` | Boolean version of `availability`. |
| `sponsored` | Whether the listing is a sponsored/promoted placement. |
| `onSale` | Whether the product is currently marked as on sale. |
| `categoryUrl` | The start URL this product was collected from. |

### Usage Examples

- **Track price changes**: Point `startUrls` at your key categories and schedule a run to see how prices and sale status change over time.
- **Build a competitor price index**: Scrape a set of category URLs, export to CSV, and join against your own catalog by product name.
- **Research a category**: Set `maxItems` to `0` on a single category URL to pull the full assortment for analysis.

### Tips for Best Results

- Start from a specific category or search URL rather than the homepage — scraping is scoped to the listing page you provide.
- Use `maxItems: 0` when you want the full listing; otherwise set a smaller number for quick tests or sampling.
- Provide multiple start URLs to cover several categories in a single run; each gets its own `maxItems` budget.
- Use Apify Proxy if you scrape large volumes or run frequently, to reduce the chance of blocking.

### Integrations

Connect this Actor to Make, Zapier, Google Sheets, Slack, or your own systems via Apify's [integrations](https://apify.com/integrations) and [API](https://docs.apify.com/api/v2), or schedule recurring runs directly from the Apify platform.

### Export Formats

Datasets can be exported as JSON, CSV, Excel, or XML directly from the **Dataset** tab, or pulled programmatically via the Apify API.

### FAQ

**How many products can I collect?**
As many as the listing exposes. Set `maxItems: 0` to collect the full category or search listing.

**Can I scrape a whole category?**
Yes — point a start URL at any category page and the Actor will page through all available products up to your `maxItems` setting.

**Does `maxItems = 0` collect everything?**
Yes, for each start URL. The Actor keeps paging until it reaches the site's last listing page.

**Can I provide multiple URLs?**
Yes. Add multiple entries to `startUrls`; `maxItems` applies separately to each one.

**Are duplicates removed?**
Yes, products are deduplicated by SKU as pages are collected.

**Why can some fields be null?**
Not every product has a clear size or pack size in its name — those fields are `null` when they can't be reliably parsed.

**Can I schedule price monitoring?**
Yes — use the Apify platform's built-in Scheduler to run this Actor automatically on a recurring basis.

**Is cache available?**
Not currently required for this Actor; each run collects fresh data directly from the listing pages you provide.

**Is the data current?**
Data reflects what was published on the site at the time of the run.

**What happens when a product is unavailable?**
Out-of-stock products are still returned with `availability: "OutOfStock"` and `inStock: false` if the site continues to list them; removed products simply won't appear.

### Legal / Responsible Use

This Actor only collects publicly visible product listing data. Users are responsible for complying with Liquor Legends's terms of use, applicable law, and responsible data-use requirements.

### Preview

![Liquor Legends Product Scraper input options](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/liquor-legends-actor--input.png)

# Actor input Schema

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

Category or search listing pages on liquorlegends.com.au to scrape products from, e.g. https://liquorlegends.com.au/beer

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

Maximum number of products to scrape from each start URL. Set to 0 for no limit (page through the full listing).

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

Proxy settings for the crawl. Using Apify Proxy helps avoid anti-bot blocking.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://liquorlegends.com.au/beer"
    }
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `products` (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://liquorlegends.com.au/beer"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/liquor-legends-actor").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://liquorlegends.com.au/beer" }] }

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/liquor-legends-actor").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://liquorlegends.com.au/beer"
    }
  ]
}' |
apify call mrdoe/liquor-legends-actor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdoe/liquor-legends-actor"
        }
    }
}

```

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/cnJZqqDiI6trieNO4/builds/zcyfgUzWWa9E88J5H/openapi.json
