# Exportpages Scraper & API - B2B Suppliers & Manufacturers (`rel8ble/exportpages-scraper`) Actor

Exportpages scraper and API for B2B sourcing: search European and global suppliers by product and country. One result = one supplier: company, type, phone, website, address, certificates, founded year, employees, products. No login. $1.00 per 1,000 results.

- **URL**: https://apify.com/rel8ble/exportpages-scraper.md
- **Developed by:** [Giovanni Rich](https://apify.com/rel8ble) (community)
- **Categories:** Lead generation, Business, E-commerce
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Exportpages Scraper & API - B2B Suppliers & Manufacturers

This **Exportpages scraper** turns exportpages.com, a B2B supplier platform with a strong European base, into clean **supplier lists**: type a product such as `cnc machining`, `valve` or `packaging machines`, and get one row per supplier with **company name, business type, country, phone, website, full address, certificates, founded year, employee count, product categories and products**, as JSON, CSV or Excel.
Use it as an **Exportpages API**, a **European manufacturer directory scraper**, a **B2B supplier finder** for sourcing, or a **lead generation** tool for selling to manufacturers, from your own code, Make, Zapier, n8n or an AI agent.

It reads the public pages over plain HTTP, with **no headless browser and no login**. The prefilled demo returns 10 suppliers. **$1.00 per 1,000 suppliers, no start fee, company-page details included.**

**What goes in:** product or service words in English, or Exportpages URLs, plus optional filters on country, business type and certificates. **What comes out:** one row per supplier. **When to use it:** you need suppliers of a product, or a list of manufacturers in a sector and country, with a phone number and website.

**What it does not have:** Exportpages shows **no prices, no minimum order quantities and no e-mail addresses** (buyers send requests through a form on the site). If you need price tiers and MOQ, this is the wrong source.

### What you get

- **Contact**: company name, phone in international format, website.
- **Address**: street, postal code, city, region, country name and ISO code, full one-line address.
- **Company profile**: business type (Manufacturer, Distributor, Service Provider), regions it delivers to, certificates (ISO 9001 and so on), founded year, employee count, the company's "About" text, logo.
- **Products**: total product count, the categories it lists products in (with counts), and the products on the first page of its profile (name, code, short summary, image, link).
- **Search context**: the search term and category that found it and its position in the list.

Only what a company filled in is there. In a 150-supplier test (`packaging machines`, `stainless steel`, `furniture`, 50 each, home-IP run on 4 November 2026): name, type, country, city, street and postal code 100%, phone 93%, website 92%, founded year 55%, certificates 47%, employees 31%, "About" text 15%. Missing fields are `null` or an empty list, never invented. In that sample 80 of the 150 suppliers were German and 13 Chinese, with the rest across 18 other countries.

### Sample output

Real rows from a run of the prefilled input (`cnc machining`), a few of the 29 fields:

| name | type | country | phone | website | certificates | founded |
|---|---|---|---|---|---|---|
| SFB Schwäbische Formdrehteile GmbH & Co. KG | Manufacturer | DE | +49833330301 | sfb-vab.de | DIN EN ISO 9001, DIN EN ISO 14001 | 1941 |
| Xiamen Creator Technology Co., Ltd | Service Provider | CN | +865928876250 | xmcreator.com | ISO90001 | 2007 |
| URBEN + KYBURZ AG | Manufacturer | CH | +41326142311 | urben-kyburz.ch | DIN EN ISO 9001:2008, DIN EN ISO 14001:2004 | 1958 |
| Kratzer GmbH & Co. KG | Manufacturer | DE | +497816240 | kratzer.de | ISO 9001, ISO TS 16949, ISO 13485, ISO 14001 | 1962 |

### Use cases

- **Supplier sourcing**: find certified manufacturers of a part or material, by country, and contact them directly
- **B2B lead generation**: build call lists of manufacturers and distributors in a sector for your sales team
- **Market mapping**: how many suppliers list a product, in which countries, and how many are certified
- **CRM enrichment**: add phone, website, address, certificates and company age to suppliers you already track
- **Alternative sourcing**: find European suppliers to compare against the Asian ones you buy from

### Pricing

**$1.00 per 1,000 suppliers** (pay per result; one result = one supplier saved to the dataset). No start fee. Phone, website and products are included at the same price, and so is Apify platform usage.

| You scrape | You pay |
|---|---|
| 100 suppliers | $0.10 |
| 1,000 suppliers | $1.00 |
| 10,000 suppliers | $10.00 |

The Apify Store snapshot of 21 October 2026 had no Exportpages actor. For comparison, actors for similar B2B directories, at free-plan prices per 1,000: scrapersdelight wlw $1.10, crawloop wlw $1.30, plowdata Europages $3.00, scrapesage Kompass $3.00 list / $6.00 details + $0.01 start, santamaria-automations Europages $3.00 list / $5.00 details + start fee. These cover other sites with other data, so this is not a like-for-like comparison.

Duplicates, suppliers skipped by your filters, searches that find nothing, removed listings and failed requests are never charged. If you set a maximum cost per run, the scraper stops cleanly when it reaches it.

### FAQ

**Is there an official Exportpages API?**
I did not find a public one. This actor works as one: start it over the Apify API with search terms and get JSON back.

**Does it return prices or MOQ?**
No. The site does not show them. Product pages have a description and an inquiry form.

**Does it return e-mail addresses?**
No. The site does not publish them; it has a contact form instead. Each row has the phone and website.

**Why do I get fewer products than `productCount`?**
A company page shows its first 12 products, and the actor reads that first page only. `productCount` holds the full number, and each product has a link. In the 150-supplier test, 75 companies listed more than the row holds.

**How does a search term work?**
The site matches your word against its category tree (`valve` matches 60 categories). The actor reads the biggest matching categories, 3 by default (`maxCategoriesPerSearch`), until it reaches `maxResultsPerSearch`, and then adds suppliers the site's search names directly. Each supplier is returned once, even if several categories list it.

**How many suppliers are there?**
It depends on the product: `CNC contract manufacturing` lists 117, `Furniture` 173, `Packaging machines` 210, so expect hundreds per product rather than tens of thousands. Use a broad word and `maxCategoriesPerSearch: 0` to read every matching category.

**How do the country and type filters work?**
They are the site's own filters, so non-matching suppliers are never opened or charged. A country with no suppliers in a category is simply skipped. Direct search hits are checked on the company page, and the ones that do not match are not charged.

**What does "certified" mean here?**
The company listed a certificate on its profile. Exportpages shows what the company entered; the actor does not verify it.

**Does it return personal data?**
Company data only. Company pages can name managers: the actor does not collect those names. A company phone can still reach a person, so check your outreach against GDPR and local rules before you send.

**Which proxy should I use?**
None: leave the default. The actor connects directly and retries any blocked request through Apify Proxy automatically.

**Is scraping Exportpages allowed?**
robots.txt allows all pages (`Allow: /`, checked 4 November 2026). The terms page is a contract for paying advertisers and the legal notice has no clause about copying or data extraction, as far as I could find. Company texts belong to the companies. This is not legal advice: read the current terms for your use.

### How to use

1. Type **Product or service search terms** in English, one per line: `cnc machining`, `valve`, `packaging machines`.
2. Or paste **Exportpages URLs**: categories (`https://exportpages.com/cat/195`), companies (`/comp/152535`), products (`/prod/133064`) or searches (`/search?term=valve`).
3. Optionally filter on **countries** (`DE`, `Germany`), **business types** (`Manufacturer`, `Distributor`, `Service Provider`) and **certified companies**.
4. Set **Max suppliers per search**, and click **Start**.
5. Download the rows from the **Output** tab, or fetch them through the Apify API.

### Input

| Field | Default | Description |
|---|---|---|
| `searchTerms` | - | Product or service words in English |
| `startUrls` | - | Category, company, product or search URLs |
| `countries` | all | ISO codes or English names |
| `businessTypes` | all | `Manufacturer`, `Distributor`, `Service Provider` |
| `certifiedOnly` | false | Only companies listing a certificate |
| `requirePhone` / `requireWebsite` | false | Only suppliers with that contact field |
| `maxResultsPerSearch` | 100 | Suppliers per term or category URL. 0 = all |
| `maxCategoriesPerSearch` | 3 | Categories read per term. 0 = all |
| `scrapeDetails` | true | Open each company page. false = list cards only: name, type, country, regions, product names |

With no input at all, a 10-supplier demo (`cnc machining`) runs.

### Input example

```json
{
    "searchTerms": ["cnc machining", "valve"],
    "countries": ["DE", "IT"],
    "businessTypes": ["Manufacturer"],
    "certifiedOnly": true,
    "maxResultsPerSearch": 100
}
```

### Output example

Real row from a run of the prefilled input (lists and description trimmed):

```json
{
    "id": "152535",
    "name": "Xiamen Creator Technology Co., Ltd",
    "businessType": "Service Provider",
    "country": "China",
    "countryCode": "CN",
    "city": "Xiamen",
    "region": "Fujian",
    "postalCode": "361023",
    "street": "Guankou town, Tieshan Road 786#, Jimei district",
    "address": "Guankou town, Tieshan Road 786#, Jimei district, 361023, Xiamen, Fujian, China",
    "website": "http://www.xmcreator.com",
    "phone": "+865928876250",
    "exportRegions": ["Worldwide"],
    "certificates": ["ISO90001"],
    "premiumListing": true,
    "foundedYear": 2007,
    "employees": null,
    "description": "Xiamen Creator Technology is a professional manufacturing company ...",
    "productCount": 15,
    "productCategories": [
        { "id": "195", "name": "CNC contract manufacturing / CNC machining", "productCount": 3, "url": "https://exportpages.com/cat/195" }
    ],
    "products": [
        {
            "id": "158771",
            "name": "CNC machining for Copper components",
            "code": "CNC-001",
            "url": "https://exportpages.com/prod/158771",
            "summary": "We offer OEM services, CNC machining of copper parts, polishing after CNC machining ...",
            "imageUrl": "https://exportpagescdn.net/v2/images/format-product-preview/9facb475-fd7c-11ef-baf9-0cc47a40e97c/cnc-machining-for-copper-components-cnc-001-by-xiamen-creator-technology-co-ltd.jpg"
        }
    ],
    "logoUrl": "https://exportpagescdn.net/v2/images/format-logo/e185d51e-ea19-11ef-b15c-0cc47a40e97c/xiamen-creator-technology-co-ltd.jpg",
    "url": "https://exportpages.com/comp/152535",
    "searchTerm": "cnc machining",
    "category": "CNC contract manufacturing / CNC machining",
    "categoryUrl": "https://exportpages.com/cat/195",
    "position": 1,
    "detailsScraped": true,
    "scrapedAt": "2026-11-04T18:34:47.795Z"
}
```

A `RUN_SUMMARY` record in the key-value store lists, per search, the categories read, how many suppliers each lists, how many were saved or skipped, and any input that was not usable.

### Integrations

Export the dataset as JSON, CSV, Excel, XML or HTML, or pull it with the Apify API and the JavaScript / Python clients. Connect it to Make, Zapier, n8n, Google Sheets, HubSpot or Slack with Apify integrations and webhooks, schedule runs to keep a supplier list fresh, or call it from an AI agent through the Apify MCP server.

Need a custom scraper or a ready dataset? Hire me on Fiverr: https://www.fiverr.com/rel8ble

# Actor input Schema

## `searchTerms` (type: `array`):

What to source, in plain English, one per line, e.g. "cnc machining", "valve", "packaging machines". Each term is looked up in the Exportpages category tree and the best matching categories are read. Results are suppliers, not single products.

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

Optional. Category pages (https://exportpages.com/cat/195), company pages (https://exportpages.com/comp/152535), product pages (/prod/133064) or search pages (/search?term=valve), one per line. Language sites such as exportpages.de work too; output is in English.

## `countries` (type: `array`):

Keep suppliers based in these countries: ISO codes ("DE", "CN") or English names ("Germany"), one per line. Empty = all countries. The site filters on this itself, so filtered-out suppliers cost nothing.

## `businessTypes` (type: `array`):

Keep only these: "Manufacturer", "Distributor", "Service Provider", one per line. Empty = all types.

## `certifiedOnly` (type: `boolean`):

Optional filter. Keep only companies that list a certificate such as ISO 9001.

## `requirePhone` (type: `boolean`):

Optional filter. Skip suppliers without a phone number (turns on the company-page step). Skipped suppliers are not charged.

## `requireWebsite` (type: `boolean`):

Optional filter. Skip suppliers without a website (turns on the company-page step). Skipped suppliers are not charged.

## `maxResultsPerSearch` (type: `integer`):

Optional. Unique suppliers saved per search term or category URL, integer >= 0. Default 100; 0 = everything the categories list. You pay per supplier, so start small.

## `maxCategoriesPerSearch` (type: `integer`):

Optional. How many matching categories to read per term, biggest first, integer >= 0. Default 3; 0 = all of them. "valve" alone matches 60 categories.

## `scrapeDetails` (type: `boolean`):

Optional boolean. true (default) = open every company page for the phone, website, address, certificates, founded year, employees and products. false = list cards only (name, country, business type, regions, product names): faster, same price.

## `maxConcurrency` (type: `integer`):

Optional, advanced. Parallel requests, integer 1-10. Default 4. Leave unset.

## `maxRequestRetries` (type: `integer`):

Optional, advanced. Retries per failed or blocked request, integer 0-20; each retry uses a new session. Default 6.

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

Optional, advanced. Leave as is. Default {"useApifyProxy": false} = automatic: direct connection first, and only requests that get blocked are retried through Apify Proxy (datacenter, then residential). Set your own Apify Proxy groups or proxy URLs to force them for every request.

## Actor input object example

```json
{
  "searchTerms": [
    "cnc machining"
  ],
  "certifiedOnly": false,
  "requirePhone": false,
  "requireWebsite": false,
  "maxResultsPerSearch": 10,
  "maxCategoriesPerSearch": 3,
  "scrapeDetails": true,
  "maxConcurrency": 4,
  "maxRequestRetries": 6,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `suppliers` (type: `string`):

One row per B2B supplier: company, business type, country, phone, website, address, certificates, founded year, employees, products.

## `summary` (type: `string`):

Counts per search, categories read, filtered suppliers and any input that is not an Exportpages page.

# 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 = {
    "searchTerms": [
        "cnc machining"
    ],
    "maxResultsPerSearch": 10,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/exportpages-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 = {
    "searchTerms": ["cnc machining"],
    "maxResultsPerSearch": 10,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/exportpages-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 '{
  "searchTerms": [
    "cnc machining"
  ],
  "maxResultsPerSearch": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rel8ble/exportpages-scraper --silent --output-dataset

```

## MCP server setup

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