# BAUHAUS Product Scraper (`parsebird/bauhaus-product-scraper`) Actor

Scrape BAUHAUS (bauhaus.info) products by keyword: title, brand, EAN, price, rating, reviews, availability, images, breadcrumbs, specs. Export as JSON, CSV, or Excel.

- **URL**: https://apify.com/parsebird/bauhaus-product-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.90 / 1,000 product overviews

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

### BAUHAUS Product Scraper

Scrape product data from [BAUHAUS](https://www.bauhaus.info/) (bauhaus.info) by search keyword — **title, brand, EAN, price, rating, review count, availability, and images** in fast overview mode, plus **breadcrumbs, USP highlights, the full technical-data table, and the long description** in detail mode. No BAUHAUS account, no API key.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search bauhaus.info by one or more keywords, sort by relevance, price, or topseller, choose overview or detail depth, and get clean structured product data — EUR pricing, EAN/GTIN, ratings, stock status, images, category path, and the complete specs table — ready for JSON, CSV, or Excel.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Use the Apify actor "parsebird/bauhaus-product-scraper" via the ApifyClient. Example (Python): from apify_client import ApifyClient; client = ApifyClient("<APIFY_TOKEN>"); run = client.actor("parsebird/bauhaus-product-scraper").call(run_input={"keywords": ["bohrmaschine", "akkuschrauber"], "scrapeMode": "overview", "sort": "relevance", "maxResults": 100}); items = list(client.dataset(run["defaultDatasetId"]).iterate_items()). Key inputs: keywords (array of BAUHAUS search terms), scrapeMode ("overview" fast search, or "detail" which adds the technical-data table + long description), sort ("relevance" | "price_low" | "price_high" | "topseller"), maxResults (integer, total across all keywords), proxyConfiguration (defaults to Apify Proxy UNBLOCKER group, which is required). Output fields per product: product_id, productTitle, brand, type_designation, ean, price, currency, rating, review_count, availability, in_stock, images, url, sku, search_keyword, scrapeMode, scrapedAt; detail mode also adds breadcrumbs, highlights, specs, description. Full API spec: https://apify.com/parsebird/bauhaus-product-scraper/api. Get an API token at https://console.apify.com/settings/integrations.
```

### What is BAUHAUS Product Scraper?

BAUHAUS Product Scraper is a **BAUHAUS scraper** that extracts structured product data from [bauhaus.info](https://www.bauhaus.info/), the German DIY, garden, and workshop retailer. Enter search terms such as `bohrmaschine`, `akkuschrauber`, or `gartenstuhl` and the actor collects every matching product with **EUR price, brand, EAN/GTIN barcode, star rating, review count, availability, and image URLs**.

Switch to **detail mode** and each product page is opened for the **complete technical-data table** (`specs`), the category **breadcrumbs**, the USP **highlights** bullets, the manufacturer **type designation**, and the full **product description** — the same data a `BAUHAUS API` would return if one existed for shoppers.

The easiest way to try it: keep the prefilled `keywords`, press **Start**, and download the results as JSON, CSV, or Excel.

### Why scrape BAUHAUS with this actor?

🔍 **Keyword-driven search** — pass one keyword or a whole list; each term is searched separately and results are merged up to your `maxResults` cap.

🧾 **Two depth modes** — `overview` for fast price-and-rating monitoring, `detail` for full specifications, breadcrumbs, highlights, and descriptions.

↕️ **Native sort options** — collect results by `relevance`, `price_low`, `price_high`, or `topseller`, mirroring the sort order shoppers see on bauhaus.info.

🏷️ **Rich per-product data** — `product_id`, `productTitle`, `brand`, `type_designation`, `ean`, `price`, `currency`, `rating`, `review_count`, `availability`, `in_stock`, and an `images` array.

🛠️ **Full technical data** — in detail mode the `specs` object contains the entire "Technische Daten" table (power, dimensions, weight, material, and every other attribute BAUHAUS lists).

☁️ **Runs on Apify** — [schedule](https://docs.apify.com/platform/schedules) recurring runs, call it from the [API](https://docs.apify.com/api/v2), connect it to [integrations](https://apify.com/integrations) (Make, Zapier, n8n, Google Sheets, Slack), and export as JSON, CSV, Excel, or XML.

### What data can you extract from BAUHAUS?

| Field | Type | Description |
|-------|------|-------------|
| `product_id` | string | BAUHAUS article number |
| `productTitle` | string | Product name as shown on bauhaus.info |
| `brand` | string | Product brand / manufacturer |
| `type_designation` | string | Manufacturer model / type designation (detail mode) |
| `ean` | string | EAN / GTIN-13 barcode |
| `price` | number | Current price in EUR |
| `currency` | string | ISO currency code (`EUR`) |
| `rating` | number | Average star rating |
| `review_count` | number | Total number of customer reviews |
| `availability` | string | Availability state, e.g. `InStock` |
| `in_stock` | boolean | Whether the product is currently in stock |
| `images` | array | Product image URLs |
| `url` | string | Direct bauhaus.info product page URL |
| `breadcrumbs` | array | Full category path (detail mode) |
| `highlights` | array | USP highlight bullets (detail mode) |
| `specs` | object | Complete technical-data table (detail mode) |
| `description` | string | Long product description (detail mode) |

Download results in JSON, CSV, Excel, or XML.

### How to scrape BAUHAUS product data

1. Click **Try for free** / **Start** to open the BAUHAUS Product Scraper.
2. Add one or more terms to **Keywords** (for example `bohrmaschine` and `akkuschrauber`).
3. Choose a **Scrape mode** — `overview` for fast search data, or `detail` to also collect specs, breadcrumbs, highlights, and the description.
4. Pick a **Sort by** order (`relevance`, `price_low`, `price_high`, or `topseller`) and set **Max results**.
5. Keep the default **Proxy configuration** (Apify Proxy UNBLOCKER group) — it is required to reach bauhaus.info.
6. Press **Start**. Results stream into the dataset as they are collected.
7. Open the **Storage** tab and export as JSON, CSV, Excel, or XML, or pull them from the [API](https://docs.apify.com/api/v2).

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `keywords` | array | **Yes** | `["bohrmaschine"]` | BAUHAUS search terms, one per item. Each is searched separately. |
| `scrapeMode` | string | No | `overview` | `overview` (fast search) or `detail` (adds technical-data table + long description). |
| `sort` | string | No | `relevance` | `relevance`, `price_low`, `price_high`, or `topseller`. |
| `maxResults` | integer | No | `50` | Maximum products to return across all keyword searches. |
| `proxyConfiguration` | object | No | UNBLOCKER | Apify Proxy settings. The UNBLOCKER group is the default and is required. |

#### Input examples

**Fast search** — overview data for two keywords:

```json
{
    "keywords": ["bohrmaschine", "akkuschrauber"],
    "scrapeMode": "overview",
    "sort": "relevance",
    "maxResults": 100
}
```

**Full detail with specs** — cheapest products first:

```json
{
    "keywords": ["gartenstuhl"],
    "scrapeMode": "detail",
    "sort": "price_low",
    "maxResults": 50
}
```

### Output example

```json
{
    "product_id": "11290194",
    "productTitle": "Rotwerk Bohr- & Fräsmaschine EFM 200DS",
    "brand": "Rotwerk",
    "type_designation": "EFM 200DS",
    "ean": "4026863156001",
    "price": 799.0,
    "currency": "EUR",
    "rating": 4.6,
    "review_count": 12,
    "availability": "InStock",
    "in_stock": true,
    "images": ["https://media.cdn.bauhaus/m/493247/prod_large_square.webp"],
    "url": "https://www.bauhaus.info/bohr-fraesmaschinen/rotwerk-efm-200ds/p/11290194",
    "breadcrumbs": ["Werkzeug & Maschinen", "Maschinen", "Fräsen", "Bohr-Fräsmaschinen"],
    "highlights": ["Leistungsstarker Motor", "Großzügiger Arbeitstisch", "Zahnkranzbohrfutter"],
    "specs": {
        "Leistung": "350 W",
        "Drehzahl": "150 U/min - 2.500 U/min",
        "Größe Arbeitstisch": "390 x 95 mm"
    },
    "description": "Die Bohr- und Fräsmaschine EFM 200DS von Rotwerk ist ein optimales Werkzeug ...",
    "search_keyword": "bohrmaschine",
    "scrapeMode": "detail",
    "scrapedAt": "2026-08-27T11:37:07.000Z"
}
```

### Use cases

- 💰 **Price monitoring** — track BAUHAUS prices and discounts for a set of keywords on a schedule.
- 📊 **Competitor and market research** — pull a full category's assortment, brands, and price bands from bauhaus.info search.
- 🧭 **Assortment tracking** — watch which products rank for a keyword and how ratings move over time.
- 🛍️ **Catalog and feed building** — collect titles, EANs, images, specs, and product URLs to seed a product database.
- ⭐ **Review-signal analysis** — combine `rating` and `review_count` to surface top-rated products in a niche.
- 🤖 **AI and RAG pipelines** — feed structured BAUHAUS product data to agents and LLM workflows via the Apify API or [MCP](https://docs.apify.com/platform/integrations/mcp).

### How it works

1. The actor takes each keyword in `keywords` and runs it through BAUHAUS search, collecting the search hits and de-duplicating by article number.
2. Requests are routed through the Apify Proxy **UNBLOCKER** group, which clears the bauhaus.info anti-bot challenge.
3. In `overview` mode, each product from the search listing is normalized into a flat record.
4. In `detail` mode, the actor additionally opens each product page and parses the structured product data, breadcrumbs, highlights, and the full technical-data table.
5. Results are sorted (`relevance`, `price_low`, `price_high`, or `topseller`) and trimmed to `maxResults`, then streamed into the dataset as they are collected.

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

This actor uses **pay-per-event** pricing with two events:

| Event | When it fires | Free | Bronze | Silver | Gold |
|-------|---------------|------|--------|--------|------|
| `product` | Each product saved in `overview` mode | **$4.50 / 1,000** | $4.30 / 1,000 | $4.10 / 1,000 | $3.90 / 1,000 |
| `product-detail` | Each product saved in `detail` mode | **$15.00 / 1,000** | $14.00 / 1,000 | $13.00 / 1,000 | $12.00 / 1,000 |

A run charges the `product` event **or** the `product-detail` event per product, never both — detail mode is more expensive because it opens every product page for the specs and description. Example: `maxResults: 200` in overview mode costs about **$0.90**; the same 200 products in detail mode costs about **$3.00**. Your Apify plan's monthly usage credits apply, plus a small amount of proxy and compute usage.

### FAQ

**Do I need a BAUHAUS account or API key?**
No. The actor reads publicly visible bauhaus.info product data. There is nothing to authenticate.

**Why is a proxy required?**
bauhaus.info is protected by an anti-bot challenge that blocks datacenter and plain residential traffic. The Apify Proxy **UNBLOCKER** group clears the challenge and is set as the default `proxyConfiguration`. Runs without it will fail.

**What is the difference between overview and detail mode?**
`overview` returns the fields visible on the search results listing (title, brand, price, rating, review count, availability, images) and is billed at the `product` rate. `detail` opens each product page to also collect `breadcrumbs`, `highlights`, the manufacturer `type_designation`, the full `specs` table, and the long `description`, and is billed at the `product-detail` rate.

**How many products can I get per keyword?**
BAUHAUS search returns roughly 30–40 products per term. To cover a large category, pass several related or more specific keywords (for example `akkuschrauber`, `schlagbohrmaschine`, `bohrhammer` instead of just `bohrmaschine`) — results are merged and de-duplicated up to your `maxResults` cap.

**Which BAUHAUS store does it target?**
The German store at [bauhaus.info](https://www.bauhaus.info/), with prices and availability as shown to German shoppers in EUR.

**Can I sort by price?**
Yes. Set `sort` to `price_low` or `price_high`. The actor also applies a price sort on the collected set, so the cheapest or most expensive products are kept when `maxResults` is smaller than the result count.

**Can I schedule recurring runs?**
Yes. Use Apify [Schedules](https://docs.apify.com/platform/schedules) to run the BAUHAUS scraper hourly, daily, or weekly, and send results to [integrations](https://apify.com/integrations) like Google Sheets, Make, Zapier, or a webhook.

**How do I call it from code?**

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("parsebird/bauhaus-product-scraper").call(run_input={
    "keywords": ["bohrmaschine", "akkuschrauber"],
    "scrapeMode": "overview",
    "sort": "relevance",
    "maxResults": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["productTitle"], item.get("price"))
```

JavaScript:

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

const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('parsebird/bauhaus-product-scraper').call({
    keywords: ['gartenstuhl'],
    scrapeMode: 'detail',
    sort: 'price_low',
    maxResults: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Something looks wrong or missing.**
Open an issue on the **Issues** tab with the input you used. Feedback is welcome and helps keep the BAUHAUS Product Scraper reliable.

### Is it legal to scrape BAUHAUS?

Web scraping of publicly available data is legal in most jurisdictions, including the EU and Germany, when you do not collect personal data or bypass authentication. This actor only reads public bauhaus.info product listings — no login, no personal data. You are responsible for how you use the collected data, including compliance with BAUHAUS's Terms of Service, applicable laws (GDPR), and copyright. See Apify's [guide to the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) for background.

### Related Apify actors

- [Hepsiburada Scraper](https://apify.com/parsebird/hepsiburada-scraper) — Hepsiburada products, reviews, and Q\&A
- [Trendyol Product Scraper](https://apify.com/parsebird/trendyol-product-scraper) — products, reviews, and Q\&A from Trendyol
- [Target Product Scraper](https://apify.com/parsebird/target-product-scraper) — Target.com search results and pricing data
- [AliExpress Scraper](https://apify.com/parsebird/aliexpress-scraper) — AliExpress product and pricing data
- [Shopify Products Scraper](https://apify.com/parsebird/shopify-products-scraper) — full product catalogs from any Shopify store

Browse the full [ParseBird actor collection](https://apify.com/parsebird) for more e-commerce and marketplace scrapers.

# Actor input Schema

## `keywords` (type: `array`):

BAUHAUS search terms, one per item (e.g. bohrmaschine). Each keyword is searched separately (around 30-40 products per term) and results are combined up to Max results. Add related or more specific terms for broader coverage.

## `scrapeMode` (type: `string`):

overview returns fast search-listing data. detail additionally opens each product page for the technical-data table, breadcrumbs, highlights, and the long description. detail is slower and billed at the higher rate.

## `sort` (type: `string`):

Order in which matching products are collected before Max results is applied.

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

Maximum number of products to return across all keyword searches.

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

BAUHAUS is protected by an anti-bot challenge that blocks regular and residential proxy traffic. The Apify UNBLOCKER proxy group is required and set by default — do not switch to Residential or Datacenter.

## Actor input object example

```json
{
  "keywords": [
    "bohrmaschine"
  ],
  "scrapeMode": "overview",
  "sort": "relevance",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "keywords": [
        "bohrmaschine"
    ],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/bauhaus-product-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 = {
    "keywords": ["bohrmaschine"],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/bauhaus-product-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 '{
  "keywords": [
    "bohrmaschine"
  ],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}' |
apify call parsebird/bauhaus-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/bauhaus-product-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/eLzc3svje9nlfuqyp/builds/TMdyYzfRxdfDFfSC9/openapi.json
