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

Delivers a structured dataset of B2B products and suppliers from Europages. Query by keyword, category, or URL, filter by country, supplier type, company size, and other site facets, and optionally enrich records with company profiles, product details, or a supplier's full catalog.

- **URL**: https://apify.com/datascrapers/europages-scraper.md
- **Developed by:** [Farhan Ali](https://apify.com/datascrapers) (community)
- **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?

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** creates a structured dataset of B2B products and supplier companies collected from Europages, Europe's largest B2B marketplace. Each dataset item represents one product or one supplier and can include name, URL, price range, currency, MOQ, images, company contact details, and supplier response metrics. Query the source using `searchQueries`, `startUrls`, or a `categorySlug`, filter with the same controls the site offers, cap the result with `maxItems`, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format.

### Dataset at a glance

| Property | Value |
|---|---|
| Source | Europages.com (B2B marketplace) |
| Record unit | One product or one supplier company |
| Input methods | `searchQueries`, `startUrls`, `categorySlug` |
| Main identifiers | `uuid`, `slug`/`slugId` (products); `companyId` (suppliers); `url` |
| Delivery | Apify Dataset and API |
| Export formats | JSON, CSV, Excel, HTML, XML |
| Update model | Fresh records per Actor run |
| Pricing | Pay-per-event: $2.00 / 1,000 records; optional enrichment events billed at the same rate |

### Coverage and available records

The Actor accepts three seed types and produces two record types, distinguished by the `recordType` field (`product` or `supplier`):

- **Product search** (`scrapeType: "products"`) — resolves `searchQueries` and category pages into product records with pricing, MOQ, images, and supplier attribution.
- **Supplier search** (`scrapeType: "suppliers"`) — resolves `searchQueries` and category pages into supplier company records with location and responsiveness metrics.
- **Start URLs** (`startUrls`) — product search, supplier search, category showroom, company profile, and product page URLs are processed directly. Company profile and product page URLs scrape that page regardless of `scrapeType`.
- **Category slug** (`categorySlug`) — an alternative source when no Start URL is provided.

Search filters mirror the site and apply to keyword queries: `countries` (ships-from), `supplierTypes`, `employeeCounts`, `verifiedOnly`, `topResponderOnly`, `quickResponderOnly`, plus category, material, color, and feature facets, and a price range (`minPrice`/`maxPrice`) or radius search (`radiusKm` with coordinates).

Conditional enrichment is controlled by three flags:

- `scrapeCompanyDetails` — opens each company profile for phone, VAT, address, contacts, certificates, and description.
- `scrapeProductDetails` — opens each product page for the full description, images, keywords, and attributes.
- `scrapeSupplierProducts` — pulls each discovered company's full product catalog, one dataset row per catalog product (capped by `maxProductsPerSupplier`).

`maxItems` caps the combined total across all sources (`0` = unlimited). Supplier profile fields such as `companyId`, `employeeCount`, `foundingYear`, and `vatId` are present only on `supplier` records; `priceMin`/`priceMax`/`currency`/`moqValue` are present only on `product` records.

### Data dictionary

| Field | Type | Nullable | Description | Example |
|---|---:|---|---|---|
| `recordType` | string | No | Record kind: `product` or `supplier` | `"product"` |
| `fromSupplierCatalog` | boolean | Yes | `true` when the product came from `scrapeSupplierProducts` | `true` |
| `imageUrl` | string | Yes | Primary image or company logo URL | `"https://supplier-offers-media-production.s3.eu-central-1.amazonaws.com/..."` |
| `name` | string | No | Product title or company name | `"Oversize 100% Cotton Men's T-Shirt"` |
| `url` | string | No | Product page or company profile URL | `"https://www.europages.co.uk/en/company/m-jan-sport-22331516"` |
| `companyName` | string | Yes | Supplier name on a product record | `"M-JAN SPORT"` |
| `companyUrl` | string | Yes | Supplier profile URL on a product record | `"https://www.europages.co.uk/en/company/m-jan-sport-22331516"` |
| `priceMin` | number | Yes | Lower bound of the product price range (EUR) | `10.0` |
| `priceMax` | number | Yes | Upper bound of the product price range (EUR) | `20.0` |
| `currency` | string | Yes | Price currency code | `"EUR"` |
| `moqValue` | string | Yes | Minimum order quantity value | `"50"` |
| `moqUnit` | string | Yes | Minimum order quantity unit | `"unit"` |
| `countryCode` | string | Yes | Country code on a supplier record | `"TR"` |
| `companyCountryCode` | string | Yes | Supplier country code on a product record | `"TR"` |
| `city` | string | Yes | Company city | `"Istanbul"` |
| `phoneNumber` | string | Yes | Company phone; present only with `scrapeCompanyDetails` or on suppliers | `"+90 212 000 00 00"` |
| `homepage` | string | Yes | Company website URL | `"https://example.com"` |
| `description` | string | Yes | Product or company description | `"The oversized cotton men's t-shirt..."` |
| `sourceQuery` | string | Yes | Search term that produced the row | `"men's t shirts"` |
| `sourceUrl` | string | Yes | Seed URL that produced the row | `"https://www.europages.co.uk/en/products?q=..."` |
| `scrapedAt` | string | No | ISO 8601 UTC timestamp of extraction | `"2026-08-16T09:16:54.586903+00:00"` |
| `companyEmail` | string | Yes | Supplier contact email on a product record | `"gencturkabdullah161@gmail.com"` |
| `slug` | string | Yes | Product URL slug | `"oversize-100-pamuk-erkek-tisoert-36550904"` |
| `slugId` | string | Yes | Product slug identifier | `"36550904"` |
| `uuid` | string | Yes | Stable product identifier (best dedup key) | `"a1b2c3d4-..."` |
| `categoryId` | string | Yes | Product category identifier | `"100013"` |
| `categoryName` | string | Yes | Product category name | `"Packaging machinery"` |
| `sellPoints` | array | Yes | Product selling points | `["Customizable", "Eco-friendly"]` |
| `imageUrls` | array | Yes | Product gallery image URLs | `["https://...jpeg", "https://...jpeg"]` |
| `companyId` | string | Yes | Supplier company identifier | `"22331516"` |
| `employeeCount` | string | Yes | Company size band | `"From20To49"` |
| `foundingYear` | string | Yes | Company founding year | `"1998"` |
| `supplierTypes` | array | Yes | Supplier roles (manufacturer, distributor, etc.) | `["production", "distribution"]` |
| `isQuickResponder` | boolean | Yes | Whether the company is marked quick responder | `true` |
| `responseRate` | number | Yes | Supplier response rate (0.0–1.0) | `1.0` |
| `vatId` | string | Yes | VAT number; present only with `scrapeCompanyDetails` | `"TR1234567890"` |
| `contactName` | string | Yes | Contact person; present only with `scrapeCompanyDetails` | `"A. Gencturk"` |

All fields except `recordType`, `name`, `url`, and `scrapedAt` are conditional on the record type, the seed that produced the row, and which enrichment flags are enabled. Product identifiers (`uuid`, `slug`, `slugId`) appear on product records; supplier fields (`companyId`, `employeeCount`, `foundingYear`, `supplierTypes`, `vatId`, `contactName`) appear on supplier records.

### Example dataset record

The following representative product record was produced from `searchQueries: ["men's t shirts"]` with `scrapeType: "products"` (no enrichment flags). Identifiers are illustrative.

```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...",
  "priceMin": 10.0,
  "priceMax": 20.0,
  "currency": "EUR",
  "moqValue": "50",
  "moqUnit": "unit",
  "imageUrl": "https://supplier-offers-media-production.s3.eu-central-1.amazonaws.com/39b4f996-c415-418a-a875-063e379c686b.jpeg",
  "imageUrls": ["https://supplier-offers-media-production.s3.eu-central-1.amazonaws.com/39b4f996-c415-418a-a875-063e379c686b.jpeg"],
  "companyName": "M-JAN SPORT",
  "companyUrl": "https://www.europages.co.uk/en/company/m-jan-sport-22331516",
  "companyCountryCode": "TR",
  "companyEmail": "gencturkabdullah161@gmail.com",
  "isQuickResponder": true,
  "responseRate": 1.0,
  "sourceQuery": "men's t shirts",
  "scrapedAt": "2026-08-16T09:16:54.586903+00:00"
}
```

### Query and input reference

| Input | Type | Required | Default | Accepted values | Description |
|---|---:|---|---|---|---|
| `startUrls` | array | No\* | — | Europages URLs | Product/search/category URLs, company profiles, or product pages. |
| `searchQueries` | array | No\* | `["men's t shirts"]` | free text | Keywords searched on Europages; combined with `scrapeType` and filters. |
| `scrapeType` | string | No | `products` | `products`, `suppliers` | What to collect from searches and categories. |
| `categorySlug` | string | No\* | — | e.g. `packaging-machinery-100013` | Showroom category slug when no Start URL is used. |
| `countries` | array | No | — | ISO codes (63 supported) | Ships-from / company country filter. |
| `supplierTypes` | array | No | — | `production`, `customerSpecificManufacturing`, `distribution`, `service`, `wholesaler` | Supplier role filter. |
| `employeeCounts` | array | No | — | `From1To4` … `MoreThan1000` | Company size filter. |
| `verifiedOnly` | boolean | No | `false` | `true` / `false` | Only Europages-verified companies. |
| `topResponderOnly` | boolean | No | `false` | `true` / `false` | Only companies marked top responder. |
| `quickResponderOnly` | boolean | No | `false` | `true` / `false` | Only verified / quick-response companies. |
| `categories` | array | No | — | free text | Category facet names (e.g. `"T-Shirts"`). |
| `materials` | array | No | — | free text | Material facet names (e.g. `Cotton`). |
| `colors` | array | No | — | free text | Color facet names (e.g. `Black`). |
| `features` | array | No | — | free text | Feature facet names (e.g. `Printed`). |
| `minPrice` | integer | No | — | `>= 0` | Minimum product price (EUR); applied with `maxPrice`. |
| `maxPrice` | integer | No | — | `>= 0` | Maximum product price (EUR); applied with `minPrice`. |
| `radiusKm` | string | No | `""` | `10km`, `25km`, `50km`, `75km`, `100km`, `125km`, `250km` | Distance radius around the coordinates. |
| `locationLatitude` | number | No | — | WGS84 | Latitude for the radius filter. |
| `locationLongitude` | number | No | — | WGS84 | Longitude for the radius filter. |
| `sortBy` | string | No | `relevance` | `relevance` | Result ordering. |
| `scrapeCompanyDetails` | boolean | No | `false` | `true` / `false` | Open company profiles; charges `company-details` event. |
| `scrapeProductDetails` | boolean | No | `false` | `true` / `false` | Open product pages; charges `product-details` event. |
| `scrapeSupplierProducts` | boolean | No | `false` | `true` / `false` | Scrape each company's catalog; charges `supplier-product` event. |
| `maxProductsPerSupplier` | integer | No | `0` | `>= 0` | Catalog products per company (`0` = no per-company cap). |
| `maxItems` | integer | No | `0` | `>= 0` | Maximum records for the run (`0` = unlimited). |
| `proxyConfiguration` | object | No | Apify `RESIDENTIAL` | proxy config | Proxy settings; residential recommended. |

\*Provide at least one of `startUrls`, `searchQueries`, or `categorySlug`. A minimal request and an advanced request:

```json
{ "searchQueries": ["packaging machinery"], "maxItems": 20 }
```

```json
{
  "searchQueries": ["packaging machinery"],
  "scrapeType": "suppliers",
  "countries": ["DE", "IT"],
  "supplierTypes": ["production", "distribution"],
  "employeeCounts": ["From10To19", "From20To49"],
  "verifiedOnly": true,
  "quickResponderOnly": true,
  "scrapeCompanyDetails": true,
  "maxItems": 100,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

### Retrieve the data through the API

1. Start the Actor with a JSON input.
2. Wait for the run to finish, or use the synchronous endpoint when appropriate.
3. Read items from the run's default dataset.
4. Paginate or export the dataset.

A Python example using the Apify client:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("datascrapers/europages-scraper").call(
    run_input={"searchQueries": ["packaging machinery"], "scrapeType": "suppliers", "maxItems": 20}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["name"], item["currency"], item["companyCountryCode"])
```

For other languages, use the generated API tab on the Actor page. Never place a real token in a URL or example.

### Data quality and record handling

- **Conditional fields** — `recordType` selects the schema shape. Product fields (`priceMin`, `priceMax`, `currency`, `moqValue`, `companyEmail`) appear on `product` rows; supplier fields (`companyId`, `employeeCount`, `foundingYear`, `supplierTypes`, `vatId`) appear on `supplier` rows. Enrichment fields are present only when their flag is on.
- **Seed attribution** — `sourceQuery` reflects the search term; `sourceUrl` reflects a Start URL or category page seed. One of them is typically empty.
- **Completeness** — listing-only rows omit detail-page fields; optional filters can reduce the number of matches returned.
- **Deduplication** — within a run the Actor skips already-crawled URLs. Deduplicate across runs on `uuid` (products) or `companyId` (suppliers), with `url` as a fallback.
- **Retries** — individual records fail soft, so a single failed extraction does not stop the run.
- **Normalization** — `priceMin`/`priceMax` are numeric; `currency` is a code; `scrapedAt` is ISO 8601 UTC; `moqValue` is a string.
- **Raw versus derived** — all fields are source values; the Actor does not derive, convert, or AI-generate fields.

### Export and pipeline examples

| Destination | Recommended method | Typical use |
|---|---|---|
| PostgreSQL / Supabase | Dataset API or webhook consumer | Supplier and product master data |
| Google Sheets | Apify integration | Supplier lead lists for outreach |
| S3 / cloud storage | Scheduled export or integration | Periodic catalog archives |
| CRM / ERP | Scheduled run + webhook | Supplier enrichment and sourcing pipelines |

### Pricing and cost examples

Billing is pay-per-event. Each record written to the dataset triggers the `dataset-item` event; enrichment flags add one extra event per affected item: `company-details`, `product-details`, and `supplier-product`.

| Event | What counts | Rate (per 1,000) |
|---|---|---|
| `dataset-item` | Each product or supplier record saved | $2.00 |
| `company-details` | Each company profile opened | $2.00 |
| `product-details` | Each product page opened | $2.00 |
| `supplier-product` | Each catalog product from `scrapeSupplierProducts` | $2.00 |

A one-time Actor Start event ($0.00005) is also applied per run. Higher Apify plan tiers apply a discount (per 1,000): Bronze $1.90 / Silver $1.80 / Gold $1.70. For this Actor's pay-per-event model, platform usage is not billed separately beyond the event rates above.

| Records | Estimated base cost |
|---:|---:|
| 1,000 products (listing only) | $2.00 |
| 10,000 products (listing only) | $20.00 |
| 1,000 products + company details | $4.00 |

Estimates assume the standard tier; enrichment-enabled runs pay `dataset-item` plus the corresponding enrichment event per affected row.

### Limitations and responsible data use

- The Actor collects publicly accessible Europages.com product and supplier data only.
- Prices, MOQs, availability, and response metrics reflect the site at crawl time and can change.
- Some fields are conditional or empty depending on record type and enrichment flags (see Data quality).
- No historical snapshots are guaranteed unless you store the exported datasets yourself.
- You are responsible for complying with applicable privacy, contractual, and legal requirements when using the data.

### Dataset questions

#### What does one dataset item represent?

One Europages product or one supplier company, selected by `recordType`. Products carry pricing, MOQ, and images; suppliers carry location and responsiveness metrics.

#### Which field should I use as a unique identifier?

Use `uuid` for products and `companyId` for suppliers, with `url` as a fallback across both.

#### Are fields nullable or conditional?

Yes. Only `recordType`, `name`, `url`, and `scrapedAt` are always present. Everything else depends on the record type, the seed, and whether enrichment flags are enabled.

#### Can I retrieve the records as CSV or JSON?

Yes. Records are written to the Apify Dataset and can be exported as JSON, CSV, Excel, HTML, or XML, or read through the Dataset API.

#### What counts as a billable result?

Each dataset record is a `dataset-item` charge. `scrapeCompanyDetails`, `scrapeProductDetails`, and `scrapeSupplierProducts` add `company-details`, `product-details`, and `supplier-product` charges per affected item, respectively.

#### Can I combine search queries, URLs, and a category slug?

Yes, but only one source is required. `startUrls` are processed directly, `searchQueries` use `scrapeType` and filters, and `categorySlug` is an alternative to a Start URL. `maxItems` applies to the combined total.

#### Does the Actor return historical data?

No. Each run collects fresh records at crawl time; no historical snapshots are maintained unless you store the exported datasets yourself.

### Related datasets from Data Scrapers

- **Alibaba Scraper** — B2B supplier and product records from Alibaba for global sourcing comparison.
- **Amazon Scraper** — Amazon product, price, and seller data for marketplace research.
- **Clutch Scraper** — B2B company profiles and reviews for vendor and agency research.
- **LinkedIn Company Scraper** — Company profile data for account-based lead generation.
- **FindLaw Scraper** — Directory-style company and professional profiles for lead building.

### Data Scrapers support

Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, the required fields, the expected record volume, and your preferred delivery format.

# 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 listing.

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

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

## `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-extra 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("datascrapers/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("datascrapers/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 datascrapers/europages-scraper --silent --output-dataset

```

## MCP server setup

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