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

Collect Europages products and suppliers by keyword, category, or URL. Filter by country, supplier type, and verification, and optionally add company profiles, product pages, and a supplier catalog.

- **URL**: https://apify.com/scraptivo/europages-scraper.md
- **Developed by:** [Scraptivo](https://apify.com/scraptivo) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 product scrapeds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

**Europages Scraper** collects products and suppliers from [Europages](https://www.europages.co.uk) and turns them into structured data for sourcing, supplier discovery, and catalog research. Provide a keyword such as "men's t shirts", a category slug, or a Europages search / company / product URL, then export name, company, country, price range, and MOQ to JSON, CSV, or Excel. Use it to find manufacturers, compare catalogs, and schedule recurring collection. Pricing starts at **$2.00 per 1,000 products**, with optional company profiles, product pages, and supplier-catalog items at the same rate.

### What can you automate with Europages Scraper?

- **Build supplier shortlists** — Search products or companies, then export company name, country, response rate, and product URL on every row.
- **Filter the same way as the site** — Limit by country, supplier type, company size, verified status, material, color, or price.
- **Attach company and product context** — Optionally add phone, VAT, address, certificates, and full product descriptions.
- **Collect a supplier catalog** — After a search, pull additional products from each unique company up to `maxProductsPerSupplier`.
- **Schedule recurring collection** — Run weekly and push new suppliers into Sheets, a CRM, or an alert workflow.

### Who is this scraper for?

| Team | Workflow |
|---|---|
| Procurement and sourcing teams | Find manufacturers and distributors by product keyword and country. |
| Sales and lead-generation agencies | Build B2B supplier lists with optional phone, VAT, and homepage. |
| Market researchers | Compare price ranges, MOQs, and verified / quick-responder flags. |
| Catalog and marketplace teams | Export product names, images, and company links for assortment research. |

### What data can you collect from Europages?

| Data group | Example fields | How it helps |
|---|---|---|
| Product identity | `recordType`, `name`, `url`, `sourceQuery` | Identify each product and trace it back to the search. |
| Commercial | `priceMin`, `priceMax`, `currency`, `moqValue`, `moqUnit` | Compare asking ranges and minimum order quantities. |
| Company | `companyName`, `companyUrl`, `companyCountryCode`, `isQuickResponder` | See who supplies the product and how they respond. |
| Enrichment | `phoneNumber`, `homepage`, `description`, `imageUrls` | Qualify a supplier when company or product details are enabled. |
| Catalog extras | `fromSupplierCatalog` | Mark rows that came from **Scrape all products by supplier**. |

Search rows already include name, company, country, and price when Europages publishes them. Phone, VAT, address, and certificates appear when **Scrape company details** is on. Full descriptions and extra images appear when **Scrape product details** is on. Some price and contact fields are empty when the supplier does not publish them.

### How to use Europages Scraper

1. Open the [Europages Scraper](https://apify.com/scraptivo/europages-scraper) on Apify.
2. Enter a search query such as "men's t shirts", or paste Europages product / supplier / company URLs.
3. Choose **Products** or **Suppliers / companies**, set **Max items** (Console prefill is 10; `0` means unlimited), and any country or supplier-type filters.
4. Run the Actor — it writes one dataset row per product or supplier record.
5. Export the dataset or connect it to your workflow.

```json
{
    "searchQueries": ["men's t shirts"],
    "scrapeType": "products",
    "maxItems": 10,
    "scrapeCompanyDetails": false,
    "scrapeProductDetails": false,
    "scrapeSupplierProducts": false,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Example workflow

#### Build a weekly list of verified packaging-machinery suppliers in Germany and Italy

1. Schedule a Monday run with `searchQueries` = `["packaging machinery"]`, `scrapeType` = `"suppliers"`, `countries` = `["DE", "IT"]`, `supplierTypes` = `["production", "distribution"]`, and `verifiedOnly` = `true`.
2. Keep companies that match your size and response needs using employee-count filters and `isQuickResponder`.
3. Enable **Scrape company details** when you need phone, VAT, address, and certificates.
4. Send new records to Google Sheets or a CRM through a webhook after each run.
5. Deduplicate user-side against `companyUrl` (or product `url` for catalog rows).

The Actor does not filter or merge results across runs — those steps happen in your pipeline.

### Automate and integrate your results

- **Schedules** — Run **weekly** for supplier-directory snapshots, or **daily** when you monitor a fast-changing product query. Create a separate scheduled task per keyword and country set.
- **Webhooks** — Push completed runs into Google Sheets, Make, Zapier, Slack, or a CRM.
- **Exports and API** — Download JSON, CSV, Excel, or HTML from the Apify Console, or start a run from the API:

```shell
curl -X POST "https://api.apify.com/v2/acts/scraptivo~europages-scraper/runs?token=YOUR-APIFY-TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchQueries": ["men'\''s t shirts"],
    "scrapeType": "products",
    "maxItems": 10
  }'
```

Deduplicate user-side with product `url` or `companyUrl`.

### Input reference

| Field | Type | Required | Default | What it controls |
|---|---|---:|---|---|
| `startUrls` | array | No | — | Europages product search, supplier search, category, company, or product URLs. |
| `searchQueries` | array | No | — | Keywords such as `packaging machinery`. |
| `scrapeType` | string | No | `products` | `products` or `suppliers`. Company/product start URLs still scrape that page. |
| `categorySlug` | string | No | — | Showroom category slug, e.g. `packaging-machinery-100013`. |
| `countries` | array | No | — | ISO country codes such as `DE`, `TR`, `FR`. Applied to search queries. |
| `supplierTypes` | array | No | — | `production`, `customerSpecificManufacturing`, `distribution`, `service`, `wholesaler`. |
| `employeeCounts` | array | No | — | Size bands from `From1To4` through `MoreThan1000`. |
| `verifiedOnly` | boolean | No | `false` | Only Europages-verified companies. |
| `topResponderOnly` | boolean | No | `false` | Only top-responder companies. |
| `quickResponderOnly` | boolean | No | `false` | Only verified / quick-response profiles. |
| `categories` / `materials` / `colors` / `features` | array | No | — | Facet names from the search sidebar. |
| `minPrice` / `maxPrice` | integer | No | — | Product price band in EUR (both required to apply). |
| `radiusKm` | string | No | `""` | Distance radius; ignored unless latitude and longitude are set. |
| `locationLatitude` / `locationLongitude` | number | No | — | WGS84 coordinates for the radius filter. |
| `sortBy` | string | No | `relevance` | Result ordering (`relevance`). |
| `scrapeCompanyDetails` | boolean | No | `false` | Add phone, VAT, address, contacts, certificates (`company-details` event). |
| `scrapeProductDetails` | boolean | No | `false` | Add full description, images, attributes (`product-details` event). |
| `scrapeSupplierProducts` | boolean | No | `false` | Add each company's catalog (`supplier-product` event per catalog row). |
| `maxProductsPerSupplier` | integer | No | `0` | Cap catalog items per company; Console prefill is 10. |
| `maxItems` | integer | No | `0` | Cap records for the whole run; Console prefill is 10. |
| `proxyConfiguration` | object | No | Residential | Apify proxy settings. |

Provide `startUrls`, `searchQueries`, or a `categorySlug`. Start-URL query-string filters are kept; the filter fields apply to search queries.

### Output example

```json
{
    "recordType": "product",
    "name": "Oversize 100% Cotton Men's T-Shirt",
    "url": "https://www.europages.co.uk/en/company/m-jan-sport-22331516/products/oversize-100-pamuk-erkek-tisoert-36550904",
    "description": "The oversized cotton men's t-shirt is designed with 100% cotton material and features high-quality print details on both the front and back surfaces.",
    "priceMin": 10.0,
    "priceMax": 20.0,
    "priceKind": "range",
    "currency": "EUR",
    "moqValue": "50",
    "moqUnit": "unit",
    "companyName": "M-JAN SPORT",
    "companyUrl": "https://www.europages.co.uk/en/company/m-jan-sport-22331516",
    "companyCountryCode": "TR",
    "isQuickResponder": true,
    "responseRate": 1.0,
    "averageResponseTime": "less_than_24h",
    "sourceQuery": "men's t shirts"
}
```

### How much does it cost to scrape Europages?

Billing is pay-per-event. A one-time **Actor Start** fee of **$0.00005** applies per run.

| Event | When it is charged | Price |
|---|---|---|
| `dataset-item` (Product scraped) | Each search-result product or supplier row | **$2.00 per 1,000** |
| `company-details` | Each company profile | **$2.00 per 1,000** |
| `product-details` | Each product page | **$2.00 per 1,000** |
| `supplier-product` | Each catalog product from a supplier | **$2.00 per 1,000** |

A listing-only run of 1,000 products costs about **$2.00** plus Actor Start. The same 1,000 products with company and product details enabled costs about **$6.00** plus Actor Start. Catalog rows from **Scrape all products by supplier** are extra `supplier-product` events. Apify plan discounts may reduce these prices. Platform compute and proxy usage are billed separately on your Apify plan.

### Reliability and responsible use

- **Proxy** — Residential proxies are recommended and are the default setting.
- **Conditional fields** — Phone, VAT, certificates, and full descriptions appear only when their toggles are on. Price and MOQ are omitted when the supplier does not publish them.
- **Public data** — The Actor collects publicly visible product and company information from Europages.
- **Responsible use** — Only use the data in ways that comply with Europages' terms of service and applicable law.

### Frequently asked questions

#### Can I scrape Europages products and suppliers by keyword?

Yes. Set `searchQueries` and `scrapeType` to `products` or `suppliers`. You can also paste product search, supplier search, category, company, or product URLs in `startUrls`.

#### Can I schedule Europages Scraper to run automatically?

Yes. Open the **Scheduler** tab in Apify Console and set a weekly cadence for supplier directories or a daily cadence for a monitored product query. Create separate schedules per keyword and country set.

#### What counts as one result?

A search-result row is one `dataset-item` at **$2.00 per 1,000 records**. **Scrape company details** and **Scrape product details** add their own events. **Scrape all products by supplier** writes extra catalog rows billed as `supplier-product`.

#### Why are some fields empty?

Phone, VAT, address, and certificates appear only when **Scrape company details** is on. Full description and extra images appear when **Scrape product details** is on. Many suppliers omit price or MOQ on the listing card.

#### How do I avoid duplicate records?

Within one run, search rows are unique by product or company URL. Across runs the Actor appends results and does not merge them. When you combine datasets, keep the first row for each `url` or `companyUrl`. Setting `maxItems` caps any single run.

#### Do I need a proxy?

The Actor works with the default Apify residential proxy. If a run returns unusually few records, confirm that `proxyConfiguration` uses the RESIDENTIAL group.

#### Can I collect one supplier's full catalog?

Yes. Add the company profile URL to `startUrls` or enable **Scrape all products by supplier** after a search. Use `maxProductsPerSupplier` to cap how many catalog items to take from each company. Global `maxItems` still applies to the whole run.

### Related Scraptivo automations

- [Clutch Scraper](https://apify.com/scraptivo/clutch-scraper) — collect agency and service-company profiles for B2B research.
- [Leadrocks Scraper](https://apify.com/scraptivo/leadrocks-scraper) — add another B2B lead source to the same outreach workflow.
- [LinkedIn Company Scraper](https://apify.com/scraptivo/linkedin-company-scraper) — enrich Europages suppliers with LinkedIn company pages.
- [LinkedIn Profile Scraper](https://apify.com/scraptivo/linkedin-profile-scraper) — find decision-makers at companies you sourced on Europages.

### Support and custom workflows

Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, sample URL, required fields, and expected volume so we can assess the request.

# Actor input Schema

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

Europages URLs copied from the browser. Supported: product search (e.g. https://www.europages.co.uk/en/products?q=men's t shirts), supplier search (/en/search?q=...), category showrooms (/en/showroom-cate/...), company profiles, and product pages. Filters below apply to Search Queries; Start URL query-string filters are kept.

## `searchQueries` (type: `array`):

Keywords to search on Europages (e.g. "men's t shirts", "packaging machinery"). Combined with Scrape Type and the filters below. Leave empty to use Start URLs or a category slug only.

## `scrapeType` (type: `string`):

What to collect from search queries and category pages. Product detail / company profile Start URLs still scrape that page regardless of this setting.

## `categorySlug` (type: `string`):

Optional showroom category slug or path, e.g. packaging-machinery-100013. Used when you have no Start URL for that category.

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

Company country / ships-from filter. Leave empty for any country. Applied to Search Queries.

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

Manufacturer, custom manufacturer, distributor, service provider, or wholesaler. Leave empty for all types.

## `employeeCounts` (type: `array`):

Filter by number of employees. Leave empty for any size.

## `verifiedOnly` (type: `boolean`):

Only include Europages-verified companies (audits=verified).

## `topResponderOnly` (type: `boolean`):

Only include companies marked as top responder.

## `quickResponderOnly` (type: `boolean`):

Only include companies with a verified / quick response profile.

## `categories` (type: `array`):

Category names or codes from the search sidebar (e.g. "T-Shirts"). Matched against facets for the current query.

## `materials` (type: `array`):

Product material names from the search filters (e.g. Cotton, Polyester). Matched against facets for the current query.

## `colors` (type: `array`):

Product color names (e.g. Black, White, Blue). Matched against facets for the current query.

## `features` (type: `array`):

Product feature names (e.g. Printed, Embroidered, Sleeveless). Matched against facets for the current query.

## `minPrice` (type: `integer`):

Minimum product price in EUR. Applied to product search when both min and max are set.

## `maxPrice` (type: `integer`):

Maximum product price in EUR. Applied to product search when both min and max are set.

## `radiusKm` (type: `string`):

Distance radius around the coordinates below. Ignored unless latitude and longitude are set.

## `locationLatitude` (type: `number`):

Optional latitude for the radius filter (WGS84).

## `locationLongitude` (type: `number`):

Optional longitude for the radius filter (WGS84).

## `sortBy` (type: `string`):

Result ordering. Relevance is the site default.

## `scrapeCompanyDetails` (type: `boolean`):

Open each company profile for phone, VAT, address, contacts, certificates, and description. Charges the company-details event in addition to dataset-item.

## `scrapeProductDetails` (type: `boolean`):

Open each product page for full description, images, keywords, and attributes. Charges the product-details event in addition to dataset-item.

## `scrapeSupplierProducts` (type: `boolean`):

For each unique company found (product search, supplier search, category, or company Start URL), also scrape that company's product catalog. Each catalog product is a dataset row and charges the supplier-product event (plus product-details if that flag is on). Use Max products per supplier to cap how many catalog items to take from each company.

## `maxProductsPerSupplier` (type: `integer`):

When Scrape all products by supplier is on, maximum catalog products to extract per company (e.g. 10). 0 = no per-company cap. Global Max Items still applies to the whole run.

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

Maximum number of records to scrape (0 = unlimited)

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

Proxy settings. Apify Residential is recommended.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.europages.co.uk/en/products?q=men's%20t%20shirts"
    }
  ],
  "searchQueries": [
    "men's t shirts"
  ],
  "scrapeType": "products",
  "verifiedOnly": false,
  "topResponderOnly": false,
  "quickResponderOnly": false,
  "radiusKm": "",
  "sortBy": "relevance",
  "scrapeCompanyDetails": false,
  "scrapeProductDetails": false,
  "scrapeSupplierProducts": false,
  "maxProductsPerSupplier": 10,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

JSON array of scraped Europages records at {{links.apiDefaultDatasetUrl}}/items

## `runStats` (type: `string`):

Record counts and timestamps for this run

## `run` (type: `string`):

Public console page for this run

# 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 = {
    "startUrls": [
        {
            "url": "https://www.europages.co.uk/en/products?q=men's%20t%20shirts"
        }
    ],
    "searchQueries": [
        "men's t shirts"
    ],
    "maxProductsPerSupplier": 10,
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraptivo/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 = {
    "startUrls": [{ "url": "https://www.europages.co.uk/en/products?q=men's%20t%20shirts" }],
    "searchQueries": ["men's t shirts"],
    "maxProductsPerSupplier": 10,
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scraptivo/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 '{
  "startUrls": [
    {
      "url": "https://www.europages.co.uk/en/products?q=men'\''s%20t%20shirts"
    }
  ],
  "searchQueries": [
    "men'\''s t shirts"
  ],
  "maxProductsPerSupplier": 10,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scraptivo/europages-scraper --silent --output-dataset

```

## MCP server setup

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