Europages Scraper: B2B Suppliers & Certificates (No Login) avatar

Europages Scraper: B2B Suppliers & Certificates (No Login)

Pricing

from $4.50 / 1,000 companies

Go to Apify Store
Europages Scraper: B2B Suppliers & Certificates (No Login)

Europages Scraper: B2B Suppliers & Certificates (No Login)

Find B2B suppliers, manufacturers and wholesalers on Europages by keyword, country and company type: website, address, employees, founding year, certificates, activities, keywords, VAT ID and company phone. No login.

Pricing

from $4.50 / 1,000 companies

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

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.

Use it to build supplier and manufacturer lists for sourcing, sales or market research. The smallest run is one keyword and one country: packaging in DE returns 20 German packaging companies in up to 4 minutes. No login and no account on Europages are needed.

Europages B2B Supplier Scraper: search by keyword, country and company type, get company profiles with certificates and VAT ID, export as JSON or CSV

Table of contents

What it does

The Actor runs a Europages search for every keyword in every country you choose. It reads the result pages (30 companies per page). Then it opens each company profile and adds certificates, activities, product categories, VAT ID and the company phone. Each company is one row in the dataset.

Data source: public search and company pages of Europages, read without login. This Actor is not affiliated with Europages or Visable GmbH. Company texts, logos and trademarks belong to their owners. You are responsible for using the data in line with GDPR and the Europages terms.

Good fit

  • 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 fit / limits

  • 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, activities and mainActivity if 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.

Quick start

  1. Open the Input tab.
  2. Add a product keyword in Search terms (queries), for example packaging.
  3. Choose one or more Countries (countries), for example DE. Leave it empty to search all of Europe.
  4. Keep Max companies per search (maxItems) at the prefill 20 for a first test.
  5. Click Start.
  6. Open the Output tab and check the Companies view: name, country, city, website, companyType.

Expected result: 20 rows of German packaging companies, each with detailStatus = complete.

Use cases

Buyer jobInput pathOutput entityKey fieldsNext step
Find manufacturers of a productqueries, countries, companyType = productionCompanyname, website, country, employeesExport to CSV or Google Sheets
Supplier check by certificatequeries, includeDetails = trueCompanycertifications, foundedYear, distributionAreaFilter rows by certifications
Lead list for B2B salesqueries, countriesCompanywebsite, phone, vatId, cityImport to CRM via API or integration
Quick market countqueries, includeDetails = falseCompany (search result only)name, country, companyTypeCount rows per country

Input

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
queriesSearch termsarray of stringsyesprefill ["packaging"]1–20 terms, 2–100 characters eachEach term is a separate Europages search["led street lighting"]Use English product words
countriesCountriesarray of country codesnoprefill ["DE"]; empty = all countries44 Europages countries (DE, FR, IT, PL, ...)Each country is a separate search for every term["DE", "PL"]Leave empty for one Europe-wide search
companyTypeCompany typestringnoanyany, production, customer_specific_manufacturing, distribution, wholesaler, serviceEuropages keeps only companies of this typeproductionA company can have several types
maxItemsMax companies per searchintegernodefault 100, prefill 201–1000Stops each search after this many companies200Start small, then raise it
includeDetailsOpen company profilesbooleannotruetrue, falsetrue adds certificates, activities, VAT ID, phone; false is fasterfalseTurn off for quick counts

Duplicates are removed: if two searches find the same company, it is saved and charged only once.

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Several terms and countriesqueriescountriesOne search per term × country; at most 20 per run4 terms × 5 countries = 20 searchesUp to 20 × maxItems rows
No countriesqueriescountries emptyOne search per term over all countries["valves"], []Fewer searches, mixed countries
Profiles offincludeDetails = false—Rows come from search pages only; detailStatus = listing_only—Same price per row, much faster
Too many searchesqueriescountriesRun stops with INVALID_INPUT before any search7 terms × 3 countries = 21Only the start fee

Input examples

German packaging manufacturers

{
"queries": ["packaging"],
"countries": ["DE"],
"companyType": "production",
"maxItems": 50
}

Expected behavior: one Europages search, two result pages, 50 profiles opened. Expected output: 50 company rows with name, website, employees, certifications, vatId. Limit or cost note: 50 companies plus one start fee.

Valve suppliers in two countries, search results only

{
"queries": ["valves"],
"countries": ["DE", "PL"],
"maxItems": 200,
"includeDetails": false
}

Expected behavior: two searches, no profile pages. Expected output: up to 400 rows with detailStatus = listing_only.

Output

Output fields

FieldMeaningTypeCan be empty?Example / enumNotes
companyIdEuropages company ID, stable across runsstringno21241677Use it to remove duplicates
nameCompany namestringnoRHEIN-PLAST GMBH
urlCompany profile on Europagesstringrarelyhttps://www.europages.co.uk/en/company/...
websiteCompany's own websitestringyeshttps://www.rhein-plast.de/
country, city, street, zipcodeCompany addressstringyesDE, Bad Dürkheimcountry is ISO 3166-1 alpha-2
latitude, longitudeAddress coordinatesnumberyes49.477384
companyTypeCompany typesarraycan be emptyproduction, wholesaler
employeesEmployee rangestringyes50-99
foundedYearYear foundedintegeryes1959
certificationsCertificate namesarrayyes["ISO 9001:2015"]null without profile details
certificationsCountNumber of certificatesintegeryes2
vatIdVAT ID, when the company publishes itstringyesDE149372181
phoneCompany's main phonestringyes+4963227980No personal contacts
mainActivityMain business areastringyesPackaging servicesProfile only
activitiesEuropages categories, up to 15arraycan be emptyProfile only
keywordsBusiness keywords, up to 50arraycan be emptyBubble wrap filmsProfile only
productCategoriesProduct catalogue categoriesarraycan be emptyFlat PouchesProfile only
distributionAreaWhere the company sellsstringyesnational, europe, international
descriptionCompany descriptionstringyesE-mails replaced with [email removed]
query, searchCountry, searchRankWhich search found the company and its positionstring / integersearchCountry is null for all countriespackaging, DE, 1
detailStatusProfile resultstringnocomplete, listing_only, detail_errorSee below
detailErrorWhy the profile could not be readstringyesOnly for detail_error
fetchedAtWhen the row was collectedstringnoISO 8601, UTC

Other fields: uuid, activitiesTotal, productCount, logoUrl, source (always europages).

detailStatus values:

  • complete — search result and profile were read.
  • listing_only — includeDetails was false; profile fields are empty.
  • detail_error — the profile page could not be read. The row keeps the search-result fields. This row is not charged.

Output entities and surfaces

SituationWhereResult shapeWhat to do
Normal companyDataset, view CompaniesOne row per companyOpen, export or read via API
No companies foundDataset empty; RUN_SUMMARY status empty, reason NO_RESULTSNo rowsTry a broader keyword or more countries
Some profiles not readDataset rows with detailStatus = detail_error; reason DETAILS_MISSINGSearch-result fields onlyRun again later for those companies
Run stopped earlyRUN_SUMMARY status partial (CHARGE_LIMIT, INTERNAL_LIMIT, SOURCE_ERROR)Rows saved before the stop are keptRead message; use fewer searches or a lower maxItems
Invalid inputRun fails; RUN_SUMMARY reason INVALID_INPUTNo rowsFix the input from the message

The key-value store record RUN_SUMMARY has the run status and reason, counts per search and request statistics.

Output example

{
"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"
}

This example is trimmed and shows one company from the packaging / DE run. An empty array means the profile has no such data. null means the field was not available (for example, profiles were turned off).

Pricing and limits

Pricing unit

You pay per event:

  • Actor start: $0.005 per run (one event per GB of memory; the default 512 MB is one event).
  • Company: one event for each saved company row. The price depends on your Apify plan:
PlanPrice per companyPer 1,000 companies
Free$0.0054$5.40
Bronze$0.0051$5.10
Silver$0.0048$4.80
Gold$0.0045$4.50

Platform usage (compute, proxy) is included. A run that finds no companies, or a filter with no matches, costs only the start fee. Rows with detailStatus = detail_error are not charged. Duplicates are not charged twice. You can set Max cost per run in run options: the Actor stops when the next row would go over it (reason CHARGE_LIMIT).

Cost examples (Free plan)

ScenarioInput scopeRowsStartRows chargeTotal
First testpackaging / DE / 2020$0.005$0.108$0.113
Normal1 term / 1 country / 100100$0.005$0.54$0.545
Large1 term / 1 country / 1,0001,000$0.005$5.40$5.405
Nothing foundany0$0.005$0$0.005

Limits and run time

  • 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.

API, export and integrations

  • API: start the Actor with the same JSON input and read rows from the default dataset (/items?view=companies).
  • Export: download the dataset as JSON, CSV, Excel, XML or HTML from the Output tab.
  • Scheduling and integrations: use Apify schedules, webhooks, or integrations such as Google Sheets, Make and Zapier to send new rows to your tools.

Use with AI agents (MCP)

  • MCP server with only this Actor: https://mcp.apify.com?tools=cliqtomedia/europages-companies-scraper
  • Smallest useful input: {"queries": ["packaging"], "countries": ["DE"], "maxItems": 20}
  • Key output fields: name (company), website (own site), country (ISO code), companyType (manufacturer, wholesaler, ...), certifications (certificate names).
  • Typical run: 20 companies in 20 seconds to 4 minutes, about $0.11 on the Free plan. Limits: 20 searches per run, 1,000 companies per search, about 1,500 companies with profiles per run (1 hour).

Troubleshooting

The run returned companies that do not match my keyword

Symptom: some rows are about a different product. Likely reason: Europages search is fuzzy and also matches related words. Check: look at keywords, mainActivity and searchRank. The best matches come first. Action: use a more specific keyword, a lower maxItems, or filter rows after export.

The run failed with "at most 20 per run"

Symptom: status INVALID_INPUT, message queries × countries gives N searches. Likely reason: too many terms × countries. Action: split the job into several runs, or leave countries empty for one Europe-wide search per term.

Some rows have detailStatus = detail_error

Symptom: certificates, activities, VAT ID are empty for a few rows. Likely reason: the profile page did not load in time. Action: these rows are free. Run the same search again later to fill them. If most profiles fail (10 in a row, or more than half), the run stops early with SOURCE_ERROR so you do not wait for free rows.

The run stopped with INTERNAL_LIMIT

Symptom: status partial, fewer rows than expected. Likely reason: the run reached the 1 hour limit. The Actor stops itself after 1 hour, even with a longer timeout. Action: split the job: use fewer searches or a lower maxItems per run.

FAQ

Do I need a Europages account or login?

No. The Actor reads public Europages pages. You need only an Apify account.

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.

What happens if nothing is found?

The run ends with status empty and reason NO_RESULTS. You pay only the start fee.

Support

For bugs, questions or feature requests, open an issue in the Issues tab of this Actor. Include the run ID and your input. Never send tokens, passwords or billing data.