# 🍾 🍷danmurphys liquor scraper (`mrdoe/danmurphys-liquor-scraper`) Actor

extracts product data — price, brand, rating, and more — from any category, brand, or search results page

- **URL**: https://apify.com/mrdoe/danmurphys-liquor-scraper.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:** Agents, E-commerce, Real estate
- **Stats:** 3 total users, 2 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/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

![danmurphys liquor scraper hero](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/danmurphys-liquor-scraper--hero.png)

### What does Dan Murphy's Product Scraper do?

**Dan Murphy's Product Scraper** extracts product data — price, brand, rating, and more — from any category, brand, or search results page on [danmurphys.com.au](https://www.danmurphys.com.au), Australia's largest liquor retailer. Just give it a listing URL like `https://www.danmurphys.com.au/white-wine/chardonnay` and it returns structured JSON for every product on that page, automatically clicking through the site's "Show more" pagination button to collect as many items as you need.

Because it runs on the Apify platform, you get automatic proxy rotation to avoid blocking, one-click scheduling for recurring price checks, an API for pulling results into your own systems, and full run monitoring — no infrastructure to manage.

### Why use Dan Murphy's Product Scraper?

- **Price monitoring** — track member vs. non-member pricing and special offers across wine, beer, and spirits ranges over time.
- **Market research** — compare brand assortment, ratings, and review counts across categories.
- **Catalog enrichment** — pull clean product names, images, volumes, and SKUs to enrich your own product database.
- **Competitor analysis** — benchmark your pricing against Dan Murphy's listed prices.

### How to use Dan Murphy's Product Scraper

![How danmurphys liquor scraper works](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/danmurphys-liquor-scraper--how-it-works.png)

1. Click **Try for free** or **Run** on the Actor page.
2. In the **Start URLs** field, paste one or more Dan Murphy's category, brand, or search URLs (e.g. `https://www.danmurphys.com.au/white-wine/chardonnay`).
3. Optionally adjust **Max products per start URL** to control how much of each listing gets scraped. Leave it at `0` to pull everything the category has.
4. Click **Start** and wait for the run to finish.
5. Open the **Dataset** tab to preview, filter, and export your results.

### Input

![danmurphys liquor scraper input options](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/danmurphys-liquor-scraper--input.png)

The Actor accepts a JSON input with the following fields (see the **Input** tab for the full form):

| Field | Type | Description |
| --- | --- | --- |
| `startUrls` | array | Category, brand, or search listing pages to scrape. |
| `maxItems` | integer | Max products to collect per start URL. `0` = no limit — scrape the entire listing. |
| `proxyConfiguration` | object | Proxy settings. Apify Proxy is recommended to avoid blocking. |

Example input:

```json
{
    "startUrls": [{ "url": "https://www.danmurphys.com.au/white-wine/chardonnay" }],
    "maxItems": 0,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output

![danmurphys liquor scraper dataset output](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/danmurphys-liquor-scraper--output.png)

![danmurphys liquor scraper data fields](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/danmurphys-liquor-scraper--fields.png)

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

```json
{
    "sku": "DM_852614",
    "name": "Xanadu Margaret River Fusion Chardonnay",
    "brand": "Xanadu",
    "url": "https://www.danmurphys.com.au/product/DM_852614/xanadu-margaret-river-fusion-chardonnay",
    "imageUrl": "https://media.danmurphys.com.au/dmo/product/852614-1.png",
    "volume": "750ML",
    "price": 17,
    "regularPrice": 21.99,
    "isMemberOffer": true,
    "priceUnit": "each",
    "currency": "AUD",
    "rating": 3.6,
    "reviewCount": 11,
    "badges": ["Best In Glass - Wine Awards"],
    "sponsored": true,
    "categoryUrl": "https://www.danmurphys.com.au/white-wine/chardonnay"
}
```

#### Data table

| Field | Description |
| --- | --- |
| `sku` | Dan Murphy's internal product ID. |
| `name` | Full product name. |
| `brand` | Product brand/producer. |
| `url` | Canonical product page URL. |
| `imageUrl` | Product image URL. |
| `volume` | Pack/bottle size (e.g. `750ML`), when available. |
| `price` | Price the customer pays now (member price if a member offer applies). |
| `regularPrice` | Regular/non-member price. |
| `isMemberOffer` | Whether `price` reflects a "MEMBER OFFER" discount. |
| `rating` | Average star rating (0–5), when reviews exist. |
| `reviewCount` | Number of customer reviews. |
| `badges` | Promotional badges shown on the product (e.g. "Great Value Vino"). |
| `categoryUrl` | The start URL this product was collected from. |

### How much does it cost to scrape Dan Murphy's?

This Actor uses a headless browser (Playwright) because listing pages load more products via a "Show more" button rather than plain pagination links, so it's more compute-intensive than a plain HTTP scraper. A typical run scraping a few hundred products from one or two categories should use well within the free tier's monthly compute units. Use `maxItems` to keep runs small and predictable, or set it to `0` if you want every product in the category regardless of size.

### Tips for best results

- Start with a specific category or search URL rather than the homepage — scraping is scoped per listing page.
- Set `maxItems` to only what you need; each "Show more" click loads roughly 24 more products. Leave it unset (or `0`) to fetch the full category.
- Use Apify Proxy (residential, if available on your plan) if you scrape large volumes or run frequently, to reduce the chance of blocking.

### FAQ, disclaimers, and support

This Actor only collects publicly visible product listing data. It does not create accounts, place orders, or access personal data. Always review [Dan Murphy's Terms of Use](https://www.danmurphys.com.au) and applicable laws before scraping, and use the data responsibly.

The site's markup can change at any time, which may affect field extraction. If you notice missing or incorrect data, please report it via the **Issues** tab on this Actor's page. Need a custom version — different fields, product detail pages, or another retailer? Reach out via the Issues tab to discuss a tailored solution.

# Actor input Schema

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

Category, search, or brand listing pages on danmurphys.com.au to scrape products from, e.g. https://www.danmurphys.com.au/white-wine/chardonnay

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

Maximum number of products to scrape from each start URL. Set to 0 for no limit (scrape until the 'Show more' button is exhausted).

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

Proxy settings for the crawl. Using Apify Proxy (residential recommended) helps avoid anti-bot blocking.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.danmurphys.com.au/white-wine/chardonnay"
    }
  ],
  "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://www.danmurphys.com.au/white-wine/chardonnay"
        }
    ]
};

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

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

```

## MCP server setup

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