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

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

maxResults is the most product or company rows for each search query, detail URL, company ID, or product ID. The default is 70; larger numbers are collected in parts of 70. All row types count together, and the whole run stops at your maximum total charge. Free Apify plan users can collect up to 200 rows per run for 10 runs.

  • Scrape product search, company search, company profiles, and product detail pages on all six market TLDs (europages.co.uk, .fr, .de, .es, .it, .com.tr). Product and company search read Europages' own search data, so German and Italian company search work natively (2026-10-11).
  • Filter by supplier country, supplier type, employee count, verified, quick responder, plus category and sort (category and sort use the slower rendered-page path)
  • Extract productId, companyId, title, description, country, verified flags, price, minimum order, images, company employee count, founding year, supplier types, street address, website, coordinates, top categories, sample products, plus phones[] / emails[] / address.unit (门牌) / person / org / web
  • enrichDetails defaults on: search rows already carry address, website and coordinates for companies; the company profile adds phones, fax, contact person and VAT ID
  • 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. Reads Europages' public search data and detail pages over plain HTTP, and falls back to a managed browser only when a page is challenged (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 / productUrl✅—products[]✅
title / description✅✅✅✅
companyId / companyName / companyUrl✅✅✅✅
country / supplier type✅✅✅✅
verified / quickResponder / sell points✅✅✅enrich
images / attributes / certificates✅ images; attributes enrichpictures, certificate count✅✅
price / minimum order quantity✅sample products—✅
employee count / founding year / top categories—✅✅—
category path / category IDs✅—✅✅
phones[] (Nuxt phoneNumber + JSON-LD, fax)— (本站无 on cards)— (本站无 on cards)✅✅ same company object
emails[]—emailExisting flag (需登录)需登录 / 本站无需登录 / 本站无
address / 门牌 (unit)—✅ street, postcode, city✅✅
geo—✅✅✅
person (DOM contact-person)——✅Nuxt often lacks title
org / web.websitecompany name✅✅✅

Search rows 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; fax from faxNumber with type: "fax". 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 non-fax 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. Europages keeps supplier email addresses behind its login: search data flags them with emailExisting: true, and those rows get leadAbsences.emails=需登录. Without the flag the reason is 本站无. The Actor does not log in or 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-3 → unit=1-3; Röntgenweg 8 → unit=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}Coordinates in addition to street, not instead: from company search data, the profile's JSON-LD, or the profile's location object. 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.

From datacenter IPs Europages answers with an AWS WAF challenge (202 empty or 405). The hosted worker reaches it through managed residential-grade egress, where plain HTTP gets real data; a Camoufox rung remains as a fallback. This Actor does not run Chrome on Apify.

Honest limitations

  • Search rows have no phones. Company search rows carry street, city, postcode, website and coordinates; product rows carry the supplier name and country. Phones, fax, contact person and VAT ID come from the company profile. Leave enrichDetails on (the default).
  • Email addresses sit behind the Europages login. When a supplier has one, rows show emailExisting: true and leadAbsences.emails = "需登录"; the Actor does not log in. Emails published on a public page are written to emails[].
  • .com is not a scrape host. www.europages.com stays on Human Verification. Use market TLDs (europages.co.uk, .fr, …).
  • Category and sort filters are slower. Europages' search data has no category or sort parameter, so inputs with categoryIds or a non-relevance sort use the rendered search pages.
  • Employee count uses range labels such as 20-49 or 1-4 (the older From20To49 form is converted for you).
  • 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 is handled for you: pass ISO-2 codes in countryFilters (several allowed). The Actor sends them in the form Europages applies.
  • 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
  • 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, .de, .es, .it, .com.tr) over the .com Human Verification gateway

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), fr, de, es, it, or 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: 3–5 to verify the input, then scale up. Company search runs natively on all six market hosts; companySearchFallback only matters for category or sort inputs on the rendered-page path.


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 (2026-10-11)Product and company search on all six markets (including de and it company search, which used to fail on the rendered page). Company detail checked on en / fr / de / it; product detail on en / fr / es / it / tr.
Modesproduct_search · company_search · company · product. Category showroom is not a mode.
FacetsSupplier country (several codes allowed), supplier type, employee-count range labels (20-49), quick responder and verified apply on the search data. Category and sort use the rendered-page path.
PaginationSearch data pages (15 products or 30 companies per page); runs over 70 rows continue from a cursor without gaps or repeats.
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:

  • type — product / 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). All six markets support product and company search.

Does German company search work now?
Yes. The rendered /de/search page used to return an application 404 (Ups!), but the Actor now reads Europages' search data directly, which works on www.europages.de and the other five hosts (checked 2026-10-11).

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. Fax numbers appear in phones[] with type: "fax". Email addresses sit behind the Europages login; emailExisting: true tells you a supplier has one. 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