# Europages & wlw Scraper — B2B Suppliers & Manufacturer Leads (`cleandata/europages-b2b-scraper`) Actor

B2B leads from Europages and wlw (Wer liefert was): European suppliers, manufacturers, wholesalers and distributors by product and country, with website, phone, address, employees, founding year, VAT ID and ISO certificates. Duplicates removed. Fast, no browser.

- **URL**: https://apify.com/cleandata/europages-b2b-scraper.md
- **Developed by:** [Rodrigo Junqueiro](https://apify.com/cleandata) (community)
- **Categories:** Lead generation, E-commerce
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 1,000 companies

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

## Europages & wlw Scraper — B2B Suppliers, Manufacturers & Wholesalers

Find **European B2B suppliers** on two directories at once: [Europages](https://www.europages.co.uk), the B2B marketplace with millions of manufacturers, wholesalers and service providers from Europe and beyond, and [wlw — Wer liefert was](https://www.wlw.de), the largest B2B directory for Germany, Austria and Switzerland. Search by product or service, filter by country, and get clean company data: website, phone, full address with coordinates, number of employees, founding year, supplier type and, optionally, the **VAT ID** and **certificates** (ISO 9001, ISO 14001, organic, GMP…).

**Fast and cheap:** it runs on plain HTTP requests with no headless browser. Duplicates across search terms, countries **and both directories** are removed *before* billing, so you never pay twice for the same company.

**More companies than Europages alone:** in our tests for olive oil suppliers in Germany and Austria, wlw added about 800 companies to the 339 found on Europages.

### What can you use it for?

- **Sourcing and procurement:** shortlist manufacturers and wholesalers for a product in the countries you care about.
- **B2B lead generation:** build prospect lists by industry and country, with website and phone number.
- **Market research:** count and map suppliers by country, company size or certification.
- **Supplier due diligence:** check VAT IDs, certificates and founding years at scale.
- **CRM enrichment:** add employees, founding year and supplier type to the companies you already have.

### Sample results

A few of the companies from a real run for `cork` in Portugal (phone, address, coordinates, description and products are in the output too):

| Company | Supplier type | Employees | Founded | City | Website |
|---|---|---|---|---|---|
| AMORIM CORK | Manufacturer | 1000+ | 1870 | Santa Maria De Lamas | amorimcork.com |
| EFSCORK | Manufacturer | 20-49 | 1945 | Fiaes Vfr | efscork.com |
| M.A.SILVA CORTIÇAS SA | Manufacturer | 20-49 | 1972 | Mozelos Vfr | masilva.pt |
| LUSOCOPLA | Manufacturer, distributor | 5-9 | 1992 | São João Ver | lusocopla.com |
| 3DCORK | Manufacturer | 20-49 | 2006 | Paços De Brandão | 3dcork.com |

### How much does it cost?

You pay per result, with no monthly rental:

| What | Price |
|---|---|
| Company | $4 per 1,000 companies ($0.004 each) |
| Company profile details (optional) | $2 per 1,000 companies |

Duplicates and companies removed by your filters are never charged. Apify's free plan includes $5 of monthly credit, which covers about 1,200 companies a month. You can also set a maximum cost per run in the run options.

### How to use it

1. Click **Try for free** and sign in to Apify (no credit card needed).
2. Type the products or services you are looking for, e.g. `olive oil` or `CNC machining`.
3. Optionally pick the supplier countries, the directories and how many companies you want.
4. Click **Start**. When the run finishes, download the results as JSON, CSV or Excel, or send them to Google Sheets, HubSpot or your own system.

### Input

| Field | Description |
|---|---|
| **Products or services** | What the suppliers make, sell or do: `olive oil`, `CNC machining`, `packaging`, `office furniture`… |
| **Directories** | `europages` (all of Europe) and/or `wlw` (Germany, Austria, Switzerland). Both by default; Europages is searched first and wlw adds the companies that are not on Europages. |
| **Supplier countries** | 2-letter ISO codes such as `DE`, `IT`, `ES`, `PT`, `FR`, `PL`, `TR`. Leave empty for all countries. |
| **Max companies** | Total limit for the run (0 = no limit). |
| **Include company profile details** | Adds the VAT ID, certificates, fax, full description and full address. Charged as an extra event. |
| **Go beyond 3,000 results per search** | On by default. Each directory shows at most ~3,000 companies per search. With this on, large searches are split by country (when no countries are selected) and, for big countries, by company size, to collect many more. Duplicates are removed before billing. |

```json
{
    "searchTerms": ["olive oil", "Olivenöl"],
    "sources": ["europages", "wlw"],
    "countries": ["DE", "AT", "IT", "ES"],
    "maxResults": 500,
    "includeDetails": true
}
```

### Output

```json
{
    "companyId": 20797192,
    "name": "PEDRA DO OLIVAL",
    "source": "Europages",
    "url": "https://www.europages.co.uk/en/company/pedra-do-olival-20797192",
    "description": "We are producers of extra virgin and organic extra virgin olive oil, passed down from father to son...",
    "website": "http://www.pedra-do-olival.com/",
    "phone": "+33635381690",
    "street": "Rua do Souto",
    "postalCode": "5340-172",
    "city": "Fornos De Ledra",
    "countryCode": "PT",
    "latitude": 41.689235,
    "longitude": -7.10571,
    "supplierTypes": ["production"],
    "employeeCount": "5-9",
    "foundingYear": 2012,
    "distributionArea": "europe",
    "responseRate": null,
    "averageResponseTime": null,
    "certificatesCount": 0,
    "productCount": 6,
    "sampleProducts": ["Organic Extra Virgin Olive Oil", "Extra virgin olive oil"],
    "logoUrl": "https://...",
    "searchTerm": "olive oil",
    "searchCountry": "PT"
}
```

With **Include company profile details**, each item also gets:

```json
{
    "vatId": "DE123456789",
    "fax": null,
    "fullDescription": "...",
    "addressLines": ["Rua do Souto"],
    "certificates": ["DIN EN ISO 9001", "DIN EN ISO 14001"],
    "documentsCount": 2,
    "videosCount": 0,
    "catalogUrl": null,
    "contentLanguage": "en"
}
```

`supplierTypes` can include `production` (manufacturer), `customer_specific_manufacturing` (contract manufacturer), `wholesaler`, `distribution` (distributor) and `service`. `distributionArea` is `regional`, `national`, `europe` or `international`.

Download the results as JSON, CSV, Excel or HTML, or use the Apify API and integrations (Make, Zapier, Google Sheets, HubSpot, webhooks).

### Privacy

This Actor outputs **company** data only: business name, business address, website and the company's switchboard phone. It deliberately leaves out the named contact persons shown on some profiles. If you use the data for outreach, you are responsible for complying with GDPR and local marketing rules.

### Limits

- Each directory shows at most ~3,000 companies per search. With *Go beyond 3,000 results* on (the default), the Actor also searches by country and by company size, which reaches nearly every company: for example, wlw lists 6,890 CNC machining companies in Germany, and 93% of them have a company size. Companies without a size in very large searches may still be out of reach; more specific terms help.
- The same company often appears under several terms; it is returned (and charged) only once per run.

### FAQ

**Which countries are covered?** Europages covers most of Europe (Germany, Italy, France, Spain, the UK, Poland, Turkey, the Netherlands…) plus suppliers from other regions. wlw goes deeper in Germany, Austria and Switzerland.

**Can I search in other languages?** Yes. Europages works best with English terms; on wlw, German terms (`Olivenöl`, `CNC-Fräsen`, `Verpackung`) usually find even more companies. You can mix both in one run.

**Is it legal to scrape Europages and wlw?** This Actor only collects company profiles that are publicly visible without logging in, and it leaves out the named contact persons. Business data about companies is generally not personal data, but if you use it for marketing, follow GDPR and your country's rules on B2B outreach. When in doubt, ask a lawyer.

**Can I run it from my own code?** Yes, through the Apify API. In Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("cleandata/europages-b2b-scraper").call(
    run_input={"searchTerms": ["olive oil"], "countries": ["IT", "ES"], "maxResults": 200}
)
for company in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(company["name"], company["website"])
```

The same works in JavaScript (`apify-client`) or with plain HTTP. See the *API* tab on this page.

**Something broke or you need a field?** Open an issue on the Actor's Issues tab. Feature requests are welcome.

**Found it useful?** A short review on the Reviews tab helps other people find this Actor and tells me what to improve next.

# Actor input Schema

## `searchTerms` (type: `array`):

What the suppliers make, sell or do, e.g. <code>olive oil</code>, <code>CNC machining</code>, <code>packaging</code>, <code>office furniture</code>. On wlw, German terms (<code>Olivenöl</code>, <code>CNC-Fräsen</code>) usually find even more companies.

## `sources` (type: `array`):

Where to search. <b>Europages</b> covers suppliers across Europe and beyond; <b>wlw</b> (Wer liefert was) is the largest B2B directory for Germany, Austria and Switzerland. Companies listed on both are returned only once.

## `countries` (type: `array`):

Only suppliers based in these countries, as 2-letter ISO codes (<code>DE</code>, <code>IT</code>, <code>ES</code>, <code>PT</code>, <code>FR</code>, <code>PL</code>, <code>TR</code>…). Leave empty for all countries.

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

Maximum number of companies in total for the whole run. 0 = no limit.

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

Also open each company profile to get the VAT ID, fax, certificates, full description and full address. Slower and charged as an extra event.

## `splitByCountry` (type: `boolean`):

Each directory shows at most ~3,000 companies per search. When a search has more, run it once per country (if no countries are selected) and, for big countries, once per company-size range, to collect many more. Duplicates are removed before billing.

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

Residential proxies are used by default: Europages and wlw block most datacenter IPs.

## Actor input object example

```json
{
  "searchTerms": [
    "olive oil"
  ],
  "sources": [
    "europages",
    "wlw"
  ],
  "countries": [],
  "maxResults": 50,
  "includeDetails": false,
  "splitByCountry": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `companies` (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 = {
    "searchTerms": [
        "olive oil"
    ],
    "sources": [
        "europages",
        "wlw"
    ],
    "countries": [],
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("cleandata/europages-b2b-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 = {
    "searchTerms": ["olive oil"],
    "sources": [
        "europages",
        "wlw",
    ],
    "countries": [],
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("cleandata/europages-b2b-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 '{
  "searchTerms": [
    "olive oil"
  ],
  "sources": [
    "europages",
    "wlw"
  ],
  "countries": [],
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call cleandata/europages-b2b-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cleandata/europages-b2b-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/qdiT6zUGsIew8Ec77/builds/ckBE0elIBi5cHoIUq/openapi.json
