# Liquorland Product Scraper 🍻🍺 (`mrdoe/liquorland-actor`) Actor

Extract product data from liquorland.com.au. Scrape any category or search page for prices, specials, brands, and ratings. Auto-paginates through listings for full category coverage. Ideal for price monitoring, competitor research, and catalog analysis. AU residential proxy included.

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

## Pricing

from $0.80 / 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

![Liquorland Actor hero](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/liquorland-actor--hero.png)

### What does Liquorland Product Scraper do?

**Liquorland Product Scraper** collects clean, structured product data from any category or search results page on [liquorland.com.au](https://www.liquorland.com.au), one of Australia's largest liquor retailers. 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 Liquorland Product Scraper?

- **Price monitoring** — track prices and special/multi-buy offers across the Liquorland catalog over time.
- **Competitor research** — benchmark your own pricing against Liquorland's listed prices.
- **Catalog and product research** — pull clean product names, brands, images, and pack sizes to enrich your own product database.
- **Assortment analysis** — see which brands and products Liquorland stocks in a given category.
- **Recurring monitoring** — schedule runs to keep price and promotion 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?

![Liquorland Actor dataset output](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/liquorland-actor--output.png)

![Liquorland Actor data fields](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/liquorland-actor--fields.png)

- Product ID
- Product name and brand
- Product URL
- Image URL
- Size / pack size
- Price and regular price
- Currency
- Promotion text (e.g. multi-buy offers)
- Whether the product is currently on special
- Promotional badge flag
- Source category URL

### How to use it

![How Liquorland Actor works](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/liquorland-actor--how-it-works.png)

1. Click **Try for free** or **Run** on the Actor page.
2. In **Start URLs**, paste one or more Liquorland category or search URLs (e.g. `https://www.liquorland.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://www.liquorland.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 (Residential, AU) | Proxy settings for the crawl. |

Example input:

```json
{
    "startUrls": [{ "url": "https://www.liquorland.com.au/beer" }],
    "maxItems": 0,
    "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "AU" }
}
```

### Output Data

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

```json
{
    "productId": "2605953",
    "name": "Great Northern Super Crisp Lager Block Can 375mL - Pack (30)",
    "brand": "Great Northern",
    "url": "https://www.liquorland.com.au/beer-and-cider/great-northern-super-crisp-lager-block-can-375ml_2605953",
    "imageUrl": "https://www.liquorland.com.au/-/media/images/products/generic_bundle.ashx?productId=2605953_PACK30",
    "size": "375mL",
    "packSize": "Pack (30)",
    "price": 71,
    "regularPrice": 71,
    "currency": "AUD",
    "promotion": "2 for $114",
    "onSpecial": false,
    "badge": false,
    "categoryUrl": "https://www.liquorland.com.au/beer"
}
```

| Field | Description |
| --- | --- |
| `productId` | Liquorland's internal product ID. |
| `name` | Full product name, including pack description. |
| `brand` | Product brand. |
| `url` | Canonical product page URL. |
| `imageUrl` | Product image URL. |
| `size` | Bottle/can size (e.g. `375mL`), when available. |
| `packSize` | Pack configuration (e.g. `Pack (30)`), when available. |
| `price` | Current listed price. |
| `regularPrice` | Regular price before any discount. Equal to `price` when not on special. |
| `promotion` | Multi-buy or other promotion text shown on the listing (e.g. "2 for $114"), when present. |
| `onSpecial` | Whether the product is currently discounted from its regular price. |
| `badge` | Whether a promotional badge is shown on the listing tile. |
| `categoryUrl` | The start URL this product was collected from. |

### Usage Examples

- **Track weekly specials**: Point `startUrls` at your key categories and schedule a weekly run to see how prices and promotions change.
- **Build a competitor price index**: Scrape a set of category URLs, export to CSV, and join against your own catalog by product name or brand.
- **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.
- Liquorland applies bot protection to non-residential traffic — keep the default Australian residential proxy setting for reliable results.

### 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 Liquorland stops returning new products.

**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 product ID as pages are collected.

**Why can some fields be null?**
Not every product has a promotion, badge, or explicit size — those fields are `null` when the site doesn't show them.

**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?**
If a product is out of stock or removed, it simply won't appear in the listing — the Actor only reports what Liquorland currently displays.

### Legal / Responsible Use

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

### Preview

![Liquorland Actor input options](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/liquorland-actor--input.png)

# Actor input Schema

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

Category or search listing pages on liquorland.com.au to scrape products from, e.g. https://www.liquorland.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. Liquorland applies bot protection to non-residential traffic, so an Australian residential proxy is strongly recommended.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.liquorland.com.au/beer"
    }
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AU"
  }
}
```

# 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://www.liquorland.com.au/beer"
        }
    ]
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdoe/liquorland-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/jbCtS4NRZASQbGSBh/builds/sDtob1aO9T9scSdJK/openapi.json
