# Europages Scraper - EU Suppliers, Phones & VAT, No Login (`locaihost/europages-scraper`) Actor

Europages scraper, $2 per 1,000 rows. European manufacturers, wholesalers and service companies by product and country: address, website, published phone, team size, founding year, supplier type, product lines, VAT number. Can return only new companies on a schedule.

- **URL**: https://apify.com/locaihost/europages-scraper.md
- **Developed by:** [locaihost data](https://apify.com/locaihost) (community)
- **Categories:** Lead generation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.10 / 1,000 companies

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 - EU Suppliers, Phones & VAT, No Login

Search Europages by product and country and get one row per European supplier: company name, street address,
website, the company's published phone, team size, founding year, supplier type and product lines. Turn on full
details to add the VAT number and certificates. **$2 per 1,000 rows.** No login, cookies or account needed.

### Try it

Paste this into the Input tab (JSON) and press Start:

```json
{
    "searches": ["furniture"],
    "maxCompaniesPerSearch": 30
}
```

That returns 30 furniture companies from across Europe, in Europages' own order, in about 20 seconds.

More examples:

```json
{ "searches": ["steel pipes", "stainless steel tubes"], "country": "Germany", "maxCompaniesPerSearch": 300 }
```

```json
{ "searches": ["packaging machines"], "country": "IT", "maxCompaniesPerSearch": 100, "includeDetails": true }
```

```json
{ "urls": ["https://www.europages.co.uk/companies/city-aachen/furniture.html", "https://www.europages.co.uk/en/company/krespa-22172662"] }
```

### What you get

**Company rows** (`type: "company"`)

| Field | Example |
|---|---|
| name, profileUrl | KRESPA, https://www.europages.co.uk/en/company/krespa-22172662 |
| websiteUrl, domain | https://krespa.pl/en/, krespa.pl |
| address, postalCode, city, country, countryCode | 11 Listopada 53, 38-300, Gorlice, Poland, PL |
| phone | +48509850290 (the number the company publishes on Europages) |
| employees, employeesMin, employeesMax | 20-49, 20, 49 |
| foundedYear | 1951 |
| businessType | Manufacturer, Wholesaler, Distributor |
| products | the product lines the company showcases |
| description | the company's own description |
| badges | Sells internationally |
| query, rank, listUrl | the search it came from and its position |

With **Full company details** on, each row also has `taxId` (the EU VAT number the company publishes, e.g.
PL7382148856), `categories` (its main business area, e.g. Wood and wood products), the full product keyword list,
certifications and a Quick responder badge.

Every row also has `input` (what you typed that produced it) and `scrapedAt`. Company rows use the same columns as our
Clutch, ThomasNet and IndiaMART scrapers, so you can stack them into one supplier table. The dataset has views for
companies and contacts, and exports to CSV, Excel or JSON.

### Searching

Type products or services as you would on Europages. Each search is read in Europages' own order, 30 companies a
page.

**Country** limits every search to companies based there. Use the English name or the two-letter code. Europages has
its own country page for the countries with the most companies in a search. For any other country, the Actor reads
the all-countries list and keeps that country's companies. It scans up to 30 pages, so a country with very few
companies in a big search may return fewer than you asked for. The run tells you when that happens.

For a city, open the list on europages.co.uk and paste its address into **Europages addresses**. Europages answers
almost any search, so an unusual term returns its closest matches rather than nothing.

### Monitoring

Turn on **Only new since the last run** and schedule the Actor weekly. Each run returns only companies that earlier
runs with the same input did not, so you pay only for suppliers new to your searches. A run with nothing new charges
nothing.

### Price

Pay per row: **$2 per 1,000 rows** on the Starter plan, $1.50 on Scale, $1.10 on Business. Full details cost the same
per row. Company addresses that don't exist, searches with no companies and unusable inputs come back as free
`not-found` rows that say what to change. Nothing else is charged on top.

Apify's free plan is capped at 1,000 rows per run. Any paid Apify plan removes the cap.

### Good to know

- We collect only what a logged-out visitor sees. No account, login cookies, sign-in, quote-request or account pages.
- Europages names contact people on company pages. We never collect those names. The phone is the one the company
  publishes for itself. Europages doesn't show e-mail addresses publicly, so rows don't have them, and
  personal-looking addresses in descriptions are removed.
- Pages are read in a real browser, four at a time. 30 companies take about 20 seconds. Full details add 2 to 3
  seconds per company.
- Big requests are shared out across the run's time limit. If time runs short, the run ends successfully with the
  rows so far and says what to narrow.
- Run details (pages read, free rows, timing) are in the `SUMMARY` record of the run's key-value store.

### Use it lawfully

You are responsible for how you use the data. Europages protects its database under EU database law; take what you
need for your own sourcing or research rather than copying the directory wholesale, follow privacy and marketing law
(such as GDPR and the ePrivacy rules) if you contact companies, and check Europages' terms for your use.

### Questions

Open an issue on the Issues tab. Feature requests are welcome.

### Did it help?

If this saved you time, a quick rating on the Store helps other people find it. Something not working? Open an issue on the Issues tab and we usually reply within a day.

# Actor input Schema

## `searches` (type: `array`):

What the companies make, sell or do, the way you would type it into Europages: furniture, steel pipes, packaging machines, CNC machining. Each search returns companies in Europages' own order.

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

Optional. Only companies based in this country: an English name like Germany or United Kingdom, or a two-letter code like DE. Applies to every search. Where Europages has no page for that country, companies are picked from the all-countries list.

## `urls` (type: `array`):

Europages pages to read as they are: a list (https://www.europages.co.uk/companies/germany/furniture.html, a city list like .../companies/city-aachen/furniture.html) or a company page (https://www.europages.co.uk/en/company/krespa-22172662).

## `maxCompaniesPerSearch` (type: `integer`):

Companies to take from each search or list, 30 per Europages page. Popular products have tens of thousands.

## `includeDetails` (type: `boolean`):

Open each company's Europages page for its VAT number, main business area, full product keyword list, certificates and quick-responder badge. Costs the same per row, takes longer (one more page per company).

## `onlyNew` (type: `boolean`):

For schedules: skip companies this same input already returned in an earlier run, so you pay only for new suppliers. The memory is per input: change the searches or options and it starts fresh.

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

Stop after this many charged rows across all searches. 0 means no limit (your run's maximum charge still applies).

## Actor input object example

```json
{
  "searches": [
    "furniture",
    "steel pipes",
    "packaging machines"
  ],
  "country": "Germany",
  "urls": [
    "https://www.europages.co.uk/companies/city-aachen/furniture.html"
  ],
  "maxCompaniesPerSearch": 30,
  "includeDetails": false,
  "onlyNew": false,
  "maxResults": 0
}
```

# Actor output Schema

## `companies` (type: `string`):

One row per company: supplier type, products, team size, founding year, city, country, website, rank in the search.

## `contacts` (type: `string`):

Website, the company's published phone and address for each company.

## `full` (type: `string`):

Every field of every row, including free not-found rows.

## `summary` (type: `string`):

Counts, free rows by reason, anything that failed, access stats and cost.

# 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 = {
    "searches": [
        "furniture"
    ],
    "maxCompaniesPerSearch": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("locaihost/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 = {
    "searches": ["furniture"],
    "maxCompaniesPerSearch": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("locaihost/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 '{
  "searches": [
    "furniture"
  ],
  "maxCompaniesPerSearch": 30
}' |
apify call locaihost/europages-scraper --silent --output-dataset

```

## MCP server setup

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