# Global B2B Supplier Finder by Product & Country (`dataspryva/global-b2b-supplier-finder-by-product-and-country`) Actor

Search the Kompass B2B directory by company name, product keyword, or country, or fetch specific profiles, for firmographic detail: employees, revenue, certifications, products, and contact info.

- **URL**: https://apify.com/dataspryva/global-b2b-supplier-finder-by-product-and-country.md
- **Developed by:** [Dataspryva](https://apify.com/dataspryva) (community)
- **Categories:** Lead generation, Automation, E-commerce
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Global B2B Supplier Finder by Product & Country

Kompass lists tens of millions of manufacturers, distributors, and service companies across dozens of countries. This actor searches that directory by company name, product keyword, or country, or pulls full details for profiles you already have the URL for, and returns structured company records for sourcing and lead work.

### What this actor does

- **Four search modes**: free-text company search, product/service keyword search, country browse, and direct profile lookup by URL
- **Filters by country** using a 32-country dropdown covering North America, Europe, Asia, and more
- **Returns firmographic detail** — employee count range, revenue range, certifications, and products/services offered
- **Captures contact points** — primary contact name, phone number, and company website when listed
- **Empty fields are omitted** from each record instead of being returned as null

### Output per company

- `companyId` — Kompass's internal company identifier
- `companyName` — full registered company name
- `country` — company's country
- `city` — city or region
- `employees` — employee count range
- `revenue` — revenue range
- `products` — products and services offered
- `certifications` — quality certifications (e.g. ISO)
- `websiteUrl` — company's own website
- `companyUrl` — Kompass profile URL
- `contactName` — primary contact person name
- `phone` — company phone number
- `scrapedAt` — UTC timestamp of when the record was scraped

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string (enum, required) | `searchCompanies` | `searchCompanies`, `searchByProduct`, `searchByCountry`, or `companyDetails` |
| `query` | string | `machine tools` | Company name or keyword (modes `searchCompanies` / `searchByProduct`) |
| `country` | string (enum) | `US` | 2-letter country code filter, or blank for all countries |
| `companyUrls` | array | `[]` | Kompass company profile URLs to fetch (mode `companyDetails`) |
| `maxItems` | integer | `20` | Maximum number of company records to return (1–500) |

#### Example: search by product keyword in one country

```json
{
  "mode": "searchByProduct",
  "query": "industrial valves",
  "country": "DE",
  "maxItems": 30
}
```

#### Example: browse all companies listed for a country

```json
{
  "mode": "searchByCountry",
  "country": "IN",
  "maxItems": 50
}
```

#### Example: fetch specific company profiles

```json
{
  "mode": "companyDetails",
  "companyUrls": [
    "https://www.kompass.com/c/example-company/de123456/"
  ]
}
```

### Use cases

- **B2B lead generation** — build a list of companies in a target country and product category
- **Supplier sourcing** — shortlist manufacturers with the certifications a buyer requires
- **Market mapping** — see how many and which companies serve a given product category per country
- **Export/import partner search** — find counterparts in a specific country for a trade relationship
- **Company verification** — pull employee count, revenue range, and contact details for due diligence

### FAQ

**Is this affiliated with Kompass?**
No. This is an independent, third-party actor that reads publicly visible Kompass pages; it isn't operated by or affiliated with Kompass.

**Do I need a Kompass account?**
No. Public search and company profile pages don't require a login.

**What's the difference between `searchCompanies` and `searchByProduct`?**
`searchCompanies` matches your query against company names and general listing text. `searchByProduct` matches it specifically against the products and services companies list, which surfaces different results for the same keyword.

**Why is `revenue` or `certifications` sometimes missing?**
Not every Kompass profile publishes every field. Fields with no value on the source page are omitted from the record rather than returned empty.

**Can I search without filtering by country?**
Yes, leave `country` blank to search across all countries Kompass covers.

**How current is the data?**
Each run reads Kompass's live pages, so company details reflect what's published at run time.

**What if I already have a list of company URLs?**
Use `mode: "companyDetails"` with `companyUrls` to fetch full details for exactly those profiles instead of running a search.

# Actor input Schema

## `mode` (type: `string`):

What to search for on Kompass.

## `query` (type: `string`):

Company name or keyword to search for (used in searchCompanies and searchByProduct modes).

## `country` (type: `string`):

ISO 2-letter country code to filter results (e.g. 'US', 'DE', 'FR', 'GB'). Leave blank for all countries.

## `companyUrls` (type: `array`):

List of Kompass company profile URLs to fetch details for.

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

Maximum number of company records to return.

## Actor input object example

```json
{
  "mode": "searchCompanies",
  "query": "machine tools",
  "country": "US",
  "companyUrls": [],
  "maxItems": 20
}
```

# Actor output Schema

## `companies` (type: `string`):

Dataset containing all scraped Kompass company records.

# 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 = {
    "mode": "searchCompanies",
    "query": "machine tools",
    "country": "US",
    "companyUrls": [],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("dataspryva/global-b2b-supplier-finder-by-product-and-country").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 = {
    "mode": "searchCompanies",
    "query": "machine tools",
    "country": "US",
    "companyUrls": [],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("dataspryva/global-b2b-supplier-finder-by-product-and-country").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 '{
  "mode": "searchCompanies",
  "query": "machine tools",
  "country": "US",
  "companyUrls": [],
  "maxItems": 20
}' |
apify call dataspryva/global-b2b-supplier-finder-by-product-and-country --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dataspryva/global-b2b-supplier-finder-by-product-and-country"
        }
    }
}
```

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/WY0bmptmiK1TxCKqS/builds/o3qjaPHdz4NeRezx1/openapi.json
