# BAUHAUS.cz Scraper (CZ): Prices & Store Stock (`tsutseisoftware/bauhaus-cz-scraper`) Actor

Scrape BAUHAUS.cz (Czech DIY & garden stores) by category, search, article number, EAN or product URL: price, discount, unit price, EAN, MPN, stock in 9 stores, variants, rating & reviews, documents. Filters, monitoring, fast mode. Unofficial.

- **URL**: https://apify.com/tsutseisoftware/bauhaus-cz-scraper.md
- **Developed by:** [Tomáš Buchta](https://apify.com/tsutseisoftware) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 products

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

## BAUHAUS.cz Scraper (Czech Republic): Prices & Store Stock

Scrape products and prices from **BAUHAUS.cz**, the Czech website of the BAUHAUS DIY, home and garden stores. Start from a **category URL**, **product URLs**, **search terms** (like the website's search box: names, model numbers, brands, EANs), a list of **article numbers or EANs**, or the **whole catalog**. For each product you get the name and the **subtitle from the product tile** ("bílá; matná; 15 kg"), brand, **EAN (13 digits)**, the **manufacturer's part number**, current price, **discount ("Ušetříte X %") with the crossed-out price, which is the lowest price of the last 30 days**, the **sales unit** (piece, carton, bag…), **unit price** (CZK per litre, kg, m²…), **all quantity prices** ("od 12 ks"), online availability, labels (leaflet, sell-off, free shipping, online only, BAUHAUS warranty), the **energy class**, the **category breadcrumb of the product page**, "Co najdete v balení?", key features, all photo URLs and the related products.

Optionally you also get **stock in each of the 9 BAUHAUS stores**, the **rating with the star distribution**, **review texts** (without the authors' names), the **variants** (other sizes and shades with their prices), the **documents** (manuals, technical and safety data sheets, energy labels: names and URLs), and from the product page the technical parameters with **dimensions, thickness, weight, material and colour** as separate fields, **pick-up in a store** ("Rezervovat a vyzvednout na prodejně"), the assembly service and the **full description**.

This actor is for **bauhaus.cz** (Czech Republic, prices in CZK). The other BAUHAUS scrapers in Apify Store cover the German bauhaus.info.

Built for **price monitoring**: schedule it daily in monitoring mode and you get, and pay for, only products whose price, discount or availability changed, plus (optionally) the products that **disappeared** from the website and the ones that **came back**.

### Why use this BAUHAUS.cz scraper?

- 🔎 **Real product search, like the website's search box:** "EasyDrill 18V-38", "vrtačka", "Makita" or an EAN finds the products in the website's own order.
- 🔢 **Your own list of products:** up to 5 000 **article numbers or EANs** per run, read 50 per request. Ideal for monitoring your assortment or matching it with other shops.
- 🏬 **Stock in every BAUHAUS store** (Trmice, Plzeň, Praha 8, Praha 4, Liberec, České Budějovice, Brno ×2, Čestlice), the same numbers the website shows ("Skladem 5"). Filter products in stock in your store, with a minimum number of pieces, and get alerts when a store gets it back in stock.
- 🏷️ **Real prices, clearly separated:** current price, crossed-out price (the shop's lowest price of the last 30 days) and discount in %, the sales unit, the unit price (also when the website shows the price per m² as the main price, e.g. floor tiles) and every quantity price, each in its own field.
- 🧾 **Data for matching:** EAN as 13 digits with a verified check digit (the shop stores some without their leading zeros), the manufacturer's part number (MPN) and the category breadcrumb of the product page, all without opening product pages.
- 🎛️ **The website's own filters and sorting:** brand, **any category parameter** (voltage, battery type, colour, size…) and the **price range**, applied by the shop, so a page limit never cuts the results; sorted by price, by **newly added products** or by the last update. Or just paste a URL with filters set on the website.
- 🎨 **Variants**, ⭐ **ratings and review texts**, 📄 **documents** (manuals, data sheets, energy labels as URLs) and the **full description** on request.
- 📉 **Monitoring mode and price drop alerts:** only new or changed products, with `previousPrice`, `priceChange` and `priceChangePercent`; removed and reappeared products on request.
- ⚡ **Light and cheap:** no browser and no proxy. One request gives 50 products. Optional **fast mode** up to 5× faster for a tiny extra charge.

### What data can you get?

Share of products with a value, measured on runs from 2026-10-13 and 2026-10-14 (paints, drills, tiles, lights, garden; 500 products from "Barvy a tapety", 14 product pages, search and article number runs). Fields marked *optional* need the input in brackets.

| Field | Example | Filled |
|---|---|---|
| Name, subtitle, brand, article number | Dlažba Cotto Rosato, "340 × 340 mm; matná", 25523573 | name, subtitle 100 %, brand 80–100 % |
| EAN (13 digits), manufacturer's part number | 4053423483987, 0615A5008K | EAN ~90 %, MPN ~85 % |
| Category breadcrumb | Nářadí a stroje › … › Aku šroubováky a Aku vrtačky | 100 % |
| Price, sales unit | 321.30 CZK per `karton` | 100 % |
| Price before discount (= lowest price of the last 30 days), discount | 195 → 115 CZK, 41 % | discounted products (~2–8 %) |
| Unit price, units per sales unit | 189 CZK per m², 1.7 m² per carton (`mainPriceIsUnitPrice`: the website shows the m² price big) | ~40–70 % (paints, tiles) |
| Quantity prices | `[{"minQuantity": 12, "price": 139}]` | ~2–5 % |
| Availability | in_stock ("Dostupné online") | 100 % |
| Labels and flags | Z aktuálního letáku, Doprodej, Doprava zdarma, Pouze online, BAUHAUS záruka, Množstevní sleva, Novinka | ~10–50 % have a label |
| Energy class | E | products with an energy label (lights ~20 %) |
| In the box ("Co najdete v balení?") | 1× aku vrtací šroubovák; 1× akumulátor… | ~10–60 % |
| Photos | `imageUrl` + `imageUrls` (all photos) | 100 % (~60 % have more than one) |
| Related / similar products | article numbers of the product page carousels | related ~80 %, similar ~1 % |
| Stock in stores *(Add stock in BAUHAUS stores)* | Čestlice: 3, Brno Ivanovice: 2, … (9 stores), `storesInStock` | 100 % |
| Rating, ratings, stars *(Add rating)* | 4.6, 35, `{"5": 30, "4": 2, "3": 0, "2": 1, "1": 2}` | 100 % (most products have 0 ratings) |
| Review texts *(Add review texts)* | rating, title, text, date, language, verified purchase, shop | products with ratings |
| Documents *(Add documents)* | Návod k použití, Technický list, Energetický štítek… with URLs | ~60 % of tools and paints |
| Variants *(Add variants)* | 34 other shades and sizes with price and URL | products with a variant picker (paints, brushes) |
| Parameters, description *(Add parameters, dimensions, pick-up and description)* | Napětí: 18 V, …; the full description | 100 % |
| Pick-up in a store, assembly service *(same)* | `canReserveInStore`: true, `hasAssemblyService`: false | 100 % |
| Width, height, length, depth, thickness (cm), weight (kg), material, colour *(same)* | 34, –, 34, –, 0.7, –, keramika, hnědá | as in the parameters: weight ~60 %, length ~40 %, material ~30 % |

See the **Output** tab for all fields.

### How to scrape BAUHAUS.cz

1. Open BAUHAUS.cz, go to a category, e.g. `https://www.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008`, and paste the URL into **Category or product URLs**. Product URLs (e.g. `https://www.bauhaus.cz/lepici-paska-25363104`) work too. Or type words into **Search terms**, or paste **Article numbers** or **EANs**.
2. Optionally choose **Sort by**, **Site filters** (brands, parameters) and **Filters**, and set **Max products**. Turn on **Add stock in BAUHAUS stores**, **Add rating**, **Add review texts**, **Add variants**, **Add documents** or **Add parameters, dimensions, pick-up and description** if you need them.
3. Click **Start** and download the results as JSON, CSV or Excel, or use the API.

**Tip:** set filters and sorting on the website and paste the URL, e.g. `https://www.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008?manufacturer=7008&sort=final_price`. The actor keeps them (and tells you in the log about URL parameters it doesn't use).

### Use cases

**Daily price monitoring of a category, with removed products:**

```json
{
  "startUrls": [{ "url": "https://www.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008" }],
  "maxItems": 0,
  "onlyNewOrChanged": true,
  "includeRemovedProducts": true,
  "monitoringKey": "drills-daily"
}
```

**Price drop alerts** of at least 10 %: add `"minPriceDropPercent": 10`.

**Find a model like the search box:**

```json
{
  "searchQueries": ["EasyDrill 18V-38"],
  "nameKeywords": ["EasyDrill"],
  "maxItems": 10
}
```

The website's search also returns loosely related products after the best matches; **Name must contain** keeps only the model you want.

**Monitor your own assortment by article number or EAN:**

```json
{
  "productCodes": ["33134668", "21573637", "25523573"],
  "eans": ["0088381657914"],
  "includeStoreStock": true,
  "onlyNewOrChanged": true,
  "monitoringKey": "my-assortment"
}
```

**Cheapest 18 V Makita and DeWalt drills between 1 000 and 3 000 CZK you can buy online:**

```json
{
  "startUrls": [{ "url": "https://www.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008" }],
  "sortBy": "priceAsc",
  "brands": ["Makita", "Dewalt"],
  "parameterFilters": { "Napětí": "18 V" },
  "minPrice": 1000,
  "maxPrice": 3000,
  "onlyAvailableOnline": true,
  "maxItems": 20
}
```

**New in the shop:** `"sortBy": "newest"` lists the products added most recently first.

**What's in stock in the Brno stores:** `"stores": ["Brno Ivanovice", "Brno (Heršpická)"]` (adds the stock of all 9 stores to every product).

**Leaflet and sell-off deals:** **Only from the current leaflet** (`"onlyInLeaflet": true`), **Only sell-off** (`"onlySellOff": true`), or `"onlyDiscounted": true, "minDiscountPercent": 20`.

**At least 10 pieces in a Brno store, with an alert when a store runs out or gets it back:**

```json
{
  "startUrls": [{ "url": "https://www.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008" }],
  "stores": ["Brno Ivanovice", "Brno (Heršpická)"],
  "minStoreQuantity": 10,
  "onlyNewOrChanged": true,
  "monitorStoreAvailability": true,
  "monitoringKey": "brno-stock"
}
```

**Customer feedback analysis:** **Add review texts** (`"includeReviews": true, "maxReviewsPerProduct": 20`) with `"minReviewCount": 3`.

**Manuals, data sheets and energy labels for a product range:** **Add documents** (`"includeDocuments": true`).

**Product content for comparison or AI agents:** **Add parameters, dimensions, pick-up and description** with **Description length** 0 (the whole description).

**Energy-efficient light bulbs:** `"energyClasses": ["A", "B", "C"]` on a lights category.

**Reserve and pick up today:** **Only reservable in a store** (`"onlyReservableInStore": true`, reads the product pages) together with `"stores": ["Čestlice"]`.

**All shades and sizes of a paint:** a product URL (variants are always included) or **Add variants** for a whole category.

**Price per litre of wall paints or per m² of tiles:** read the category and sort by `unitPrice` (`unitPriceUnit` says per what; `salesUnitContent` how much one pack contains).

#### Site filters (applied by the shop)

| Input | What it does |
|---|---|
| **Sort by** | Recommended, Newest (newly added first), Recently updated (the website's "Latest"), Cheapest first, Most expensive first. Applies to category listings; search results keep the website's order. |
| **Brands** | Only these brands, e.g. `Bosch`, `Makita`. |
| **Parameter filters** | Any filter of the category: `{"Name": "value"}` or `{"Name": ["value 1", "value 2"]}`, e.g. `{"Napětí": "18 V", "Typ akumulátoru": "Li-Ion"}`. `"Kategorie"` filters by product type. |
| **Min price**, **Max price**, `?price=…` in the URL | The shop's price filter (incl. VAT): the whole category is searched, so the page limit doesn't cut the results. |

Names are matched without case and diacritics. If a parameter name doesn't exist in a category, the log lists the filters of that category, and a category where nothing can match is skipped. For search terms, article numbers, EANs and the whole catalog, brands and prices are filtered by the actor.

#### Filters (you don't pay for filtered-out products)

| Input | Example |
|---|---|
| **Only available online** | "Dostupné online" |
| **In stock in these stores**, **Only in stock in a store**, **Min pieces in a store** | `Čestlice`, 10 |
| **Only discounted products**, **Min discount (%)** | at least 15 % off |
| **Labels** | `Z aktuálního letáku`, `Doprodej`, `Doprava zdarma`, `Pouze online`, `BAUHAUS záruka`, `Množstevní sleva`, `Novinka` |
| **Only from the current leaflet**, **Only sell-off**, **Only "online only"**, **Only with free shipping** | the same labels as switches |
| **Energy classes** | `A`, `B`, `E` (products without an energy label are skipped) |
| **Exclude brands**, **Name must contain**, **Name must not contain** | `aku`, not `sada` |
| **Min rating**, **Min number of ratings**, **Only products with EAN** | 4.5, 5 |
| **Only reservable in a store** | "Rezervovat a vyzvednout na prodejně" (reads the product pages) |

**Only reservable in a store** needs the product page, and still returns the full **Max products**: when a product is filtered out after its page was read, the next one takes its place.

#### Search terms

A search term is searched like in the website's search box (the search service the website itself calls, in the same way as the browser): product names, model numbers ("EasyDrill 18V-38"), brands and EANs. Results come in the website's order, the best matches first; `position` is the rank and `searchQuery` the term. **Max pages per search term** (50 results per page, default 2, at most 20) limits each term; at most 10 terms per run.

**Search mode: Categories** reads instead the BAUHAUS categories whose name contains the words (Czech endings don't matter: "vrtačka" finds *Vrtačky*, *Stolní vrtačky*, …): **Max categories per search term** (1–5) categories, one after another and only while the term still needs products. The actor switches to it by itself when the website search doesn't answer, and says so in the status message.

#### Article numbers and EANs

**Article numbers** ("Artiklové číslo", 8 digits) and **EANs** (8–14 digits, leading zeros don't matter) are read straight from the shop's catalog, 50 (EANs 40) per request, including sold-out products. Codes the shop doesn't have are listed in the status message (`not found: …`). Product URLs are read the same way, plus their product page.

#### Whole catalog (mind the price)

**Whole catalog** reads every product URL of the shop's sitemap, about **94 000 products**, 50 per request. You pay for every saved product (about **$89** at $0.95 per 1 000), so set **Max products** on purpose (0 = no limit) and use filters to keep only what you need. It takes about 2.5 hours (about 35 minutes in fast mode).

#### Fast mode (optional, small extra charge)

**Fast mode** reads BAUHAUS.cz up to 5× faster: at most **60 requests per minute and 3 at a time** instead of 12 per minute and 2 at a time. It stays polite: the moment the website answers "too many requests", "service unavailable" or "forbidden", shows a challenge page or slows down, the run switches back to the normal speed for the rest of the run; it waits when the website sends `Retry-After` (and stops with what it has saved when asked to wait more than 2 minutes), and it never changes IP address to get around a limit. The status message says how many products were read fast and when and why the run slowed down.

- **Price:** the **Fast mode** event, **$0.01 per 1 000 products** ($0.00001 per product), only for products saved while the fast speed was on. Products saved after the switch back to the normal speed have no fast-mode charge. It respects your maximum cost per run: when the budget doesn't cover the charge, the run continues at the normal speed.
- **Measured** (2026-10-14, no proxy, 500 products of "Barvy a tapety" with store stock): 21 requests in 23 seconds in fast mode. The normal speed makes 12 requests per minute (measured: 36 requests in 2 minutes 56 seconds), so the same 21 requests take about 1 minute 45 seconds: fast mode is about 4–5× faster.
- Please don't run several fast-mode runs at the same time.

#### Advanced

- **Max products per URL** limits each start URL, search term, the article number list and the EAN list separately.
- **Max pages per category** (50 products per page) is a safety limit for large categories.
- **Max requests per minute**: 12 by default, 20 at most (fast mode ignores it).
- **Proxy configuration**: not needed; BAUHAUS.cz works without a proxy from Apify.

#### Monitoring mode explained

With **Monitoring: only new or changed products** each run compares products with the previous run that used the same **Monitoring key**. A product is returned as `changeType: "new"` or `"updated"` only if it is new or its **price, price before discount, quantity discount or availability** changed. `previousPrice`, `priceChange` and `priceChangePercent` are filled when the price changed (null when only something else changed). Ratings, labels and store piece counts are not compared.

- **Monitoring: store availability changes** adds the list of stores with stock: a product sold out in a store or back in stock there is returned as `"updated"`, with the old list in `previousStoresInStock` (piece counts alone don't count).
- **Monitoring: only price changes** narrows it to price changes, **Monitoring: min price drop (%)** to price drops.
- **Monitoring: include removed products** also returns products of the previous run that are no longer on the website (sold out, removed from the category or from the shop) as `changeType: "removed"` with `removedAt` and the last known name, price and URL; when such a product comes back, it is `"reappeared"`. It is checked only when the run read everything it was asked for (not when **Max products**, **Max products per URL**, a page limit or unread pages cut it short; the status message then says why). Use one **Monitoring key** per input.

### How much does it cost to scrape BAUHAUS.cz?

You pay per saved product. Platform usage is included. Filtered-out and unchanged products (in monitoring mode) are free.

| Plan | Price per 1 000 products | + Fast mode (only products saved in fast mode) |
|---|---|---|
| FREE | **$0.95** | +$0.01 |
| BRONZE | **$0.93** | +$0.01 |
| SILVER | **$0.90** | +$0.01 |
| GOLD and higher | **$0.85** | +$0.01 |

Store stock, ratings, review texts, variants, documents, product pages and removed-product rows don't change the price per product (a removed-product row is a row like any other). There is also a tiny start fee of $0.00005 per run.

BAUHAUS.cz renders every page on its server, so the actor is deliberately gentle: at most 2 requests at a time and **12 requests per minute** by default (20 at most; in fast mode at most 3 at a time and 60 per minute, slowing down automatically). Typical runs:

| Scenario | Requests | Time (normal / fast mode) | Price (FREE plan) |
|---|---|---|---|
| 20 products from a category | 2 | a few seconds | $0.02 |
| 1 000 products from a category | ~21 | ~2 min / ~30 s | $0.95 |
| 1 000 products with store stock and rating | ~61 | ~5 min / ~1 min | $0.95 |
| 1 000 article numbers or EANs | ~22 | ~2 min / ~30 s | $0.95 |
| 1 search term, 100 results | ~7 | ~40 s | $0.10 |
| 100 products with parameters, dimensions, pick-up and description | ~102 | ~9 min / ~2 min | $0.10 |
| Whole catalog (~94 000 products) | ~1 900 | ~2.5 h / ~35 min | ~$89 |

### Input example

```json
{
  "startUrls": [{ "url": "https://www.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008" }],
  "maxItems": 100,
  "sortBy": "priceAsc",
  "includeStoreStock": true
}
```

### Output example

A paint read from its product URL with store stock, rating, review texts and documents, with the whole description (store, review and variant lists shortened; the real output lists all 9 stores and all 34 variants):

```json
{
  "id": "bauhaus:21573637",
  "source": "bauhaus.cz",
  "url": "https://www.bauhaus.cz/luxol-original-tenkovrstva-lazura-21573637",
  "productCode": "21573637",
  "name": "Luxol Original Tenkovrstvá lazura",
  "subtitle": "palisandr; matná; 3,5 l",
  "brand": "Luxol",
  "manufacturerPartNumber": "5193395",
  "category": "Lazury",
  "categoryPath": [
    "Barvy a tapety",
    "Ochrana a péče o dřevo",
    "Lazury"
  ],
  "price": 659.0,
  "priceBeforeDiscount": null,
  "discountPercent": null,
  "isDiscounted": false,
  "lowestPrice30Days": null,
  "currency": "CZK",
  "salesUnit": "ks",
  "unitPrice": 188.29,
  "unitPriceUnit": "l",
  "salesUnitContent": 3.5,
  "mainPriceIsUnitPrice": false,
  "quantityDiscountPrice": null,
  "quantityDiscountMinQuantity": null,
  "quantityDiscounts": [],
  "availability": "in_stock",
  "availabilityText": "Dostupné online",
  "canReserveInStore": true,
  "storeAvailability": [
    {
      "store": "Trmice, Ústí nad Labem",
      "inStock": true,
      "quantity": 42
    },
    {
      "store": "Plzeň",
      "inStock": true,
      "quantity": 19
    }
  ],
  "storesWithStock": 9,
  "storesInStock": [
    "Trmice, Ústí nad Labem",
    "Plzeň",
    "Praha 8, Dolní Chabry",
    "Praha 4, Pankrác",
    "Liberec",
    "České Budějovice",
    "Brno Ivanovice",
    "Brno (Heršpická)",
    "Čestlice"
  ],
  "labels": [],
  "isInLeaflet": false,
  "isSellOff": false,
  "isOnlineOnly": false,
  "hasFreeShipping": false,
  "hasBauhausWarranty": false,
  "hasQuantityDiscount": false,
  "isNew": false,
  "energyClass": null,
  "hasAssemblyService": false,
  "highlights": [
    "Je určená k dekorativním nátěrům dřeva venku i vevnitř",
    "Odolává povětrnostním vlivům a UV záření, je vodoodpudivá",
    "Hloubkově penetruje, zlepšuje přilnavost dalších nátěrů",
    "Chrání dřevo proti plísním",
    "Neomezuje dýchání dřeva"
  ],
  "packageContents": null,
  "rating": 4.7,
  "reviewCount": 6,
  "ratingDistribution": {
    "5": 4,
    "4": 2,
    "3": 0,
    "2": 0,
    "1": 0
  },
  "ean": "5904078189092",
  "specifications": {
    "Značka": "Luxol",
    "Barva": "hnědá",
    "Odstín barvy": "palisandr",
    "Úroveň lesku": "matný",
    "Objem": "3.5 l",
    "Použití": "vnitřní i venkovní",
    "Druh nátěrové hmoty": "syntetická",
    "Vydatnost": "11–14 m²/l"
  },
  "widthCm": null,
  "heightCm": null,
  "lengthCm": null,
  "depthCm": null,
  "thicknessCm": null,
  "weightKg": null,
  "material": null,
  "color": "hnědá",
  "description": "Luxol Original je tenkovrstvá lazura pro dekorativní nátěry dřeva. Má zvýšenou vodoodpudivost, chrání proti UV záření, zajišťuje vysokou přilnavost dalšího nátěru, je mechanicky odolná, hluboce penetruje a neomezuje dýchání dřeva. Dobře se roztírá, jednoduše aplikuje a vyniká stálobarevností s matně saténovým vzhledem. Je vhodná pro nátěry všech stavebních součástí nebo dřevěných konstrukcí jako jsou ploty, pergoly, zahradní nábytek, obklady domů a veškeré venkovní dřevěné konstrukce. Pro svůj minimální zápach a rychlé schnutí je také dobrá pro nátěry v interiéru.",
  "documents": [
    {
      "name": "Bezpečnostní list",
      "type": "Safety data sheet",
      "url": "https://media.bauhaus.cz/media/catalog/product/documents/266605_p_doc.pdf"
    },
    {
      "name": "Technický list",
      "type": "Technical data sheet",
      "url": "https://media.bauhaus.cz/media/catalog/product/documents/266607_p_doc.pdf"
    }
  ],
  "reviews": [
    {
      "rating": 5,
      "title": "Doporučuji",
      "text": "Barva je perfektní a jsem velmi spokojená, kvalita.",
      "date": "2026-10-05",
      "language": "cs",
      "isVerifiedPurchase": true,
      "shop": "bauhaus.cz"
    },
    {
      "rating": 5,
      "title": "Luxol palisandr",
      "text": "Zakoupený produkt byl naprosto v pořádku",
      "date": "2026-07-08",
      "language": "cs",
      "isVerifiedPurchase": true,
      "shop": "bauhaus.cz"
    }
  ],
  "variantCount": 34,
  "variants": [
    {
      "productCode": "21575581",
      "url": "https://www.bauhaus.cz/luxol-original-tenkovrstva-lazura-21575581",
      "subtitle": "mahagon; matná; 2,5 l",
      "price": 649.0,
      "attributes": {
        "Objem": "2.5 l",
        "Odstín barvy": "mahagon"
      }
    },
    {
      "productCode": "21575439",
      "url": "https://www.bauhaus.cz/luxol-original-tenkovrstva-lazura-21575439",
      "subtitle": "lípa; matná; 2,5 l",
      "price": 649.0,
      "attributes": {
        "Objem": "2.5 l",
        "Odstín barvy": "lípa"
      }
    }
  ],
  "relatedProductCodes": [
    "11376025",
    "23146974",
    "22456272",
    "21675968",
    "22565840"
  ],
  "similarProductCodes": [],
  "imageUrl": "https://media.bauhaus.cz/media/catalog/product/3/1/312685_p_img.jpg",
  "imageUrls": [
    "https://media.bauhaus.cz/media/catalog/product/3/1/312685_p_img.jpg",
    "https://media.bauhaus.cz/media/catalog/product/3/1/312713_p_img.jpg",
    "https://media.bauhaus.cz/media/catalog/product/3/1/312486_p_img.jpg"
  ],
  "position": null,
  "searchQuery": null,
  "detailScraped": true,
  "sourceUrl": "https://www.bauhaus.cz/luxol-original-tenkovrstva-lazura-21573637",
  "scrapedAt": "2026-10-14T10:00:00Z",
  "changeType": null,
  "firstSeenAt": null,
  "previousPrice": null,
  "priceChange": null,
  "priceChangePercent": null,
  "previousStoresInStock": null,
  "removedAt": null
}
```

### Limitations

- **Price before discount** is the crossed-out price the shop shows next to "Ušetříte X %"; the shop says it is its lowest price of the last 30 days, so `lowestPrice30Days` has the same value. Without "Ušetříte" both are null, even if the shop has a "special price" internally. The actor doesn't calculate discounts itself.
- **Availability** is the online availability ("Dostupné online" / "Nedostupné online"). Products the shop lists as completely out of stock don't appear in its categories (in monitoring with removed products they show up as `removed`); by article number or EAN they are returned. Store stock is optional and shows the numbers from the website's store list; the shop updates it once a day.
- **Price and sales unit:** `price` is always the price of one sales unit (`salesUnit`: what you put in the cart, e.g. one carton of tiles). For tiles and similar products the website shows the price per m² as the big price; then `mainPriceIsUnitPrice` is true and that price is in `unitPrice`.
- **Category:** `categoryPath` is the breadcrumb the product page shows. In a category listing it is the product's category inside the listed category (a product can be in several categories, e.g. "Svítidla › … › Světelné řetězy" and the seasonal "Vánoční osvětlení"); campaign categories such as "Pálení čarodějnic" are not used.
- **EAN** comes from the shop's catalog, as 13 digits (leading zeros added when the shop stores them without; the check digit is verified, an invalid EAN is null).
- **Rating** is the average, the number of ratings and the number per star, the same verified ratings the product page shows. Most products have no ratings yet (`rating: null`, `reviewCount: 0`).
- **Review texts** (optional) are the texts the product page lists, newest first, with the rating, title, date, language, verified purchase and the shop (some are shared from bauhaus.info and other BAUHAUS shops and translated by the shop). The author's name or nickname, photos and replies are never returned, and e-mails and phone numbers are removed from the texts. The texts are written by customers and may still mention names; don't republish them.
- **Documents** (optional) are returned as name, type and URL; the actor never downloads the files.
- **Parameters, dimensions, pick-up and description** are on the product page only: turn on **Add parameters, dimensions, pick-up and description** (one extra request per product). For product URLs given as input they are always included. Width, height, length, depth, thickness, weight, material and colour are copied from the parameters when the product has them (sizes converted to cm, weight to kg; colour from "Barva", else "Odstín barvy"). The description is cut after **Description length** characters (200 by default, 0 = the whole text). Images are returned as URLs. Product photos and texts are copyrighted, so check the rights before you republish them.
- **Variants** come with their article number, URL, subtitle, price and picker values, not their availability; read them as article numbers for that.
- **Search terms** return what the website's search returns: after the best matches it adds loosely related products (use **Name must contain** to narrow it). **Sort by** doesn't apply to search results.
- **Not included:** the warranty length (a separate text block), leaflet dates and delivery prices (the product pages don't show them), manufacturer and safety contacts (GPSR) and anything behind a login.
- **Large categories:** the shop serves at most 200 pages (10 000 products) of one listing; **Max pages per category** defaults to 20 pages (1 000 products). For more use the subcategories, filters or **Whole catalog**.
- If the site rejects a request, it is asked once more after 30 seconds from the same IP address and session (never from another IP). If it rejects a few listing requests in a row even so, the run stops and says so. When only optional data (store stock, ratings, variants, documents, review texts) are rejected, that data is turned off for the rest of the run and the run goes on; the status message says which. Products whose page couldn't be read are returned with the listing data (`detailScraped: false`).

### For AI agents and API users

- **Minimal input:** `{"startUrls": [{"url": "https://www.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008"}], "maxItems": 20}`, or `{"searchQueries": ["EasyDrill 18V-38"], "maxItems": 5}`, or `{"productCodes": ["33134668"]}`.
- One row = one product = one charge (+ the fast-mode event when fast mode is on). Details, store stock, ratings, reviews, documents and variants don't change the price per product.
- 50 products per listing page. `maxItems` counts saved products, `maxItemsPerStartUrl` limits each URL, search term or code list.
- Prices are in CZK incl. VAT. `availability` is `in_stock` or `out_of_stock` (online). `ean` is 13 digits.
- Monitoring state is kept per `monitoringKey` between runs of the same user.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("tsutseisoftware/bauhaus-cz-scraper").call(run_input={
    "startUrls": [{"url": "https://www.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008"}],
    "sortBy": "priceAsc",
    "maxItems": 100,
})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(product["name"], product["ean"], product["price"], product["priceBeforeDiscount"])
```

#### JavaScript

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('tsutseisoftware/bauhaus-cz-scraper').call({
    searchQueries: ['EasyDrill 18V-38'], maxItems: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((p) => `${p.name}: ${p.price} CZK`));
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/tsutseisoftware~bauhaus-cz-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"productCodes": ["33134668", "21573637"], "includeStoreStock": true}'
```

You can also connect the actor to Make, Zapier, n8n, Google Sheets, Slack or webhooks and schedule it in Apify Console.

### Troubleshooting

| Status message | What to do |
|---|---|
| `Skipping unsupported URL` | Use a BAUHAUS.cz category or product URL (cart, account and search pages are not supported; use **Search terms** for searches). |
| `Ignored URL parameters …` (log) | The URL has parameters that are not filters of the website the actor knows; use the website's own filters or the input fields. |
| `unknown parameter …` (log) | Use one of the filter names listed in the log for that category. |
| `… skipped because the website filters match nothing there` | No product in that category has the requested brand or value. |
| `no products found for: …` | The website search finds nothing for that term; try another spelling. |
| `the website search did not answer, category names used for: …` | The search was replaced by category names for this run; run it again later for the product search. |
| `not found: …` | These article numbers or EANs are not in the shop (anymore). |
| `… could not be loaded` | The category or product doesn't exist anymore; open the URL in your browser. |
| `store stock turned off (…)` (or ratings, variants, documents, review texts) | The site rejected that optional data; the products are saved without it. Run again later. |
| `fast mode: N products, then the normal speed because …` | The website asked to slow down; the rest of the run used the normal speed (no fast-mode charge). |
| `removed products were not checked because …` | The run didn't read everything (e.g. **Max products** reached); removed products are checked in a complete run. |
| `BAUHAUS.cz is rejecting requests` | Try again later. |
| `… listing pages could not be read, so the results may be incomplete` | The site didn't answer some pages; run it again later for complete results. |
| `Saved 0 products (new or changed since last run)` | Nothing changed since the previous monitoring run; that's expected. |

### More Czech & Slovak e-shop scrapers

Compare prices across Czech and Slovak shops with the same output format (EAN for matching, monitoring mode):

- [Datart.cz Scraper](https://apify.com/tsutseisoftware/datart-scraper): electronics: prices, 30-day low, EAN, store availability
- [TSBOHEMIA.CZ Scraper](https://apify.com/tsutseisoftware/tsbohemia-scraper): IT & electronics: prices, discount codes, EAN, site filters
- [Planeo.cz Scraper](https://apify.com/tsutseisoftware/planeo-scraper): electronics & appliances: prices, discount codes, store pickup, EAN
- [Smarty.cz Scraper](https://apify.com/tsutseisoftware/smarty-scraper): electronics: prices, coupons, cashback, EAN, price history, store stock
- [Mironet.cz Scraper](https://apify.com/tsutseisoftware/mironet-scraper): electronics: prices, store stock, delivery date, MPN, warranty, price history
- [Alza Scraper (CZ, SK, HU, AT, DE)](https://apify.com/tsutseisoftware/alza-scraper): electronics: prices, coupons, ratings, reviews, pickup points, MPN
- [NAY.sk Scraper (Slovakia)](https://apify.com/tsutseisoftware/nay-sk-scraper): electronics: prices in EUR, discount codes, stock in 54 stores, EAN
- [BAUHAUS.sk Scraper (Slovakia)](https://apify.com/tsutseisoftware/bauhaus-sk-scraper): DIY & garden: EUR prices, Bratislava store stock, variants, EAN
- [Planeo.sk Scraper (Slovakia)](https://apify.com/tsutseisoftware/planeo-sk-scraper): electronics & appliances: EUR prices, discount codes, cashback, stock in 69 stores, EAN
- [TSBOHEMIA.SK Scraper (Slovakia)](https://apify.com/tsutseisoftware/tsbohemia-sk-scraper): IT & electronics: EUR prices, discount codes, EAN, lookups
- [Smarty.sk Scraper (Slovakia)](https://apify.com/tsutseisoftware/smarty-sk-scraper): electronics: EUR prices, coupons, cashback, stock in Slovak stores, EAN

### FAQ

#### Is it legal to scrape BAUHAUS.cz?

The actor collects publicly available product data (prices, availability, store stock, parameters, documents, variants, ratings) that anyone sees on the website without logging in. It doesn't return reviewers' names, nicknames or photos, or manufacturer and safety contacts, and it removes e-mails and phone numbers from review texts (which are optional and off by default; then you are responsible for using them lawfully). It reads the product data the website itself loads, does not log in, makes at most 12 requests per minute by default (60 in fast mode, with automatic slow-down) and never solves captchas or other challenges. How you use the data is your responsibility. Use it for price monitoring and analysis, and don't republish the catalogue, texts or photos. If unsure, consult a lawyer. Objections and data protection requests: the **Issues** tab of this actor.

#### How does the search work?

The same way as the search box on BAUHAUS.cz: the actor asks the search service the website uses, with the same request the browser sends, and reads the found products from the shop's catalog, 50 at a time. The kill switch `BAUHAUS_SEARCH_DISABLED` (set by the developer) switches the actor to the category-name search.

#### Why is the category different from the one in the shop's data?

Products are often also in campaign or collection categories ("Pálení čarodějnic", "Zahradní nábytek Diana"). The actor returns the breadcrumb the product page shows, not those.

#### Why is the rating different from the number on another site?

The actor returns the verified ratings that the BAUHAUS.cz product page shows ("Our reviews are verified"); a few unverified ratings in the shop's data are left out, as on the website.

#### What is the difference between `price` and `unitPrice`?

`price` is what one sales unit costs (a piece, a carton, a bag; see `salesUnit`), `unitPrice` the converted price per litre, kilogram, m² and so on (see `unitPriceUnit`), as printed under the price on the website. `salesUnitContent` says how many of those units one sales unit holds.

#### What does fast mode cost and when should I use it?

$0.01 per 1 000 products on top of the normal price, only for products saved at the fast speed. Use it for large categories, long code lists and the whole catalog, when the time matters.

#### Do I need a proxy?

No. BAUHAUS.cz works without a proxy from Apify's servers, so no proxy is used by default.

#### Is this for bauhaus.info (Germany) too?

No, only for bauhaus.cz (Czech Republic). The German shop runs on a different system.

#### Can I use it through the API?

Yes. See the Python, JavaScript and cURL examples above, or the **API** tab.

#### Something doesn't work

Open an issue in the **Issues** tab and include the input you used.

Unofficial, not affiliated with or endorsed by BAUHAUS k.s., the operator of BAUHAUS.cz. This tool is also known as a BAUHAUS.cz API, BAUHAUS price tracker or "hlídač cen BAUHAUS".

# Actor input Schema

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

BAUHAUS.cz category URLs (e.g. https://www.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008) or product URLs (e.g. https://www.bauhaus.cz/lepici-paska-25363104). Tip: set filters and sorting on the website and paste the URL (e.g. …-245008?manufacturer=7008\&sort=final_price); the actor keeps them. Product URLs are read 50 at a time and always include the product page data (EAN, parameters, pick-up, variants).

## `searchQueries` (type: `array`):

Search like the website's search box: a product name, model number, brand or EAN, e.g. "EasyDrill 18V-38", "vrtačka", "Makita" or "4053423483987". Results in the website's order (the first ones are the best matches). At most 10 terms per run; "Max pages per search term" limits each one.

## `productCodes` (type: `array`):

BAUHAUS article numbers ("Artiklové číslo", 8 digits, e.g. 33134668), read 50 per request. Good for monitoring your own list of products. Up to 5 000. Codes that are not found are listed in the status message.

## `eans` (type: `array`):

EAN barcodes (8 to 14 digits; leading zeros don't matter), read 40 per request. Up to 5 000.

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

Maximum number of products saved. You pay per saved product. 0 = no limit.

## `maxItemsPerStartUrl` (type: `integer`):

Limit for each start URL, search term, the list of article numbers and the list of EANs separately, so one large category doesn't use up the whole Max products. 0 = no limit.

## `includeDetails` (type: `boolean`):

Open each product page to add the technical parameters (with width, height, length, depth, thickness, weight, material and colour as separate fields), the description, the category breadcrumb of the product page, whether it can be reserved for pick-up in a store ("Rezervovat a vyzvednout na prodejně") and the assembly service. Slower: one extra request per product. EAN and the manufacturer's part number come without it.

## `descriptionMaxLength` (type: `integer`):

With "Add EAN, parameters, dimensions and pick-up": how many characters of the product description to keep (cut at a word). 0 = the whole description.

## `includeStoreStock` (type: `boolean`):

Add stock in each of the 9 BAUHAUS stores ("Skladem 5" as on the website). One extra request per 50 products.

## `includeRatings` (type: `boolean`):

Add the average rating, the number of ratings and the number of ratings per star, as on the product page (no names). One extra request per 50 products.

## `includeReviews` (type: `boolean`):

Add the review texts of each product with ratings: rating, title, text, date, language and verified purchase (never the author's name). Turns on "Add rating"; one extra request per product with ratings. Texts are written by customers and may contain names; don't republish them.

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

Newest reviews kept per product with "Add review texts".

## `includeVariants` (type: `boolean`):

Add the product's other variants from the website's variant picker ("Vyberte variantu", e.g. other sizes or shades): article number, URL, subtitle, price and the picker values, plus "Montáž produktu" (assembly service). One extra request per 50 products.

## `includeDocuments` (type: `boolean`):

Add the documents of the "Ke stažení" block: user and assembly manuals, technical and safety data sheets, energy labels and declarations, each with its name and URL (the files are not downloaded). One request per run.

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

Order of products in category listings. Sorting is done by the shop, so it's free and fast. "Newest" puts the products added to the shop most recently first; the website's own "Latest" sorts by the last change of a product ("Recently updated"). A sort in the URL is used when this is left on Recommended. Search results keep the website's order.

## `brands` (type: `array`):

Only these brands, e.g. 'Bosch', 'Makita'. Case doesn't matter. In category listings the shop filters itself (a category without any of the brands is skipped); other sources are filtered by the actor.

## `parameterFilters` (type: `object`):

Filter by the category's parameters, as on the website. Keys are parameter names, values a value or a list of values (any of them). Example for cordless drills: {"Napětí": \["18 V"], "Typ akumulátoru": "Li-Ion"}. "Kategorie" filters by product type. When a name isn't found, the log lists the filters of that category.

## `onlyAvailableOnline` (type: `boolean`):

Keep only products shown as "Dostupné online" (can be ordered for delivery).

## `stores` (type: `array`):

Only products in stock in one of these stores. Turns on store stock.

## `onlyAvailableInStores` (type: `boolean`):

Keep only products in stock in at least one BAUHAUS store. Turns on store stock.

## `minStoreQuantity` (type: `integer`):

Keep only products with at least this many pieces in one BAUHAUS store (in one of "In stock in these stores", if set), as shown "(Skladem N)". Turns on store stock. 0 = off.

## `onlyDiscounted` (type: `boolean`):

Keep only products shown with "Ušetříte X %" and a crossed-out price.

## `onlyInLeaflet` (type: `boolean`):

Keep only products with the label "Z aktuálního letáku".

## `onlySellOff` (type: `boolean`):

Keep only products with the label "Doprodej".

## `onlyOnlineOnly` (type: `boolean`):

Keep only products with the label "Pouze online".

## `onlyFreeShipping` (type: `boolean`):

Keep only products with the label "Doprava zdarma".

## `minDiscountPercent` (type: `integer`):

Keep only products with at least this discount, as shown by the shop.

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

Lowest price incl. VAT. In category listings the shop filters by price itself (the whole category is searched, page limits don't cut the results); other sources are filtered by the actor.

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

Highest price incl. VAT. In category listings the shop filters by price itself; other sources are filtered by the actor.

## `labels` (type: `array`):

Keep only products with one of these website labels.

## `energyClasses` (type: `array`):

Keep only products whose energy label shows one of these classes. Products without an energy label are skipped.

## `excludeBrands` (type: `array`):

Skip products of these brands, e.g. 'Bauhaus'. Case doesn't matter.

## `nameKeywords` (type: `array`):

Keep only products whose name contains one of these words (case and diacritics don't matter).

## `excludeNameKeywords` (type: `array`):

Skip products whose name contains one of these words.

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

Keep only products with at least this average rating (1–5). Turns on ratings.

## `minReviewCount` (type: `integer`):

Keep only products with at least this many ratings. Turns on ratings.

## `onlyWithEan` (type: `boolean`):

Keep only products with an EAN (the EAN comes with every product, no product page needed).

## `onlyReservableInStore` (type: `boolean`):

Keep only products the product page offers for "Rezervovat a vyzvednout na prodejně" (reserve and pick up in a store). Reads the product pages (like "Add EAN, parameters, dimensions and pick-up").

## `onlyNewOrChanged` (type: `boolean`):

Save only products that are new or whose price, availability, discount or quantity price changed since the previous run with the same monitoring key. You pay only for those.

## `monitoringKey` (type: `string`):

Name of the saved state. Use a different key for each monitored set of URLs.

## `onlyPriceChanges` (type: `boolean`):

With monitoring: skip products whose only change is availability or discount.

## `minPriceDropPercent` (type: `number`):

With monitoring: save only products whose price dropped by at least this percentage since the previous run.

## `monitorStoreAvailability` (type: `boolean`):

With monitoring: also report products whose list of stores with stock changed (e.g. back in stock in Čestlice), with the previous list in previousStoresInStock. Piece counts alone don't count. Turns on store stock.

## `includeRemovedProducts` (type: `boolean`):

With "Monitoring: only new or changed products": also return products from the previous run with the same Monitoring key that are no longer on the website (sold out or removed), as rows with changeType "removed", removedAt and the last known name, price and URL; when one comes back it is "reappeared". Checked only when the run read everything (Max products, Max products per URL, page limits or unread pages skip the check, and the status message says why). Removed rows are charged like any other product. Use one Monitoring key per input.

## `fastMode` (type: `boolean`):

Reads BAUHAUS.cz up to 5x faster: at most 60 requests per minute and 3 at a time instead of 12 per minute and 2 at a time. It stays polite: the moment the website answers "too many requests", "service unavailable", "forbidden", shows a challenge or slows down, the run switches back to the normal speed for the rest of the run; it waits when the website asks it to wait and never changes IP address to get around a limit. Extra charge "Fast mode" ($0.01 per 1 000 products, see the Pricing tab) only for products saved while the fast speed was on. Please don't run several fast-mode runs at the same time.

## `maxRequestsPerMinute` (type: `integer`):

Requests per minute at the normal speed (all kinds together). The shop renders every page on its server, so the actor stays gentle; 20 is the maximum. Fast mode ignores this.

## `searchMode` (type: `string`):

Products: the website's own product search. Categories: the BAUHAUS.cz categories whose name contains the words are read instead (the older behaviour, also used automatically when the website search does not answer).

## `maxPagesPerSearch` (type: `integer`):

Pages of 50 search results read for each search term (in Categories mode: pages of 50 products in each category found).

## `maxCategoriesPerSearch` (type: `integer`):

Categories mode: how many matching categories are read for each search term (best matches first).

## `scrapeWholeCatalog` (type: `boolean`):

Read every product URL of the sitemap (about 94 000), 50 per request. You pay for every saved product: the whole catalog costs about $460 at $4.90 per 1 000. "Max products" still stops the run (set it on purpose; 0 = no limit). It takes about 2.5 hours (about 35 minutes in fast mode). Filters apply.

## `maxPagesPerCategory` (type: `integer`):

Pages of 50 products read per category URL (20 pages = 1,000 products). The shop serves at most 200 pages; for bigger categories use their subcategories or "Whole catalog".

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

BAUHAUS.cz works without a proxy from Apify, so no proxy is used by default.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008"
    }
  ],
  "maxItems": 20,
  "maxItemsPerStartUrl": 0,
  "includeDetails": false,
  "descriptionMaxLength": 200,
  "includeStoreStock": false,
  "includeRatings": false,
  "includeReviews": false,
  "maxReviewsPerProduct": 10,
  "includeVariants": false,
  "includeDocuments": false,
  "sortBy": "relevance",
  "parameterFilters": {},
  "onlyAvailableOnline": false,
  "onlyAvailableInStores": false,
  "onlyDiscounted": false,
  "onlyInLeaflet": false,
  "onlySellOff": false,
  "onlyOnlineOnly": false,
  "onlyFreeShipping": false,
  "onlyWithEan": false,
  "onlyReservableInStore": false,
  "onlyNewOrChanged": false,
  "monitoringKey": "default",
  "onlyPriceChanges": false,
  "monitorStoreAvailability": false,
  "includeRemovedProducts": false,
  "fastMode": false,
  "maxRequestsPerMinute": 12,
  "searchMode": "products",
  "maxPagesPerSearch": 2,
  "maxCategoriesPerSearch": 3,
  "scrapeWholeCatalog": false,
  "maxPagesPerCategory": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `products` (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 = {
    "startUrls": [
        {
            "url": "https://www.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008"
        }
    ],
    "maxItems": 20,
    "parameterFilters": {},
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tsutseisoftware/bauhaus-cz-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.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008" }],
    "maxItems": 20,
    "parameterFilters": {},
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("tsutseisoftware/bauhaus-cz-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.bauhaus.cz/aku-sroubovaky-a-aku-vrtacky-245008"
    }
  ],
  "maxItems": 20,
  "parameterFilters": {},
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call tsutseisoftware/bauhaus-cz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tsutseisoftware/bauhaus-cz-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/qkWBgjdaA2Hh2w3RS/builds/40aZrUu6yN7aBdMCV/openapi.json
