# Europages Scraper — B2B Companies, Leads & Suppliers (`logiover/europages-scraper`) Actor

Scrape Europages B2B company directory by keyword or URL. Extract company name, description, address, country, employees, founding year, website, categories, delivery area, and supplier type. No API key, no login.

- **URL**: https://apify.com/logiover/europages-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Lead generation, AI, Agents
- **Features:** Limited permissions
- **Stats:** 3 total users, 3 monthly users, 86.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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 — B2B Companies, Leads & Suppliers

Scrape the Europages B2B company directory at scale. Extract company name, description, address, employees, founding year, website, product categories, supplier type, certifications, and delivery area — no API key needed.

### What does Europages Scraper do?

Europages Scraper extracts structured company data from [europages.co.uk](https://www.europages.co.uk), Europe's largest B2B sourcing platform with over 3 million listed companies across 26 languages. The scraper works by fetching server-side rendered search result pages, parsing embedded JSON-LD structured data alongside HTML company cards, and following pagination automatically to collect hundreds or thousands of results per run.

You can search by keyword (e.g., "packaging machines", "steel suppliers", "software") or provide direct Europages search URLs. When the **Include Company Details** option is enabled, the scraper visits each company's profile page to extract additional fields like the company website, full street address, and product categories. No API key, login, or browser is required — all data comes from publicly available, server-rendered HTML.

### Who is it for?

- **B2B sales teams** building targeted prospect lists of European manufacturers and suppliers.
- **Procurement managers** sourcing new vendors by industry, country, or product category.
- **Market researchers** analyzing supplier landscapes, company sizes, and geographic distribution across sectors.
- **Lead generation agencies** compiling verified company databases with employee counts, addresses, and websites.
- **Data analysts** studying European business demographics, industry clusters, and cross-border trade patterns.

### Use cases

- **Supplier discovery**: Search "CNC machining" and export a list of 500+ manufacturers with employee counts, certifications, and delivery areas to compare potential vendors.
- **Lead enrichment**: Extract company websites and addresses from Europages to enrich your existing CRM records with missing contact data.
- **Competitive analysis**: Scrape all companies in a specific product category to map the competitive landscape — who operates where, company size, and founding year.
- **Market entry research**: Query "solar panels" filtered by country to identify potential distribution partners in target markets before entering a new region.
- **Trade show preparation**: Build a pre-qualified list of exhibitors and suppliers in your industry vertical, complete with company profiles and product categories.

### Why use Europages Scraper?

- **No API key, no login** — works out of the box with zero configuration.
- **17 data fields** per company — name, description, address, country, employees, founding year, website, categories, supplier type, certifications, delivery area, and more.
- **Bulk extraction** — automatically paginates through thousands of results. Set `maxItems` to control volume.
- **Flexible input** — search by keyword or paste specific Europages URLs for targeted scraping.
- **Detail enrichment** — optionally visit each company profile to extract website URLs, full street addresses, and product categories.
- **Export anywhere** — download results as CSV, JSON, Excel, XML, or HTML. Integrate via API, webhooks, or scheduled runs. Pay only for what you use.

### What data can you extract?

The scraper extracts the following fields for each company. All fields are returned as strings for maximum compatibility.

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Company name as displayed on Europages |
| `description` | string | Company description / elevator pitch |
| `url` | string | Full Europages profile URL |
| `website` | string | Company's own website |
| `phone` | string | Company phone number |
| `companyId` | string | Europages company ID |
| `street`, `zipcode` | string | Street address and postal code |
| `latitude`, `longitude` | number | Company coordinates |
| `responseRate`, `averageResponseTime` | number / string | How fast the company answers enquiries on Europages |
| `productCount`, `products` | number / array | Number of products and the showcased product names |
| `emailAvailable` | boolean | Whether the company accepts e-mail enquiries |
| `city` | string | City or locality |
| `country` | string | Country name (e.g., "France", "Germany") |
| `countryCode` | string | ISO 2-letter country code (e.g., "FR", "DE") |
| `fullAddress` | string | Full street address |
| `employees` | string | Employee count range (e.g., "10-19", "100-199", "1000+") |
| `foundingYear` | string | Year the company was founded |
| `deliveryArea` | string | Delivery/distribution area (e.g., "Europe", "International") |
| `supplierType` | string | Business type (e.g., "Manufacturer", "Service provider", "Distributor") |
| `certificateCount` | string | Number of certifications listed |
| `categories` | string | Product categories, comma-separated (with `includeCompanyDetails`) |
| `verified` | string | Whether the company profile is verified ("Yes" / "No") |
| `logoUrl` | string | Company logo image URL |
| `searchKeyword` | string | The keyword used to find this company |

#### Example output

```json
{
  "name": "DIGICAD",
  "description": "Digicad is an integrator of CAD software solutions Solid Edge and Simulation published by Siemens Digital Industries Software.",
  "url": "https://www.europages.co.uk/DIGICAD/FRA531831-00101.html",
  "website": "https://www.digicad.fr/",
  "city": "Bouc Bel Air",
  "country": "France",
  "countryCode": "FR",
  "fullAddress": "725 Chemin Joseph Roumanille, Bouc Bel Air 13320",
  "employees": "10-19",
  "foundingYear": "1994",
  "deliveryArea": "Europe",
  "supplierType": "Service provider",
  "certificateCount": "3",
  "categories": "CAD CAM Software, CAD Design, CAD Software, Industrial Software",
  "verified": "Yes",
  "logoUrl": "https://media.visable.com/...",
  "searchKeyword": "software"
}
```

### How to use

#### Option A: Search by keyword

The simplest way — enter a keyword and the scraper searches Europages, follows pagination, and extracts all matching companies.

1. Go to the [Europages Scraper](https://apify.com/logiover/europages-scraper) page on Apify Store.
2. Click **Try for free**.
3. Enter your search keyword (e.g., `packaging machines`).
4. Set **Max Items** to control how many companies to extract.
5. Optionally enable **Include Company Details** for website URLs and categories.
6. Click **Start** and wait for results.

```json
{
  "keyword": "packaging machines",
  "maxItems": 200,
  "includeCompanyDetails": false
}
```

#### Option B: Scrape specific URLs

Paste one or more Europages search result URLs. Useful when you have pre-filtered searches (by country, category, or other filters applied on the Europages website).

1. Go to Europages and apply your desired filters.
2. Copy the search result page URL from your browser.
3. Paste it into the **Start URLs** field.

```json
{
  "startUrls": [
    { "url": "https://www.europages.co.uk/companies/software.html" },
    { "url": "https://www.europages.co.uk/companies/steel.html" }
  ],
  "maxItems": 500,
  "includeCompanyDetails": true
}
```

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `keyword` | string | `""` | Search keyword for Europages company search |
| `startUrls` | array | `[]` | Direct Europages search URLs to scrape |
| `maxItems` | integer | `100` | Maximum companies to extract (0 = unlimited) |
| `country` | string | — | Optional supplier country as in Europages URLs, e.g. `germany`, `france` |
| `includeCompanyDetails` | boolean | `false` | Visit company pages for product categories and the long description (website, phone and address are included without it) |
| `proxyConfiguration` | object | Apify auto | Proxy settings (datacenter proxies work) |

#### Full input example

```json
{
  "keyword": "steel suppliers",
  "maxItems": 300,
  "includeCompanyDetails": true,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output example

```json
{
  "name": "CONHEXA SAS",
  "description": "Conhexa SAS specializes in the design and manufacture of industrial heating and cooling systems for the food processing and chemical industries.",
  "url": "https://www.europages.co.uk/CONHEXA-SAS/00000003772197-130995001.html",
  "website": "https://www.conhexa.com/",
  "city": "Steenvoorde",
  "country": "France",
  "countryCode": "FR",
  "fullAddress": "Zone Industrielle, Steenvoorde 59114",
  "employees": "100-199",
  "foundingYear": "1985",
  "deliveryArea": "International",
  "supplierType": "Manufacturer",
  "certificateCount": "5",
  "categories": "Industrial Heating, Cooling Systems, Heat Exchangers",
  "verified": "Yes",
  "logoUrl": "https://media.visable.com/...",
  "searchKeyword": "steel suppliers"
}
```

### Tips for best results

- **Start with broad keywords** and refine if you get too many results. Europages has millions of companies.
- **Use `maxItems` wisely** — start with 50-100 to preview data quality before scaling up to thousands.
- **Website, phone, address and headcount come with every row.** Enable detail enrichment only when you need product categories or the long description — it adds one request per company.
- **Combine keyword + startUrls** to scrape multiple industries in a single run.
- **Schedule regular runs** to keep your B2B database fresh — Europages profiles are updated frequently.
- **Filter by country** on the Europages website first, then use the filtered URL in `startUrls` for country-specific lists.
- **Check `verified` field** to prioritize companies with verified profiles for higher data quality.
- **Use `supplierType`** to filter manufacturers vs. distributors vs. service providers in your downstream pipeline.
- **Export to Google Sheets** directly from the Apify dataset for instant collaboration with your team.
- **Null fields are normal** — not every company fills out all profile sections. `foundingYear`, `certificateCount`, and `deliveryArea` may be null for some companies.

### Integrations

Connect Europages Scraper results to your existing tools:

- **Google Sheets** — auto-sync scraped companies to a spreadsheet for easy filtering and sharing.
- **Slack** — get notifications when a run completes with a summary of extracted companies.
- **Zapier** — trigger workflows when new B2B leads are scraped (e.g., add to CRM, send email).
- **Make (Integromat)** — build multi-step automations combining Europages data with enrichment or outreach tools.
- **Webhooks** — receive a POST request with run metadata when scraping finishes.
- **Scheduler** — run weekly or monthly to keep your supplier database up to date automatically.

### API usage

Run Europages Scraper programmatically with the Apify API.

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/logiover~europages-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keyword": "software", "maxItems": 100}'
```

#### Node.js

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

const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover/europages-scraper').call({
    keyword: 'packaging machines',
    maxItems: 200,
    includeCompanyDetails: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Extracted ${items.length} companies`);
items.forEach((item) => console.log(item.name, item.country, item.employees));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("logiover/europages-scraper").call(run_input={
    "keyword": "steel suppliers",
    "maxItems": 300,
    "includeCompanyDetails": True,
})

dataset = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"Extracted {len(dataset)} companies")
for company in dataset:
    print(company["name"], company["country"], company["employees"])
```

### 🤖 AI Agents, MCP & RAG Integration

Europages Scraper is available as an MCP tool for AI agents. Connect it to your Claude, ChatGPT, or custom agent pipeline to let your AI assistant find and analyze B2B suppliers on demand. Example prompt: *"Find 50 solar panel manufacturers in Germany and summarize their employee sizes."*

Connect this Actor directly to **Apify AI**, **Claude Desktop**, **Cursor**, **VS Code**, **Windsurf**, **LangChain**, or **LlamaIndex** via the official **Apify MCP Server** — no custom wrapper code needed:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=logiover/europages-scraper"
    }
  }
}
```

- **Schema-typed inputs & outputs:** Clean JSON records with explicit `.actor/input_schema.json` and `.actor/output_schema.json` definitions so LLM agents infer parameters and parse fields accurately without HTML noise.
- **Bounded & predictable runs:** Built-in volume caps and pay-per-result budget guards prevent runaway agent tool loops.
- **RAG & automation ready:** Stream run datasets straight into vector stores, n8n, Make, Zapier, or webhook pipelines.

### FAQ

#### Does Europages Scraper require an API key or login?

No. The scraper extracts publicly available data from Europages search results and company profiles. No API key, account, or login credentials are needed.

#### How many companies can I extract per run?

Europages lists millions of companies. A single keyword search can yield tens of thousands of results. Set `maxItems` to control volume — common values range from 100 to 5,000 per run.

#### What countries does Europages cover?

Europages covers companies across 50+ countries, with the strongest coverage in the EU (France, Germany, Italy, Spain, UK, Poland, Netherlands, Belgium, Austria, and more). Companies from Turkey, India, China, and North Africa are also well represented.

#### Why are some fields null or empty?

Not all companies fill out every profile section. Fields like `foundingYear`, `certificateCount`, `phone` and `categories` depend on whether the company has provided that information. The `categories` field also requires `includeCompanyDetails: true`.

#### How do I get website URLs and full addresses?

Website, phone, street address and coordinates are included in every row without extra settings. Set `includeCompanyDetails` to `true` only if you also need product categories and the long description; it adds one request per company.

#### Can I filter by country or region?

Yes. Apply country or region filters on the Europages website, then copy the filtered URL and use it in `startUrls`. The scraper will respect the filter and only extract companies from that selection.

#### How fast is the scraper?

Without detail enrichment, the scraper processes about 30 companies per request (one search page). A run of 300 companies typically completes in 30-60 seconds. With detail enrichment enabled, expect 3-5x longer due to individual profile page requests.

#### What format can I export the data in?

Apify datasets support CSV, JSON, Excel (XLSX), XML, and HTML export formats. You can download directly from the Apify Console or access via the API.

#### How often is Europages data updated?

Europages company profiles are maintained by the companies themselves and Europages editors. Running the scraper weekly or monthly gives you a fresh snapshot. The `verified` field helps identify actively maintained profiles.

#### Is it legal to scrape Europages?

See the section below.

#### What if my search returns zero results?

Double-check your keyword spelling. Try broader terms (e.g., "steel" instead of "stainless steel tubes grade 304"). If using `startUrls`, verify the URL is a valid Europages search page. The scraper logs a clear message when no results are found.

#### Are there related scrapers for B2B lead generation?

See the Related Scrapers section below for other company and lead generation tools.

### 💬 Support, Issues & Reviews

- **Bug reports & target-site changes:** Hit an unexpected empty result or selector change? [Open a ticket in the Issues tab](https://apify.com/logiover/europages-scraper/issues) with your **Run ID** or sample input — we actively monitor issues and ship fixes fast.
- **Feature & field requests:** Need an additional data attribute or filter? [Request it in the Issues tab](https://apify.com/logiover/europages-scraper/issues).
- **Enjoying this Actor?** If it saved you engineering time, please consider leaving an honest [review on Apify Store](https://apify.com/logiover/europages-scraper/reviews) or bookmarking [logiover/europages-scraper](https://apify.com/logiover/europages-scraper) — organic developer feedback helps others discover reliable tools and keeps maintenance prioritized.

### Is it legal to scrape Europages?

This scraper collects publicly available business information from Europages — data that companies themselves publish on the platform for the explicit purpose of being found by potential business partners. The scraper does not bypass any login walls, CAPTCHAs, or access controls. Users are responsible for complying with applicable laws (including GDPR for EU personal data), Europages Terms of Service, and their own jurisdiction's data protection regulations. Always use scraped data responsibly and in accordance with its intended business-to-business purpose.

This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by Europages; Europages and all other trademarks mentioned here are the property of their respective owners.

### Related scrapers

- [LinkedIn Company Scraper](https://apify.com/logiover/linkedin-company-scraper) — Extract company profiles from LinkedIn for sales prospecting.
- [Google Maps Scraper](https://apify.com/logiover/google-maps-scraper) — Scrape local business listings with reviews, ratings, and contact info.
- [Work Email Finder](https://apify.com/logiover/work-email-finder) — Find verified work email addresses using DNS-based lookup.

***

### Pricing

This Actor is **pay per result**: you are charged for the rows it writes to your dataset, not for the time it spends running. There are no platform fees to calculate on top, and higher Apify plans pay a lower rate per result. A run that returns nothing costs nothing.

### 📝 Changelog

#### 2026-11-11

- Added reliable terminal run status telemetry and structured Apify AI / MCP Server (`mcp.apify.com`) tool configuration.
- Added direct Issues & Reviews support links and refreshed live maintenance verification.

#### 2026-11-01

- Monthly health check (2026-11-01): a live run on the current build completed successfully and returned data. Input options, output fields and pricing are unchanged.
- README refreshed: 1 link to retired Actors removed; independence disclaimer added.

#### 2026-10-15

- Every request now has a hard time limit, so a proxy connection that stalls can no longer hold up the run or push it past its timeout.
- A run that reaches its maximum cost per run now stops cleanly with its results saved and a status message, instead of ending as aborted.
- A proxy group your account cannot use no longer stops the run at start-up; it falls back to the default Apify Proxy.

#### 2026-10-12

- Fixed runs that lost everything at the timeout: companies are now pushed page by page (they were held in memory and pushed only at the very end), and the time budget follows the run's real timeout.
- Much richer rows without visiting company pages: website, phone, street, ZIP, city, coordinates, headcount band, founding year, response rate and time, product count and showcased products are read from the search results.
- New optional `country` input (e.g. germany, france) to search one supplier country.
- Pages are fetched several at a time with a fresh IP per retry; detail visits (now only needed for product categories) run in parallel.
- Fixed out-of-memory crashes at 512 MB; a search with no results now ends successfully with a status message.
- Every Actor process now caps the JavaScript heap at ~70 % of the run's memory. The platform default lets the heap grow until the container is killed (exit 137), which showed up as random failed runs.

#### 2026-09-23

- Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
- Output verified on a live run: 60 row(s) across 17 columns, 75.8% of cells populated.
- Run reliability reviewed: 100.0% of public runs succeeded in the last 30 days.
- Input schema, output schema and pricing configuration reviewed.
- Noted that 3 column(s) came back empty in this sample (`website`, `fullAddress`, `categories`); these are under review.

# Changelog

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

# Actor input Schema

## `keyword` (type: `string`):

Keyword to search for companies on Europages (e.g. 'software', 'packaging machines', 'steel').

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

Only companies based in this country, written as in Europages URLs: germany, france, united-kingdom, italy, spain… Leave empty for all of Europe.

## `startUrls` (type: `array`):

Direct Europages search result URLs to scrape. Overrides keyword if provided.

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

Maximum number of companies to extract. Set 0 for unlimited.

## `includeCompanyDetails` (type: `boolean`):

Visit each company page to add its product categories and the long description. Website, phone, address and headcount are already included without this — leave it off for speed.

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

Proxy settings. Apify datacenter proxies work well for Europages.

## Actor input object example

```json
{
  "keyword": "software",
  "maxItems": 100,
  "includeCompanyDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `name` (type: `string`):

No description

## `description` (type: `string`):

No description

## `url` (type: `string`):

No description

## `website` (type: `string`):

No description

## `city` (type: `string`):

No description

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

No description

## `countryCode` (type: `string`):

No description

## `fullAddress` (type: `string`):

No description

## `employees` (type: `string`):

No description

## `foundingYear` (type: `string`):

No description

## `deliveryArea` (type: `string`):

No description

## `supplierType` (type: `string`):

No description

## `certificateCount` (type: `string`):

No description

## `categories` (type: `string`):

No description

## `verified` (type: `string`):

No description

## `logoUrl` (type: `string`):

No description

## `searchKeyword` (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 = {
    "keyword": "software",
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/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 = {
    "keyword": "software",
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/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 '{
  "keyword": "software",
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/europages-scraper --silent --output-dataset

```

## MCP server setup

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