# Spain Trade Fair Exhibitors Scraper (IFEMA Madrid) (`eurodata-tools/spain-trade-fair-exhibitors`) Actor

Export the exhibitor lists of IFEMA Madrid trade fairs (FITUR, Fruit Attraction, SICUR, Intergift, GENERA, Motortec and 30 more) with website, email, address, country, hall, stand, categories and activity. $3 per 1,000 exhibitors.

- **URL**: https://apify.com/eurodata-tools/spain-trade-fair-exhibitors.md
- **Developed by:** [EuroData Tools](https://apify.com/eurodata-tools) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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.

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

## Spain Trade Fair Exhibitors Scraper (IFEMA Madrid)

Export the **exhibitor lists of IFEMA Madrid trade fairs**, Spain's largest fair organizer: **FITUR, Fruit Attraction, Intergift, SICUR, GENERA, MATELEC, Motortec, CONSTRUTEC, MOMAD, Expodental** and 25 more. You get one clean row per exhibitor with the **website, company email, full address, country, hall and stand, activity, products and sectors**, and, for some fairs, the countries where the exhibitor **is looking for distributors**.

**$3 per 1,000 exhibitors.** You pay only for the rows you get. No subscription, no setup.

### What can you use it for?

- **Book meetings before the fair.** Get every exhibitor in your sector with hall and stand, and write to them weeks before the doors open. Most catalogs are online months ahead (FITUR 2027 already lists 1,100+ exhibitors).
- **Find Spanish and Latin American suppliers and partners.** Fruit Attraction (fresh produce), Intergift (gifts and home), MOMAD (fashion) or PRIVEL (private label) gather thousands of producers from Spain, Portugal, Latin America and the rest of the world.
- **Find distributors, or become one.** Some catalogs (e.g. Salón LOOK) say in which countries each exhibitor is looking for distributors (`seeksDistributorsIn`).
- **Sell to exhibitors.** Stand builders, logistics, packaging, translators, event staff, printers, payment and software vendors can reach every company that pays for a stand.
- **Map a market.** Who is who in Spanish tourism (FITUR), security (SICUR), renewable energy (GENERA), the electrical industry (MATELEC), automotive aftermarket (Motortec) or construction (CONSTRUTEC, VETECO), with activity and product categories.

### Example output

One row per exhibitor (real result from Salón LOOK 2026, shortened):

```json
{
  "fair": "LOOK 2026",
  "fairSlug": "look",
  "fairFullName": "Salon Internacional de la Imagen y la Estetica Integral",
  "fairStartDate": "2026-10-30",
  "fairEndDate": "2026-11-02",
  "exhibitorName": "ANEC Cosmetics",
  "entryType": "exhibitor",
  "coExhibitorOf": null,
  "hall": "12",
  "stand": "12C16B",
  "country": "Spain",
  "countryCode": "ES",
  "region": "Orense",
  "city": "Orense",
  "postalCode": "32005",
  "address": "Avenida de Zamora, 3 entresuelo oficina 2",
  "email": "info@aneccosmetics.com",
  "emailType": "generic",
  "website": "https://www.aneccosmetics.com",
  "productsAndSectors": ["Cosmética", "Cosmética y dermocosmética"],
  "seeksDistributorsIn": ["Francia", "Portugal", "Italia", "Alemania", "Reino Unido", "Estados Unidos", "…"],
  "description": "Cosmética facial limpia y consciente. …",
  "logoUrl": "https://cdne-aks-ifemaplatform-media-api-pro-….azurefd.net/public/…",
  "catalogUrl": "https://www.ifema.es/en/look/exhibitors/catalogue",
  "ifemaExhibitorId": "…",
  "scrapedAt": "2026-11-02T14:53:12.000Z"
}
```

**What you get in practice** (test runs, November 2026):

| | FITUR 2027 (1,167 exhibitors) | LOOK + GUEXT 2026 |
|---|---|---|
| Address, city, country | 100% | 98% |
| Hall and stand | 100% | 99% |
| Website | 54% | 59% |
| Email | 14% | 43% |

The catalog publishes what each exhibitor chose to share: there are no phone numbers. **Need more emails and phones?** Send the `website` column to [EU Company Contacts & VAT Extractor](https://apify.com/eurodata-tools/eu-company-contacts): it reads each company's own website and returns its company emails, phones, social profiles and VAT ID. Put this run's dataset ID in its **Or: read websites from a dataset** field, with the field name `website`.

### Supported fairs

Pick them from the **Trade fairs** list:

| Fair | Sector | Exhibitors\* |
|---|---|---|
| Fruit Attraction | Fresh fruit & vegetables | ~2,550 |
| FITUR | Tourism & travel | ~1,170 |
| Intergift | Gifts & home decoration | ~810 |
| GENERA + MATELEC (shared catalog) | Energy & environment, electrical & electronics industry | ~690 |
| SICUR | Security & safety | ~670 |
| Motortec | Automotive aftermarket | ~670 |
| CONSTRUTEC + VETECO + SMART DOORS + PISCIMAD (shared catalog) | Construction, windows & facades, doors, pools | ~490 |
| Expodental + Expomedes (shared catalog) | Dental, aesthetic medicine | ~400 |
| BISUTEX + MADRIDJOYA (shared catalog) | Costume jewellery, jewellery & watches | ~400 |
| PRIVEL | Private label products | ~380 |
| TECMA + SRR + Foro de las Ciudades (shared catalog) | Urban planning, recycling, smart cities | ~260 |
| LIBER | Publishing & books | ~240 |
| IBERPET | Pet industry | ~230 |
| Anuga Select Ibérica | Food & beverage | ~220 |
| MOMAD | Fashion, footwear & accessories | ~160 |
| Semana de la Educación, SIMO Educación | Education | ~140, ~50 |
| Salón LOOK | Beauty & hairdressing | ~140 |
| PMG Promogift | Promotional products | ~140 |
| Expoóptica+Audio | Optics & audiology | ~130 |
| FIAA | Buses & coaches | ~110 |
| Antik Almoneda, Feriarte | Antiques, art galleries | ~95, ~80 |
| GUEXT | Hospitality suppliers | ~90 |
| Salón VO, Sociocare | Used vehicles, social care | ~30 each |

\*Counts as of November 2026. IFEMA updates the catalogs until the fair opens.

**Shared catalogs.** Some fairs are held together and share one exhibitor catalog. If you select two of them, the catalog is scraped once and the `fair` column names both (e.g. `GENERA / MATELEC 2026`). The `categories` column usually tells which of the fairs each exhibitor belongs to.

**Other fairs.** Any IFEMA fair with an online exhibitor catalog works: paste its name or catalog URL in **Other IFEMA fairs**, e.g. `momad` or `https://www.ifema.es/momad/expositores/catalogo`. Fairs that have no online catalog at the moment are reported in the run status.

### How to use it

1. Choose one or more fairs in **Trade fairs**.
2. Optionally set **Max exhibitors per fair** (0 = all), **Only exhibitors from these countries** (`ES`, `PT`, `Mexico` …), **Company name contains** (`hotel`, `bodega` …) or **Only exhibitors with an email or website**.
3. Click **Start**. Download the results as Excel, CSV or JSON, or get them through the API.

### Input

| Field | Default | What it does |
|---|---|---|
| `fairs` | — | Fairs from the list above |
| `otherFairs` | — | Other IFEMA fairs, by name or catalog URL |
| `maxExhibitorsPerFair` | 0 (all) | Stop each fair after this many rows. Useful for a cheap first test |
| `countries` | all | Keep only exhibitors from these countries (ISO codes or English names). Excluded exhibitors are never charged |
| `searchTerm` | — | Keep only exhibitors whose name contains this text |
| `onlyWithContact` | `false` | Skip exhibitors with neither email nor website (free) |
| `includeCoExhibitors` | `true` | Include companies that exhibit at another exhibitor's stand |
| `includeDescription` | `true` | Include the company presentation text |
| `language` | `en` | Catalog language: `en` or `es` |
| `maxRequestsPerMinute` | 100 | The catalog refuses visitors that go much faster. Keep 100 |
| `proxyConfiguration` | off | Turn on Apify Proxy only if the catalog stops answering |

### Output fields

`fair`, `fairSlug`, `fairFullName`, `fairStartDate`, `fairEndDate`, `exhibitorName`, `entryType` (`exhibitor` / `co-exhibitor`), `coExhibitorOf`, `hall`, `stand`, `stands`, `country`, `countryCode`, `region`, `city`, `postalCode`, `address`, `email`, `emailType`, `website`, `categories`, `activities`, `productsAndSectors`, `brands`, `regionsServed`, `seeksDistributorsIn`, `otherDetails`, `brochureUrl`, `description`, `logoUrl`, `featured`, `cardAvailable`, `catalogUrl`, `ifemaExhibitorId`, `scrapedAt`.

The dataset has three ready-made views: **Overview**, **Contacts & address** and **Categories & products**.

Each fair asks its exhibitors different questions. The common ones are sorted into `activities`, `productsAndSectors`, `brands`, `regionsServed` and `seeksDistributorsIn`; anything else is kept in `otherDetails` with the catalog's own field name.

### Pricing

**$3 per 1,000 exhibitors** (`exhibitor` event, $0.003 per row). You pay only for rows returned. Exhibitors removed by your filters are free.

Examples: all of FITUR (~1,170 exhibitors) costs about **$3.50**, all of Fruit Attraction (~2,550) about **$7.70**. A 50-exhibitor test costs **$0.15**.

Set **Max cost per run** in the run options and the Actor stops exactly there: you never pay more than that.

### How long does it take?

One request per exhibitor at a steady 100 per minute: **1,000 exhibitors take about 10 minutes**, FITUR about 12 minutes, Fruit Attraction about 26 minutes. With a country filter the Actor still has to open each card to read the country, so it takes about as long as the whole fair.

### Good to know

- **Personal emails.** Most exhibitors publish a company mailbox (info@, ventas@ …). Some publish the email of a named person. Each row has `emailType` (`generic` or `personal`) so you can keep only company mailboxes.
- **Edition and dates.** `fair`, `fairStartDate` and `fairEndDate` are the edition shown on the fair's page on ifema.es. Between two editions IFEMA can keep the exhibitors of the last edition online until the new list is published.
- **Data freshness.** The data is read live from the official catalog at run time.
- **Legal.** The Actor reads only the public online catalogs that IFEMA publishes so that visitors can find exhibitors, the same way your browser does. It does not log in. You are responsible for how you use the data, for example under GDPR and anti-spam rules when you contact people.
- **Independent tool.** This Actor is not affiliated with or endorsed by IFEMA MADRID or the fair organizers. Fair names are used only to describe which public catalogs are supported.

### FAQ

**Which fair should I start with?** Run it with **Max exhibitors per fair** = 50 to see the data for $0.15, then run the whole fair.

**Can I get only Spanish exhibitors, or only Portuguese ones?** Yes. Put `ES` or `PT` in **Only exhibitors from these countries**.

**A fair is missing.** If it has an exhibitor catalog on ifema.es, paste its URL in **Other IFEMA fairs**. For fairs of other organizers, open an issue on the Actor page with the catalog link.

**Italian trade fairs?** See [Italian Trade Fair Exhibitors Scraper](https://apify.com/eurodata-tools/italy-trade-fair-exhibitors) (TUTTOFOOD, Cibus, EICMA …).

# Actor input Schema

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

Pick one or more IFEMA Madrid fairs. You get one row per exhibitor, with the fair name in every row. Fairs that share one catalog (e.g. GENERA + MATELEC) are scraped once.

## `otherFairs` (type: `array`):

Any other fair with an exhibitor catalog on ifema.es, as its name in the URL (`fitur`, `momad`) or the catalog URL (`https://www.ifema.es/fitur/expositores/catalogo`).

## `maxExhibitorsPerFair` (type: `integer`):

Stop after this many exhibitors for each fair. 0 = all exhibitors. Use 50 for a cheap first test.

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

ISO codes (`ES`, `PT`, `IT`, `FR`) or English names (`Spain`, `Mexico`). Leave empty for all countries. Exhibitors from other countries are never charged.

## `searchTerm` (type: `string`):

Keep only exhibitors whose name contains this text, e.g. `hotel` or `bodega`. Uses the catalog's own search.

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

Skip exhibitors that published neither an email nor a website in the catalog. Skipped exhibitors are free.

## `includeCoExhibitors` (type: `boolean`):

Companies that exhibit at another exhibitor's stand (for example hotels at a regional tourism board stand). The row says whose stand it is (`coExhibitorOf`).

## `includeDescription` (type: `boolean`):

The presentation text written by the exhibitor, as plain text.

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

Language of the categories and descriptions when the exhibitor provided both.

## `maxRequestsPerMinute` (type: `integer`):

One request per exhibitor. The IFEMA catalog refuses visitors that go much faster than 100 per minute. At 100 per minute, 1,000 exhibitors take about 10 minutes.

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

Usually not needed. Turn on Apify Proxy if the catalog stops answering.

## Actor input object example

```json
{
  "fairs": [
    "fitur"
  ],
  "otherFairs": [],
  "maxExhibitorsPerFair": 50,
  "onlyWithContact": false,
  "includeCoExhibitors": true,
  "includeDescription": true,
  "language": "en",
  "maxRequestsPerMinute": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "fairs": [
        "fitur"
    ],
    "otherFairs": [],
    "maxExhibitorsPerFair": 50,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("eurodata-tools/spain-trade-fair-exhibitors").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": ["fitur"],
    "otherFairs": [],
    "maxExhibitorsPerFair": 50,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("eurodata-tools/spain-trade-fair-exhibitors").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": [
    "fitur"
  ],
  "otherFairs": [],
  "maxExhibitorsPerFair": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call eurodata-tools/spain-trade-fair-exhibitors --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,eurodata-tools/spain-trade-fair-exhibitors"
        }
    }
}
```

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/yUQ3GiYDsrHV7kTJf/builds/oEbQ5RH63v4xtf3HC/openapi.json
