# Praxis Scraper — Dutch DIY & Home Improvement Products (`studio-amba/praxis-scraper`) Actor

Scrape DIY products from Praxis.nl via their internal search API. One of the Netherlands' major hardware chains — tools, paint, flooring, and building supplies.

- **URL**: https://apify.com/studio-amba/praxis-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 1 total users, 0 monthly users, 96.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 result scrapeds

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

## Praxis Scraper -- Dutch DIY & Home Improvement Products

Extract products, prices, ratings, promotions, and availability from praxis.nl -- one of the Netherlands' largest DIY retailers with 180+ stores, part of the Maxeda DIY Group. Fast API-based extraction with automatic pagination.

### What is Praxis Scraper?

Praxis is a cornerstone of the Dutch DIY market. With over 180 stores across the Netherlands and a massive online catalog, it competes directly with GAMMA, Karwei, and Hornbach for the Dutch home improvement shopper. The chain is part of the Maxeda DIY Group and carries a full range of products from power tools and building materials to paint, flooring, garden supplies, and bathroom fixtures.

This scraper uses Praxis's internal search service API for reliable, fast data extraction. No browser rendering required -- just clean API calls with structured JSON responses.

- **Dutch DIY market price tracking** -- Monitor Praxis pricing against GAMMA, Karwei, Hornbach, and other Dutch retailers for competitive intelligence
- **Promotion and discount analysis** -- Track promotional cycles, discount percentages, and markdown patterns across product categories
- **Cross-border pricing comparison** -- Compare Dutch DIY pricing (Praxis) with Belgian (GAMMA, Brico) and German (OBI, Hornbach) retailers within the same product categories
- **Marketplace seller research** -- Praxis includes third-party seller products; track which sellers offer what and at which price points
- **Product assortment benchmarking** -- Map the full Praxis catalog against competitor assortments to identify exclusive products, gaps, and overlaps

### What data does Praxis Scraper extract?

- 🔧 **Product name** -- Full Dutch product title
- 💰 **Price & promotions** -- Current price, original price, discount value (percentage or absolute)
- 🏷️ **Brand** -- Manufacturer name (Bosch, DeWalt, Flexa, Karwei, etc.)
- 📦 **Stock & delivery** -- Availability status based on delivery modes
- ⭐ **Ratings & reviews** -- Customer star rating and review count
- 🖼️ **Product image** -- Primary product image URL
- 🔗 **Product URL** -- Direct link to the product on praxis.nl
- 📂 **Category hierarchy** -- Full category path from parent names
- 🏗️ **Product identifiers** -- EAN barcode, product ID, SKU
- 🛒 **Seller** -- Marketplace seller name when applicable

### How to scrape Praxis

| Field | Type | Description |
|-------|------|-------------|
| `searchQuery` | String | Search by keyword -- e.g., `"verf"`, `"laminaat"`, `"boormachine"`, `"tuinset"` |
| `categoryUrl` | String | Category page URL -- e.g., `https://www.praxis.nl/verf-behang-wandbekleding/muurverf/wc01/` |
| `maxResults` | Integer | Maximum products to return (default: 100, max: 50,000) |
| `proxyConfiguration` | Object | Optional proxy for reliability on large runs |

**Tips:**

- Provide either `searchQuery` OR `categoryUrl` -- the actor requires at least one
- For category scraping, paste the full Praxis.nl URL including the category code at the end (e.g., `wc01`, `wc0501`)
- The actor automatically handles API redirects when Praxis maps a search query to a specific category
- No proxy is strictly required, but recommended for runs above 1,000 products

### Output

```json
{
    "name": "DeWalt accu schroefboormachine DCD778D2T 18V",
    "brand": "DeWalt",
    "price": 199.00,
    "currency": "EUR",
    "url": "https://www.praxis.nl/gereedschap/elektrisch-gereedschap/accu-boormachines/dewalt-accu-schroefboormachine-dcd778d2t/6543210",
    "scrapedAt": "2026-04-03T12:00:00.000Z",
    "originalPrice": 229.00,
    "discount": "-13%",
    "ean": "5035048693384",
    "productId": "6543210",
    "sku": "6543210",
    "inStock": true,
    "rating": 4.7,
    "reviewCount": 89,
    "imageUrl": "https://www.praxis.nl/media/6543210.jpg",
    "category": "Accu boormachines",
    "categories": ["Gereedschap", "Elektrisch gereedschap", "Accu boormachines"]
}
```

A paint product example:

```json
{
    "name": "Flexa Creations muurverf extra mat Tranquil Dawn 2,5L",
    "brand": "Flexa",
    "price": 42.99,
    "currency": "EUR",
    "url": "https://www.praxis.nl/verf-behang-wandbekleding/muurverf/flexa-creations-muurverf-tranquil-dawn/7654321",
    "scrapedAt": "2026-04-03T12:00:00.000Z",
    "ean": "8711113094832",
    "productId": "7654321",
    "sku": "7654321",
    "inStock": true,
    "rating": 4.4,
    "reviewCount": 67,
    "imageUrl": "https://www.praxis.nl/media/7654321.jpg",
    "category": "Muurverf",
    "categories": ["Verf, behang & wandbekleding", "Muurverf"],
    "seller": "Praxis"
}
```

### How much does it cost?

Praxis Scraper uses direct API calls with no browser overhead.

| Scenario | Products | Est. cost |
|----------|----------|-----------|
| Quick search | 100 | ~$0.10 |
| Category scan | 500 | ~$0.25 |
| Department inventory | 2,000 | ~$0.70 |
| Full catalog snapshot | 10,000 | ~$2.00 |
| Weekly price monitoring | 5,000/week | ~$3.50/month |

No residential proxy costs needed for normal operation.

### Can I integrate?

- **JSON, CSV, Excel** -- Direct dataset download
- **Google Sheets** -- Automatic sync via Apify
- **Webhooks** -- Trigger pipelines on run completion
- **API** -- Programmatic access
- **Zapier / Make** -- 5,000+ app integrations
- **Amazon S3, Google Cloud Storage** -- Cloud storage push

### Can I use it as an API?

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/praxis-scraper").call(run_input={
    "searchQuery": "laminaat",
    "maxResults": 200
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['name']} - EUR {item['price']}")
```

**JavaScript:**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('studio-amba/praxis-scraper').call({
    searchQuery: 'laminaat',
    maxResults: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### FAQ

**How does Praxis relate to GAMMA Belgium?**
Praxis is part of the Maxeda DIY Group (formerly Intergamma). GAMMA Belgium also falls under this group. They share some private-label products but operate independently with separate pricing, assortments, and store networks. Use both scrapers for Benelux DIY comparison.

**Can I scrape the Praxis marketplace sellers?**
Yes. When a product is sold by a third-party marketplace seller, the `seller` field will contain the seller name. Products sold directly by Praxis will show "Praxis" or have no seller field.

**What happens when a search query redirects?**
Praxis sometimes redirects search queries to a specific category page. The actor handles this automatically -- it detects the redirect, extracts the category code, and continues fetching products through the API.

**Does the scraper work for Karwei?**
No. Karwei is a separate brand within the Maxeda DIY Group with its own website (karwei.nl). This actor is specifically built for praxis.nl.

**Can I scrape all Praxis products?**
Yes. Use a broad search term or a top-level category URL and set `maxResults` to a high number. The full Praxis catalog contains roughly 30,000-50,000 products.

**How often does Praxis update its pricing?**
Prices are fetched live from the Praxis search API. Promotions and discounts are reflected in real-time. Run the actor on a schedule for ongoing price monitoring.

### Limitations

- Requires either `searchQuery` or `categoryUrl` -- the actor will not run without at least one
- The search API returns 24 products per page, so very large extractions require many API calls
- Product descriptions and detailed specs are not available through the search API; they would require visiting individual product pages
- Some search queries may redirect to unexpected categories -- check the logs if results seem off
- Stock status is based on online delivery availability, not individual store inventory

### Other DIY & home improvement scrapers

Map the full Benelux and European DIY market:

- **[GAMMA Scraper](https://apify.com/studio-amba/gamma-scraper)** -- Belgium, Intergamma/Maxeda group
- **[Brico Scraper](https://apify.com/studio-amba/brico-scraper)** -- Belgium's largest DIY chain
- **[Hubo Scraper](https://apify.com/studio-amba/hubo-scraper)** -- Belgian neighborhood DIY
- **[Leroy Merlin Scraper](https://apify.com/studio-amba/leroymerlin-scraper)** -- France's #1 DIY retailer
- **[Castorama Scraper](https://apify.com/studio-amba/castorama-scraper)** -- France, Kingfisher group
- **[OBI Scraper](https://apify.com/studio-amba/obi-scraper)** -- Germany's leading DIY chain
- **[Hornbach Scraper](https://apify.com/studio-amba/hornbach-scraper)** -- German/EU DIY megastore
- **[Bauhaus Scraper](https://apify.com/studio-amba/bauhaus-scraper)** -- German/EU hardware & DIY
- **[Toom Scraper](https://apify.com/studio-amba/toom-scraper)** -- Germany, REWE group DIY

### Your feedback

Questions? Bug reports? Feature requests? Open an issue on the actor's page or contact us through Apify. We maintain and improve this scraper based on user feedback.

# Actor input Schema

## `searchQuery` (type: `string`):

Search for products by name or keyword (e.g., 'verf', 'laminaat', 'boormachine'). Leave empty if using categoryUrl.

## `categoryUrl` (type: `string`):

Full Praxis.nl category URL to scrape (e.g., 'https://www.praxis.nl/verf-behang-wandbekleding/muurverf/wc01/'). Leave empty if using searchQuery.

## `maxResults` (type: `integer`):

Maximum number of products to return.

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

Proxy settings. Not strictly required for this site, but recommended for very large runs.

## Actor input object example

```json
{
  "searchQuery": "verf",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "NL"
  }
}
```

# 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 = {
    "searchQuery": "verf",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "NL"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/praxis-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 = {
    "searchQuery": "verf",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "NL",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/praxis-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 '{
  "searchQuery": "verf",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "NL"
  }
}' |
apify call studio-amba/praxis-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/praxis-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/r8RFMdRy4zWykBU4J/builds/l9YLRMXnVbl0GZfNw/openapi.json
