# A2Z Events Exhibitor Scraper | CEDIA, FABTECH, Coverings (`springlike_meadowland/a2z-exhibitor-list-scraper`) Actor

Export A2Z / Personify exhibitor names, booths and source links to CSV, Excel or JSON. Build event research sheets and booth-visit lists from CEDIA, FABTECH and Coverings directories. Up to 2,000 rows per directory; process up to 10 directories per run.

- **URL**: https://apify.com/springlike\_meadowland/a2z-exhibitor-list-scraper.md
- **Developed by:** [Akshay Aggarwal](https://apify.com/springlike_meadowland) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $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

## A2Z Events Exhibitor List Scraper

Turn an A2Z / Personify event directory into a spreadsheet for exhibitor research and booth-visit planning. Get **company names, booth labels and source links**, ready to export to **CSV, Excel or JSON**.

Use public directories such as **CEDIA Expo, FABTECH and Coverings**. Process up to **10 directories per run**, with up to **2,000 rows per directory**. Start with a directory URL; event homepages are not supported.

### What you get

- **An exhibitor table:** company names and booth labels, with source links for verification.
- **Profile links when available:** open the public A2Z exhibitor page from your results.
- **Directory coverage:** see the source row count, saved count and whether a result was complete or limited.
- **Reusable exports:** build a research sheet, plan booth visits or combine your own event lists.

Each row represents a source booth entry, not necessarily a unique company. A company with separate booth entries can appear more than once. Company websites, emails and phone numbers are not extracted.

### Get your first list

1. Keep the supplied CEDIA example, or paste a public A2Z directory URL from the examples below.
2. Choose **Maximum rows per directory**. The default of **25** produces a small first-run sample; increase it up to **2,000** for a larger list.
3. Set your maximum run charge and start the Actor.
4. Open **Exhibitors** to browse the table. Use the dataset's **Export** option to download CSV, Excel or JSON.
5. Open **Directory coverage** to check the source total and saved count before treating a list as complete.

```json
{
  "directoryUrls": ["https://cedia.a2zinc.net/CEDIA2026/Public/EventMap.aspx?thumbnail=1"],
  "maxExhibitors": 25
}
```

### Example results

These rows come from a CEDIA 2026 run and were checked against the public directory.

| Company | Booth | Source |
|---|---|---|
| 2N, An Axis company | C1014 | [CEDIA directory](https://cedia.a2zinc.net/CEDIA2026/Public/EventMap.aspx?thumbnail=1) |
| 3B Scientific | 3542 | [CEDIA directory](https://cedia.a2zinc.net/CEDIA2026/Public/EventMap.aspx?thumbnail=1) |
| ABBA Lighting | 1138 | [CEDIA directory](https://cedia.a2zinc.net/CEDIA2026/Public/EventMap.aspx?thumbnail=1) |

The exported table also includes each row's booth ID, directory URL, source URL and available exhibitor profile URL. Repeated runs produce separate datasets; this Actor does not compare changes between runs.

### Example directories

| Show | Public directory |
|---|---|
| CEDIA Expo 2026 | [Open directory](https://cedia.a2zinc.net/CEDIA2026/Public/EventMap.aspx?thumbnail=1) |
| FABTECH 2026 | [Open directory](https://s36.a2zinc.net/clients/SME/FABTECH2026/Public/Exhibitors.aspx) |
| Coverings 2026 | [Open directory](https://expo.coverings.com/Cov2026/Public/eventmap.aspx) |

A hosted CEDIA run returned all **327 source rows**, each matched to the saved public directory. Five-row hosted samples from FABTECH and Coverings also matched their sources. Source contents can change.

### Pricing

**$2 per 1,000 saved rows**, plus **$0.00005 per run start** at up to 1 GiB memory. Platform usage is included. Check the Store pricing panel for the effective price for your account.

| Saved rows in one run | Total at this configuration |
|---|---|
| 25 | $0.05005 |
| 327 | $0.65405 |
| 1,000 | $2.00005 |

You pay per saved row; there is no need to buy 1,000 rows. A row with multiple booth labels is still one result. Separate source booth entries are separate results.

Saved rows remain billable if a later directory fails. The Actor honors the run's spending limit and skips remaining directories when that limit is reached. Failed or unsupported pages produce no result-row charges; the start charge can still apply.

### Supported inputs and coverage

- Supply **1–10 public HTTPS directory URLs** ending in `/Public/EventMap.aspx` or `/Public/Exhibitors.aspx` (case-insensitive). Query parameters are allowed. Use the exhibitor directory, not the show's homepage.
- Supported pages contain A2Z's public exhibitor table. Other page layouts, directories that load rows only through JavaScript, login-protected pages and anti-bot challenges are not supported.
- Choose **1–2,000 rows per directory**. A complete result means all distinct booth entries found in that page's supported table were saved. It is not a guarantee that the organizer has listed every exhibitor.
- Entries must contain a company name and booth label. Repeated booth IDs are removed within each directory; when no booth ID is present, the name-and-booth pair is used. The same company may appear across directories.
- Profile links are included when the source points to an A2Z profile. Otherwise `exhibitor_url` is empty; the source directory link is retained.
- Requests have a 90-second soft time budget across the run. A source error or a platform timeout can leave partial results; inspect the dataset and coverage summary.

### Output fields

| Field | Meaning |
|---|---|
| `company_name` | Exhibitor name from the source table |
| `booths` | Array of source booth labels |
| `booth_id` | Source booth ID, when available |
| `directory_url` | Resolved public directory URL |
| `exhibitor_url` | Public A2Z profile link, or an empty string |
| `source_url` | Directory page containing the row |

#### Directory coverage

The **Directory coverage** link opens the run's `OUTPUT` summary. Each directory reports `source_total`, `records_returned` and a status:

| Status | Meaning |
|---|---|
| `complete` | Every distinct booth entry found in the supported table was saved |
| `limited` | The chosen row maximum or spending limit restricted output |
| `error` | The source could not be fetched or its supported table could not be read |

A directory error makes the run fail after processing other eligible directories; already saved rows remain available. A spending-limit stop lists remaining URLs under `unprocessed_directory_urls`. A platform abort or timeout can prevent the summary from being saved.

### Help with a directory

Check that your URL opens the public exhibitor list and ends in one of the supported page names. If the source returns HTTP 403, it denied access; this Actor does not bypass that restriction.

For support, open an issue on this Actor's **Issues** tab with the public directory URL, run ID and expected result. Please leave out credentials or private information.

This is an independent tool, not affiliated with A2Z, Personify or the event organizers.

# Actor input Schema

## `directoryUrls` (type: `array`):

1 to 10 public HTTPS A2Z EventMap.aspx or Exhibitors.aspx pages. Start with a directory URL, not an event homepage.

## `maxExhibitors` (type: `integer`):

Start with 25 rows for a small sample, or increase up to 2,000. A row is a source booth entry; one company can have several entries.

## Actor input object example

```json
{
  "directoryUrls": [
    "https://cedia.a2zinc.net/CEDIA2026/Public/EventMap.aspx?thumbnail=1"
  ],
  "maxExhibitors": 25
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "directoryUrls": [
        "https://cedia.a2zinc.net/CEDIA2026/Public/EventMap.aspx?thumbnail=1"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("springlike_meadowland/a2z-exhibitor-list-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 = { "directoryUrls": ["https://cedia.a2zinc.net/CEDIA2026/Public/EventMap.aspx?thumbnail=1"] }

# Run the Actor and wait for it to finish
run = client.actor("springlike_meadowland/a2z-exhibitor-list-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 '{
  "directoryUrls": [
    "https://cedia.a2zinc.net/CEDIA2026/Public/EventMap.aspx?thumbnail=1"
  ]
}' |
apify call springlike_meadowland/a2z-exhibitor-list-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,springlike_meadowland/a2z-exhibitor-list-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/Stt41d3wy2hl62VCe/builds/EaqfdEsQANLJF1sHs/openapi.json
