# 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
- **Features:** Limited permissions
- **Stats:** 4 total users, 0 monthly users, 98.3% 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/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

## 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"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "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(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "verpackung",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/wlw-scraper --silent --output-dataset

```

## MCP server setup

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