# PriceRunner Category Products Scraper (`m3web/pricerunner-category-products-scraper`) Actor

Extract product prices & data by category from Pricerunner. Great for retail analysis, market tracking & competitive insights.

- **URL**: https://apify.com/m3web/pricerunner-category-products-scraper.md
- **Developed by:** [M3Web](https://apify.com/m3web) (community)
- **Categories:** E-commerce, Automation, Lead generation
- **Stats:** 27 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$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

## PriceRunner Category Products Scraper

### Overview

This scraper extracts product data from PriceRunner’s **category pages**, available across multiple national domains. It supports filters like brand, retailer, price range, ratings, in-stock status, and sorting options.

You can use this tool to collect product listings, analyze pricing trends, and monitor filtered PriceRunner categories across their comparison platform.

> 👉 Looking to extract **all retailer offers for a single product** instead?\
> Check out the companion tool: [PriceRunner Product Offers Scraper](https://apify.com/m3web/pricerunner-product-offers-scraper)

***

### Supported Domains

Currently works with category URLs from these PriceRunner domains:

| Website                                | Country         |
| :-------------------------------------| :---------------|
| [www.pricerunner.com](https://www.pricerunner.com/) | **United Kingdom** |
| [www.pricerunner.dk](https://www.pricerunner.dk/)   | **Denmark**        |
| [www.pricerunner.se](https://www.pricerunner.se/)   | **Sweden**         |

> 🌍 Looking to scrape **category data for other countries** like Austria, Finland, France, Germany, Ireland, Italy, Netherlands, Norway, Spain, or the United States?\
> Check out the nearly identical scraper built for Klarna’s platform:\
> 👉 [Klarna Category Products Scraper](https://apify.com/m3web/klarna-category-products-scraper)

***

### 🧭 What Filters and Sorting Does This Scraper Support?

This tool detects and applies filters from the PriceRunner category URLs you provide. That includes:

#### Sorting Options:

- **Sort by** (price, popularity, rating, price drop, etc.)

#### Filters:

- **Brands**
- **Retailers**
- **Minimum and maximum price**
- **Only show items in stock**
- **Minimum star rating (1-4)**

…this scraper sees all of that and automatically adds those settings when collecting the product data.

You don’t have to configure anything manually — just copy the URL of the page after you’ve applied your filters on PriceRunner, and paste it into the input. The scraper takes care of the rest behind the scenes.

#### Example

If you go to PriceRunner <https://www.pricerunner.com/cl/2/TVs> and select:

- Sort by lowest price
- Brand: Samsung, Sony, LG
- Retailer: Amazon
- Price between £500 and £1000
- Show only items in stock

Your browser URL might look something like:

<https://www.pricerunner.com/cl/2/TVs?man_id=25,22,30&onlyInStock=true&retailer=2137&sort=price_asc#price_min=500&price_max=1000>

Just copy that and give it to the scraper. It will include all those settings while fetching the data.

No special setup, no tech know-how — just use PriceRunner as usual, and this tool will follow your filters. 🧠💡

***

### Sample Output

```json
{
  "category": "TVs",
  "id": "3290957562",
  "name": "LG 65QNED91T6A",
  "lowestPrice": "929.00",
  "currency": "GBP",
  "oldPrice": "1011.00",
  "priceDropPercent": "11.08",
  "retailer": "Electricshop",
  "retailerID": "2044",
  "brand": "LG",
  "description": "65 \" QNED, Smart TV",
  "url": "https://pricerunner.com/pl/2-3290957562/TVs/LG-65QNED91T6A-Compare-Prices",
  "image": "https://owp.klarna.com/product/3218838881/LG-65QNED91T6A.jpg"
},
{
  "category": "TVs",
  "id": "3297531432",
  "name": "Sony K55XR80PU",
  "lowestPrice": "933.00",
  "currency": "GBP",
  "oldPrice": "1399.00",
  "priceDropPercent": "33.31",
  "retailer": "The Yogi Bum",
  "retailerID": "312180",
  "brand": "Sony",
  "description": "55 \" OLED, Smart TV",
  "url": "https://pricerunner.com/pl/2-3297531432/TVs/Sony-BRAVIA-8-Compare-Prices",
  "image": "https://owp.klarna.com/product/3183337707/Sony-K55XR80PU.jpg"
},
{
  "category": "TVs",
  "id": "3291112380",
  "name": "Samsung QE75QN85D",
  "lowestPrice": "940.00",
  "currency": "GBP",
  "oldPrice": "1000.00",
  "priceDropPercent": "6.00",
  "retailer": "Amazon",
  "retailerID": "2137",
  "brand": "Samsung",
  "description": "75 \" Neo QLED, Smart TV",
  "url": "https://pricerunner.com/pl/2-3291112380/TVs/Samsung-QE75QN85D-Compare-Prices",
  "image": "https://owp.klarna.com/product/3126615600/Samsung-QE75QN85D.jpg"
}
```

> **Note on “Retailer” Filtering:**\
> When selecting a specific retailer in the PriceRunner URL, the filter limits results to products that retailer currently lists — but the scraper still returns the lowest-priced offer, even if it’s from another seller.
>
> This is useful for merchants who want to:
>
> - Benchmark their listings against competitors
> - Track market-wide pricing for products they stock

***

### Important Notice on Disallowed URLs

This scraper is designed to fully respect PriceRunner’s [robots.txt](https://www.pricerunner.com/robots.txt) rules. According to these guidelines, certain types of URLs are disallowed and will be automatically skipped, including:

- Any URL containing search=, ref=, s\_price\_drop=, or q=
- Dynamic price history or tracking endpoints
- Complex query strings that suggest advanced tracking or layered filters

These rules prohibit scraping dynamic search, sale, or referral pages. To stay compliant, users should only copy category URLs directly from PriceRunner’s browsing structure — **not from the site’s search box or Sale sections**.

> 🛡️ **No worries — any disallowed URL will be automatically skipped by the scraper. Your inputs remain safe and compliant.**

***

### Compliance with PriceRunner [Robots.txt](https://www.pricerunner.com/robots.txt)

This scraper was designed to comply with the directives specified in the [pricerunner.com robots.txt](https://www.pricerunner.com/robots.txt) file as of 25.06.2025. It targets only publicly accessible category listings and avoids all disallowed paths, search queries, or promotional segments. URL validation is built into the Actor to ensure safe and respectful use.

# Actor input Schema

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

Extract product prices & data by category from Pricerunner. Great for retail analysis, market tracking & competitive insights

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.pricerunner.com/cl/2/TVs?man_id=25,22,30&onlyInStock=true&retailer=2137&sort=price_asc#price_min=500&price_max=1000"
    }
  ]
}
```

# 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.pricerunner.com/cl/2/TVs?man_id=25,22,30&onlyInStock=true&retailer=2137&sort=price_asc#price_min=500&price_max=1000"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("m3web/pricerunner-category-products-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.pricerunner.com/cl/2/TVs?man_id=25,22,30&onlyInStock=true&retailer=2137&sort=price_asc#price_min=500&price_max=1000" }] }

# Run the Actor and wait for it to finish
run = client.actor("m3web/pricerunner-category-products-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.pricerunner.com/cl/2/TVs?man_id=25,22,30&onlyInStock=true&retailer=2137&sort=price_asc#price_min=500&price_max=1000"
    }
  ]
}' |
apify call m3web/pricerunner-category-products-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,m3web/pricerunner-category-products-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/T7zwp0phttsJyWIcu/builds/iK6ueRf8GhZnJqkvG/openapi.json
