# French Trade Shows · Exhibitor Directory · Tick Mix (`corent1robert/fr-salon-exhibitors-hub`) Actor

Tick any mix of French trade shows and export exhibitor names — plus website, email and phone when printed. One row per exhibitor. Public catalogues — no login, no API key.

- **URL**: https://apify.com/corent1robert/fr-salon-exhibitors-hub.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 1,000 exhibitor with emails

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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?

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

## French Trade Show Directory

Export **exhibitor names** from public French trade-show catalogues, plus **website**, email and phone when printed. One row per exhibitor.

**No login. No API key. No organiser account.**

Tick **as many shows as you want** in one run. **All catalogues** walks **82 named shows** (GL Events, RX, Comexposium, Easyfairs and public HTML lists) and also looks for extra French lists on the GL Events store. Paste extra exhibitor-list URLs if you have them. Emails are never invented.

France has **hundreds** of trade shows. This Actor only keeps those with a **public exhibitor name list**. Closed apps (Wine Paris, Maison\&Objet, VivaTech, most Infopro pages, NRF Europe MapYourShow) are skipped until they publish one.

### Who is this for?

| You are… | Typical goal | Suggested setup |
|----------|--------------|-----------------|
| Textile / fashion supplier | Première Vision outreach | Tick Première Vision only, only with email |
| Food / grocery | SIAL / Sirha / CFIA | Tick SIAL Paris + Sirha Lyon + CFIA Rennes |
| Construction / environment | BATIMAT / Pollutec | Tick BATIMAT + Pollutec |
| Hospitality / real estate | EquipHotel / MIPIM | Tick EquipHotel or MIPIM |
| Agency / list builder | Every named exhibitor | Tick **All catalogues**, then a paid upgrade |
| First-run QA | Small CRM sample | 20-row Première Vision sample |

**What you get by default.** Exhibitor name on every row. Website, email, phone, city, hall/stand when the catalogue prints them.

**When to enable filters.** Turn **Only with email** on for outbound. Leave filters off if you want every named booth. Names are the product: many RX / Comexposium rows have a company website and no mailbox — emails are never invented.

### Quick start

1. Open the Actor. Leave **Trade shows** on **All catalogues**, or tick only the shows you need.
2. Leave contact filters off if you want every named exhibitor (turn **Only with website** on if you need URLs).
3. Leave **Max unique exhibitors** at 20 for a first run.
4. Click **Start**. Download JSON, CSV or Excel.

### Ready-made examples

Saved task inputs live in `published-tasks/inputs/` (private Actor — tasks stay unpublished).

| Example | Best for |
|---------|----------|
| Première Vision exhibitor emails | Fashion / textile outreach |
| Foire de Lyon exhibitor emails | Generalist French show |
| All known FR catalogues | Combined directory file |
| 20-row sample | First try |

#### Named catalogues with a public list today

| Family | Shows |
|--------|-------|
| Première Vision | Paris, Blossom, Denim, Made in France |
| GL Events industry | SEPEM Toulouse, Grenoble, Douai, Angers, Colmar, Rouen, Martigues · VRAC TECH · CFIC · ExpoBiogaz |
| Agro / food | CFIA Rennes, CFIA Toulouse · Sirha Lyon · Sirha Bake & Snack · Bocuse d'Or · **SIAL Paris** · **Salon de l'Agriculture** · SIA'PRO · Gourmet Selection · Salon du Chocolat · **SPACE Rennes** · **Sommet de l'Élevage** · **SITEVI** · **Innov-Agri** · **Salon Vert** |
| Health / lab / security | SantExpo · Forum Labo · Salon AMIF · ExpoProtection · **Milipol** · Trustech · **World Nuclear Exhibition** |
| Optics / packaging / retail | **SILMO Paris** · **All4Pack** · **Paris Retail Week** · Tech for Retail · **Paris Packaging Week** · SIEC · **MIFEXPO** |
| Construction / environment | **BATIMAT** · **Pollutec** · **Interclima** · **Ideobain** · RenoDays · Eurobois · Foire de Lyon · Foire de Metz · **Foire de Paris** · **Foire de Marseille** · **Foire de Nantes** · **Piscine Global** · **Paysalia** · **BePositive** · **Hyvolution Paris** · **Rocalia** |
| Materials / local gov | **JEC World** · **Salon des Maires** (plus AMIF) |
| Transport / travel / media | **SITL** · **Solutrans** · **IFTM Top Resa** · **MIPCOM** · **Paris Photo** · Rétromobile · Big Data & AI Paris · **SATIS** |
| Hospitality / real estate | **EquipHotel** · **MIPIM** · **MAPIC** · **Food Hotel Tech** · **Franchise Expo Paris** · **Funexpo** · **Salon CTCO Lyon** · **Salon Habitat Montauban** · **Salon Habitat Rodez** · **Salon Habitat Brive** · **RENT Paris** |

### What it extracts

| Category | Fields |
|----------|--------|
| Show | Salon key and name |
| Identity | Exhibitor name, hall, stand |
| Contact | Email (never invented), phone, website |
| Location | Address, city, postal code, country |
| Provenance | Catalogue URL |

### Input

| Field | Meaning |
|--------|---------|
| `salons` | Multi-select. Tick any mix, **All catalogues**, and/or **GL Events store**. Legacy `salon` (string) still works. |
| `catalogueUrls` | Extra public exhibitor-list URLs to merge into the run |
| `discoverFromStore` | Walk the GL Events store in addition to ticked shows |
| `franceOnly` | Store mode: keep shows located in France. Default on |
| `onlyWithContact` | Skip rows with no email and no phone. Default **off** |
| `requireWebsite` | Keep only exhibitors with a published website |
| `requireEmail` | Keep only exhibitors with a published mailbox |
| `requirePhone` | Keep only exhibitors with a published phone |
| `maxItems` | Unique exhibitors. **0** = no numerical cap. **Free plan: 20 / run** |

### Output example

```json
{
  "salonKey": "premiere-vision",
  "salonName": "Première Vision Paris",
  "exhibitorName": "3D Etiket",
  "email": "info@3detiket.com",
  "phone": "+90(212) 486 32 22",
  "website": "https://www.3detiket.com/",
  "city": "Istanbul",
  "countryCode": "TR",
  "hall": "Hall 3",
  "stand": "3D22",
  "sourceUrl": "https://paris.premierevision.com/en/partners"
}
```

### How much does it cost to scrape French salon exhibitors?

HTTP-only. You pay Apify compute plus **pay-per-event** rows. Totals below include the **$0.00005** actor-start fee.

| Scenario | FREE | Bronze | Silver | Gold |
|----------|------|--------|--------|------|
| 20 names (no mailbox) | $0.03 | $0.03 | $0.02 | $0.02 |
| 20 with email | $0.08 | $0.07 | $0.06 | $0.05 |
| 1,000 names (no mailbox) | $1.49 | $1.29 | $1.09 | $0.99 |
| 1,000 with email | $4.00 | $3.49 | $2.99 | $2.49 |
| 50,000 names (no mailbox) | $74.50 | $64.50 | $54.50 | $49.50 |
| 50,000 with email | $199.50 | $174.50 | $149.50 | $124.50 |

Per-row list prices: name-only **$0.00149 → $0.00099**, phone **$0.00249 → $0.00169**, email **$0.00399 → $0.00249** (FREE → Gold). Free plan: **20 exhibitors per run**.

If the GL Events store is blocked (WAF), the run keeps the named catalogues you ticked.

Full **All catalogues** with **maxItems 0** is a large directory (tens of thousands of names, especially MIPIM). Start with a cap unless you need the full file.

### Is it legal to scrape these catalogues?

This Actor only accesses exhibitor fields the organisers **publish on the public catalogue pages**. Ensure your use complies with the French CNIL / GDPR. Do not use the data for spam. GL Events, RX, Comexposium and Easyfairs are not affiliated with this Actor.

Other Store Actors cover single-organiser HTML lists. This hub **groups several French organiser families** so you can tick one mix and get names (and websites when printed) in one dataset.

### Also available

**[QLD solicitor emails](https://apify.com/corent1robert/qld-youandthelaw-solicitor-leads)** — You & The Law (QLS).

### Local development

```bash
cd fr-salon-exhibitors-hub
npm install
apify run
```

### Changelog

See [CHANGELOG.md](./CHANGELOG.md).

### Support

Contact <corentin@outreacher.fr> if you need a custom scraper or another French salon added once it has a public exhibitor list.

# Actor input Schema

## `salons` (type: `array`):

Pick every show you want in this run. Combine freely. **All catalogues** includes every named show in the directory.

## `catalogueUrls` (type: `array`):

Optional public exhibitor-list URLs. Merged with the ticked shows. Lists without printed exhibitor names are skipped.

## `discoverFromStore` (type: `boolean`):

Same as ticking **GL Events store**: list FR shows on the public store, then keep those with a public exhibitor name list. Off by default — named catalogues already cover the known lists.

## `franceOnly` (type: `boolean`):

When walking the GL Events store, keep shows whose location is in France. Ignored for named catalogues.

## `onlyWithContact` (type: `boolean`):

Skip exhibitors with neither a published email nor a published phone. Off by default — names still export.

## `requireEmail` (type: `boolean`):

Keep exhibitors that publish an email address.

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

Keep exhibitors that publish a phone number.

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

Keep exhibitors that publish a company website.

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

Stop after this many unique exhibitors. **0 = no numerical cap** — still bounded by the selected catalogues.

## Actor input object example

```json
{
  "salons": [
    "all"
  ],
  "catalogueUrls": [],
  "discoverFromStore": false,
  "franceOnly": true,
  "onlyWithContact": false,
  "requireEmail": false,
  "requirePhone": false,
  "requireWebsite": false,
  "maxItems": 20
}
```

# Actor output Schema

## `dataset` (type: `string`):

All exported unique exhibitors.

## `overview` (type: `string`):

Exhibitor, salon, website, email, phone and stand.

## `contacts` (type: `string`):

Email, phone and salon.

## `runLog` (type: `string`):

Plain-text progress for this run.

# 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 = {
    "salons": [
        "all"
    ],
    "catalogueUrls": [],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/fr-salon-exhibitors-hub").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 = {
    "salons": ["all"],
    "catalogueUrls": [],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/fr-salon-exhibitors-hub").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 '{
  "salons": [
    "all"
  ],
  "catalogueUrls": [],
  "maxItems": 20
}' |
apify call corent1robert/fr-salon-exhibitors-hub --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,corent1robert/fr-salon-exhibitors-hub"
        }
    }
}

```

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/RBOKEgC6ezZyEIJ4V/builds/TbaYDnl4csVJaY4HY/openapi.json
