How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
packagingin Search terms. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Search Europages, the European B2B directory, by product keyword, country and company type. Get one row per supplier with website, address, employees, founding year, certificates, activities, VAT ID and company phone.
Good for
- Find manufacturers or wholesalers of a product in one or more European countries.
- Build a supplier shortlist with website, size (employees) and founding year.
- Check which suppliers list a certificate such as ISO 9001 or ISO 14001.
- Enrich a lead list with the company VAT ID and main phone number.
Not a good fit
- No e-mail addresses and no personal contacts. The Actor returns only the company's main phone number. E-mail addresses in company descriptions are replaced with
[email removed]. - Europages search is fuzzy. It also returns companies that only match part of a word, or a related term. Even a nonsense word can return a few companies. Check
keywords,activitiesandmainActivityif you need exact matches. - Up to 1,000 companies per search (one keyword in one country) and up to 20 searches per run.
- Fields depend on what each company publishes. Many companies have no certificates, VAT ID or activities.
- The Actor does not promise a complete list of all companies in a country. It returns what Europages search shows.
Who uses it
Buyers and sourcing teams
Build a supplier shortlist for a product in Europe.
B2B sales teams
Make lead lists of makers or wholesalers by country.
Quality managers
Find suppliers that list ISO 9001 or ISO 14001.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.005 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Company | $0.0054 (from $0.0045 on paid Apify plans) | One saved Europages company row. Duplicates and rows whose profile could not be read are not charged. |
Examples
- One result: about $0.01.
- 1,000 results: about $5.41.
- Every day 100 results, for 30 days: about $16.35 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 920 results.
Prices checked on 24 October 2026. See the current price on Apify.
Questions
Do I need a Europages account?
No. The tool reads public Europages pages.
Do I get email addresses?
No. You get the company phone and website, but no emails or personal contacts.
How many companies can I get?
Up to 1,000 per search and 20 searches per run. With profiles, about 1,500 fit in one hour.
What if nothing is found?
The run ends as empty. You pay only the start fee.
Does it return e-mail addresses?
No. It returns the company's main phone number and website. It does not collect personal contacts or e-mails.
Why does the same keyword give a slightly different list on another day?
Europages changes its ranking and its company data. The Actor returns what Europages shows at run time. Use companyId to compare runs.
Details
Step by step on Apify
- Open the Input tab.
- Add a product keyword in Search terms (
queries), for examplepackaging. - Choose one or more Countries (
countries), for exampleDE. Leave it empty to search all of Europe. - Keep Max companies per search (
maxItems) at the prefill20for a first test. - Click Start.
- Open the Output tab and check the Companies view:
name,country,city,website,companyType.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Find manufacturers of a product | queries, countries, companyType = production | Company | name, website, country, employees | Export to CSV or Google Sheets |
| Supplier check by certificate | queries, includeDetails = true | Company | certifications, foundedYear, distributionArea | Filter rows by certifications |
| Lead list for B2B sales | queries, countries | Company | website, phone, vatId, city | Import to CRM via API or integration |
| Quick market count | queries, includeDetails = false | Company (search result only) | name, country, companyType | Count rows per country |
Tips for better results
- Write search terms in English, like packaging or cnc machining.
- Europages search is fuzzy. Check activities to keep exact matches.
- Turn off profiles for a fast first count of companies.
Limits and good to know
- Company: one event for each saved company row. The price depends on your Apify plan:
- 20 searches per run, 1,000 companies per search, 20 terms per run
- One run works for at most 1 hour. With profiles this is about 1,500 companies per run, so 20 searches × 1,000 companies do not fit in one run
- 20 companies with profiles: about 20 seconds to 4 minutes. 1,000 companies with profiles: about 40 minutes
- Default memory 512 MB; default timeout 3,600 seconds. For big runs keep the timeout at 3,600 seconds or more
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"companyId": "21241677",
"name": "RHEIN-PLAST GMBH",
"url": "https://www.europages.co.uk/en/company/rhein-plast-gmbh-21241677",
"website": "https://www.rhein-plast.de/",
"country": "DE",
"city": "Bad Dürkheim",
"street": "Altenbacher Strasse 24-26",
"zipcode": "67098",
"mainActivity": "Packaging services",
"keywords": ["Anti-static film", "Bags with adhesive sealing", "Clean room packaging"],
"productCategories": ["Flat Pouches", "Pharmaceutical Packaging"],
"companyType": ["production"],
"employees": "50-99",
"foundedYear": 1959,
"certifications": [],
"certificationsCount": 0,
"vatId": "DE149372181",
"phone": "+4963227980",
"distributionArea": "international",
"query": "packaging",
"searchCountry": "DE",
"searchRank": 1,
"detailStatus": "complete",
"detailError": null,
"source": "europages",
"fetchedAt": "2026-10-15T00:13:29.645Z"
}Use it from code
Actor ID: cliqtomedia/europages-companies-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/europages-companies-scraper").call(run_input={
"queries": [
"packaging"
],
"countries": [
"DE"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~europages-companies-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries": ["packaging"], "countries": ["DE"]}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/europages-companies-scraper")
result = tool.invoke({"run_input": {"queries": ["packaging"], "countries": ["DE"]}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (34)
| Field | Type | Meaning |
|---|---|---|
companyId | string | Europages company ID, stable across runs. |
uuid | string | Europages company UUID. |
name | string | Company name. |
url | string | Company profile on www.europages.co.uk. |
website | string | Company's own website. |
country | string | Country of the company address, ISO 3166-1 alpha-2 (DE, FR, ...). |
city | string | City of the company address. |
street | string | Street address. |
zipcode | string | Postal code. |
latitude | number | Latitude of the company address. |
longitude | number | Longitude of the company address. |
description | string | Company description from Europages. E-mail addresses in the text are replaced with [email removed]. |
mainActivity | string | Main business area from the profile, e.g. Packaging material. Null without profile details. |
activities | array | Activities (Europages categories) from the profile, up to 15; empty without profile details. |
activitiesTotal | integer | Total number of activities the profile lists. |
keywords | array | Business keywords the company lists on its profile, up to 50; empty without profile details. Many companies have keywords but no activities. |
productCategories | array | Product categories of the company catalogue on the profile. |
companyType | array | Company types: production, customer_specific_manufacturing, distribution, wholesaler, service. |
employees | string | Employee range, e.g. 50-99. |
foundedYear | integer | Year the company was founded. |
certifications | array | Certificate names from the profile, e.g. ISO 9001; null without profile details. |
certificationsCount | integer | Number of certificates. |
vatId | string | VAT ID when the company publishes it on Europages. |
phone | string | Company's main phone number. Personal contacts of employees are never collected. |
distributionArea | string | Where the company sells: national, europe or international. |
productCount | integer | Number of products in the company catalogue. |
logoUrl | string | Company logo image. |
query | string | Search term that found the company. |
searchCountry | string | Country filter of the search that found the company; null for all countries. |
searchRank | integer | Position of the company in that search (1 = first). |
detailStatus | string | complete = search result and profile; listing_only = profiles turned off; detail_error = profile could not be read, fields come from the search result; such a row is not charged. |
detailError | string | Why the profile could not be read; null otherwise. |
source | string | Always europages. |
fetchedAt | string | When the row was collected (ISO 8601, UTC). |
Input settings (5)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Search terms required | queries | array | ["packaging"] |
| Countries | countries | array | ["DE"] |
| Company type | companyType | string | "any" |
| Max companies per search | maxItems | integer | 20 |
| Open company profiles | includeDetails | boolean | true |
Use cases with this tool
Each guide shows all the steps and the other tools.
