# Kompass Scraper - B2B Companies & Contacts (`crawloop/kompass-scraper`) Actor

Scrape Kompass B2B company profiles worldwide. Export phone, email, website, VAT, address, employees, products and certifications from keywords or profile URLs.

- **URL**: https://apify.com/crawloop/kompass-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** Lead generation, AI, E-commerce
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Kompass Scraper - B2B Companies & Contacts

> **Disclaimer:** Unofficial integration for publicly accessible sources. Trademarks belong to their respective owners. Provided for informational use only; users must comply with applicable platform terms and laws.

> **Crawloop Global Sourcing Suite** — B2B company directories for Europe and beyond.

| Kompass (Global) | Europages (Europe) | WLW (DACH) |
| :--- | :--- | :--- |
| **Kompass Scraper** ◄── you are here | [Europages Scraper](https://apify.com/crawloop/europages-scraper) | [WLW Scraper](https://apify.com/crawloop/wlw-scraper) |
| Global B2B companies, phone, email, VAT | Multi-locale EU directory, VAT, certificates | DE / AT / CH suppliers, phone, email, VAT |

**Kompass Scraper** for Apify — a **Kompass API alternative** that turns the global B2B directory into clean JSON. Scrape **company profiles** across 70+ country domains and export **phone, email, website, VAT, registration number, address, GPS, employees, products, certifications**, and optional **catalogue PDFs**.

Built for **supplier sourcing**, **lead generation**, **CRM enrichment**, and **market mapping**. Run from the Console or with **Python**, **Node.js**, **cURL**, or **MCP** / AI assistants. Uses **Camoufox** plus **residential proxy** to clear Kompass DataDome.

### When to use this Actor

- You need a **Kompass company scraper** for structured dataset rows
- You want **keyword search** or **startUrls** (search pages / profile links)
- You need **phone, email, VAT and firmographics** for outbound or procurement
- You want a **global ↔ Europe** chain with Europages / WLW

### When not to use this Actor

- **Guaranteed email on every profile** — many free listings publish phone and website only
- **Authenticated / gated Kompass fields** — public profile + JSON-LD only
- **Sending RFQs** through Kompass contact forms — read-only extraction
- **Datacenter-only runs** — DataDome blocks most non-residential traffic; use Apify Residential matching the market country

### Key features

- **Kompass API alternative** — structured dataset instead of manual browsing
- **Keyword → searchCompanies** — builds country-host search URLs automatically
- **Start URLs** — paste search pages or `/c/{slug}/{id}/` profile links
- **15+ markets** — `de`, `fr`, `gb`, `us`, `es`, `it`, `nl`, `be`, `pl`, `in`, …
- **Country post-filter** — drop off-target SERP companies before detail fetch
- **Detail enrichment** — JSON-LD Organization + firmographics (VAT, register, employees)
- **Smart enrich** — skip profile fetch when listing already has email + phone + website
- **Optional catalogues** — `fetchCatalogues` attaches PDF / video links from `/c/cv/…`
- **Streaming results** — dataset rows appear while the run is in progress (per keyword)
- **Deduped push** — unique by `companyId` within a run
- **DataDome bypass** — Camoufox stealth Firefox + residential session rotation

### Use cases

| Use case | What you get |
| :--- | :--- |
| **Find global suppliers** | Keyword search with company id, city, country, products |
| **B2B contact lists** | Phone, email, and website from company profiles |
| **Firmographics & compliance** | VAT ID, registration number, legal form, founding year, employees |
| **Geo & territory mapping** | Street address plus latitude / longitude |
| **Catalogue collection** | Optional PDF / video links from the media page |
| **Country-focused runs** | Market host + ISO country post-filter for clean lists |

### Input parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchKeywords` | Array | `["pumpen"]` | Keywords → Kompass search URLs. |
| `startUrls` | Array | `[]` | Search and/or company profile URLs. |
| `market` | String | `"de"` | Country subdomain / host (e.g. `de`, `fr`, `gb`). |
| `countryFilter` | String | — | Optional ISO-2 post-filter (e.g. `DE`). |
| `fetchDetails` | Boolean | `true` | Open profiles for full fields (see smartEnrich). |
| `smartEnrich` | Boolean | `true` | Skip profile when listing already has email+phone+website. |
| `fetchCatalogues` | Boolean | `false` | Also fetch `/c/cv/` media links (forces detail). |
| `maxItems` | Integer | `50` | Max dataset rows (`0` = unlimited within `maxPages`). |
| `maxPages` | Integer | `3` | Max search pages per keyword / listing URL. |
| `concurrency` | Integer | `1` | Parallel Camoufox workers (1–4; keep low behind DataDome). |
| `proxyConfiguration` | Object | DE residential | Apify Proxy — residential required. |

#### Example — German pump manufacturers

```json
{
  "searchKeywords": ["pumpen"],
  "market": "de",
  "countryFilter": "DE",
  "fetchDetails": true,
  "smartEnrich": false,
  "fetchCatalogues": false,
  "maxItems": 100,
  "maxPages": 5,
  "concurrency": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "DE"
  }
}
```

#### Example — profile URLs only

```json
{
  "startUrls": [
    {"url": "https://de.kompass.com/c/rls-wacon-analytics-gmbh/denkc00033877/"}
  ],
  "fetchDetails": true,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "DE"
  }
}
```

#### Example — listing-only (fast volume)

```json
{
  "searchKeywords": ["ventile", "sensoren"],
  "market": "de",
  "fetchDetails": false,
  "maxItems": 200,
  "maxPages": 5,
  "concurrency": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "DE"
  }
}
```

### Output fields

| Field | Description |
| :--- | :--- |
| `companyId` | Stable Kompass ID |
| `name` | Company display name |
| `url` | Kompass profile URL |
| `websiteUrl` | External website |
| `email` / `phoneNumber` / `faxNumber` | Contacts when published |
| `address` | Street, zip, city, country, lat/lng |
| `vatNumber` / `registrationNumber` / `legalForm` | Firmographics |
| `employeeCount` / `foundingYear` | Size & age |
| `categories` / `products` / `businessTypes` | Activities & roles |
| `certifications` / `executives` / `catalogues` | Enrichment extras |
| `enriched` / `scrapedAt` | Provenance |

#### Example output

```json
{
  "recordType": "company",
  "companyId": "DENKC00033877",
  "name": "RLS Wacon analytics GmbH",
  "url": "https://de.kompass.com/c/rls-wacon-analytics-gmbh/denkc00033877/",
  "websiteUrl": "https://www.rls-wacon.de",
  "email": "info@rls-wacon.de",
  "phoneNumber": "+49 5121 28 126 0",
  "city": "Hildesheim",
  "countryCode": "DE",
  "vatNumber": "DE240123142",
  "employeeCount": "Von 20 bis 49 Mitarbeiter",
  "foundingYear": 2005,
  "enriched": true,
  "sourcePlatform": "kompass.com"
}
```

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/kompass-scraper').call({
  searchKeywords: ['pumpen'],
  market: 'de',
  countryFilter: 'DE',
  maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("crawloop/kompass-scraper").call(run_input={
    "searchKeywords": ["pumpen"],
    "market": "de",
    "countryFilter": "DE",
    "maxItems": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["name"], item.get("email"), item.get("phoneNumber"))
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/crawloop~kompass-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchKeywords":["pumpen"],"market":"de","countryFilter":"DE","maxItems":50}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store ID / name.

Example prompts:

- "Run Kompass Scraper for pumpen in Germany with countryFilter DE and return the top 20 rows as JSON"
- "Scrape Kompass company profiles for industrial valves in France and summarize VAT + phone coverage"
- "Chain Kompass Scraper then Europages Scraper to compare EU supplier contacts for the same keyword"

### Suite next step

After mapping global Kompass leads, enrich Europe-focused shortlists with [Europages Scraper](https://apify.com/crawloop/europages-scraper) or DACH suppliers with [WLW Scraper](https://apify.com/crawloop/wlw-scraper).

### FAQ

**Why do I need residential proxies?**\
Kompass uses DataDome. Datacenter IPs usually get an interstitial challenge; Apify Residential with a matching country code clears it reliably.

**Why is detail mode slower than Europages?**\
Kompass requires a real browser (Camoufox) per page. For large volumes, start with `fetchDetails: false`, then enrich only new `companyId`s.

**Why filter by country?**\
Long searches mix foreign companies on later pages. `countryFilter` drops non-matching rows before detail fetch.

**Do listings include email?**\
Usually not. Keep `fetchDetails` on (and `smartEnrich` off when you need maximum VAT/contact coverage).

### Related Actors

| Actor | Role |
| :--- | :--- |
| [Europages Scraper](https://apify.com/crawloop/europages-scraper) | Europe-wide B2B directory, multi-locale, VAT & contacts |
| [WLW Scraper](https://apify.com/crawloop/wlw-scraper) | DACH B2B directory (Wer liefert was) |

# Actor input Schema

## `searchKeywords` (type: `array`):

Product, service or company keywords. Each keyword becomes a Kompass searchCompanies query on the selected market host.

## `startUrls` (type: `array`):

Kompass search URLs (…/searchCompanies?text=…) and/or company profile URLs (…/c/{slug}/{id}/).

## `market` (type: `string`):

Kompass country subdomain used to build keyword search URLs (e.g. de → de.kompass.com).

## `countryFilter` (type: `string`):

Optional ISO-2 country code post-filter (e.g. DE). Drops off-target SERP companies before detail fetch — Kompass often mixes countries on later pages.

## `fetchDetails` (type: `boolean`):

Open company profiles for email, phone, VAT, address, employees, certifications (subject to smartEnrich).

## `smartEnrich` (type: `boolean`):

When true with fetchDetails, skip a profile request if the listing already has email + phone + website. Set false to always open profiles (max VAT/contacts coverage).

## `fetchCatalogues` (type: `boolean`):

When true, also open the company media page (/c/cv/…) for PDF catalogue and video links. Forces detail enrichment.

## `maxItems` (type: `integer`):

Stop after this many dataset records. 0 = unlimited (still bounded by maxPages).

## `maxPages` (type: `integer`):

Maximum search result pages to crawl per keyword or listing URL.

## `concurrency` (type: `integer`):

Parallel Camoufox profile workers (1–4). Keep at 1–2 behind DataDome.

## `proxyConfiguration` (type: `object`):

Apify Proxy settings. Residential matching the market country is required for Kompass (DataDome).

## Actor input object example

```json
{
  "searchKeywords": [
    "pumpen"
  ],
  "startUrls": [],
  "market": "de",
  "countryFilter": "",
  "fetchDetails": true,
  "smartEnrich": true,
  "fetchCatalogues": false,
  "maxItems": 5,
  "maxPages": 1,
  "concurrency": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Default dataset items (company profiles).

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/kompass-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/kompass-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 '{}' |
apify call crawloop/kompass-scraper --silent --output-dataset

```

## MCP server setup

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