# Europages Scraper (`solidcode/europages-scraper`) Actor

\[💰 $10.0 / 1K] Extract B2B supplier and manufacturer profiles from Europages — name, description, postal address, geo coordinates, phone, website, VAT number, employee count, founding year, business type and category. Search by keyword across 25 countries, or paste Europages URLs.

- **URL**: https://apify.com/solidcode/europages-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Features:** Limited permissions
- **Stats:** 13 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 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

Pull structured B2B supplier and manufacturer profiles from Europages at scale — company name, full postal address, city, postal code and ISO country code on 100% of rows, plus geo coordinates on 99.9%, website on 95.2%, phone on 93.6% and a VAT number on 60.6%. Built for procurement teams, B2B sales and lead-gen teams, and supply-chain analysts who need a clean, structured supplier dataset without working through the directory one company at a time.

### Why This Scraper?

- **VAT IDs on 6 in 10 suppliers** — 60.6% of rows in a 1,407-row benchmark carry the company's VAT number (e.g. `FR01754500593`, `TR1020974161`) for KYC, due diligence, and reverse-charge invoicing across the EU.
- **Map-ready geo on 99.9% of rows** — latitude and longitude alongside street lines, city, postal code and ISO-2 country code, which land on 100% of rows, so territory maps and catchment models build straight from the export.
- **25 country filters, from Germany to Türkiye to China** — combine any subset of markets, or leave the field empty to sweep all of Europe in one run.
- **9 localized site editions** — English, German, French, Italian, Spanish, Dutch, Portuguese, Polish and Turkish, each returning company text in that market's own language.
- **4 supplier-type filters** — Manufacturer / Producer, Wholesaler, Distributor or Service provider, so a sourcing list matches your intent; output labels go one level finer and also flag Custom Manufacturer.
- **An exact result cap you can budget against** — ask for 200 rows and you get at most 200, and a run mixing several keywords and countries splits that cap fairly across every search instead of letting the first search consume it.
- **Responsiveness signals straight from the supplier's profile** — response rate as a 0–100 percentage on 34.9% of rows, and average response time in the site's own wording (`less than 24 hrs`, `24–48 hours`, `48–72 hours`, `more than 72 hours`) on 43.9%.
- **Firmographics for sizing a vendor before you call** — employee band on 81.0% of rows, founding year on 66.5%, distribution area (Worldwide / Europe / National / Regional / Local) on 77.9%, and a product keyword list on 73.9%.
- **Empty searches are reported, not hidden** — the run summary names each keyword-and-country combination Europages had no companies for, so a short dataset is explained rather than a mystery.

### Use Cases

**Lead Generation & Sales Prospecting**

- Build supplier call lists from phone (93.6% of rows) and website (95.2%) with the profile URL attached
- Segment prospects by supplier type — reach only Manufacturers, or only Distributors
- Localize outreach by pulling each edition's native-language company descriptions
- Prioritize responsive vendors first using the published response rate and response-time band

**Procurement & Supplier Sourcing**

- Shortlist qualified manufacturers for a specific component across multiple countries
- Check vendor legitimacy against a published VAT ID before issuing an RFQ
- Compare supplier density for a category between Germany, France, Italy, and beyond
- Find alternate or backup suppliers to de-risk a single-source supply chain

**Market & Competitive Research**

- Map the competitive landscape of an industrial niche across 25 markets
- Track the category and keywords competitors position themselves under
- Benchmark company sizes in a sector using founding year and employee bands
- Quantify a market by counting suppliers per country and supplier type

**Supply-Chain & Territory Analysis**

- Plot suppliers on a map using per-company latitude/longitude for logistics planning
- Cluster vendors by distribution area to optimize regional sourcing
- Identify supplier concentration risk in a single city or postal region
- Feed geo-tagged supplier data into routing and catchment models

**Data Enrichment & CRM Integration**

- Enrich an existing vendor database with VAT IDs, geo coordinates, and firmographics
- De-duplicate and standardize supplier records across European markets
- Power B2B directories and analytics dashboards with fresh company data
- Keep a sourcing CRM current with response-time and company-size signals

### Getting Started

#### Simple Keyword Search

The fastest way to start — one product term, all of Europe:

```json
{
    "searchTerms": ["cardboard packaging"],
    "maxResults": 50
}
```

#### Keyword + Country + Supplier Type

Narrow to German and French manufacturers of industrial valves:

```json
{
    "searchTerms": ["industrial valves"],
    "countries": ["de", "fr"],
    "supplierTypes": ["manufacturer"],
    "maxResults": 200
}
```

#### Localized Edition (Native-Language Descriptions)

Pull olive oil suppliers from the Spanish edition for native-language company text:

```json
{
    "searchTerms": ["aceite de oliva"],
    "countries": ["es"],
    "language": "es",
    "maxResults": 100
}
```

#### Paste Europages URLs Directly

Mix keyword search pages, category listings, and a single company profile in one run:

```json
{
    "startUrls": [
        "https://www.europages.co.uk/en/search?q=packaging",
        "https://www.europages.fr/entreprises/emballages%20en%20carton.html"
    ],
    "maxResults": 100
}
```

#### Full-Featured Example

Multiple terms across several countries, filtered by supplier type:

```json
{
    "searchTerms": ["olive oil", "pasta machinery"],
    "countries": ["it", "es", "gr"],
    "supplierTypes": ["manufacturer", "distributor"],
    "language": "en",
    "maxResults": 500
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchTerms` | string\[] | `["cardboard packaging"]` | Products, services, or industry keywords to search. Each term is combined with every country — 2 terms x 3 countries = 6 searches. |
| `countries` | string\[] | `[]` (all of Europe) | Restrict suppliers to these markets. 25 options: Germany, France, United Kingdom, Italy, Spain, Netherlands, Belgium, Poland, Türkiye, Austria, Switzerland, Portugal, Sweden, Denmark, Norway, Finland, Ireland, Czech Republic, Greece, Romania, Hungary, Bulgaria, Ukraine, United States, China. |
| `startUrls` | string\[] | `[]` | Paste Europages URLs directly — keyword search pages, category listing pages, or individual company profiles. Filters baked into the URL are honored as-is. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `language` | select | `English` | Europages language edition. Sets both the result language and the language of company descriptions. 9 editions: English, German, French, Italian, Spanish, Dutch, Portuguese, Polish, Turkish. |
| `supplierTypes` | string\[] | `[]` (all types) | Only include companies matching these business types: Manufacturer / Producer, Wholesaler, Distributor, Service provider. Leave empty for every type. |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Hard cap on total company rows across all searches and URLs. Set to `0` for no cap. The run never returns more rows than the number you set. |

### Output

Each row is one flat company record. Fields Europages does not publish for a supplier are omitted from that row, so a row only ever contains real values. Fill rates below were measured over 1,407 companies pulled across 8 different searches.

```json
{
    "name": "ATLAS EXPORT PACKAGING",
    "description": "Atlas Export Packaging is a leading Turkish packaging manufacturer and supplier based in Istanbul, specializing in eco-friendly packaging solutions for businesses worldwide.",
    "supplierTypes": ["Manufacturer / Producer", "Custom Manufacturer", "Service Provider", "Distributor"],
    "categories": ["Packaging material"],
    "keywords": ["Cardboard box and packaging", "Food packaging", "Luxury packaging", "shopping bags"],
    "website": "https://www.atlasforexport.com/",
    "phone": "+905426048983",
    "addressLines": ["Zafer Mah. Dogan Arasli Blv No 95", "Esenyurt"],
    "city": "Istanbul",
    "postalCode": "34513",
    "countryCode": "TR",
    "latitude": 41.0234125,
    "longitude": 28.6856642,
    "vatId": "TR1020974161",
    "employeeCount": "20-49",
    "foundingYear": 2008,
    "distributionArea": "Worldwide",
    "responseRate": 99,
    "averageResponseTime": "less than 24 hrs",
    "certificatesCount": 5,
    "logoUrl": "https://cdn.europages.com/logos/atlas-export-packaging.gif",
    "companyId": "22191754",
    "slug": "atlas-export-packaging-22191754",
    "profileUrl": "https://www.europages.co.uk/en/company/atlas-export-packaging-22191754",
    "searchUrl": "https://www.europages.co.uk/companies/cardboard%20packaging.html",
    "contentLanguage": "en"
}
```

#### Identity

| Field | Type | Fill rate | Description |
|-------|------|-----------|-------------|
| `name` | string | 100% | Company / supplier name |
| `companyId` | string | 100% | Europages internal company identifier — the de-duplication key |
| `slug` | string | 100% | Europages URL slug |
| `profileUrl` | string | 100% | Canonical Europages company profile URL |
| `searchUrl` | string | 100% | The search or listing URL the company was found on |
| `contentLanguage` | string | 100% | Language edition the record came from |
| `description` | string | 93.8% | Company "about" text, in the language of the edition you chose |
| `logoUrl` | string | 93.3% | Company logo image URL |

#### Location

| Field | Type | Fill rate | Description |
|-------|------|-----------|-------------|
| `addressLines` | string\[] | 100% | Street address lines |
| `city` | string | 100% | City |
| `postalCode` | string | 100% | Postal / ZIP code |
| `countryCode` | string | 100% | ISO-2 country code |
| `latitude` | number | 99.9% | Geo latitude |
| `longitude` | number | 99.9% | Geo longitude |

#### Firmographics

| Field | Type | Fill rate | Description |
|-------|------|-----------|-------------|
| `categories` | string\[] | 99.9% | The company's primary Europages business area — a single value, e.g. `Packaging material` |
| `supplierTypes` | string\[] | 97.4% | Business types: Manufacturer / Producer, Custom Manufacturer, Distributor, Service Provider, Wholesaler |
| `employeeCount` | string | 81.0% | Employee-count band, e.g. `20-49` |
| `distributionArea` | string | 77.9% | Stated delivery reach: Worldwide, Europe, National, Regional or Local |
| `keywords` | string\[] | 73.9% | Product / service keywords the company lists |
| `foundingYear` | number | 66.5% | Year the company was founded |
| `vatId` | string | 60.6% | VAT / tax identification number, where the supplier publishes one |

#### Contact

| Field | Type | Fill rate | Description |
|-------|------|-----------|-------------|
| `website` | string | 95.2% | Company homepage URL |
| `phone` | string | 93.6% | Contact phone number |

#### Responsiveness

| Field | Type | Fill rate | Description |
|-------|------|-----------|-------------|
| `certificatesCount` | number | 100% (above zero on 10.7%) | How many certificates the supplier declares on its profile |
| `averageResponseTime` | string | 43.9% | Stated average reply time, in the site's own wording: `less than 24 hrs`, `24–48 hours`, `48–72 hours`, `more than 72 hours` |
| `responseRate` | number | 34.9% | Stated share of inquiries answered, as a 0–100 percentage |

### Tips for Best Results

- **Start small to validate.** Set `maxResults` to 25-50 on your first run to confirm the data matches your sourcing intent, then scale up — the cap is exact, so 50 means 50.
- **Plan outreach around phone and website.** Europages routes buyer messages through its own on-site contact form rather than publishing supplier inboxes, so the reliable contact points in the export are `phone` (93.6%), `website` (95.2%) and `profileUrl` (100%).
- **Read a `certificatesCount` of 0 as "none declared".** The field lands on every row, but only 10.7% of suppliers declare any certificate at all, so use it to spot the well-documented minority rather than as a filter on the whole list.
- **Keep searches narrow for topical results.** Europages ranks its own results, and relevance thins out on deeper pages — several tight keyword + country runs return a more on-topic list than one broad sweep with a big cap.
- **Match the edition to the market.** Set `language` to the supplier's home language (German for German suppliers, for example) to get the richest descriptions and keyword coverage.
- **Paste a company profile URL for a single enriched record.** Drop one Europages company URL into `startUrls` to pull that supplier's full profile, including any published VAT ID and its structured address.
- **De-duplication is automatic.** The same company found across overlapping searches is billed and returned only once, keyed on its Europages company ID.

### Pricing

**From $10.00 per 1,000 results** — one rate per company row, undercutting comparable Europages extractors. No compute or time-based charges: you pay per result, plus a small fixed start fee each time a run begins. Bronze, Silver, and Gold subscribers pay progressively less, and the table below shows the total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $1.20 | $1.13 | $1.06 | $1.00 |
| 1,000 | $12.00 | $11.30 | $10.65 | $10.00 |
| 10,000 | $120.00 | $113.00 | $106.50 | $100.00 |
| 100,000 | $1,200.00 | $1,130.00 | $1,065.00 | $1,000.00 |

These discount tiers take effect on October 25, 2026. Until then, every plan pays the Gold rate of $10.00 per 1,000 results.

A "result" is one company row in the output dataset. The same company found across overlapping searches is returned and billed only once.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** — Notifications when a run finishes
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate B2B research, supplier sourcing, market analysis, and lead generation. Users are responsible for complying with applicable laws — including the GDPR and other data-protection regulations — and with Europages' Terms of Service. Do not use extracted data for spam, harassment, or any unlawful purpose, and respect the marketing and contact preferences of the companies you collect.

# Actor input Schema

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

Products, services, or industry keywords to search on Europages (e.g. 'cardboard packaging', 'industrial valves', 'olive oil'). Each term is combined with every entry in Countries — for example, 2 terms x 3 countries = 6 searches.

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

Restrict suppliers to these countries. Leave empty to search all of Europe (every country). Combined with each Search Term.

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

Paste one or more Europages URLs. Accepts keyword search pages (e.g. https://www.europages.co.uk/en/search?q=packaging), category listing pages (e.g. https://www.europages.fr/entreprises/emballages%20en%20carton.html), and individual company profiles. Filters baked into the URL are honored as-is.

## `language` (type: `string`):

Which Europages language edition to query. Each edition is a separate localized site, so this sets both the result language and the company descriptions you receive. Available editions: English, German, French, Italian, Spanish, Dutch, Portuguese, Polish, Turkish.

## `supplierTypes` (type: `array`):

Only include companies matching these business types. Leave empty to include every type of supplier.

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

Hard cap on total company rows across all searches and URLs. Default 100 — increase for bigger runs, or set to 0 for no cap. An effective upper limit of 100,000 rows per run always applies to prevent runaway pagination, so a value above 100,000 (or 0 / no cap) collects at most 100,000 rows. When you search several keywords or countries at once, this total is shared evenly between them, so every keyword and country is represented — and if one of them runs out of companies early, its unused share goes to the others. The run never saves more rows than the number you set, so you are never charged above it. To gather very large datasets, split a request across multiple keywords or countries.

## Actor input object example

```json
{
  "searchTerms": [
    "cardboard packaging"
  ],
  "countries": [],
  "startUrls": [],
  "language": "en",
  "supplierTypes": [],
  "maxResults": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of scraped companies with the most useful columns at a glance.

# 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": [
        "cardboard packaging"
    ],
    "countries": [],
    "startUrls": [],
    "language": "en",
    "supplierTypes": [],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/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 = {
    "searchTerms": ["cardboard packaging"],
    "countries": [],
    "startUrls": [],
    "language": "en",
    "supplierTypes": [],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/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 '{
  "searchTerms": [
    "cardboard packaging"
  ],
  "countries": [],
  "startUrls": [],
  "language": "en",
  "supplierTypes": [],
  "maxResults": 100
}' |
apify call solidcode/europages-scraper --silent --output-dataset

```

## MCP server setup

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