# Europages Scraper - European B2B Suppliers & Products (`haketa/europages-scraper`) Actor

Europages scraper & API: find European B2B suppliers and manufacturers by keyword and export company name, products, country, description, certifications and profile URL. Europe sourcing, supplier discovery and B2B lead generation — fast, no login.

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

## Pricing

from $2.50 / 1,000 results

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 Scraper — European B2B Suppliers, Manufacturers & Product Catalogs

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-00D4B2?style=flat-square\&logo=apify)](https://apify.com/haketa/europages-scraper)
[![European B2B](https://img.shields.io/badge/Market-Europe_B2B_Sourcing-003399?style=flat-square)](#)
[![Pagination](https://img.shields.io/badge/Pagination-1%2C000%2B_Suppliers-2EA44F?style=flat-square)](#)
[![Export Formats](https://img.shields.io/badge/Export-JSON_%7C_CSV_%7C_Excel_%7C_API-0969DA?style=flat-square)](#)

**Extract supplier and product data from [Europages](https://www.europages.com/), Europe's leading B2B marketplace, in minutes.** This **Europages scraper** turns any keyword into a clean, structured database of European suppliers, manufacturers, wholesalers and B2B products — complete with **product names, price ranges, minimum order quantities (MOQ), company names, ISO country codes, verification status, certifications count, response metrics, key selling points and company profile links.** No login, no coding.

Export everything as **JSON, CSV, Excel, XML, or via API** — purpose-built for **European B2B sourcing, industrial lead generation, wholesale price research and CRM enrichment** across 35+ European countries.

> 💡 Built for **importers, sourcing agents, procurement teams, B2B sales teams, supply-chain analysts and market researchers** who need reliable European supplier intelligence at scale.

***

### ⚡ At a glance

| Feature | Details |
|---|---|
| **Target Platform** | [Europages](https://www.europages.com) (`europages.com` / `europages.co.uk` — 2M+ European companies across 35+ countries) |
| **Search Mode** | Multi-keyword B2B product & supplier search (`queries`) + built-in 16-category European B2B sample for empty runs |
| **Pagination & Scale** | Automatic multi-page extraction (~30 products/page) — supports **1,000+ to 50,000+ products per run** |
| **Product Data Captured** | `productId`, `productUuid`, `productName`, `productUrl`, `productImage`, `productImages[]`, `productDescription`, `price`, `priceMin`/`priceMax`, `currency`, `minOrderQuantity`, `sellPoints[]`, `categoryId` |
| **Supplier Data Captured** | `companyName`, `companyId`, `companyUuid`, `companyUrl`, `companyLogo`, `countryCode`, `foundingYear`, `certificatesCount`, `distributionArea`, `responseRate`, `averageResponseTime`, `hasEmail`, `isVerified` |
| **Quality Filtering** | Optional `onlyVerified: true` toggle to keep only Europages-verified (claimed) supplier accounts |
| **Deduplication** | 100% deduplicated globally by `productUuid` across all pages and keywords |
| **Export Formats** | Bulk export to **JSON, CSV, Excel, XML, RSS**, or programmatic access via **Apify REST API** |

***

### 🔎 Why scrape Europages?

[Europages](https://www.europages.com/) is Europe's largest B2B directory and product marketplace, connecting buyers with over **2 million manufacturers, wholesalers, exporters and service providers** across Germany (`DE`), France (`FR`), Italy (`IT`), Spain (`ES`), Poland (`PL`), Turkey (`TR`), the Netherlands (`NL`), Austria (`AT`), Switzerland (`CH`), the United Kingdom (`GB`), Belgium (`BE`) and 25+ additional countries.

However, Europages does not provide a public bulk export button, and copying supplier profiles and product specifications one page at a time is slow, repetitive and impossible to maintain across multiple industrial categories. This **Europages data extractor** automates the entire workflow: enter your product or industry keywords, and it collects hundreds to thousands of clean product-and-supplier rows ready to filter, sort and import into your CRM or procurement platform.

**Common reasons people scrape Europages:**

- 🤝 Build **European B2B supplier and prospect lists** segmented by product category and country (`countryCode`).
- 🏭 Source **European manufacturers, OEM/ODM factories and distributors** for supply-chain diversification and nearshoring.
- 💶 Compare **published price ranges (`priceMin`/`priceMax`) and minimum order quantities (`minOrderQuantity`)** across European vendors.
- 🗂️ Enrich a **CRM or ERP** (HubSpot, Salesforce, Pipedrive) with verified company names, founding years, certification counts, distribution reach and showroom links.
- 📊 Run **market and competitor intelligence** on the European industrial and wholesale landscape.
- ✅ Shortlist **verified, high-response suppliers** (`isVerified: true`, `responseRate`, `averageResponseTime`) before initiating RFQ outreach.

***

### ✨ What this Europages scraper does

- ✅ **Search by any B2B keyword** — pass as many product, component, material or machinery terms as you want (`led lighting`, `industrial valves`, `olive oil`, `cardboard packaging`, `cnc machining`).
- ✅ **Unlocked 1,000+ automatic pagination** — steps through all available result pages (~30 products per page) until your per-keyword (`maxItemsPerQuery`) or total (`maxItems`) target is reached.
- ✅ **Formatted & numeric pricing** — extracts both numeric `priceMin`, `priceMax` and `currency` for sorting/modeling **and** composes a clean human-readable `price` string (e.g. `"€80.24"` or `"€2.95 – €8.85"`).
- ✅ **Parsed Minimum Order Quantity (MOQ)** — captures the full `minOrderQuantity` display text alongside structured `minOrderQuantityValue` (number) and `minOrderQuantityUnit` (`units`, `pieces`, `kg`, `pallets`).
- ✅ **Rich supplier qualification signals** — every product row includes the supplier's `companyName`, `companyUrl`, `countryCode`, `foundingYear`, `certificatesCount`, `distributionArea` (`international`, `national`), `responseRate` (`%`), `averageResponseTime` (`less_than_24h`), `hasEmail` flag and `isVerified` status.
- ✅ **Verified-only filter (`onlyVerified`)** — optionally filter out unclaimed profiles and retain only verified Europages customers.
- ✅ **Cross-keyword deduplication** — deduplicates across all pages and keywords by `productUuid` so multi-keyword runs contain zero duplicate records.
- ✅ **Export anywhere** — download as **JSON, CSV, Excel, XML** or connect directly to **Google Sheets, Make, Zapier, Slack and custom APIs**.

***

### 🎯 Use cases

#### 1. European Nearshoring & Procurement Sourcing

Procurement and supply-chain teams searching for European alternatives to overseas factories can extract 1,000+ manufacturers across Germany, Italy, Poland, Spain and Turkey, then filter by `certificatesCount > 0`, `distributionArea === "international"` and `isVerified === true`.

#### 2. B2B Outbound Sales & Lead Generation

Logistics providers, freight forwarders, packaging suppliers, SaaS vendors and industrial distributors use this **Europages scraper** to build targeted prospect lists of active European exporters (`isVerified: true`, `hasEmail: true`) complete with `companyUrl`, `foundingYear` and product portfolio context.

#### 3. Wholesale Price & MOQ Benchmarking

Category managers and private-label brands compare `priceMin`, `priceMax`, `currency` and `minOrderQuantityValue` across dozens of European suppliers to benchmark unit economics before sending RFQs.

#### 4. CRM & B2B Database Enrichment

Data teams ingest structured Europages product and company records into internal knowledge graphs, B2B directories and CRM systems using stable `companyId`, `companyUuid`, `productId` and `productUuid` keys.

#### 5. Pan-European Trade & Export Intelligence

Market researchers analyze which European countries dominate supply for specific industrial categories (e.g. `ES` and `IT` for olive oil, `DE` and `IT` for industrial valves, `PL` and `DE` for packaging) by aggregating results by `countryCode`.

***

### 🌍 Pan-European coverage & popular categories

Europages spans **35+ countries**, surfacing suppliers from:

- **Western & Central Europe:** Germany (`DE`), France (`FR`), United Kingdom (`GB`), Netherlands (`NL`), Belgium (`BE`), Austria (`AT`), Switzerland (`CH`), Luxembourg (`LU`), Ireland (`IE`)
- **Southern Europe & Mediterranean:** Italy (`IT`), Spain (`ES`), Portugal (`PT`), Greece (`GR`), Turkey (`TR`)
- **Central & Eastern Europe & Nordics:** Poland (`PL`), Czechia (`CZ`), Hungary (`HU`), Romania (`RO`), Sweden (`SE`), Denmark (`DK`), Finland (`FI`), Norway (`NO`)

**Popular B2B categories you can scrape:**

- **Lighting & Electrical:** `led lighting`, `solar panels`, `transformers`, `industrial cables`, `sensors`
- **Machinery & Engineering:** `industrial valves`, `hydraulic pumps`, `cnc machining`, `packaging machines`, `heat exchangers`, `conveyor belts`
- **Food & Beverage Wholesale:** `olive oil`, `coffee beans`, `frozen food`, `organic ingredients`, `private label beverages`
- **Packaging & Containers:** `cardboard packaging`, `cosmetics packaging`, `glass bottles`, `wooden pallets`, `flexible packaging`
- **Metals, Plastics & Construction:** `stainless steel`, `aluminum profiles`, `plastic injection`, `fasteners`, `insulation materials`

***

### 📥 Input parameters

Configure the actor in Apify Console or via JSON API. All fields are optional — leaving `queries` empty runs a built-in multi-category sample across popular European B2B sectors.

| Parameter | Type | Default | Description |
|---|---|---|---|
| `queries` | array | `[]` | Search keywords (prefilled with `["led lighting"]`). Add as many product or industry keywords as you like. Leave empty for a mixed European B2B sample. |
| `onlyVerified` | boolean | `false` | When `true`, keeps only products from suppliers carrying the Europages verified label (`isVerified: true`). |
| `maxItemsPerQuery` | integer | `0` | Maximum products to collect per keyword (prefilled to `90` for fast trial runs). Set `0` for no per-keyword limit. |
| `maxItems` | integer | `0` | Overall maximum products to collect across all keywords (`0` = no overall limit, governed by `maxItemsPerQuery`). |
| `proxyConfiguration` | object | `{ "useApifyProxy": true }` | Proxy configuration. Standard Apify Proxy works out of the box. |

#### Example 1 — 1,000+ European suppliers across multiple keywords

```json
{
  "queries": [
    "led lighting",
    "industrial valves",
    "cardboard packaging",
    "stainless steel"
  ],
  "maxItemsPerQuery": 300,
  "maxItems": 1000,
  "onlyVerified": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

#### Example 2 — Verified European suppliers only (`onlyVerified: true`)

```json
{
  "queries": ["olive oil", "coffee beans", "cosmetics packaging"],
  "maxItemsPerQuery": 250,
  "onlyVerified": true
}
```

#### Example 3 — Deep single-category extraction

```json
{
  "queries": ["hydraulic pumps"],
  "maxItemsPerQuery": 1000,
  "maxItems": 1000
}
```

***

### 📤 Output & field reference

Each dataset item represents one product paired with its complete supplier company metadata.

#### Sample JSON output

```json
{
  "productId": "36512276",
  "productUuid": "0da9d774-d9ba-475a-b867-f1e110a7ffea",
  "productName": "LED Garden Light Ledvance \"Smart\" 4W 680Lm 33° IP65 Dimmable",
  "productUrl": "https://www.europages.co.uk/en/showroom/lve-...-36512276",
  "productImage": "https://supplier-offers-media-production.s3.eu-central-1.amazonaws.com/...jpeg",
  "productImages": [
    "https://supplier-offers-media-production.s3.eu-central-1.amazonaws.com/...jpeg"
  ],
  "productDescription": "Decorative light points for outdoor use with WiFi technology...",
  "price": "€80.24",
  "priceMin": 80.24,
  "priceMax": null,
  "currency": "EUR",
  "minOrderQuantity": "10 units",
  "minOrderQuantityValue": 10,
  "minOrderQuantityUnit": "units",
  "sellPoints": [
    "WiFi app & voice control",
    "RGB color and dimmable",
    "IP65 outdoor protection"
  ],
  "categoryId": "604950",
  "companyName": "Greenice",
  "companyId": "22356157",
  "companyUuid": "af8968e3-e120-415c-958d-738b860d943e",
  "companyUrl": "https://www.europages.co.uk/en/company/greenice-22356157",
  "companyLogo": "https://...company-facts-media.../...png",
  "countryCode": "ES",
  "foundingYear": "2002",
  "certificatesCount": 2,
  "distributionArea": "international",
  "responseRate": 95,
  "averageResponseTime": "less_than_24h",
  "hasEmail": true,
  "isVerified": true,
  "searchKeyword": "led lighting",
  "scrapedAt": "2026-11-02T00:00:00.000Z"
}
```

#### 📦 Product & Pricing Fields

| Field | Type | Coverage | Description |
|---|---|---|---|
| `productId` | string | 🟢 High (100%) | Short numeric/slug Europages product identifier. |
| `productUuid` | string | 🟢 High (100%) | Canonical UUID for the product (used for strict deduplication). |
| `productName` | string | 🟢 High (100%) | Product title. |
| `productUrl` | string | 🟢 High (100%) | Direct link to the product showroom page on Europages. |
| `productImage` | string | 🟢 High (100%) | Primary product thumbnail/image URL. |
| `productImages` | array | 🟢 High (100%) | Array of all product image URLs. |
| `productDescription` | string | 🟢 High (100%) | Product overview and technical description text. |
| `price` | string | 🟡 Conditional (~72%) | Formatted human-readable price or range (e.g. `"€80.24"` or `"€2.95 – €8.85"`). |
| `priceMin` / `priceMax` | number | 🟡 Conditional (~72%) | Numeric minimum and maximum unit price for sorting and filtering. |
| `currency` | string | 🟡 Conditional (~72%) | ISO currency code (`EUR`, `GBP`, `USD`, `PLN`, `CHF`, `TRY`, etc.). |
| `minOrderQuantity` | string | 🟡 Conditional (~30%) | Formatted MOQ string (e.g. `"10 units"`, `"100 pieces"`). |
| `minOrderQuantityValue` | number | 🟡 Conditional (~30%) | Numeric minimum order quantity value. |
| `minOrderQuantityUnit` | string | 🟡 Conditional (~30%) | MOQ unit of measure (`units`, `piece`, `kg`, `meter`, etc.). |
| `sellPoints` | array | 🟢 High (~70%) | Bullet-point product highlights and specifications published by the supplier. |
| `categoryId` | string | 🟢 High (100%) | Internal Europages category identifier. |

#### 🏢 Supplier Company & Qualification Fields

| Field | Type | Coverage | Description |
|---|---|---|---|
| `companyName` | string | 🟢 High (100%) | Supplier company name. |
| `companyId` | string | 🟢 High (100%) | Numeric Europages company ID. |
| `companyUuid` | string | 🟢 High (100%) | Canonical company UUID. |
| `companyUrl` | string | 🟢 High (100%) | Direct URL to the supplier's Europages company profile. |
| `companyLogo` | string | 🟢 High (~99%) | Supplier company logo URL. |
| `countryCode` | string | 🟢 High (100%) | 2-letter ISO country code (`DE`, `FR`, `IT`, `ES`, `PL`, `TR`, `NL`, `GB`, etc.). |
| `foundingYear` | string | 🟢 High (~85%) | Year the supplier company was established. |
| `certificatesCount` | number | 🟢 High (100%) | Number of quality/ISO certifications listed on the company profile. |
| `distributionArea` | string | 🟢 High (~99%) | Geographic distribution scope (`international`, `national`, `regional`, `worldwide`). |
| `responseRate` | number | 🟢 High (~75%) | Supplier inquiry response rate percentage (`0`–`100`). |
| `averageResponseTime` | string | 🟢 High (~75%) | Typical response time bucket (e.g. `"less_than_24h"`, `"between_24h_and_48h"`). |
| `hasEmail` | boolean | 🟢 High (100%) | `true` when the supplier has a verified contact email registered on file. |
| `isVerified` | boolean | 🟢 High (100%) | `true` when the supplier is a verified/claimed Europages member. |
| `searchKeyword` | string | 🟢 High (100%) | The search query that returned this record. |
| `scrapedAt` | string | 🟢 High (100%) | ISO 8601 extraction timestamp. |

***

### 🔁 Pagination & 1,000+ scaling

The **Europages scraper** is built for high-volume B2B catalog extraction:

1. **Automatic multi-page traversal** — fetches ~30 products per page, reads `totalPages` from the search response, and automatically steps through page `1, 2, 3...` until `maxItemsPerQuery` or `maxItems` is satisfied.
2. **Global cross-keyword deduplication** — maintains a global set of seen `productUuid` identifiers across all keywords in your run so overlapping search terms never produce duplicate rows.
3. **Smart keyword expansion for 1,000+ targets** — if you request a high `maxItems` target (e.g. `1,000+`) on a single narrow keyword or default run, the scraper automatically expands across built-in European industrial categories if the initial keyword exhausts its pages early.

***

### ⚙️ How to use

1. Open **Europages Scraper** in **Apify Console** and click **Try for free**.
2. Enter one or more product or industry keywords under **Search keywords (`queries`)**.
3. Set **Max items per keyword (`maxItemsPerQuery`)** and/or **Max items (`maxItems`)**, and optionally enable **Only verified suppliers (`onlyVerified`)**.
4. Click **Start** — 100 to 500 records typically finish in 15–30 seconds.
5. Export your dataset from the **Storage / Dataset** tab as **JSON, CSV, Excel, XML**, or fetch it programmatically via the **Apify API**.

***

### 💡 Pro tips for best results

- **Combine multiple specific keywords for broad B2B lists:** Instead of one generic term, list 5–10 specific product terms in `queries` (e.g. `["hydraulic valves", "pneumatic cylinders", "ball valves", "solenoid valves"]`).
- **Filter for high-intent B2B leads:** In your exported spreadsheet or CRM pipeline, filter for `isVerified === true`, `hasEmail === true`, and `responseRate >= 80` to prioritize responsive European manufacturers.
- **Deduplicate by `companyId` for company-level lists:** Because one supplier may list multiple products for a keyword, group or deduplicate your exported CSV/JSON by `companyId` or `companyUrl` when building a 1-row-per-company outreach list.
- **Benchmark pricing with `priceMin`:** Sort by `priceMin` and `currency` to compare entry-level wholesale pricing across countries (`countryCode`).

***

### ⚠️ Honest limitations

- **Price & MOQ are supplier-optional:** Many European B2B manufacturers operate on custom quotes ("Price on request"). `price`, `priceMin`, `priceMax` (~72% coverage) and `minOrderQuantity` (~30% coverage) are populated whenever the supplier publishes them on the product card.
- **Direct email addresses:** Europages protects supplier email addresses behind an on-site contact form, so the product listing provides `hasEmail` (`true`/`false`), `companyName`, `countryCode`, and the direct `companyUrl` rather than a raw email string.

***

### ❓ FAQ

#### How many Europages products and suppliers can I scrape?

You can collect **1,000+ to 50,000+ records** in a single run. Set `maxItemsPerQuery` and `maxItems` to your desired cap (or `0` for unlimited pagination across your keywords).

#### Do I need residential proxies or a login?

No login is required, and **standard Apify Proxy (datacenter, pre-configured by default)** works reliably and keeps run costs very low.

#### Can I filter to verified suppliers only?

Yes — toggle `onlyVerified: true` in the input to keep only products from verified (`isVerified: true`) Europages suppliers.

#### How do I filter by a specific European country?

Every record includes the 2-letter ISO `countryCode` (e.g. `DE`, `IT`, `FR`, `ES`, `PL`, `TR`, `NL`, `GB`). You can filter the exported JSON/CSV/Excel by `countryCode` or include country terms in your search queries.

#### Will I get duplicate products if my keywords overlap?

No. All products are deduplicated globally across pages and keywords using their canonical `productUuid`.

#### Can I schedule recurring runs or push data to a CRM?

Yes. Schedule weekly or monthly runs in Apify Console and connect the dataset directly to **HubSpot, Salesforce, Pipedrive, Google Sheets, Make, Zapier, or webhooks** to keep your European supplier pipeline fresh.

***

### 💻 API & programmatic integration

You can launch **Europages Scraper** and retrieve structured European supplier records from Python, Node.js, or cURL via the **Apify REST API**.

#### cURL example

```bash
curl -X POST "https://api.apify.com/v2/acts/haketa~europages-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "queries": ["led lighting", "industrial valves", "olive oil"],
    "maxItemsPerQuery": 400,
    "maxItems": 1000,
    "onlyVerified": true,
    "proxyConfiguration": { "useApifyProxy": true }
  }'
```

#### Python (`apify-client`) example

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "queries": ["industrial valves", "hydraulic pumps", "stainless steel"],
    "maxItemsPerQuery": 500,
    "maxItems": 1500,
    "onlyVerified": False,
}

run = client.actor("haketa/europages-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"[{item.get('countryCode')}] {item.get('companyName')} — {item.get('productName')} ({item.get('price') or 'Price on request'})")
```

#### Node.js (`apify-client`) example

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('haketa/europages-scraper').call({
    queries: ['cardboard packaging', 'wooden pallets'],
    maxItemsPerQuery: 500,
    maxItems: 1000,
    onlyVerified: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Extracted ${items.length} European B2B products and suppliers.`);
```

***

### 📊 Sample B2B sourcing & lead-gen workflows

| Workflow | Filter / Grouping Strategy | Business Outcome |
|---|---|---|
| **Verified European Manufacturer Shortlist** | Filter `isVerified === true`, `certificatesCount >= 1`, `distributionArea === "international"` | Build pre-qualified RFQ vendor lists for nearshoring and industrial procurement. |
| **Fast-Response Supplier Outreach** | Filter `hasEmail === true`, `responseRate >= 80`, `averageResponseTime === "less_than_24h"` | Prioritize active suppliers who respond rapidly to B2B inquiries and partnership pitches. |
| **Cross-Country Wholesale Price Comparison** | Group by `countryCode` and compare `priceMin`, `priceMax`, `currency`, `minOrderQuantityValue` | Benchmark unit pricing and MOQ thresholds across Germany (`DE`), Italy (`IT`), Spain (`ES`), Poland (`PL`) and Turkey (`TR`). |
| **1-Row-Per-Company CRM Import** | Deduplicate exported dataset on `companyId` or `companyUuid` | Import clean company accounts (`companyName`, `companyUrl`, `countryCode`, `foundingYear`) into HubSpot or Salesforce. |

***

### 🔗 Related scrapers

Building a global B2B sourcing and wholesale supplier pipeline? Pair this **Europages scraper** with our other B2B marketplace scrapers:

- [Made-in-China.com Scraper — Suppliers, Prices & MOQ](https://apify.com/haketa/made-in-china-scraper)
- [IndiaMART Scraper — Suppliers, Exporters, Prices & GST](https://apify.com/haketa/indiamart-scraper)
- [TradeIndia Scraper — B2B Suppliers, Prices, Email & Phone](https://apify.com/haketa/tradeindia-scraper)
- [1688 Sourcing Profit Analyzer — Landed Cost, Margin & ROI](https://apify.com/haketa/1688-sourcing-profit-analyzer)

***

### 📋 Changelog

- **v1.2 (2026-11)** — Unlocked 1,000+ deep pagination across both explicit and default keyword runs, added `maxItems` overall cap parameter, implemented global cross-keyword `productUuid` deduplication, expanded fallback B2B categories to 16 sectors, and upgraded documentation.
- **v1.1 (2026-11)** — Added formatted human-readable `price` strings alongside numeric `priceMin`/`priceMax` and structured MOQ parsing (`minOrderQuantityValue`/`minOrderQuantityUnit`).
- **v1.0 (2026-07)** — Initial release for European B2B product and supplier extraction on Europages.

# Changelog

This Actor's version history is a separate document: https://apify.com/haketa/europages-scraper/changelog.md

# Actor input Schema

## `queries` (type: `array`):

Product or category terms to search on Europages (e.g. "led lighting", "industrial valves", "olive oil"). Add as many as you like. Leave empty to get a ready-made mixed sample of popular European B2B products.

## `onlyVerified` (type: `boolean`):

Turn on to keep only products from suppliers that carry the Europages verified label.

## `maxItemsPerQuery` (type: `integer`):

Maximum number of products to collect for each keyword. Set to 0 for no limit (governed by Max items total). About 30 products are loaded per page and pages are collected automatically.

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

Overall maximum number of products to collect across all keywords. Set to 0 for no overall limit.

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

Proxy settings. A proxy is recommended for reliable, larger runs.

## Actor input object example

```json
{
  "queries": [
    "led lighting",
    "industrial valves"
  ],
  "onlyVerified": false,
  "maxItemsPerQuery": 90,
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Open to view, filter and export all scraped results from this run (JSON, CSV, Excel).

# 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 = {
    "queries": [
        "led lighting"
    ],
    "maxItemsPerQuery": 90,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/europages-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 = {
    "queries": ["led lighting"],
    "maxItemsPerQuery": 90,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/europages-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 '{
  "queries": [
    "led lighting"
  ],
  "maxItemsPerQuery": 90,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/europages-scraper --silent --output-dataset

```

## MCP server setup

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