# wlw.de Scraper — German B2B Suppliers & Products (`serp.cheap.ofc/wlw-scraper`) Actor

Scrape wlw.de ("Wer liefert was", Germany's leading B2B marketplace): product search, full supplier profiles with contact leads, and complete product details. Pay per result, no start fee, no subscription.

- **URL**: https://apify.com/serp.cheap.ofc/wlw-scraper.md
- **Developed by:** [serp.cheap](https://apify.com/serp.cheap.ofc) (community)
- **Categories:** Lead generation, E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#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

## wlw.de Scraper — German B2B Suppliers, Products & Leads

Scrape **wlw.de** ("Wer liefert was") — Germany's leading B2B marketplace and supplier
directory — for **product listings, full supplier profiles with contact leads, and complete
product details**. Search by keyword, pull a supplier's entire catalog, or extract one product
in full.

**Pay per result, no start fee, no subscription. Runs on the default proxy — no residential proxy needed.**

### Why this one

- **Real B2B lead data.** Supplier profiles come back with company name, full postal address,
  phone, email, website, VAT id (when listed), employee band, founding year, distribution area,
  business categories, product keywords and **named contact persons** — everything you need to
  build a prospect list.
- **Product + supplier in one row.** Every search result pairs the product (title, description,
  images, minimum order quantity, price when the seller lists one) with its supplier's core
  details, so you can go from a keyword to a qualified lead in a single run.
- **Whole catalogs.** Point `company` mode at a supplier and get its complete product list
  (auto-paginated) plus its category tree and keyword cloud.
- **Full product detail.** `product` mode returns a product's long description, keyword set,
  specification attributes and category, joined with the supplier record.
- **Self-monitored.** Every run checks upstream health, so site changes are caught early.

### Modes

Set `mode` in the input:

#### `search` — products by keyword

`{ "mode": "search", "query": "verpackungsmaschine", "searchPages": 3 }`
Returns product cards (title, description, images, MOQ, price when present) each with its supplier
(name, country, email, logo, response data). German keywords work best. 30 products per page.

#### `company` — full supplier profile + catalog

`{ "mode": "company", "companyUrls": ["https://www.wlw.de/de/firma/hoeller-massivholzmoebel-gmbh-1698929"] }`
Returns the complete supplier profile (address, phone, email, website, VAT id, employees, founding
year, named contacts), the supplier's **entire product catalog**, its business categories and its
product keyword list. Accepts full profile URLs or bare slugs.

#### `product` — full product detail

`{ "mode": "product", "productUrls": ["https://www.wlw.de/de/firma/<supplier>/produkte/<product>"] }`
Returns one product's full detail — long description, keywords, specification attributes, category —
joined with the supplier record.

#### `selftest` — free health check

Probes search + supplier data and reports which are healthy. No charge.

### Input

| Field | Used in | Description |
|---|---|---|
| `mode` | all | `search`, `company`, `product`, or `selftest`. |
| `query` | `search` | Keyword (product or service). German terms work best. |
| `companyUrls` | `company` | Supplier profile URLs or bare slugs. |
| `productUrls` | `product` | Full product-detail URLs. |
| `searchPages` | `search` | Result pages to fetch (30/page, max 20). |
| `maxItems` | all | Cap on products (0 = no cap). In `company` mode caps products per supplier. |
| `includeCategories` | `company` | Also fetch categories + product keywords. Default `true`. |
| `language` / `country` / `currency` | all | Locale controls (default `de` / `de` / `EUR`). |
| `proxyConfiguration` | all | The default Apify proxy is fine for every mode. |

### Notes

- **Proxy:** the default Apify proxy works for all modes — **no residential proxy required**.
- **Prices are sparse.** wlw is largely a quote-on-request marketplace; many products carry no
  price. Where a seller lists one, it's returned with its currency and kind (fixed / range / from).
  Minimum order quantity is returned when the seller sets it.
- Blocked or empty results are **never charged**.

### Output

Results go to the default dataset. Ready-made views: **Product search results**, **Supplier
profiles**, and **Product details**. Export as JSON, CSV, Excel, or via the Apify API.

### Pricing

Pay-per-result, $0 start fee. See [PRICING.md](./PRICING.md).

| Event | Price | Charges for |
|-------|-------|-------------|
| `product-search` | **$0.0015** | one product from `search` (product + supplier lead) |
| `company-detail` | **$0.0024** | one full supplier profile + its **entire catalog**, categories & keywords |
| `product-detail` | **$0.008** | one full product-detail record |

The lowest price per result on the Store for German B2B supplier data — cheaper than every
comparable wlw scraper — with the whole supplier catalog bundled into a single `company-detail`
charge.

Blocked / selftest / error rows are **free**.

### Disclaimer

This actor scrapes publicly available information. Use it in compliance with wlw.de's terms and
applicable law, and only for data you're permitted to collect.

# Actor input Schema

## `mode` (type: `string`):

What to scrape. 'search' = products by keyword (with supplier lead data). 'company' = a supplier's full profile + entire product catalog. 'product' = one product's full detail page. 'selftest' = free health check.

## `query` (type: `string`):

Keyword for 'search' mode (product or service, e.g. 'pumpe', 'verpackungsmaschine'). German terms work best.

## `companyUrls` (type: `array`):

Supplier profile URLs (or bare slugs like 'hoeller-massivholzmoebel-gmbh-1698929') to pull full profiles for. Used by 'company' mode.

## `productUrls` (type: `array`):

Full product-detail URLs to pull complete details for. Used by 'product' mode.

## `language` (type: `string`):

Content language (two-letter, e.g. 'de'). Default 'de'.

## `country` (type: `string`):

Two-letter market/top-level domain, e.g. 'de'. Default 'de'.

## `currency` (type: `string`):

Preferred price currency (e.g. 'EUR'). Prices are sparse on wlw; many products are quote-on-request.

## `searchPages` (type: `integer`):

How many result pages to fetch in 'search' mode (30 products/page). Max 20.

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

Cap on products scraped (0 = no cap). In 'company' mode caps products per supplier.

## `includeCategories` (type: `boolean`):

Also fetch the supplier's business categories and product keyword list.

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

The default Apify proxy works for all modes.

## `debug` (type: `boolean`):

Verbose per-request logging for troubleshooting.

## Actor input object example

```json
{
  "mode": "search",
  "query": "pumpe",
  "companyUrls": [
    "https://www.wlw.de/de/firma/hoeller-massivholzmoebel-gmbh-1698929"
  ],
  "language": "de",
  "country": "de",
  "currency": "EUR",
  "searchPages": 1,
  "maxItems": 0,
  "includeCategories": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "debug": false
}
```

# Actor output Schema

## `search` (type: `string`):

No description

## `company` (type: `string`):

No description

## `product` (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 = {
    "query": "pumpe",
    "companyUrls": [
        "https://www.wlw.de/de/firma/hoeller-massivholzmoebel-gmbh-1698929"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("serp.cheap.ofc/wlw-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 = {
    "query": "pumpe",
    "companyUrls": ["https://www.wlw.de/de/firma/hoeller-massivholzmoebel-gmbh-1698929"],
}

# Run the Actor and wait for it to finish
run = client.actor("serp.cheap.ofc/wlw-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 '{
  "query": "pumpe",
  "companyUrls": [
    "https://www.wlw.de/de/firma/hoeller-massivholzmoebel-gmbh-1698929"
  ]
}' |
apify call serp.cheap.ofc/wlw-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,serp.cheap.ofc/wlw-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/kXxigGgJZGpXn4X4t/builds/Zen7YYGHlbMvffcWs/openapi.json
