# Messe Frankfurt Exhibitor Scraper: Automechanika, ISH Leads (`rel8ble/messe-frankfurt-exhibitors-scraper`) Actor

Use this to get trade fair exhibitor lists from Messe Frankfurt fairs worldwide: Automechanika, Ambiente, Heimtextil, Light + Building, ISH, Techtextil, SPS, Formnext, Intersec. One result = one exhibitor: company, e-mail, phone, website, address, hall and stand, categories. $1.80 per 1,000.

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

## Pricing

$1.80 / 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

## Messe Frankfurt Exhibitor Scraper - Automechanika, Ambiente, ISH & More, with E-mails

**Trade fair exhibitor list scraper** for sales teams, distributors, event marketers, sourcing agents and B2B lead-gen teams: pick a Messe Frankfurt fair such as **Automechanika**, **Ambiente**, **Heimtextil**, **Light + Building**, **ISH**, **Techtextil**, **IFFA**, **EUROBIKE**, **SPS**, **Formnext**, **Intersec** or **Automechanika Shanghai**, and get its **exhibitor list** as clean JSON, CSV or Excel. Each row is one exhibitor with its **company name, e-mail, phone, website, street address, country, hall and stand**, product categories, keywords, product names and social links. Use it as an **Automechanika exhibitor list** download, a **trade show lead list** builder, a pre-show **booth visit planner**, or an unofficial **exhibitor directory API** from your own code, Make, Zapier or n8n.

It works over plain HTTP, with **no browser and no login**. 100 exhibitors with contacts come from a single request, so 20 rows take a few seconds (6 seconds in the cloud demo) and the whole Automechanika Frankfurt list of 4,145 rows took 15 seconds in a local test. One input, `all`, searches **every Messe Frankfurt fair worldwide at once: about 54,000 exhibitor listings**.

### What you get

- **Contacts**: company name, **e-mail**, **phone**, fax, **website**, **street, postal code, city, country**, ISO country codes. Contact-person names are not collected.
- **At the fair**: event edition (`Automechanika Frankfurt 2026`), event dates, **hall and stand** (`Hall 11.1 / A57`), every stand of the exhibitor, fair programmes joined.
- **Company profile**: **product categories** from the fair catalogue with their parents, keywords, product names and count, company text, LinkedIn / Facebook / Instagram / YouTube / X / XING, logo.
- **IDs and links**: exhibitor ID, a **company ID that stays the same across fairs and editions**, public exhibitor page, date of the last profile update.

### Fairs covered

| Fair (input) | Industry | Exhibitors listed (November 2026) |
|---|---|---|
| `automechanika` | Automotive parts, workshops, aftermarket | 4,146 |
| `automechanika-shanghai` | Automotive parts, Asia | 7,188 |
| `automechanika-dubai`, `automechanika-kuala-lumpur`, `automechanika-birmingham` | Automotive parts, regional | 1,081 / 321 / 175 |
| `ambiente` | Tableware, household, gifts, interiors | 3,290 |
| `christmasworld`, `creativeworld` | Seasonal decoration, hobby and craft | 667 / 237 |
| `heimtextil` | Home and contract textiles | 2,301 |
| `techtextil`, `texprocess` | Technical textiles, sewing technology | 1,474 / 184 |
| `light-building` | Lighting, electrical, building automation | 1,883 |
| `ish` | Bathroom, heating, air conditioning, plumbing | 1,332 |
| `iffa` | Meat processing technology | 1,022 |
| `prolight-sound` | Event and audio technology | 361 |
| `eurobike` | Bicycles and e-bikes | 791 |
| `sps`, `formnext`, `pcim` | Industrial automation, additive manufacturing, power electronics (Mesago) | 1,175 / 793 / varies |
| `intersec` | Security and fire safety, Dubai | 465 |
| `guangzhou-lighting`, `prolight-sound-guangzhou` | Lighting and audio, China | 1,726 / 1,439 |
| `all` | Every Messe Frankfurt fair worldwide | about 54,000 |

Also by name: `intertextile-shanghai`, `yarn-expo`, `texworld-paris`, `apparel-sourcing-paris`, `beautyworld-dubai`, `music-china`, `toy-hobby-china`, `interior-lifestyle-tokyo`, `interpets`, `nordstil`, `automechanika-jakarta`, `automechanika-riyadh`, `automechanika-ho-chi-minh-city`, `automechanika-buenos-aires`. Any other fair works through its Messe Frankfurt event ID (for example `MOTOBIKEISTANBUL`), its website or its exhibitor-search page. Each fair shows its current or most recent edition.

### Sample output

Real rows from the cloud run with the default input (`automechanika`, 20 results, about 6 seconds):

| Company | Country | E-mail | Phone | Website | Hall / stand |
|---|---|---|---|---|---|
| 3RG Industrial Auto, S.L. | Spain | info@3rgindustrial.com | +34 925 54 59 16 | 3rgindustrial.com/en | Hall 6.1 / D49 |
| 4Automotive | Latvia | info@4automotive.eu | +371 67 139 227 | 4automotive.eu | Hall 12.0 / E75 |
| 4CR International GmbH & Co. KG | Germany | info@4cr.com | +49 40 696099312 | 4cr.com | Hall 11.1 / A57 |
| 31, Inc. | United States | info@31inc.com | +1 800-438-3302 | 31inc.com | Hall 9.0 / F56 |
| 247LIGHTING | Ireland | sales@247lighting.net | +353 90 967 3232 | 247lighting.net | Hall 4.1 / B65 |

Fill rates on those 20 rows: e-mail 95%, phone 85%, website 100%, street address 100%, hall / stand 100%, categories 100%.

Fill rates on the **whole Automechanika Frankfurt list** (4,145 rows): **e-mail 81%**, phone 71%, website 82%, street address 99%, hall / stand 99%, categories 83%, products 79%, company text 87%, LinkedIn 33%. Every exhibitor is returned, including those without a published e-mail; set `withEmailOnly` to keep only the ones that have one (filtered rows are not charged).

### Why this one

- **$1.80 per 1,000 exhibitors with e-mail, phone, website, address and stand included**, no start fee. On 5 Nov 2026 (Store FREE-tier prices) the Messe Frankfurt actors from other authors charged $3.00 to $4.39 per 1,000 (skython, 13 users in 30 days, $3.00-$5.00 + $0.01 per run; getascraper, 9 users, $4.39 + $0.00005 per run). Two more are named for Messe Frankfurt but their descriptions talk about Messe Düsseldorf: scrapestorm $2.99 and delectable_incubator $3.99, each + $0.00005 per run. The cheapest exhibitor actor we found for German fairs, sgforce, charges $2.00. Rivals' prices can change.
- **Fair names, not URLs**: `automechanika`, `ish`, `light-building`, or `all` for the whole Messe Frankfurt portfolio in one run.
- **Fast**: 100 complete rows per request, because the list already carries the contacts.
- **Search inside a fair**: a keyword such as `brake pads`, `LED` or `organic cotton` returns only the exhibitors the fair's own search matches.
- **Filters before you pay**: country and product category run on the fair's side; name and e-mail / phone / website present on ours. Filtered rows are never charged.
- **Join across fairs**: `companyId` stays the same when a company shows at Automechanika Frankfurt and Automechanika Dubai.

### Use cases

- **Pre-show outreach**: e-mail exhibitors before Automechanika or Light + Building to book meetings at their stand.
- **B2B lead generation**: build country- and category-specific lists (for example every German exhibitor in "Parts & Components").
- **Distributor and supplier search**: find brake pad makers at Automechanika Shanghai, or LED manufacturers at Guangzhou Lighting.
- **Competitor and market mapping**: who exhibits, from which countries, in which categories and halls.
- **Event marketing**: target exhibitors for stand services, logistics, translation or media offers.
- **AI agents**: an agent can call this actor with a fair name and read back exhibitor contacts (see the MCP note below).

### Example inputs for common jobs

First 20 Automechanika exhibitors with contacts (default):

```json
{ "fairs": ["automechanika"], "maxResultsPerFair": 20 }
```

Every German and Italian "Parts & Components" exhibitor at Automechanika, with an e-mail:

```json
{ "fairs": ["automechanika"], "maxResultsPerFair": 0, "countries": ["DE", "IT"], "categories": ["Parts & Components"], "withEmailOnly": true }
```

Brake pad makers across every Messe Frankfurt fair worldwide:

```json
{ "fairs": ["all"], "keyword": "brake pads", "maxResultsPerFair": 0 }
```

Whole exhibitor lists of three fairs:

```json
{ "fairs": ["ish", "light-building", "heimtextil"], "maxResultsPerFair": 0 }
```

Whole company texts and all product names, in German:

```json
{ "fairs": ["ish"], "includeDetails": true, "maxResultsPerFair": 50, "language": "de" }
```

One exhibitor by its page URL:

```json
{ "fairs": ["https://ambiente.messefrankfurt.com/frankfurt/en/exhibitor-search.detail.html/3d-dekoratif-esya-san-ve-tic-ltd-sti.html"] }
```

### How to use

1. Open the actor and enter one or more fair names, event IDs, `all`, fair websites or exhibitor page URLs in **Fairs**.
2. Set **Max exhibitors per fair** (default 20; 0 = the whole list).
3. Optionally add a keyword and filters: countries, product categories, name text, e-mail / phone / website present.
4. Click **Start**. Download the dataset as JSON, CSV, Excel or HTML, or read it through the API.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `fairs` | array | `["automechanika"]` | Fair names, event IDs, `all`, fair websites or exhibitor page URLs. |
| `maxResultsPerFair` | integer | 20 | Exhibitor rows per fair. 0 = all. |
| `keyword` | string | - | Only exhibitors the fair's search matches for this text. |
| `includeDetails` | boolean | false | One extra request per exhibitor for the whole company text and all product names. Same price, slower. |
| `language` | string | `en` | `en` or `de` for texts, categories and country names. |
| `countries` | array | - | Country names or ISO codes (`Germany`, `US`, `KOR`). Applied by the site. |
| `categories` | array | - | Catalogue categories of the fair. Exact name first, then "name contains". Not used with `all`. |
| `nameContains` | string | - | Only companies whose name contains this text. |
| `withEmailOnly` | boolean | false | Only exhibitors with an e-mail. |
| `withPhoneOnly` | boolean | false | Only exhibitors with a phone number. |
| `withWebsiteOnly` | boolean | false | Only exhibitors with a website. |
| `maxConcurrency` | integer | 20 | Parallel requests. |
| `maxRequestRetries` | integer | 6 | Retries per failed request. |
| `proxyConfiguration` | object | no proxy | The API answers directly; failed requests automatically retry through Apify Proxy. |

Inputs that are not fair names, event IDs or URLs are skipped and listed in the `RUN_SUMMARY` record; they are never charged. An unknown event ID or a missing exhibitor returns 0 rows at no charge.

### Output example

One real row (lists shortened):

```json
{
  "fair": "Automechanika Frankfurt",
  "event": "Automechanika Frankfurt 2026",
  "eventId": "AUTOMECHANIKA",
  "eventStart": "2026-09-08",
  "eventEnd": "2026-09-12",
  "companyName": "3RG Industrial Auto, S.L.",
  "email": "info@3rgindustrial.com",
  "phone": "+34 925 54 59 16",
  "fax": "+34 925 54 59 20",
  "website": "https://3rgindustrial.com/en/",
  "street": "Calle Feldespato 31/32",
  "postalCode": "45220",
  "city": "Yeles, Toledo",
  "country": "Spain",
  "countryCode": "ES",
  "countryIso3": "ESP",
  "hallStand": "Hall 6.1 / D49",
  "hall": "Hall 6.1",
  "stand": "D49",
  "locations": [
    {
      "hall": "Hall 6.1",
      "stand": "D49"
    }
  ],
  "categories": [
    "Parts & Components > Exhaust gas aftertreatment/exhaust gas cleaning (catalytic converters, particle filter, lambda probe) > Urea tanks",
    "Oils, lubricants & fuels > Additives (bio-based, hybrid and synthetic) > General additives"
  ],
  "keywords": [
    "DPF REGENERATION ADDITIVES (POUCHES, BOTTLES & REPAIR KITS)",
    "UREA/ ADBLUE SYSTEMS (TANKS, INJECTORS, CAPS & COMPONENTS)"
  ],
  "exhibitorPrograms": [
    "Classic Car Competence"
  ],
  "products": [
    "UREA SYSTEM",
    "DPF REGENERATION ADDITIVES"
  ],
  "productCount": 5,
  "description": "3RG Industrial is a Spanish family-owned company specializing in the manufacturing and distribution of automotive spare parts...",
  "linkedin": "https://es.linkedin.com/company/3rg-industrial",
  "facebook": "https://www.facebook.com/3rgindustrial/?locale=es_ES",
  "instagram": "https://www.instagram.com/3rgindustrial/",
  "youtube": "https://www.youtube.com/@3rgindustrial832",
  "twitter": null,
  "xing": null,
  "logoUrl": null,
  "exhibitorId": "mf_1_0011062250~mf_1_10000007202601_0011062250_500671",
  "companyId": "mf_1_0011062250",
  "profileUrl": "https://automechanika.messefrankfurt.com/frankfurt/en/exhibitor-search.detail.html/3rg-industrial-auto-sl.html",
  "detailsScraped": false,
  "lastUpdated": "2026-07-31T15:16:11",
  "position": 4,
  "scrapedAt": "2026-11-02T18:41:29.050Z"
}
```

The dataset has three table views in the Apify console: **Exhibitor leads** (company, contacts, stand), **Full contact card** (address and social links) and **Company profile** (categories, keywords, products, text). A `RUN_SUMMARY` record lists per-fair counts, pages read, filtered rows and stop reasons.

### Pricing

**$1.80 per 1,000 results** (pay per result). Apify platform usage is included in that price. Filtered rows, unknown fairs, missing exhibitors and failed requests are never charged, and there is no start fee.

| Run | Results | Cost |
|---|---|---|
| Default input (`automechanika`, 20 rows) | 20 | $0.04 |
| Whole ISH list | 1,332 | about $2.40 |
| Whole Automechanika Frankfurt list | 4,146 | about $7.46 |
| Every Messe Frankfurt listing (`all`) | about 54,000 | about $98 |

Apify's free plan ($5 of monthly credit) covers about 2,700 results.

### Integrations

Run it on an Apify schedule, through the Apify REST API, the JavaScript / Python clients, Make, Zapier, n8n, Google Sheets, or from AI agents via the Apify MCP server. Join runs on `companyId` to track which companies return each edition or show at several fairs.

### FAQ

**Which edition do I get?**
The one the fair currently lists: the upcoming edition once its exhibitor list is online, otherwise the most recent one. The `event` and `eventStart` fields say which.

**Does `all` give me unique companies?**
It gives one row per fair listing, so a company showing at three fairs appears three times. Deduplicate on `companyId` if you want each company once. `all` also includes a few older editions the search still lists.

**Why is the description cut off?**
List rows hold a short teaser ending in "...". Set `includeDetails` for the whole text and every product name. That is one more request per exhibitor at the same price.

**Where do the e-mails come from?**
They are the business contacts each exhibitor publishes in the fair's public catalogue. Contact-person names are not collected. Cold e-mail rules (GDPR, CAN-SPAM) still apply to how you use them.

**Why does a fair I know return 0 rows?**
It may have a different event ID, or no list online yet. Paste the URL of its exhibitor-search page: the actor reads the event ID from there.

**Is there an official exhibitor API?**
Messe Frankfurt offers the exhibitor search on its fair websites. This actor reads the same public search and returns it as JSON.

**For AI agents (MCP):** input is a list of fair names (e.g. `automechanika`, `ish`, `all`) plus optional keyword, country and category filters; output is one JSON row per exhibitor with e-mail, phone, website, address, hall and stand; typical cost is $0.04 for 20 rows; use it when you need companies exhibiting at a Messe Frankfurt trade fair.

This actor is not affiliated with Messe Frankfurt, Mesago or any fair. It reads the public exhibitor search that the fair websites offer to every visitor.

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

# Actor input Schema

## `fairs` (type: `array`):

Provide at least one. Fair names: automechanika, ambiente, christmasworld, creativeworld, heimtextil, techtextil, texprocess, light-building, ish, iffa, prolight-sound, eurobike, sps, formnext, pcim, intersec, automechanika-shanghai, automechanika-dubai and more. Any other Messe Frankfurt event id also works (e.g. MOTOBIKEISTANBUL). "all" = every Messe Frankfurt fair worldwide. Or a fair website, its exhibitor-search page URL, or one exhibitor page URL. Default \["automechanika"] (demo).

## `maxResultsPerFair` (type: `integer`):

Optional. Exhibitor rows saved per fair, integer >= 0. Default 20; 0 = the whole list (Automechanika Frankfurt has about 4,100; "all" about 54,000). You pay per row.

## `keyword` (type: `string`):

Optional. Only exhibitors matching this text in the fair search (company, products, categories), e.g. "brake pads", "LED", "organic cotton". Empty = every exhibitor.

## `includeDetails` (type: `boolean`):

Default false: rows already hold e-mail, phone, website, address, stand, categories, social links, a text teaser and the first products, 100 exhibitors per request. true: one extra request per exhibitor adds the whole company text and all product names (same price, slower).

## `language` (type: `string`):

Optional. Language of descriptions, categories and country names. Default en.

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

Optional. Keep only exhibitors from these countries: names ("Germany", "United States", "South Korea") or ISO codes ("DE", "US", "KOR"). Applied by the fair site, so narrow lists are fast. Empty = all countries.

## `categories` (type: `array`):

Optional. Keep only exhibitors in these catalogue categories of the fair, e.g. "Parts & Components" at Automechanika. Exact name first, then "name contains". Unknown names are warned about and the top categories logged. Not used with "all". Empty = all.

## `nameContains` (type: `string`):

Optional. Keep only companies whose name contains this text, e.g. "GmbH".

## `withEmailOnly` (type: `boolean`):

Optional. Skip exhibitors without a published e-mail. Default false.

## `withPhoneOnly` (type: `boolean`):

Optional. Skip exhibitors without a phone number. Default false.

## `withWebsiteOnly` (type: `boolean`):

Optional. Skip exhibitors without a website. Default false.

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

Optional, advanced. Parallel requests, 1-30. Default 20.

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

Optional, advanced. Retries per failed request (each on a new proxy session), 0-20. Default 6.

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

Optional, advanced. Default: no proxy, with automatic Apify datacenter / residential proxy fallback for any request that fails. Set {"useApifyProxy": true} to force a proxy on every request.

## Actor input object example

```json
{
  "fairs": [
    "automechanika"
  ],
  "maxResultsPerFair": 20,
  "includeDetails": false,
  "language": "en",
  "withEmailOnly": false,
  "withPhoneOnly": false,
  "withWebsiteOnly": false,
  "maxConcurrency": 20,
  "maxRequestRetries": 6,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per exhibitor: company, e-mail, phone, website, address, hall and stand, categories, products.

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

Per-fair counts, pages read, filtered rows, ignored inputs and stop reasons.

# 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 = {
    "fairs": [
        "automechanika"
    ],
    "maxResultsPerFair": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/messe-frankfurt-exhibitors-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 = {
    "fairs": ["automechanika"],
    "maxResultsPerFair": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/messe-frankfurt-exhibitors-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 '{
  "fairs": [
    "automechanika"
  ],
  "maxResultsPerFair": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rel8ble/messe-frankfurt-exhibitors-scraper --silent --output-dataset

```

## MCP server setup

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