# Petbarn Scraper: Product Prices, Member Prices & Stock as JSON (`getascraper/petbarn-product-scraper`) Actor

Scrape Petbarn.com.au product listings by category: regular price, Petbarn's member/loyalty price, brand, stock, pack size, rating, and review count. No competitor pet-store scraper on Apify (Chewy, PetSmart, Zooplus) exposes a loyalty-price field. No login needed. From $0.69 per 1,000 products.

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

## Pricing

from $0.58 / 1,000 product records

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🐾 Petbarn Scraper: Regular and Member Prices for Every Product

<table width="100%" style="width:100%;border-collapse:collapse">
<tr style="width:100%">
<td style="background:#0f6b3c;border-radius:10px;padding:28px;text-align:center" colspan="1">
<span style="color:#ffffff;font-size:22px;font-weight:700">See Petbarn's member price on every product, no login required</span><br/>
<span style="color:#d7f2e3;font-size:15px">Pull Petbarn's full Australian pet catalog by category: regular price, member/loyalty price, stock, pack size, rating, and reviews, in one clean dataset.</span>
</td>
</tr>
</table>
<table width="100%" style="width:100%;border-collapse:collapse;margin-top:16px">
<tr style="width:100%">
<td width="25%" style="background:#eaf6ef;border:1px solid #cde8d8;border-radius:8px;padding:16px;text-align:center;vertical-align:top">
<strong style="color:#0f4d2c">💳 Member price included</strong><br/>
<span style="color:#333">See the loyalty-program price next to the regular price, and the exact discount percentage between them.</span>
</td>
<td width="25%" style="background:#eaf6ef;border:1px solid #cde8d8;border-radius:8px;padding:16px;text-align:center;vertical-align:top">
<strong style="color:#0f4d2c">📦 Every pack size, one row each</strong><br/>
<span style="color:#333">A 3kg bag and a 20kg bag of the same food come back as separate rows, each with its own SKU and price.</span>
</td>
<td width="25%" style="background:#eaf6ef;border:1px solid #cde8d8;border-radius:8px;padding:16px;text-align:center;vertical-align:top">
<strong style="color:#0f4d2c">📊 Stock status per size</strong><br/>
<span style="color:#333">Know exactly which pack sizes are in stock and which are sold out, not just whether the page loads.</span>
</td>
<td width="25%" style="background:#eaf6ef;border:1px solid #cde8d8;border-radius:8px;padding:16px;text-align:center;vertical-align:top">
<strong style="color:#0f4d2c">⭐ Ratings included</strong><br/>
<span style="color:#333">Star rating and review count travel with every row. No separate lookup needed.</span>
</td>
</tr>
</table>

### 🔍 What does Petbarn Scraper do?

**Petbarn Scraper reads live product listings from [Petbarn](https://www.petbarn.com.au/)**, Australia's largest pet supplies retailer, and turns them into structured, downloadable data.

Give it one or more Petbarn category pages (Dog Food, Cat Health, Bird Toys, and so on), and it returns every product in that category: name, brand, category, image, star rating, and review count. For each pack size a product comes in, it returns the regular price, Petbarn's member/loyalty price, the discount between the two, stock status, and standard delivery fee, each as its own row. Turn on detail mode to also pull the full product description, barcode (GTIN), and pack weight for every size.

### 🤔 Why use Petbarn Scraper?

Every other pet-store product scraper on the Apify Store, covering Chewy, PetSmart, Zooplus, Fressnapf, Maxizoo, and Musti.no, returns only the regular shelf price. None of them surface a member or loyalty price, because their target sites either don't publish one or don't expose it in a form a scraper can read. Petbarn does publish it, right on the product page, and this Actor is the only one that pulls it out for you.

- **"I run a deal-tracking site and want to show the real discount, not just the sticker price."** Price-comparison builders get both numbers in the same row, so the member discount shows up without asking your own users to have a Petbarn account.
- **"I manage a pet brand's retail presence and need to see how we're priced against the category."** Brand managers and category analysts monitor pricing and merchandising across Australia's dominant pet retail chain, one category run at a time.
- **"I sell pet supplies online and want to check Petbarn's prices before setting mine."** Small sellers pull a clean price sheet, member price included, before deciding where to land their own.

### 🚀 How to use Petbarn Scraper

<table width="100%" style="width:100%;border-collapse:collapse;margin:12px 0">
<tr style="width:100%">
<td width="33%" style="background:#f3faf6;border:1px solid #cde8d8;border-radius:8px;padding:14px;text-align:center;vertical-align:top">
<strong style="color:#0f4d2c">1. Paste a category link</strong><br/>
<span style="color:#333">Add one or more Petbarn category pages, like Dog Food or Cat Health.</span>
</td>
<td width="33%" style="background:#f3faf6;border:1px solid #cde8d8;border-radius:8px;padding:14px;text-align:center;vertical-align:top">
<strong style="color:#0f4d2c">2. Set how many products you need</strong><br/>
<span style="color:#333">Start small to test the output, then scale up once you know what you're getting.</span>
</td>
<td width="33%" style="background:#f3faf6;border:1px solid #cde8d8;border-radius:8px;padding:14px;text-align:center;vertical-align:top">
<strong style="color:#0f4d2c">3. Get a clean price sheet</strong><br/>
<span style="color:#333">Every pack size lands as its own row: regular price, member price, stock, rating, ready to export.</span>
</td>
</tr>
</table>

1. Click **Try for free** and open the Input tab.
2. Paste one or more **Category URLs** from petbarn.com.au, for example `https://www.petbarn.com.au/c/dogs/dog-food`.
3. Set **Max Products** to how many products you want, across all category URLs combined.
4. Turn on **Fetch Full Product Detail Page** if you also want each product's full description, barcode, and pack weight.
5. Turn on **Only In-Stock Variants** if you want sold-out pack sizes left out of the results.
6. Click **Start**. Results land in the Output tab as they're collected.

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `categoryUrls` | array of URLs | Yes | Petbarn category page URLs to scrape, e.g. `https://www.petbarn.com.au/c/dogs/dog-food`. Each category is paginated automatically. |
| `scrapeProductDetail` | boolean | No | When on, also fetches each product's own page for its full description, barcode (GTIN), and pack weight. Off by default to keep runs fast. |
| `onlyInStock` | boolean | No | When on, drops pack sizes that are currently out of stock from the results. |
| `maxItems` | integer | No | Maximum number of distinct products to scrape across all category URLs combined. A product with multiple pack sizes still produces multiple rows. |
| `proxyConfiguration` | object | No | Proxy settings. Defaults to Apify's standard proxy, which is sufficient for this target. |

### 📤 Output

Each item in the dataset looks like this:

```json
{
  "productName": "Black Hawk Lamb And Rice Adult Dog Food",
  "productUrl": "https://www.petbarn.com.au/p/black-hawk-lamb-rice-adult-dog-food",
  "variantUrl": "https://www.petbarn.com.au/p/black-hawk-lamb-rice-adult-dog-food/501601",
  "sku": "501601",
  "size": "10kg",
  "brand": "Black Hawk",
  "category": "Dog Food",
  "price": 137.99,
  "memberPrice": 119,
  "memberDiscountPercent": 13.8,
  "currency": "AUD",
  "availability": "https://schema.org/InStock",
  "inStock": true,
  "standardDeliveryFee": 0,
  "ratingValue": 4.7898,
  "reviewCount": 1237,
  "image": "https://www.petbarn.com.au/media/catalog/product/.../image.jpg",
  "scrapedAt": "2026-09-30T17:04:52.688Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `productName` | string | The product's full name. |
| `productUrl` | string | Link to the product's main page on petbarn.com.au. |
| `variantUrl` | string | Link to this specific pack size, when Petbarn provides one. |
| `sku` | string | Petbarn's SKU for this pack size. |
| `mpn` | string | Manufacturer part number, when published. |
| `gtin` | string | Barcode number for this pack size. *(detail fetch only)* |
| `size` | string | Pack size, e.g. "3kg" or "20kg", when the product comes in more than one size. |
| `brand` | string | Product brand. |
| `category` | string | Petbarn's own category label for the product. |
| `description` | string | Full product description. *(detail fetch only)* |
| `weightValue` / `weightUnit` | string | Pack weight and its unit, when published. *(detail fetch only)* |
| `price` | number | Regular price in AUD. |
| `memberPrice` | number | Petbarn loyalty-member price in AUD, when this pack size has one. |
| `memberDiscountPercent` | number | Percentage discount between the regular and member price. |
| `currency` | string | Always "AUD". |
| `availability` | string | Raw stock status as published by Petbarn. |
| `inStock` | boolean | Whether this pack size is currently in stock. |
| `itemCondition` | string | Item condition as published by Petbarn (normally new). |
| `standardDeliveryFee` | number | Standard delivery fee in AUD for this pack size. |
| `ratingValue` | number | Average star rating out of 5. |
| `reviewCount` | number | Number of customer reviews. |
| `image` | string | Product image URL. |
| `scrapedAt` | string | Timestamp when this row was collected. |

### 💰 Pricing

Petbarn Scraper uses Apify's pay-per-event pricing: $0.69 per 1,000 products returned. You only pay for the products actually returned, an empty run costs nothing, and there's no subscription to manage.

Free plan runs are limited to 25 products per run, 3 runs per day, and a short wait between runs. Upgrade to a paid Apify plan to remove these limits.

### ⭐ Enjoying Petbarn Scraper?

<table width="100%" style="display:table;width:100%;border-collapse:collapse">
<tr>
<td style="background:#eaf6ef;border:1px solid #cde8d8;border-radius:8px;padding:16px;text-align:center">
<span style="color:#0f4d2c;font-size:15px">If this Actor saved you time on pricing research, a quick rating helps other pet-industry buyers find it too. ⭐⭐⭐⭐⭐</span>
</td>
</tr>
</table>

### 🛠️ Tips or advanced options

- Add several category URLs in one run to cover more of the catalog without starting multiple runs.
- Keep **Fetch Full Product Detail Page** off for a fast price sweep; turn it on only when you need the full description, barcode, or pack weight, since it adds one request per product.
- Turn on **Only In-Stock Variants** when building a live price sheet you don't want cluttered with sold-out sizes.
- Schedule this Actor to run against the same categories weekly to track price and member-discount changes over time.

### ❓ FAQ

**Does this need a Petbarn account or loyalty membership?**
No. The member/loyalty price is published on Petbarn's own product pages and this Actor reads it directly. No account, login, or API key needed.

**Why does a product return more than one row?**
Many Petbarn products come in multiple pack sizes, each with its own SKU, price, and stock status. Each pack size gets its own row so you can see exactly what's available.

**What's the difference between the default run and detail mode?**
The default run reads everything from the category page: name, brand, both prices, stock, and rating. Detail mode additionally visits each product's own page for its full description, barcode, and pack weight, which takes one extra request per product.

**Is this legal?**
This Actor reads publicly available product pages that require no login. It does not access any private, paywalled, or authenticated data. Always review the target site's terms before large-scale or commercial use, and reach out via the Issues tab with any questions.

### 🔗 Other actors

- [Coles Australia Scraper: Products, Prices, Specials & Stock](https://apify.com/getascraper/coles-scraper) ↗ - tracks products, prices, and specials from Australia's Coles supermarket.
- [Carsales.com.au Cars Scraper: Used car listings](https://apify.com/getascraper/carsales-au-cars-scraper) ↗ - pulls used car listings from Australia's largest car marketplace.
- [1st Phorm scraper: vitamins, supplements and apparel](https://apify.com/getascraper/1stphorm-products-scraper) ↗ - tracks product pricing and stock for a single-brand supplement retailer.
- [CarParts.com Scraper: Prices, Stock & Specs](https://apify.com/getascraper/carparts-com-scraper) ↗ - tracks auto parts pricing, stock, and specs.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/petbarn-product-scraper/changelog.md

# Actor input Schema

## `categoryUrls` (type: `array`):

Full Petbarn category browse page URLs, e.g. https://www.petbarn.com.au/c/dogs/dog-food or https://www.petbarn.com.au/c/cats/cat-food. Each category page lists its products directly with price, brand, and stock data built in, so no extra requests are needed to read the core fields. The actor follows Petbarn's own /page/2, /page/3, ... pagination for each category automatically, stopping once a page returns no more products or the Max Products limit below is reached.

## `brand` (type: `array`):

One brand per line, for example "Royal Canin" or "Black Hawk" (case-insensitive, partial match, so "royal canin" also matches "Royal Canin Veterinary Diet"). Leave empty to keep every brand.

## `minRating` (type: `number`):

Only keep variants whose product has a customer rating of at least this many stars out of 5.

## `minPrice` (type: `number`):

Only keep variants priced at or above this amount, in AUD, using the regular (non-member) price.

## `maxPrice` (type: `number`):

Only keep variants priced at or below this amount, in AUD, using the regular (non-member) price.

## `onlyOnSale` (type: `boolean`):

When enabled, only variants that actually have a lower Petbarn member/loyalty price than the regular price are kept. Leave this off to get every variant regardless of whether a member discount applies.

## `onlyInStock` (type: `boolean`):

When enabled, pack-size variants that Petbarn currently lists as out of stock are dropped from the output instead of being included with an Out of Stock status. Leave this off to get a complete snapshot of the catalog, including sold-out sizes, which is useful for tracking when stock comes back.

## `scrapeProductDetail` (type: `boolean`):

When enabled, the actor also opens each product's own detail page to collect its full description, GTIN/barcode, and pack weight, fields that are not present on the category listing page. Leave this off to keep runs fast and cheap: the category page already returns the fields most people need (name, brand, regular price, Petbarn member/loyalty price, availability, star rating, review count, and SKU per pack size) with zero extra requests. Turning this on roughly doubles the number of requests the run makes, since it adds one detail-page request per product.

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

Maximum number of distinct products to scrape across all category URLs combined. A single product can still produce more than one output row if it comes in multiple pack sizes, for example a dog food sold in 3kg, 10kg, and 20kg bags, each with its own SKU, price, and member price. Keep this modest for a first test run; raise it once you know how many rows a given category produces.

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

Petbarn's category and product pages are plain server-rendered HTML with no anti-bot wall, confirmed live, so Apify's standard datacenter proxy is sufficient and keeps this run cheap. Only switch to residential if you start seeing blocked or empty responses.

## Actor input object example

```json
{
  "categoryUrls": [
    {
      "url": "https://www.petbarn.com.au/c/dogs/dog-food"
    },
    {
      "url": "https://www.petbarn.com.au/c/cats/cat-food"
    }
  ],
  "brand": [],
  "onlyOnSale": false,
  "onlyInStock": false,
  "scrapeProductDetail": false,
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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 = {
    "categoryUrls": [
        {
            "url": "https://www.petbarn.com.au/c/dogs/dog-food"
        },
        {
            "url": "https://www.petbarn.com.au/c/cats/cat-food"
        }
    ],
    "brand": [],
    "onlyOnSale": false,
    "onlyInStock": false,
    "scrapeProductDetail": false,
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/petbarn-product-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 = {
    "categoryUrls": [
        { "url": "https://www.petbarn.com.au/c/dogs/dog-food" },
        { "url": "https://www.petbarn.com.au/c/cats/cat-food" },
    ],
    "brand": [],
    "onlyOnSale": False,
    "onlyInStock": False,
    "scrapeProductDetail": False,
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/petbarn-product-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 '{
  "categoryUrls": [
    {
      "url": "https://www.petbarn.com.au/c/dogs/dog-food"
    },
    {
      "url": "https://www.petbarn.com.au/c/cats/cat-food"
    }
  ],
  "brand": [],
  "onlyOnSale": false,
  "onlyInStock": false,
  "scrapeProductDetail": false,
  "maxItems": 20
}' |
apify call getascraper/petbarn-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/petbarn-product-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/jYn6HY9Expd20vrYd/builds/p0NQzSLrkvUyg3VG2/openapi.json
