# EasyFairs Exhibitor Scraper: Event Leads as JSON (`getascraper/easyfairs-exhibitor-directory-scraper`) Actor

Scrape public EasyFairs event directories. Filter exhibitors by event, country, product category, hall, or stand, enrich published profiles, and export source-linked company records as flat or exploded JSON.

- **URL**: https://apify.com/getascraper/easyfairs-exhibitor-directory-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.92 / 1,000 exhibitor records

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

## 🏢 EasyFairs Exhibitor Scraper: Event Leads as JSON

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:24px 28px;background:#FFF1E8;border:1px solid #F4C5AA;border-top:4px solid #C45118;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Turn a public EasyFairs exhibitor directory into source-linked company records</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Start with one event directory to collect published exhibitor profiles, stands, categories, products, and business links for focused event research.</span>
</td>
</tr>
</table>

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F4C5AA;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#943A10">🧭 Public event focus</span><br>
<span style="font-size:12px;color:#57534E">Research one event directory at a time with its public listings as the source.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F4C5AA;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#943A10">🎯 Focused filters</span><br>
<span style="font-size:12px;color:#57534E">Narrow exhibitors by keyword, event, country, category, hall, or stand.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F4C5AA;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#943A10">📦 Useful detail</span><br>
<span style="font-size:12px;color:#57534E">Collect published profile, product, contact, and business-link fields when available.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F4C5AA;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#943A10">🧾 Clear provenance</span><br>
<span style="font-size:12px;color:#57534E">Keep the event and profile links that support every saved record.</span>
</td>
</tr>
</table>

Use the public exhibitor information that event organizers publish. The Actor saves only fields available in the selected directory and leaves unpublished values out.

### 🔍 What does EasyFairs exhibitor directory scraper do?

EasyFairs exhibitor directory scraper collects public exhibitor records from one EasyFairs event directory. Start with a directory URL, then select the companies that matter to your event research.

Filter by company or keyword, published event label, country, product category, hall, or stand. You can collect richer public profile details, keep a flat exhibitor list, or create separate stand, category, product, and contact rows.

Each record keeps the original event and profile links. This makes it easier to review, join, and revisit the public information behind your list.

### 💡 Why use EasyFairs exhibitor directory scraper?

- **I am an event researcher** looking to map exhibitors, stands, and categories before comparing events or planning meetings.
- **I am on a sales team** looking to create a focused company list from an event, then narrow it by country, category, hall, or stand.
- **I am a lead-generation operator** looking to turn published exhibitor profiles into source-linked business records without copying listings by hand.
- **I am on a data team** looking to deliver a repeatable event dataset with clear event, profile, and collection references.

### 🚀 How to use it

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#FFF1E8;border:1px solid #F4C5AA;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#C45118;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Paste a public directory URL</span><br>
<span style="font-size:12px;color:#57534E">Use the EasyFairs exhibitor directory for the event you want to research.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFF1E8;border:1px solid #F4C5AA;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#C45118;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Set your scope</span><br>
<span style="font-size:12px;color:#57534E">Apply filters, choose profile details, and set the number of parent exhibitors.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFF1E8;border:1px solid #F4C5AA;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#C45118;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Review the results</span><br>
<span style="font-size:12px;color:#57534E">Download the exhibitor records and use their public links for follow-up research.</span>
</td>
</tr>
</table>

Start with a small exhibitor limit when you want to check an event's published fields before collecting a larger set.

### 📥 Input

| Field                 | Type             | Required | Description                                                                                                                               |
| --------------------- | ---------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrl`            | string           | No       | Public EasyFairs exhibitor directory URL for one event. It uses the supplied Berlin automation directory by default.                      |
| `searchQuery`         | string           | No       | Keeps exhibitors whose published company name, description, category, or product matches your terms. It combines with every other filter. |
| `eventNames`          | array of strings | No       | Keeps exhibitors matching every selected published event label. Leave empty to include all labels.                                        |
| `countries`           | array of strings | No       | Keeps exhibitors matching every selected published country label. Leave empty to include all countries.                                   |
| `productCategories`   | array of strings | No       | Keeps exhibitors matching every selected published product category. Leave empty to include all categories.                               |
| `hallOrStand`         | string           | No       | Keeps exhibitors whose published hall or stand contains your terms. Leave empty to include all locations.                                 |
| `allowPartialResults` | boolean          | No       | Keeps a directory record when an individual public profile is unavailable. Defaults to enabled.                                           |
| `fetchDetails`        | boolean          | No       | Collects richer public profile fields such as address, website, images, and products. Defaults to enabled.                                |
| `outputFormat`        | enum             | No       | Choose flat rows for parent exhibitors, or exploded rows that add stand, category, product, and contact records. Defaults to flat.        |
| `maxItems`            | integer          | No       | Maximum number of parent exhibitors to process. Defaults to 10. Set 0 only when you intentionally want no limit.                          |
| `maxConcurrency`      | integer          | No       | Number of profile details collected at once. Choose from 1 to 2. The default is 1.                                                        |
| `proxyConfiguration`  | object           | No       | Optional proxy settings for public directory requests. The included configuration is used by default.                                     |

### 📦 Output

Each dataset row represents public exhibitor information. With a positive `maxItems`, flat output saves one row per parent exhibitor and never saves more rows than that limit. Exploded output also saves linked stand, category, product, and contact rows when those public values exist; its dataset row count can therefore exceed `maxItems`, while the number of parent exhibitors never does. Set `maxItems` to `0` only for an unlimited run.

Fields appear only when the selected directory publishes them. The `detailStatus` field shows whether profile details were collected, skipped, or unavailable.

### 📊 Data table

| Field                | Type             | Description                                                                       |
| -------------------- | ---------------- | --------------------------------------------------------------------------------- |
| `recordType`         | enum             | Identifies an exhibitor, stand, category, product, or contact row.                |
| `platform`           | enum             | Source platform identifier: `easyfairs`.                                          |
| `eventId`            | string           | Published event identifier, when available.                                       |
| `eventName`          | string           | Published event name.                                                             |
| `eventEdition`       | string           | Published event edition or year.                                                  |
| `eventUrl`           | string           | EasyFairs directory URL used for the run.                                         |
| `sourceUrl`          | string           | Public page that supplied the record.                                             |
| `scrapedAt`          | string           | Time when the record was collected.                                               |
| `exhibitorId`        | string           | Published exhibitor identifier.                                                   |
| `parentExhibitorId`  | string           | Parent exhibitor identifier for an exploded child row.                            |
| `companyName`        | string           | Published exhibitor or company name.                                              |
| `profileUrl`         | string           | Published exhibitor profile link.                                                 |
| `companyDescription` | string           | Published exhibitor or company description.                                       |
| `logoUrl`            | string           | Published exhibitor logo link.                                                    |
| `headerImageUrl`     | string           | Published exhibitor header-image link.                                            |
| `address`            | object           | Published city, postal code, and country details.                                 |
| `country`            | string           | Published exhibitor country.                                                      |
| `hall`               | string           | Published hall for an exploded stand row.                                         |
| `booth`              | string           | Published primary booth or stand value.                                           |
| `stands`             | array of objects | Published hall, booth, and original location values.                              |
| `website`            | string           | Published company website link.                                                   |
| `email`              | string           | Published business email address.                                                 |
| `phone`              | string           | Published business phone number.                                                  |
| `socialLinks`        | object           | Published Facebook, Instagram, LinkedIn, and X links.                             |
| `contacts`           | array of objects | Published contact names, roles, email addresses, and phone numbers.               |
| `categories`         | array of strings | Published exhibitor categories.                                                   |
| `categoryPaths`      | array of arrays  | Published category paths.                                                         |
| `products`           | array of objects | Published product names, descriptions, images, and links.                         |
| `brands`             | array of strings | Published brand names.                                                            |
| `detailStatus`       | enum             | Shows whether public profile details were fetched, not requested, or unavailable. |
| `stand`              | object           | Published hall, booth, and original location for an exploded stand row.           |
| `category`           | string           | Published category for an exploded category row.                                  |
| `product`            | object           | Published product details for an exploded product row.                            |
| `contact`            | object           | Published contact details for an exploded contact row.                            |

### 💰 Pricing

Pricing is pay per result. You are charged only for records saved to your dataset. Empty runs cost nothing, and there are no subscriptions.

### ⭐ Enjoying EasyFairs exhibitor directory scraper?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#FFF1E8;border:1px solid #F4C5AA;border-left:5px solid #C45118;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px;color:#1C1917">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Made a public event directory easier to research and use?</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other event researchers, sales teams, and data teams find it. Your feedback guides future improvements.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#C45118;border:1px solid #F4C5AA;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/easyfairs-exhibitor-directory-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

##### Which EasyFairs directories can I use?

Use a public EasyFairs exhibitor directory URL. The Actor processes one event per run and returns only the fields that directory currently publishes.

##### Does it collect private contact information?

No. It collects only business contact details and profile fields published in the directory. Missing values are left out rather than guessed.

##### How current are EasyFairs exhibitor records?

Each run reads the selected public directory at run time. Run it again when you need the latest published exhibitor list, stand, or category information.

##### What happens if a public profile is unavailable?

With Allow Partial Results enabled, the Actor keeps the directory record when an individual profile cannot be read. Turn it off when you prefer the run to stop instead.

### 🔗 Other actors

- [🏢 a2z Events exhibitor directory scraper: contacts, booths & categories](https://apify.com/getascraper/a2z-events-exhibitor-directory-scraper) ↗ - Collects published exhibitor contacts, booths, and categories from a2z Events directories.
- [🏢 Map Your Show exhibitor directory scraper: all US expos](https://apify.com/getascraper/map-your-show-exhibitor-directory-scraper) ↗ - Collects public exhibitor records from Map Your Show event directories.
- [🏢 Reed Expo exhibitor directory scraper: compatible RX Global fairs](https://apify.com/getascraper/reed-expo-exhibitor-directory-scraper) ↗ - Collects exhibitor directory data from compatible RX Global fairs.
- [🏢 Ungerboeck exhibitor directory scraper](https://apify.com/getascraper/ungerboeck-exhibitor-directory-scraper) ↗ - Collects published exhibitor listings from Ungerboeck-powered events.
- [🏢 Messe Düsseldorf exhibitor directory scraper: 5 fairs, full contacts](https://apify.com/getascraper/messe-duesseldorf-exhibitor-directory-scraper) ↗ - Collects exhibitor data from supported Messe Düsseldorf fairs.

# Actor input Schema

## `startUrl` (type: `string`):

One public EasyFairs exhibitor directory URL. The verified All About Automation Berlin directory is prefilled.

## `searchQuery` (type: `string`):

Matches company names, public descriptions, categories, or products. Combines with all other filters.

## `eventNames` (type: `array`):

Published event facet labels. Every selected label must match the exhibitor record.

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

Published country facet labels. Every selected label must match the exhibitor record.

## `productCategories` (type: `array`):

Published category facet labels. Every selected label must appear in the exhibitor categories.

## `hallOrStand` (type: `string`):

Matches the published stand number when the selected directory exposes one.

## `allowPartialResults` (type: `boolean`):

Keep list records when an individual public profile request fails.

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

Read each public profile state for richer address, website, image, and product data.

## `outputFormat` (type: `string`):

Flat emits one row per exhibitor. Exploded emits the parent plus stand, category, product, and contact rows.

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

Maximum unique parent exhibitors before detail enrichment and exploded child rows. Flat output has at most this many rows; exploded output can have more child rows. Set 0 only to explicitly opt into an unlimited run.

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

Concurrent detail workers. Requests remain crawl-delay paced; 1 is recommended.

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

Optional Apify Proxy configuration for direct public HTTP requests.

## Actor input object example

```json
{
  "startUrl": "https://www.berlin.allaboutautomation.de/en/exhibitors/",
  "searchQuery": "",
  "eventNames": [],
  "countries": [],
  "productCategories": [],
  "hallOrStand": "",
  "allowPartialResults": true,
  "fetchDetails": true,
  "outputFormat": "flat",
  "maxItems": 10,
  "maxConcurrency": 1,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `runStats` (type: `string`):

No description

# 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 = {
    "startUrl": "https://www.berlin.allaboutautomation.de/en/exhibitors/",
    "searchQuery": "",
    "eventNames": [],
    "countries": [],
    "productCategories": [],
    "hallOrStand": "",
    "allowPartialResults": true,
    "fetchDetails": true,
    "outputFormat": "flat",
    "maxItems": 10,
    "maxConcurrency": 1,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/easyfairs-exhibitor-directory-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 = {
    "startUrl": "https://www.berlin.allaboutautomation.de/en/exhibitors/",
    "searchQuery": "",
    "eventNames": [],
    "countries": [],
    "productCategories": [],
    "hallOrStand": "",
    "allowPartialResults": True,
    "fetchDetails": True,
    "outputFormat": "flat",
    "maxItems": 10,
    "maxConcurrency": 1,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/easyfairs-exhibitor-directory-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 '{
  "startUrl": "https://www.berlin.allaboutautomation.de/en/exhibitors/",
  "searchQuery": "",
  "eventNames": [],
  "countries": [],
  "productCategories": [],
  "hallOrStand": "",
  "allowPartialResults": true,
  "fetchDetails": true,
  "outputFormat": "flat",
  "maxItems": 10,
  "maxConcurrency": 1,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/easyfairs-exhibitor-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/easyfairs-exhibitor-directory-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/H3ODSzRprvSpSgt9t/builds/zRbgqYkY5dGsx423T/openapi.json
