# PB Tech Scraper - Products, Specs, Stock & Reviews (`abotapi/pbtech-co-nz-scraper`) Actor

Scrape pbtech.co.nz products with full specifications, price, brand, condition, per-store stock, image gallery, customer reviews and rating stats. Search by keyword and department with brand, price, rating and sort filters, or paste product / category / search URLs.

- **URL**: https://apify.com/abotapi/pbtech-co-nz-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 product 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## PB Tech Scraper - Products, Specials & Reviews

Scrape products from **pbtech.co.nz**, New Zealand's electronics, computer and
tech retailer. Search by keyword, browse the **clearance specials** grid, or
paste product, category, search and specials URLs. Every product comes back as
a flat record with full detail — identity, price, was-price and discount on
clearance items, condition, availability, per-store stock, specifications,
image gallery, brand, and native customer reviews with aggregate rating stats.

### Features

- **Two modes** — keyword **search** (with brand, price, rating filters,
  sorting and a specials category), or **URL** mode to scrape exact product,
  category, search or specials URLs you paste (paste a `/category/...` link to
  browse a whole department).
- **Specials / clearance** — browse PB Tech's clearance grid as a first-class
  category (`specialsCategory: "clearance"` in search mode, or paste
  `https://www.pbtech.co.nz/clearance` in URL mode), walked with the same
  forward pagination as an ordinary category.
- **Original / was price & discount** — for a clearance product, `price` is
  the discounted price you'd pay, `originalPrice` the price without the
  auto-applied checkout promo code, plus `discountPercent` and `savings`.
  These are only ever populated from a genuine reference price on the page —
  never fabricated — so an ordinary, non-discounted product correctly reports
  `originalPrice: null`.
- **Rich product detail** — name, brand, product code, SKU, manufacturer part
  number, barcode/GTIN, price and RRP (NZD), savings, discount %, availability,
  condition, price-valid-until, breadcrumb categories, specifications, and a
  full image gallery.
- **Per-store stock** — live unit counts across PB Tech branches, plus a total
  in-store stock figure.
- **Customer reviews** — native reviews per product (title, body, author, date,
  verified-owner flag, helpful votes, purchased-options) plus the average
  rating, review count and a star-by-star rating breakdown.
- **Filters & sorting** — filter by brand, price range and minimum rating; sort
  by relevance, price, rating, review count or name.
- **Optional exports** — pipe results into Notion, Airtable, Linear or other
  apps via MCP connectors, without changing the dataset.

### Input

| Field | Type | Description |
|---|---|---|
| `mode` | select | `search` (keyword) or `url` (paste links). |
| `queries` | string[] | Search keywords (search mode). Each is searched separately and returns the full matching product set. Ignored when `specialsCategory` is set. To browse a whole department, use URL mode with a `/category/...` link. |
| `specialsCategory` | select | Optional. `clearance` browses the clearance specials grid instead of a keyword search. Overrides `queries` when set. |
| `brand` | string | Keep only products whose brand contains this text. |
| `sortBy` | select | `relevance`, `priceAsc`, `priceDesc`, `ratingDesc`, `reviewsDesc`, `nameAsc`. |
| `minPrice` / `maxPrice` | integer | Price range filter (NZD). |
| `minRating` | integer | Minimum average rating (1–5). Needs product details enabled. |
| `urls` | string[] | Product / category / search URLs (URL mode). |
| `fetchDetails` | boolean | Open each product page for full detail. Default `true`. |
| `fetchReviews` | boolean | Also collect customer reviews. Default `false`. |
| `maxReviewsPerProduct` | integer | Cap reviews per product (`0` = all). Default `20`. |
| `maxItems` | integer | Max products for the whole run (`0` = unlimited). Default `20`. |
| `proxy` | object | Proxy configuration (see below). |

#### Example input

```json
{
  "mode": "search",
  "queries": ["gaming laptop"],
  "brand": "ASUS",
  "minPrice": 1000,
  "maxPrice": 3000,
  "sortBy": "priceAsc",
  "fetchDetails": true,
  "fetchReviews": true,
  "maxReviewsPerProduct": 10,
  "maxItems": 20,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "NZ" }
}
````

#### Example input - clearance specials

```json
{
  "mode": "search",
  "specialsCategory": "clearance",
  "fetchDetails": true,
  "maxItems": 20,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "NZ" }
}
```

### Output

One record per product. Example (illustrative, mocked values) for a product on
clearance — `price` is what you'd pay, `originalPrice` the price without the
auto-applied checkout promo code, `discountPercent`/`savings` the gap between
them, and `promotion` the marketing line naming the code:

```json
{
  "code": "HOMEXP1234567",
  "sku": "HOMEXP1234567",
  "mpn": "EX-1234/A",
  "gtin": "9990000012345",
  "name": "Example Robot Vacuum & Mop Combo with Auto-Empty Dock",
  "brand": "Example",
  "price": 799.0,
  "originalPrice": 1299.01,
  "discountPercent": 38.5,
  "savings": 500.01,
  "basePrice": 1299.01,
  "promotion": "Use promo code CLEARANCE to save",
  "currency": "NZD",
  "availability": "In stock",
  "condition": "New",
  "priceValidUntil": "2029-12-31",
  "categories": ["Home Appliances", "Vacuums", "Robot Vacuums"],
  "specifications": {
    "MPN": "EX-1234/A",
    "Colour": "Black"
  },
  "images": [
    "https://www.pbtech.co.nz/imgprod/H/O/HOMEXP1234567__1.jpg"
  ],
  "imageUrl": "https://www.pbtech.co.nz/imgprod/H/O/HOMEXP1234567__1.jpg",
  "rating": 4.3,
  "reviewCount": 9,
  "ratingBreakdown": { "5": 6, "4": 1, "3": 1, "2": 0, "1": 1 },
  "storeStock": [
    { "branch": "Auckland - Albany", "stock": 3 },
    { "branch": "Wellington", "stock": 1 }
  ],
  "totalStoreStock": 4,
  "seller": "PB Tech",
  "reviews": [
    {
      "author": "ExampleReviewer",
      "date": "01/01/26",
      "title": "Great value",
      "body": "Works well and was a great deal on clearance.",
      "attributes": ["Colour: Black"],
      "verifiedOwner": true,
      "helpfulVotes": 2,
      "totalVotes": 2
    }
  ],
  "url": "https://www.pbtech.co.nz/product/HOMEXP1234567",
  "searchMode": "search",
  "specialsCategory": "clearance",
  "source": "pbtech.co.nz"
}
```

`specialsCategory` records which promotional feed a row came from (for example
`"clearance"`); it is `null` for rows from an ordinary keyword search or
category, so a run that mixes both can tell the specials rows apart.

`originalPrice`/`discountPercent`/`savings` are only populated from a genuine
reference price - PB Tech's own "without promo code" list price for a
clearance item. An ordinary, non-discounted product reports
`"originalPrice": null, "discountPercent": null` (no `savings` key) rather
than a fabricated value. A product URL pasted directly in URL mode (with no
listing page visited) reports its list price only; the clearance discount is
visible on the listing grid, not on the plain product-detail JSON, so
`originalPrice` stays `null` in that specific case even for a clearance item.

### Proxy & reliability

This source needs a **residential** connection in **New Zealand** to return the
page (and to show the correct local pricing, stock and store availability). The
recommended proxy configuration is Apify Proxy with residential access, country
New Zealand — the run rotates a fresh exit on every request automatically.

> **Free plan / datacenter note:** on the free plan, or if you select a
> datacenter proxy, connections are frequently refused and runs may return no
> results. Enable Apify Proxy with residential access (country New Zealand), or
> upgrade your plan, for reliable results.

### Notes

- Prices, stock and availability are captured live from a New-Zealand
  connection at run time and reflect the store's own listing.
- `clearance` is the site's only genuine specials/offers grid at the time of
  writing (verified live); a marketing "hot deals" page exists but renders no
  product listing, so it is not offered as a specials category. This is
  checked periodically, not a permanent limitation of the site.
- No product on pbtech.co.nz currently exposes a size/colour variant matrix or
  a per-unit (per kg/L) price; those fields are intentionally not emitted
  rather than guessed at.
- Reviews are the retailer's own on-site customer reviews; no review images are
  collected.
- Pricing is pay-per-event: an actor-start event, a per-product result event,
  and optional per-product detail-enrichment and review-enrichment events that
  are charged only when those options are enabled.

# Actor input Schema

## `mode` (type: `string`):

Choose 'search' to use keywords and filters, or 'url' to scrape specific product, category or search URLs you paste below.

## `queries` (type: `array`):

One or more keywords to search, for example 'gaming laptop' or 'usb c cable'. Each keyword is searched separately and returns the full matching product set. Ignored when 'Specials / offers category' below is set. To browse a specific department instead, switch to URL mode and paste its category link (for example https://www.pbtech.co.nz/category/computers/laptops).

## `specialsCategory` (type: `string`):

Optional. Browse a promotional listing instead of a keyword search, for example the clearance grid (products discounted via an auto-applied checkout promo code - see the originalPrice / discountPercent / promotion output fields). Overrides 'Search keywords' when set. To browse the same listing in URL mode, paste https://www.pbtech.co.nz/clearance.

## `brand` (type: `string`):

Optional. Keep only products whose brand contains this text, for example 'Apple', 'ASUS' or 'Logitech'.

## `sortBy` (type: `string`):

Ordering applied to the collected results.

## `minPrice` (type: `integer`):

Optional. Only keep products priced at or above this amount (NZD).

## `maxPrice` (type: `integer`):

Optional. Only keep products priced at or below this amount (NZD).

## `minRating` (type: `integer`):

Optional. Only keep products with an average customer rating at or above this value (1 to 5). Needs product details enabled.

## `urls` (type: `array`):

Product, category, search or specials URLs to scrape, for example https://www.pbtech.co.nz/product/NBKASU14046I, https://www.pbtech.co.nz/category/computers/laptops or https://www.pbtech.co.nz/clearance. Multiple URLs supported.

## `fetchDetails` (type: `boolean`):

Open each product page for full specifications, per-store stock, image gallery, brand, GTIN/MPN, condition, categories and rating breakdown. Adds one request per product. originalPrice / discountPercent / savings are captured from the listing grid either way, for products with a genuine reference price.

## `fetchReviews` (type: `boolean`):

Also collect native customer reviews for each product (review text, title, author, date, verified-owner flag, helpful votes). Adds requests per product.

## `maxReviewsPerProduct` (type: `integer`):

Cap on reviews collected per product when 'Fetch customer reviews' is on. Use 0 for all available reviews.

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

Maximum number of products to return across the whole run. Use 0 for unlimited.

## `maxPages` (type: `integer`):

Safety cap on review pages walked per product when reviews are enabled (each page holds about 12 reviews). Leave empty for no page limit — the run stops at Max products, or when a product's reviews are exhausted. Category and search listings return their full result set in a single page.

## `proxy` (type: `object`):

Apify Proxy with residential access in New Zealand is required for reliable results and correct local pricing and stock. The run rotates fresh exits automatically. On the free plan, coverage may be limited and some runs may return no results.

## `mcpConnectors` (type: `array`):

Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write/digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).

## `notionParentPageUrl` (type: `string`):

URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on items written to each connector per run. Does not affect the dataset.

## Actor input object example

```json
{
  "mode": "search",
  "queries": [
    "gaming laptop"
  ],
  "specialsCategory": "",
  "sortBy": "relevance",
  "urls": [
    "https://www.pbtech.co.nz/category/computers/laptops"
  ],
  "fetchDetails": true,
  "fetchReviews": false,
  "maxReviewsPerProduct": 20,
  "maxItems": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "NZ"
  },
  "maxNotifyListings": 50
}
```

# 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 = {
    "queries": [
        "gaming laptop"
    ],
    "urls": [
        "https://www.pbtech.co.nz/category/computers/laptops"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "NZ"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/pbtech-co-nz-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 = {
    "queries": ["gaming laptop"],
    "urls": ["https://www.pbtech.co.nz/category/computers/laptops"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "NZ",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/pbtech-co-nz-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "queries": [
    "gaming laptop"
  ],
  "urls": [
    "https://www.pbtech.co.nz/category/computers/laptops"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "NZ"
  }
}' |
apify call abotapi/pbtech-co-nz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=abotapi/pbtech-co-nz-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "PB Tech Scraper - Products, Specs, Stock & Reviews",
        "description": "Scrape pbtech.co.nz products with full specifications, price, brand, condition, per-store stock, image gallery, customer reviews and rating stats. Search by keyword and department with brand, price, rating and sort filters, or paste product / category / search URLs.",
        "version": "1.0",
        "x-build-id": "UhP3tD9JBlOT3dZCc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~pbtech-co-nz-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-pbtech-co-nz-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/abotapi~pbtech-co-nz-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-pbtech-co-nz-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/abotapi~pbtech-co-nz-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-pbtech-co-nz-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "url"
                        ],
                        "type": "string",
                        "description": "Choose 'search' to use keywords and filters, or 'url' to scrape specific product, category or search URLs you paste below.",
                        "default": "search"
                    },
                    "queries": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "One or more keywords to search, for example 'gaming laptop' or 'usb c cable'. Each keyword is searched separately and returns the full matching product set. Ignored when 'Specials / offers category' below is set. To browse a specific department instead, switch to URL mode and paste its category link (for example https://www.pbtech.co.nz/category/computers/laptops).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "specialsCategory": {
                        "title": "Specials / offers category",
                        "enum": [
                            "",
                            "clearance"
                        ],
                        "type": "string",
                        "description": "Optional. Browse a promotional listing instead of a keyword search, for example the clearance grid (products discounted via an auto-applied checkout promo code - see the originalPrice / discountPercent / promotion output fields). Overrides 'Search keywords' when set. To browse the same listing in URL mode, paste https://www.pbtech.co.nz/clearance.",
                        "default": ""
                    },
                    "brand": {
                        "title": "Brand",
                        "type": "string",
                        "description": "Optional. Keep only products whose brand contains this text, for example 'Apple', 'ASUS' or 'Logitech'."
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "relevance",
                            "priceAsc",
                            "priceDesc",
                            "ratingDesc",
                            "reviewsDesc",
                            "nameAsc"
                        ],
                        "type": "string",
                        "description": "Ordering applied to the collected results.",
                        "default": "relevance"
                    },
                    "minPrice": {
                        "title": "Minimum price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional. Only keep products priced at or above this amount (NZD)."
                    },
                    "maxPrice": {
                        "title": "Maximum price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional. Only keep products priced at or below this amount (NZD)."
                    },
                    "minRating": {
                        "title": "Minimum rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Optional. Only keep products with an average customer rating at or above this value (1 to 5). Needs product details enabled."
                    },
                    "urls": {
                        "title": "PB Tech URLs",
                        "type": "array",
                        "description": "Product, category, search or specials URLs to scrape, for example https://www.pbtech.co.nz/product/NBKASU14046I, https://www.pbtech.co.nz/category/computers/laptops or https://www.pbtech.co.nz/clearance. Multiple URLs supported.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "fetchDetails": {
                        "title": "Fetch product details",
                        "type": "boolean",
                        "description": "Open each product page for full specifications, per-store stock, image gallery, brand, GTIN/MPN, condition, categories and rating breakdown. Adds one request per product. originalPrice / discountPercent / savings are captured from the listing grid either way, for products with a genuine reference price.",
                        "default": true
                    },
                    "fetchReviews": {
                        "title": "Fetch customer reviews",
                        "type": "boolean",
                        "description": "Also collect native customer reviews for each product (review text, title, author, date, verified-owner flag, helpful votes). Adds requests per product.",
                        "default": false
                    },
                    "maxReviewsPerProduct": {
                        "title": "Max reviews per product",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap on reviews collected per product when 'Fetch customer reviews' is on. Use 0 for all available reviews.",
                        "default": 20
                    },
                    "maxItems": {
                        "title": "Max products",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of products to return across the whole run. Use 0 for unlimited.",
                        "default": 20
                    },
                    "maxPages": {
                        "title": "Max result pages per product",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Safety cap on review pages walked per product when reviews are enabled (each page holds about 12 reviews). Leave empty for no page limit — the run stops at Max products, or when a product's reviews are exhausted. Category and search listings return their full result set in a single page."
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy with residential access in New Zealand is required for reliable results and correct local pricing and stock. The run rotates fresh exits automatically. On the free plan, coverage may be limited and some runs may return no results.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "NZ"
                        }
                    },
                    "mcpConnectors": {
                        "title": "Pipe results into your apps (optional)",
                        "type": "array",
                        "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write/digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
                    },
                    "notionParentPageUrl": {
                        "title": "Notion parent page (Notion connector only)",
                        "type": "string",
                        "description": "URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
                    },
                    "maxNotifyListings": {
                        "title": "Max items to export per connector",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on items written to each connector per run. Does not affect the dataset.",
                        "default": 50
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
