# WLW Scraper - German B2B Suppliers (wlw.de) (`studio-amba/wlw-scraper`) Actor

Search and extract B2B supplier and company data from wlw.de (Wer liefert was), the leading B2B supplier directory for Germany, Austria and Switzerland. Get company names, cities, addresses, categories, products, websites and phone numbers by keyword. No API key, no login required.

- **URL**: https://apify.com/studio-amba/wlw-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.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/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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Scraper — German B2B Suppliers from wlw.de (Wer liefert was)

Search **wlw.de** ("Wer liefert was"), the leading B2B supplier directory for Germany, Austria and Switzerland, and extract structured company data by keyword. Part of the Visable group (together with Europages), WLW lists hundreds of thousands of manufacturers, wholesalers, distributors and service providers across the DACH region.

Enter a product or service keyword ("verpackung", "schrauben", "edelstahl") and get back clean JSON records with company names, locations, addresses, supplier types, categories, showcased products, websites and phone numbers.

**No API key, no login, no cookies required.**

### Why use this actor?

- **B2B lead generation** — build supplier lists for the German-speaking market, the largest industrial economy in Europe
- **Supplier sourcing** — find manufacturers and wholesalers for any product category, filtered by country
- **Market research** — map competitors and suppliers in a niche, including size (employee ranges) and founding year
- **Sales intelligence** — enrich CRM data with addresses, phone numbers, websites and product portfolios
- **Procurement** — compare distribution areas, certificates and supplier types before reaching out

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `searchQuery` | string | `verpackung` | Product, service, or activity keywords. German keywords work best, English terms are matched too. Company names also work. |
| `country` | string | (all) | Optional country filter. ISO code or name: `DE`, `Germany`, `AT`, `Austria`, `CH`, `Switzerland`, ... |
| `maxResults` | integer | `50` | Maximum number of companies to return (up to 3000 per query). |
| `proxyConfiguration` | object | Residential | Proxy settings. Residential proxies recommended. |

#### Example input

```json
{
    "searchQuery": "verpackung",
    "country": "DE",
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
````

### Output

One JSON object per company:

| Field | Type | Example |
|-------|------|---------|
| `companyName` | string | `"Gude GmbH"` |
| `country` | string | `"Germany"` |
| `countryCode` | string | `"DE"` |
| `city` | string | `"Rheine"` |
| `address` | string | `"Neuenkirchener Str. 44"` |
| `postalCode` | string | `"48431"` |
| `supplierTypes` | array | `["service", "wholesaler"]` |
| `categories` | array | `["Gastronomieverpackungen", "Backformen"]` |
| `products` | array | `["Snackverpackungen", "Pizzakartons"]` |
| `about` | string | Company presentation text |
| `url` | string | `"https://www.wlw.de/de/firma/gude-gmbh-910014"` |
| `website` | string | null | `"https://www.gude.eu"` |
| `phone` | string | null | `"+49 5971 899890"` |
| `employeeCount` | string | null | `"20-49"` |
| `foundingYear` | number | null | `1949` |
| `distributionArea` | string | null | `"international"` |
| `certificatesCount` | number | null | `2` |
| `verifiedSupplier` | boolean | `true` |
| `logoUrl` | string | null | Logo image URL |
| `latitude` / `longitude` | number | null | `52.3129543` / `7.4575219` |
| `companyId` | number | null | Internal WLW company ID |
| `wlwId` | string | null | WLW supplier identifier |
| `searchQuery` | string | The query that returned this company |
| `scrapedAt` | string | ISO timestamp |

#### Example output

```json
{
    "companyName": "Gude GmbH",
    "country": "Germany",
    "countryCode": "DE",
    "city": "Rheine",
    "address": "Neuenkirchener Str. 44",
    "postalCode": "48431",
    "supplierTypes": ["service", "wholesaler"],
    "categories": ["Gastronomieverpackungen", "Backformen", "Schüsseln"],
    "products": ["Snackverpackungen", "Pizzakartons", "Menüboxen"],
    "about": "Verpackungen für Gastronomie und Lebensmittelhandel ...",
    "url": "https://www.wlw.de/de/firma/gude-gmbh-910014",
    "website": "https://www.gude.eu",
    "phone": "+49 5971 899890",
    "employeeCount": "20-49",
    "foundingYear": 1949,
    "distributionArea": "international",
    "certificatesCount": 2,
    "verifiedSupplier": true,
    "latitude": 52.3129543,
    "longitude": 7.4575219,
    "searchQuery": "verpackung",
    "scrapedAt": "2026-07-10T12:00:00.000Z"
}
```

### How to scrape WLW data

1. **Create a free Apify account** and open this actor.
2. **Enter a search query** — a product, service, or company keyword. German terms match best ("verpackung", "kunststoff", "cnc fräsen"), English works too.
3. **Optionally set a country filter** — `DE`, `AT`, `CH` or any other country name/code to narrow results.
4. **Set max results** — 30 companies come back per page; the actor paginates automatically up to your limit.
5. **Run the actor** and download the dataset as JSON, CSV, or Excel, or fetch it via the Apify API.

The actor talks to WLW's own search gateway (the same one the website uses), so results match exactly what you see on wlw.de, including verified-supplier status and product portfolios.

### Cost estimate

A run start plus per-result fees apply (pay-per-event pricing). Scraping is fast: one HTTP request fetches 30 companies, so even 1000-result runs finish in a couple of minutes on the default memory setting.

### Limitations

- Email addresses are not exposed in WLW search results (the site only signals whether a contact form is available). Use the company `website` for direct outreach.
- `pageSize` is capped at 30 by the WLW gateway; the actor paginates automatically.
- Very deep pagination is capped at 3000 results per query. Split broad queries by country or by more specific keywords to get more coverage.
- The `about` text is truncated to 3000 characters.

### Related actors

- **Europages Scraper** — the pan-European sister directory (same Visable group) with suppliers from 26 countries.

### Support

Found an issue or want an extra field? Open an issue on the actor's page and it will be looked at quickly.

# Actor input Schema

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

Product, service, or activity keywords to search for. German keywords work best (e.g. 'verpackung', 'schrauben', 'edelstahl', 'spritzguss'), but English terms are matched too. Company names also work.

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

Optional. Only return suppliers from this country. Use an ISO code or country name (e.g. 'DE', 'Germany', 'AT', 'Austria', 'CH', 'Switzerland'). Most WLW suppliers are in the DACH region. Leave empty for all countries.

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

Maximum number of companies to return. WLW serves 30 companies per results page.

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

Proxy settings. Residential proxies recommended for reliable access.

## Actor input object example

```json
{
  "searchQuery": "verpackung",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": "verpackung",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

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

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/wlw-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": "verpackung",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/wlw-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=studio-amba/wlw-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "WLW Scraper - German B2B Suppliers (wlw.de)",
        "description": "Search and extract B2B supplier and company data from wlw.de (Wer liefert was), the leading B2B supplier directory for Germany, Austria and Switzerland. Get company names, cities, addresses, categories, products, websites and phone numbers by keyword. No API key, no login required.",
        "version": "0.1",
        "x-build-id": "EKpmUU3yD8LI0Kdt5"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~wlw-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-wlw-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/studio-amba~wlw-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-wlw-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/studio-amba~wlw-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-wlw-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Product, service, or activity keywords to search for. German keywords work best (e.g. 'verpackung', 'schrauben', 'edelstahl', 'spritzguss'), but English terms are matched too. Company names also work.",
                        "default": "verpackung"
                    },
                    "country": {
                        "title": "Country Filter",
                        "type": "string",
                        "description": "Optional. Only return suppliers from this country. Use an ISO code or country name (e.g. 'DE', 'Germany', 'AT', 'Austria', 'CH', 'Switzerland'). Most WLW suppliers are in the DACH region. Leave empty for all countries."
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 3000,
                        "type": "integer",
                        "description": "Maximum number of companies to return. WLW serves 30 companies per results page.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Residential proxies recommended for reliable access.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
