Europages Scraper | B2B Products & Companies EU avatar

Europages Scraper | B2B Products & Companies EU

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Europages Scraper | B2B Products & Companies EU

Europages Scraper | B2B Products & Companies EU

Scrape Europages B2B products & companies across UK, FR, DE, ES, IT, TR. Product/company search, filters, company & product details. Export Excel/CSV/JSON. Unofficial — not affiliated with Europages.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Europages Scraper | B2B Products & Companies Europe

Scrape Europages European B2B products, suppliers, and company profiles — including public phones, street / 门牌, and contact persons on company pages — then download structured catalog data as Excel, CSV, or JSON.

Use this Actor as a practical Europages data API for EU/UK supplier discovery, product SERP monitoring, company research, and lead enrichment. Choose a market (en / fr / de / es / it / tr), pick a mode, set a keyword or detail URL, and get Dataset rows with product IDs, company IDs, titles, countries, verification flags, canonical Europages URLs, and Lead / Contact fields when the company or product-detail Nuxt payload publishes them.

  • Scrape product search, company search, company profiles, and product detail pages on market TLDs (europages.co.uk, .fr, …). Opened this cycle: en + fr. Do not treat all six TLD codes as equally verified.
  • Filter by supplier country, supplier type, category, verified, quick responder, sort, and employee count (live country encoding is countries=DE, not the old filters[countries][0])
  • Extract productId, companyId, title, description, country, verified flags, images, category paths, plus phones[] / emails[] / address.unit (门牌) / person / org / web
  • enrichDetails defaults on — list cards have no phones; company / PDP Nuxt is the lead surface
  • Export to Excel / CSV / JSON, or connect Make, n8n, Zapier, Python, or the Apify API
  • Pay per event — Actor start + each Dataset result; platform usage is included (you do not pay separate Apify compute on top)

Unofficial tool. This Actor is not affiliated with, endorsed by, or sponsored by Europages / Visable. It collects publicly reachable listing and detail surfaces and does not log in, submit Contact supplier / RFQ, solve Human Verification, or access private accounts. Public phones, emails, 门牌, and contact names are written as the page publishes them (not redacted). Empty means the public surface did not publish that subfield — see leadAbsences.


What does the Europages Scraper do?

Europages Scraper lets you extract structured B2B product and company data from Europages without running your own anti-bot browser fleet. Give it a market, a keyword (e.g. cnc machining, industrial pumps), a company URL / ID, or a product URL / ID, then start a run.

Under the hood, the Actor:

  1. Validates your input (mode, market, query, facets, detail URLs)
  2. Enforces free-tier caps when you are on a free Apify plan
  3. Fetches public Europages listing and detail pages through a managed Camoufox scrape backend (enrichDetails defaults on, so list rows follow company / PDP URLs)
  4. Normalizes product / company rows into a clean Dataset, including Lead / Contact fields
  5. Writes INPUT_ECHO, RUN_SUMMARY (and ERROR_SUMMARY on failure) to the key-value store

You run it like any other Apify Actor — schedule it, call it from the API, or plug it into automations.


What Europages data can I extract?

DataProduct searchCompany searchCompany detailProduct detail
productId / productUrlproducts[]
title / description
companyId / companyName / companyUrl
country / supplier type
verified / quickResponder / sell pointsenrich
images / attributes / certificatesenrich
category path / category IDs
phones[] (Nuxt phoneNumber + JSON-LD)— (本站无 on cards)— (本站无 on cards)✅ same company object
emails[]sampled 本站无sampled 本站无
address / 门牌 (unit)city text only, no 门牌
person (DOM contact-person)Nuxt often lacks title
org / web.websitecompany namecompany name

List cards have no phones. enrichDetails defaults on so search rows follow company / PDP URLs. Contact fields are not redacted. See Lead / Contact fields for types, samples, reveal cost, and honest gaps.


Lead / Contact fields

Every Dataset item carries the contact / clue keys below. Empty top-level lead keys are paired with a leadAbsences reason (本站无 / 闸门锁 / 部分 / 未验证) so you know why a field is missing. Nested address sub-fields such as region may simply be null.

Contact source: full phone, street / 门牌, person, and website live on the company profile (/{lang}/company/{slug}-{companyId}) inside #__NUXT_DATA__ hashed pointers plus JSON-LD Organization. Product detail pages embed the same company object. List / search cards are thin (no view-phone-number, no mailto).

FieldTypeMeaning on Europages
phones[{value, type, e164?}]Landline from Nuxt phoneNumber + contacts[].phoneNumber and JSON-LD ContactPoint.telephone. Samples: Buchholz +49431790070 / +4943179007608 / +494317900772; Geje +310515581808; WKL +49626136005. Hashed pointer example: [5].phoneNumber=32[32]="+49431790070" (emit the string, not the integer index). Copied to alias phone (first number). VAT is not a phone (DE811238275, NL819508949B01, DE276876918 stay in vatId).
emails[{value, type}]Contact mailbox when the page publishes mailto: or an email key. Sampled companies (Buchholz / Geje / WKL) have no email key and no mailtoemails=[] with leadAbsences.emails=本站无. That is not a login wall. The Actor does not invent inboxes. Alias email is null when the array is empty.
address{street, unit, locality, region, postalCode, country, full}unit = 门牌 (building number), not the city. Samples: Wasserwerksweg 1-3unit=1-3; Röntgenweg 8unit=8; Am Luttenbach 3 (ehem. Kaserne)unit=3. Company-card text such as Italy, Battipaglia is city–country only (leadAbsences.address=部分), not a 门牌.
geo{lat, lng}JSON-LD coordinates in addition to street, not instead. Buchholz sample 54.292982, 10.221508; WKL smoke 49.37593, 9.17597.
person{name, role?}DOM contact-person “Name - Role” on company profile (e.g. Stefan Buchholz / CEO, Manuel Müllner / PDG, Carina Gravert / Marketing). Nuxt contacts[] often lacks title. List cards: 本站无.
org{name, id?}Company name + Europages companyId (Buchholz Hydraulik GmbH / 286830; WKL Helmstädter GmbH / 1032458).
web{website, socials[]}Company homepage from Nuxt (http://www.buchholz-hydraulik.de/, https://www.geje.nl, http://www.wkl-helmstaedter.de/). socials may repeat that homepage URL. Alias website is web.website.
leadSourceenumsearch on list cards; entity on company profile; detail on PDP (same company object).
leadRevealenumclick on company profile — UI data-test="view-phone-number" unmasks tel: but no new XHR (data already in HTML / Nuxt). absent on list cards. PDP JSON can already hold the number (visible in payload).
leadAbsencesobjectPer-subfield reason when empty (WKL smoke: {"emails":"本站无"}).

Legacy aliases phone / email / website stay on the row so older Dataset views keep working.

Reveal cost

enrichDetails defaults on because list cards have no phones. That is the extra cost: one company or PDP fetch per list row (longer run, more worker traffic / proxy). You do not pay a second PPE event for the enrich itself — you are still charged once per Dataset item. Set enrichDetails: false only if you want thin identity cards.

On the page itself there is no click-to-unlock XHR:

  • Company-profile Nuxt already stores phoneNumber as a plaintext string behind a hashed pointer. JSON-LD telephone matches.
  • Clicking view-phone-number only unmasks a tel: link in the DOM (resource count unchanged). The worker parses HTML / Nuxt and does not need that click to obtain the number.
  • The Actor does not submit Contact supplier, RFQ, Request Hub, or Sign in.

Non-browser HTTP (python / curl / Chrome UA) is AWS WAF 202 empty. The hosted worker uses a Camoufox rung on market TLDs. This Actor does not run Chrome on Apify.

Honest limitations

  • List / search cards have no phones, no emails, and no 门牌. Product cards are identity only. Company cards may show city–country text (Italy, Battipaglia) without company-address. Leave enrichDetails on (the default).
  • Sampled companies have no email. Buchholz, Geje, and WKL Nuxt objects have no email / emails key and no mailto:. That is 本站无, not 闸门锁. Other suppliers might publish a mailbox; this cycle did not invent one.
  • .com is not a scrape host. www.europages.com stays on Human Verification. Use market TLDs (europages.co.uk, .fr, …).
  • de company search is 404 (h1 Ups!). Do not treat German company SERP as opened. Product search on de was not opened this cycle as a lead cell.
  • es / it / tr are 未验证. Italian company search stayed on Human Verification this cycle. Do not claim all six TLD codes are equally verified, and do not copy 2026-08-01 “fr empty_shell” (French company search now returns cards).
  • VAT is not a phone. vatId values such as DE811238275 are registry IDs (vat-number-button), never copied into phones[].
  • Contact supplier / RFQ is not submitted. contact-button on cards is an inquiry form, not a phone reveal. The Actor does not click it.
  • Filter encoding: live supplier-country filter is countries=DE (repeat key for several ISO-2 codes). The old query filters[countries][0]=DE does not apply the filter (URL may keep the param while the first card stays unfiltered).
  • Category showroom (/showroom-cate/…) is not an Actor mode.
  • Contact fields are never redacted on free-tier sample runs. Empty means the public page did not publish that subfield (see leadAbsences).

Why scrape Europages?

Europages is one of Europe’s largest B2B directories spanning industrial machinery, components, packaging, chemicals, textiles, and more across UK, France, Germany, Spain, Italy, and Turkey hosts. Teams scrape Europages for supplier discovery, competitor monitoring, lead generation, and assortment research:

  • Monitor product keywords across EU markets with supplier-country filters (countries= encoding)
  • Build company lists with verification signals, employee-size facets, and public phones / 门牌 / person from company profiles (enrichDetails default on)
  • Pull product detail pages with attributes, certificates, image galleries, and the embedded company contact object
  • Feed CRM, BI dashboards, Google Sheets, BigQuery, or AI agents with clean rows
  • Prefer market TLDs (europages.co.uk, .fr, …) over the .com Human Verification gateway. Opened this cycle: en + fr.

Compared with generic URL scrapers, this Actor returns Europages-specific fields (product/company IDs, market host, facet filters, Nuxt-backed detail payloads) in one input surface.


More Actors like this

Need another marketplace, B2B directory, or a different vertical? Use a dedicated Actor below for structured fields. Use this Actor for Europages (europages.co.uk / .fr / .de / .es / .it / .com.tr) European B2B products and companies.

Similar e-commerce & B2B scrapers

Prefer another specialized scraper?

If your target has a specialized Actor below, use that first — usually cheaper and more structured than a generic scrape.

Jobs & Freelance

Real Estate

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ See the full catalog in Related Actors below, or browse apify.com/lentic_clockss.


How to scrape Europages (no code required)

  1. Create a free Apify account
  2. Open Europages Scraper
  3. Choose a mode: product_search, company_search, company, or product
  4. Choose a market: en (UK) and fr were opened this cycle; de / es / it / tr exist as input codes but are not equally verified (de company search is 404; es/it/tr 未验证)
  5. Enter a query, or a companyUrl / productUrl / ID
  6. Leave enrichDetails on (the default) so list rows pick up company / PDP phones, 门牌, and person. Optionally set countryFilters, supplierTypes, categoryIds, verified, maxResults
  7. Click Start and download the Dataset as JSON, CSV, Excel, or JSONL

Start with maxResults: 5–15 to verify the query, then scale up. French company search works on www.europages.fr this cycle. Keep companySearchFallback: true (default) for hosts where native company search is unsupported (de 404). Do not assume es / it / tr company search was opened.


How much does it cost to scrape Europages?

This Actor uses pay-per-event pricing. You are charged for:

EventPrice
Actor Start (apify-actor-start)$0.005 per start
Result (apify-default-dataset-item)$3.00 / 1,000 results ($0.003 each on FREE/BRONZE)

Platform usage costs are included — you do not pay separate Apify compute/proxy usage for this Actor on top of the event prices above (User pays platform usage costs = No).

Volume discount tiers (per result)

Tier$/1,000per result
FREE*$3.00$0.003
BRONZE$3.00$0.003
SILVER$2.60$0.0026
GOLD$2.20$0.0022
PLATINUM$2.00$0.002
DIAMOND$1.60$0.0016

*FREE matches BRONZE for this Actor.

Example cost estimates (FREE/BRONZE)

Results collectedApprox. event cost*
100~$0.31
1,000~$3.01
10,000~$30.01

*Assumes one Actor start at default memory billing for start events, plus $0.003 per Dataset item. Exact start billing can scale with allocated memory (one start event per GB, minimum one).

Free plan limits

On a free Apify plan, this Actor enforces developer limits of 10 runs and 200 results per run. Upgrade to a paid Apify plan for unlimited runs (event prices still apply).


Input examples

Product search (UK)

{
"mode": "product_search",
"market": "en",
"query": "cnc machining",
"maxResults": 20,
"maxPages": 3
}

Product search with supplier-country filter (Germany)

{
"mode": "product_search",
"market": "de",
"query": "hydraulic pumps",
"countryFilters": ["DE"],
"verified": true,
"maxResults": 30
}

Company search (English host)

{
"mode": "company_search",
"market": "en",
"query": "packaging",
"maxResults": 20
}

Company detail

{
"mode": "company",
"market": "en",
"companyUrl": "https://www.europages.co.uk/company/example-22278748"
}

Product detail

{
"mode": "product",
"market": "en",
"productUrl": "https://www.europages.co.uk/company/example-22278748/products/example-35995590"
}
{
"mode": "product_search",
"market": "fr",
"query": "roulements",
"enrichDetails": true,
"maxResults": 10
}

Coverage matrix

DimensionCoverage
Markets (input codes)en → europages.co.uk · fr · de · es · it · tr → europages.com.tr
Opened this cycleen: product_search, company_search, company, product. fr: product_search, company_search, company.
Not equally verifiedde company_search = 404 (Ups!). es / it / tr = 未验证 (Italian company search stayed on Human Verification). Do not claim all six TLDs were opened.
Modesproduct_search · company_search · company · product. Category showroom is not a mode.
FacetsLive country filter is countries=DE (not filters[countries][0]). Other facet encodings (supplier type, verified, employees) were not re-clicked this cycle.
Pagination/{lang}/products|search/page/{N}?q=
Free tier10 runs / 200 results per free-plan user

Do not use www.europages.com as the scrape host — it stays on Human Verification. Prefer market TLDs. French company search returns cards this cycle (ignore older “empty_shell” notes).


Output

Each Dataset item is one product card, company card, or detail record. Catalog fields plus Lead / Contact keys:

  • typeproduct / company
  • market, source, scrapedAt
  • productId, title, description, url
  • companyId, companyName / name, companyUrl, country
  • verified, supplierTypes, image / logo, vatId (registry — not a phone)
  • phones[], emails[], address (incl. unit = 门牌), geo, person, org, web
  • leadSource, leadReveal, leadAbsences
  • Aliases: phone, email, website

Company-detail example (WKL on fr, values as published):

{
"type": "company",
"market": "fr",
"name": "WKL Helmstädter GmbH",
"companyId": "1032458",
"url": "https://www.europages.fr/fr/company/wkl-helmstaedter-gmbh-1032458",
"phones": [{ "value": "+49626136005", "type": "landline", "e164": "+49626136005" }],
"emails": [],
"address": {
"street": "Am Luttenbach 3 (ehem. Kaserne)",
"unit": "3",
"locality": "Elztal",
"postalCode": "74834",
"country": "DE",
"full": "Am Luttenbach 3 (ehem. Kaserne), 74834, Elztal, DE"
},
"person": { "name": "Manuel Müllner", "role": "PDG" },
"org": { "name": "WKL Helmstädter GmbH", "id": "1032458" },
"web": { "website": "http://www.wkl-helmstaedter.de/" },
"leadSource": "entity",
"leadReveal": "click",
"leadAbsences": { "emails": "本站无" },
"vatId": "DE276876918"
}

Key-value store keys:

KeyPurpose
INPUT_ECHOSanitized input (no scrape-backend URL)
RUN_SUMMARYCounts, diagnostics, warnings, free-tier flags
ERROR_SUMMARYPresent only when the run fails

Tips for better results

  • Prefer specific industrial keywords over one-word queries
  • Use countryFilters (ISO-2) when you need suppliers from one country — encoded as countries=
  • Keep maxPages modest until you confirm the query returns the right vertical
  • Leave enrichDetails on unless you only need thin search cards (no phones / 门牌 / person)
  • On free Apify plans, stay within 10 runs / 200 results

FAQ

Is this an official Europages API?
No. It is an unofficial scraper for publicly reachable pages.

Which market should I pick?
Pick the UI language / TLD you want (en for UK English, fr for France, …). Supplier country is a separate filter (countryFilters → live countries=). Opened this cycle: en + fr. de company search is 404. es / it / tr are 未验证.

Why is company search empty on German?
/de/search returns an application 404 (Ups!) this cycle. French company search does return cards on www.europages.fr. With companySearchFallback: true (default), unsupported native company search can use the English host plus a supplier-country hint. Do not assume Italian / Spanish / Turkish company search was opened.

Do you scrape phone numbers?
Yes, when the company profile or PDP Nuxt publishes them (phoneNumber + JSON-LD). List cards do not have phones — leave enrichDetails on. Clicking view-phone-number only unmasks tel: already in the HTML; there is no reveal XHR. Sampled companies had no email. VAT IDs are not phones. Contact fields are not redacted.

Can I schedule daily runs?
Yes — use Apify Schedules or the API.


Scraping publicly available data is a common practice when done respectfully. You are responsible for complying with Europages terms, applicable laws (including GDPR where relevant), and your own use-case constraints. This Actor does not bypass logins, submit Contact supplier / RFQ, or solve Human Verification. Public phones / 门牌 / person on company pages are stored as published.


All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.

Jobs & Freelance

Real Estate

E-commerce

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ Browse the full profile: apify.com/lentic_clockss