# Map Your Show Exhibitor List Scraper (`tacps126/map-your-show-exhibitor-scraper`) Actor

Exhibitor lists from Map Your Show trade shows (SEMA Show, NAB Show, IMTS...) or any Map Your Show show by URL: company, booth, email, phone, website, address.

- **URL**: https://apify.com/tacps126/map-your-show-exhibitor-scraper.md
- **Developed by:** [Tapaswai Choudhary](https://apify.com/tacps126) (community)
- **Categories:** Lead generation, Marketing
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 exhibitors

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

## Map Your Show Exhibitor List Scraper

Get the **exhibitor list of any Map Your Show trade show** as a clean, spreadsheet-ready lead list: company name, booth and hall, email, phone, website, full address, social profiles, product categories, description and logo. Covers **SEMA Show, NAB Show, IMTS, AHR Expo, IPPE, HIMSS, InfoComm, GSX and hundreds more US shows**. Paste the exhibitor-list link of **any `<show>.mapyourshow.com` exhibitor gallery** and get that exact show and year.

**Built for** sales and business-development teams prospecting before and after a show, exhibitors researching who else is exhibiting, event marketers and agencies, and market researchers mapping an industry.

**At a glance**

- **Price:** $3 per 1,000 exhibitors. Free plan: up to 200 exhibitors per show in every run.
- **First run:** the prefilled input returns 50 exhibitors of SEMA Show 2026 (Las Vegas, USA) - Automotive Aftermarket in seconds.
- **Other platforms:** shows on Messe Frankfurt, Messe Düsseldorf, RX, Map Your Show, a2z, Koelnmesse, NürnbergMesse, Swapcard, ExpoPlatform and more in one run: [Exhibition Scraper](https://apify.com/tacps126/exhibition-scraper) (90+ built-in shows).

### Why this scraper

- **Contacts, not just names.** With *Include contact details* on (default), each exhibitor's profile is opened for email, phone, website, address and social links, where the organiser publishes them.
- **Any Map Your Show show by link.** The Actor reads the event from the page you give it, so a site that hosts several shows, cities or years never mixes them up.
- **One format for every show.** Booth, contact, address and socials always land in the same fields, so several shows combine into one table.
- **Watch a list fill up.** Exhibitor lists grow for months before a show. Turn on *Only new exhibitors* and schedule the Actor: each run returns only companies added since the last run.

### Built-in Map Your Show shows

| Show | Where | Industry | Official exhibitor list | Id |
|------|-------|----------|-------------------------|----|
| AAOS Annual Meeting 2027 | USA | Orthopaedics | [aaos27.mapyourshow.com](https://aaos27.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm) | `aaos` |
| AHR Expo 2027 | USA | HVACR | [ahr27.mapyourshow.com](https://ahr27.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm) | `ahr-expo` |
| AIA Conference on Architecture 2027 | USA | Architecture & Design | [aia27.mapyourshow.com](https://aia27.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm) | `aia-conference` |
| GSX 2027 | USA | Security | [gsx27.mapyourshow.com](https://gsx27.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm) | `gsx` |
| HIMSS Global Health Conference 2027 | USA | Health IT | [himss27.mapyourshow.com](https://himss27.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm) | `himss` |
| IMTS 2026 | Chicago, USA | Manufacturing Technology | [directory.imts.com](https://directory.imts.com/8_0/explore/exhibitor-gallery.cfm) | `imts` |
| InfoComm 2027 | USA | Pro AV | [infocomm27.mapyourshow.com](https://infocomm27.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm) | `infocomm` |
| IPPE 2027 | Atlanta, USA | Poultry, Meat & Feed | [ippe27.mapyourshow.com](https://ippe27.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm) | `ippe` |
| NAB Show 2027 | Las Vegas, USA | Broadcast, Media & Entertainment Tech | [nab27.mapyourshow.com](https://nab27.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm) | `nab-show` |
| NACS Show 2026 | USA | Convenience Retail | [nacs26.mapyourshow.com](https://nacs26.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm) | `nacs-show` |
| SEMA Show 2026 | Las Vegas, USA | Automotive Aftermarket | [sema26.mapyourshow.com](https://sema26.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm) | `sema-show` |

### Any Map Your Show show by URL

Paste a link in **Exhibitor list URLs**: any `<show>.mapyourshow.com` exhibitor gallery. The run log says what each link was matched to, and every record carries the link in `exhibitionUrl`. Turn on **Only check the links (free)** to see whether a link is supported without scraping anything.

```json
{
  "startUrls": [{ "url": "https://nab26.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm" }],
  "maxResults": 500
}
```

A link from another platform is skipped with a note (and not charged); [Exhibition Scraper](https://apify.com/tacps126/exhibition-scraper) reads it.

### How to use it

1. Pick one or more shows in **Exhibitions**, or paste links in **Exhibitor list URLs** (both work together).
2. Optionally set **Max exhibitors** (try 20 first) and turn **Include contact details** off for a quick names-and-booths list.
3. Press **Start**. Download results from the **Output** tab, or connect an integration (Google Sheets, HubSpot, Slack, webhooks).

### What you get

| Field | Description |
|-------|-------------|
| `name` | Company name |
| `exhibition` | Show id (e.g. `medica`, or `messefrankfurt-cleanzone` for a show added by URL) |
| `exhibitionUrl` | The official exhibitor list the record comes from |
| `booth` | Hall and stand, e.g. `Hall 16 / D10` |
| `contact` | `{email, phone, website}` |
| `address` | `{street, postalCode, city, country, full}` |
| `social` | LinkedIn, Facebook, X, Instagram, YouTube... when published |
| `categories` | Product categories the exhibitor chose |
| `description`, `logo` | Company description (plain text) and logo |
| `metadata`, `source` | Organiser's exhibitor id, hall/stand parts, profile link (`profileUrl`, where the platform has public profiles) |

Example (shortened):

```json
{
  "name": "ABG International",
  "exhibition": "drupa",
  "exhibitionUrl": "https://www.drupa.com/vis/v1/en/directory",
  "booth": "Hall 16 / D10",
  "contact": {
    "email": "Salesinfo@abgint.com",
    "phone": "+44 1262 671138",
    "website": "http://www.abgint.com"
  },
  "address": {
    "street": "Lancaster Rd, Carnaby Industrial Estate",
    "postalCode": "YO15 3QY",
    "city": "Bridlington, East Yorkshire",
    "country": "United Kingdom"
  },
  "description": "Established in 1954, we are a leader in digital finishing equipment..."
}
```

Coverage depends on what each organiser publishes: nearly all exhibitors have name and booth. Email and phone are usually included for Messe Frankfurt, Messe Düsseldorf, RX and INTERNORGA shows; A2Z Connect shows add phone and street address. Map Your Show profiles give street address, website and social links (no email), and World Health Expo gives websites and descriptions. Where no email is published, chain the results into Website Contact Details (below) to find it.

### Contact details

Map Your Show lists only names and booths on its exhibitor pages; profile details sit one level deeper. With **Include contact details** on (the default), the Actor collects them inside your run:

1. Exhibitors are written straight into **your run's dataset**, so you still get one dataset.
2. You're billed once per exhibitor at the normal price, plus a small start fee for a second `map-your-show-exhibitor-scraper` run you may see in your Runs list. It stops when your run stops.

Turn **Include contact details** off for a faster names-and-booths-only list.

### Emails for every exhibitor

Many organisers list a company's website but not its email (Koelnmesse keeps it behind a login; Map Your Show, Newfront and NürnbergMesse often leave it out). Turn on **Find emails on company websites** and, for each exhibitor with a website but no email, the Actor reads the company's own site (home, contact and imprint pages) and adds the email, phone and social profiles it finds, marked `contactSource: "company website"`. In a BIOFACH test, 11 of 20 exhibitors without an email got one. No extra charge; runs take longer.

### Track changes before a show

Turn on **Changes only** and schedule the Actor (for example weekly in the months before a show). Each run returns only:

- **new** exhibitors (`changeType: "new"`),
- exhibitors whose **booth, email, phone, website or address changed**, with the old and new values: `"changes": {"booth": {"old": "B12", "new": "C40"}}`,
- exhibitors who **dropped out** of the list (`changeType: "removed"`; only when the whole list was read, so leave *Max results* empty).

Unchanged exhibitors are skipped and not charged. The first run returns everyone as new and becomes the baseline.

### Pricing

Pay per result: about **$3 per 1,000 exhibitors**, a fraction of a cent each. On Apify's free plan each run returns up to 200 exhibitors per exhibition, enough to evaluate; any paid Apify plan removes the limit.

### Legal

The Actor collects publicly listed exhibitor information. Contact details are business contacts published for the show; use them in line with GDPR, CAN-SPAM and other laws that apply to you.

### Support

Found a problem or want a show added? Open an issue on the **Issues** tab with the show's exhibitor-list link.

**Saved you time?** A short review on this page helps other people find the Actor, and tells us what to improve.

# Actor input Schema

## `exhibitionList` (type: `array`):

Pick one or more built-in shows. The README lists every show with a link to its official exhibitor list. Combined with *Exhibition (single)* and *Exhibitor list URLs* if you fill those too.

## `exhibitions` (type: `string`):

One built-in show. To pick several, use **Exhibitions** below; both can be used together. Kept for saved tasks and integrations.

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

Paste the link to any `<show>.mapyourshow.com` exhibitor gallery. The Actor reads the event from that page, so you get exactly the show and year the page shows. Shows on other platforms: use Exhibition Scraper (tacps126/exhibition-scraper). Example: https://nab26.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm

## `checkUrlsOnly` (type: `boolean`):

Don't scrape: just report, for each link, whether it is supported and which show and edition it maps to. The answer is in the run's key-value store under URL_CHECK, and nothing is charged.

## `maxResults` (type: `integer`):

Maximum number of exhibitors per exhibition. Leave empty for all.

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

Open each exhibitor's profile for emails, phones, address and social links. Turn off for a faster list of names and booths only.

## `findEmails` (type: `boolean`):

For exhibitors that have a website but no email in the show's list, visit the company's own website (home, contact and imprint pages) and add the email, phone and social profiles found there (`contactSource: "company website"`). No extra charge; runs take longer.

## `includeRawData` (type: `boolean`):

Also return each exhibitor's record exactly as the organiser's directory sent it, in `raw`, next to the clean fields. Useful for fields we don't map (product groups, brands, keywords, contact persons) and for custom n8n / Make / Zapier workflows. Adds about 5-10 KB per exhibitor; for shows over about 3,000 exhibitors set memory to 512 MB.

## `incrementalScrape` (type: `boolean`):

Return only exhibitors no earlier run with the same input delivered. Ideal for watching a show's list fill up before the event.

## `changesOnly` (type: `boolean`):

Return only exhibitors that are new, changed or gone since the last run with the same shows (or monitor name). Changed exhibitors carry `changeType: "changed"` and `changes` with the old and new booth, email, phone, website or address; exhibitors who dropped out come as `changeType: "removed"` (only when the whole list was read, i.e. without *Max results*). Schedule it weekly before a show to catch new exhibitors and booth moves. The first run returns everyone as new.

## `monitorName` (type: `string`):

Optional name for the "only new" history, so several monitors can run side by side.

## `delivery` (type: `object`):

Webhook: {"webhookUrl": "https://...", "format": "json" | "slack" | "discord", "onlyWhenResults": true, "includeItems": 10}. Google Sheets: {"spreadsheetId": "<id from the sheet URL>", "sheetName": "Sheet1"} plus the service account key below; share the sheet with the service account's e-mail first. Leave empty to only save results in the dataset.

## `googleServiceAccountJson` (type: `string`):

Only for Google Sheets delivery: paste the service account's JSON key. Stored encrypted; the account sees only sheets you share with it.

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

Not needed for most exhibitions.

## `debug` (type: `boolean`):

Save extra diagnostics with the run.

## `workerOutput` (type: `string`):

Set automatically when this Actor starts its own helper run. Leave empty.

## `budgetItems` (type: `integer`):

Set automatically for the helper run. Leave empty.

## Actor input object example

```json
{
  "exhibitions": "sema-show",
  "startUrls": [
    {
      "url": "https://nab26.mapyourshow.com/8_0/explore/exhibitor-gallery.cfm"
    }
  ],
  "checkUrlsOnly": false,
  "maxResults": 50,
  "includeDetails": true,
  "findEmails": false,
  "includeRawData": false,
  "incrementalScrape": false,
  "changesOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "debug": false
}
```

# Actor output Schema

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

The produced items (default dataset items).

# 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 = {
    "exhibitions": "sema-show",
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("tacps126/map-your-show-exhibitor-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 = {
    "exhibitions": "sema-show",
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("tacps126/map-your-show-exhibitor-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 '{
  "exhibitions": "sema-show",
  "maxResults": 50
}' |
apify call tacps126/map-your-show-exhibitor-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tacps126/map-your-show-exhibitor-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/RQfxgdeZG3OAuOq1L/builds/PhLa9pvyIVaiiMTVL/openapi.json
