# Pricerunner Product Search Scraper (`stealth_mode/pricerunner-product-search-scraper`) Actor

Scrape product listings from Pricerunner.dk with detailed pricing, merchant offers, and product metadata. Collect up to 200 items per search category—perfect for price monitoring, market research, and competitive intelligence in the Danish e-commerce market.

- **URL**: https://apify.com/stealth\_mode/pricerunner-product-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 1 total users, 1 monthly users, 96.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.
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

## Pricerunner Product Search Scraper: Extract Price Comparison Data

***

### What Is Pricerunner?

Pricerunner.com (All Counties site) is leading price comparison platform, aggregating thousands of products from hundreds of online retailers. From skincare to electronics, users browse categories, compare prices, and find the best deals. For businesses and researchers, this wealth of structured pricing data represents a goldmine—yet manual data collection is impractical at scale. The **Pricerunner Product Search Scraper** solves this, automating extraction of product listings, prices, merchant offers, and ratings from any category page.

***

### Overview

The **Pricerunner Product Search Scraper** extracts product listings from category search pages on Pricerunner, delivering detailed product intelligence with 19+ data fields per item. It is ideal for:

- **Price monitoring services** tracking competitor pricing and discounts
- **E-commerce analysts** benchmarking product availability and merchant coverage
- **Retailers** monitoring market position and price trends
- **Researchers** studying online market dynamics and consumer pricing

The scraper supports bulk URL processing, configurable item limits, and graceful error handling—allowing reliable collection of hundreds of products in a single run.

***

### Input Format

The Actor supports **two scraping modes** — use only **one at a time**:

1. **Scrape by URLs** — scrape data directly from a list of Pricerunner product category/search URLs.

```json
{
  "urls": [
    "https://www.pricerunner.dk/cl/253/Hudpleje"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
```

2. **Scrape by search filters** — scrape data using a keyword and additional filters (price range, discount, rating, etc.) instead of providing URLs.

```json
{
  "keyword": "a",
  "price_range": "60_200",
  "discount": "10",
  "rating": "3",
  "max_items_per_url": 200
}

```

There is also a **General settings** group that applies to both modes.

#### 1. Scrape by URLs

Use this mode when you already have specific Pricerunner product category URLs (e.g., skincare, electronics). When this mode is used, all options in the "Scrape by search filters" section will be disabled.

| Field | Type | Default | Description |
|---|---|---|---|
| `urls` | `array` | *(required)* | List of Pricerunner product category/search URLs to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list. |
| `ignore_url_failures` | `boolean` | `true` | If `true`, the scraper continues running when a URL fails instead of stopping the entire run. Recommended for bulk jobs. |

#### 2. Scrape by search filters

Use this mode when you want to search using a keyword and additional filter attributes instead of scraping by URLs. If you use this mode, leave the `urls` field above empty.

| Field | Type | Default | Description |
|---|---|---|---|
| `keyword` | `string` | — | The keyword to search for. |
| `price_range` | `string` (`""`, `_70`, `70_210`, `210_1000`, `1000_3000`, `3000_`) | — | Price range filter: Any, Up to DKK 70, DKK 70–210, DKK 210–1,000, DKK 1,000–3,000, At least DKK 3,000. |
| `discount` | `string` (`""`, `5`, `10`, `25`, `50`) | — | Minimum discount filter: Any, 5%, 10%, 25%, 50%. |
| `rating` | `string` (`""`, `1`, `2`, `3`, `4`) | — | Minimum rating filter: Any, 1+, 2+, 3+, 4+. |
| `page` | `integer` | — | The page number to start scraping from. |

#### 3. General settings

Applies to both scraping modes above.

| Field | Type | Default | Description |
|---|---|---|---|
| `max_items_per_url` | `integer` | `20` (max: `200`) | Maximum number of products to scrape per URL/search. Higher limits capture more listings but increase run time. |

***

### Output Format

**Sample output**

```json
{
  "id": "3201101324",
  "name": "La Roche-Posay Anthelios UVMune 400 Invisible Fluid SPF50+ 50ml",
  "description": "Solcreme til ansigtet, 1stk, Beroligende, Anti-pollution, Vandafvisende, SPF, Dermatologisk testet, Ikke-komedogen, UVA-beskyttelse, UVB-beskyttelse, Antioxidanter, Ceramider, Hyaluronsyre, Niacinamid",
  "url": "/pl/253-3201101324/Hudpleje/La-Roche-Posay-Anthelios-UVMune-400-Invisible-Fluid-SPF50-50ml-Sammenlign-Priser",
  "image": {
    "id": "3242509916",
    "url": null,
    "path": "/product/3242509916/La-Roche-Posay-Anthelios-UVMune-400-Invisible-Fluid-SPF50-50ml.jpg",
    "description": "La Roche-Posay Anthelios UVMune 400 Invisible Fluid SPF50+ 50ml"
  },
  "filter_hits": [],
  "rank": {
    "rank": 1
  },
  "brand": {
    "id": "168191",
    "name": "La Roche-Posay",
    "image": null
  },
  "rating": {
    "number_of_ratings": 696,
    "average_rating": "4.55",
    "count": 696,
    "average": "4.55"
  },
  "price_drop": null,
  "ribbon": {
    "type": "WATCHED",
    "value": "200+",
    "description": null
  },
  "product_group": null,
  "cheapest_offer": {
    "price": {
      "amount": "139.00",
      "currency": "DKK"
    },
    "merchant": {
      "id": "2957",
      "name": "",
      "image": null
    },
    "price_per_unit": {
      "price": {
        "amount": "2780.00",
        "currency": "DKK"
      },
      "unit": "L"
    }
  },
  "classification": "ONE",
  "preview_merchants": {
    "count": 23,
    "merchants": []
  },
  "installment": {
    "price": {
      "amount": "46.33",
      "currency": "DKK"
    },
    "term_length": 3,
    "interval": "MONTHLY",
    "frequency": 30
  },
  "lowest_price": {
    "amount": "139.00",
    "currency": "DKK"
  },
  "out_of_stock": false,
  "condition": "NEW",
  "from_url": "https://www.pricerunner.dk/cl/253/Hudpleje"
}
```

Each scraped product returns a comprehensive record with the following fields:

#### Product Identity & Metadata

| Field | Meaning | Example |
|---|---|---|
| `ID` | Unique Pricerunner product identifier | `12345678` |
| `Name` | Official product name | `CeraVe Moisturizing Cream` |
| `Description` | Product summary or subtitle | `Daily facial moisturizer for sensitive skin` |
| `URL` | Direct link to the product page on Pricerunner | `https://www.pricerunner.dk/p/...` |
| `Image` | Product image URL | `https://www.pricerunner.dk/mimg/...` |
| `Brand` | Manufacturer or brand name | `CeraVe` |
| `Product Group` | Category classification (e.g., skincare type) | `Face Moisturizers` |
| `Classification` | Additional product classification | `Creams & Balms` |

#### Pricing & Availability

| Field | Meaning | Example |
|---|---|---|
| `Lowest Price` | Cheapest current price across all merchants | `149 DKK` |
| `Cheapest Offer` | Merchant offering the lowest price | `Matas` |
| `Price Drop` | Percentage or amount price has decreased | `15%` |
| `Out Of Stock` | Whether the product is currently unavailable | `false` |
| `Installment` | Whether installment payment is available | `true` |

#### Ratings, Ranks & Visibility

| Field | Meaning | Example |
|---|---|---|
| `Rating` | Customer review rating (typically 0–5 stars) | `4.5` |
| `Rank` | Product popularity ranking within category | `1` |
| `Filter Hits` | Number of user searches matching this product | `1,245` |
| `Ribbon` | Special tag or label (e.g., "Best Buy", "Bestseller") | `Bestseller` |
| `Preview Merchants` | List of up to 5 retailers offering the product | `["Matas", "ApotekA", "Cosmonova"]` |
| `Condition` | Product condition status (new, used, refurbished) | `New` |

***

### How to Use

1. **Identify categories** — On Pricerunner.dk, navigate to product categories (e.g., Hudpleje, Electronics, Fashion). Copy the full URL from your browser.
2. **Build your input** — Paste category URLs into the `urls` array in JSON format. Set `max_items_per_url` based on your needs (e.g., 200 for comprehensive capture).
3. **Enable error tolerance** — Set `ignore_url_failures: true` to handle occasional timeouts without stopping the entire run.
4. **Run the scraper** — Start the actor and monitor progress in the task log.
5. **Retrieve & process results** — Download results as JSON or CSV, then import into spreadsheets, databases, or analytics tools.

**Tips:**

- Start with `max_items_per_url: 50` to test, then increase for production runs.
- Pricerunner sometimes sorts dynamically; results may vary slightly between runs.
- Use a proxy (residential recommended) if scraping high-volume categories.

***

### Use Cases & Business Value

- **Price intelligence:** Track competitor pricing, identify price drops, and monitor retail margins
- **Market research:** Analyze product availability, merchant coverage, and rating trends
- **Aggregator platforms:** Feed price data into deal-finder or shopping comparison apps
- **Retail analytics:** Benchmark your product positioning against market alternatives
- **Trend monitoring:** Identify bestselling or emerging products in real-time

By automating data collection, you eliminate days of manual work while ensuring data freshness and accuracy. Structured pricing data unlocks actionable insights for procurement, marketing, and strategic pricing decisions.

***

### Conclusion

The **Pricerunner Product Search Scraper** delivers reliable, large-scale access to Danish e-commerce pricing and product data. Whether you're monitoring the market, powering an aggregator, or conducting research, this scraper transforms Pricerunner listings into ready-to-analyze datasets. Configure your URLs, set your limits, and start collecting competitive intelligence today.

# Actor input Schema

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

Add the URLs of the product search list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `keyword` (type: `string`):

Enter the keyword to search for items

## `price_range` (type: `string`):

Enter the price range to search for items

## `discount` (type: `string`):

Enter the discount to search for items

## `rating` (type: `string`):

Enter the rating to search for items

## `page` (type: `integer`):

Specify the page number to start scraping from

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.pricerunner.dk/cl/253/Hudpleje"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.pricerunner.dk/cl/253/Hudpleje"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/pricerunner-product-search-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 = {
    "urls": ["https://www.pricerunner.dk/cl/253/Hudpleje"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/pricerunner-product-search-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 '{
  "urls": [
    "https://www.pricerunner.dk/cl/253/Hudpleje"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/pricerunner-product-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,stealth_mode/pricerunner-product-search-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/zUtgFvAEJ8th5ucAk/builds/5hYeujHMWEGV026dT/openapi.json
