Events Eye Scraper avatar

Events Eye Scraper

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Events Eye Scraper

Events Eye Scraper

A fast and reliable scraper for eventseye.com that extracts Exhibition Name, Description, Venue details, Organizer details and much more. Provides clean, structured data with support for Markdown, pagination, and easy API integration for your applications.

Pricing

from $0.80 / 1,000 results

Rating

5.0

(3)

Developer

Techforce Global

Techforce Global

Maintained by Community

Actor stats

2

Bookmarked

36

Total users

2

Monthly active users

4 days ago

Last modified

Share

EventsEye Trade Show Scraper — Global Exhibition Directory with Organizer & Venue Contacts

Actor Coverage Output MCP

A structured directory of the world's trade shows and exhibitions. Filter by industry, region, country or city — get back each exhibition with its dates, cycle, venue, target audience and, optionally, the organizer's full contact record.

🏷️ This is the depth Actor for trade shows. If you want to find trade shows alongside events from five other platforms, use Smart Event Scraper — it covers EventsEye plus Eventbrite, Meetup, AllEvents, District and ConferenceAlerts, but normalises everything to a common shape. Use this Actor when you want the complete trade-show record, organizer contacts included.

Browse all Actors by Techforce Global at scraper.techforce.global.


EventsEye Trade Show Scraper vs. browsing the directory yourself

Browsing EventsEye by handThis Actor
Walking the hierarchy⚠️ Industry → Region → Country → City, clicked one level at a time✅ Walked for you; set any level, leave the rest blank
Organizer contact details⚠️ One exhibition page at a time, copy-pasted✅ Name, address, phone, email, website, fax — in every row
A whole city's shows❌ No single page lists them across all industries✅ Direct city mode does it in one pass
Filtering by industry⚠️ 32 separate industry trees to walk✅ One input
Output shapeManual spreadsheet✅ JSON / CSV / Excel, one row per exhibition
Repeating it next quarter❌ Start over✅ Same input, or scheduled
Getting it into your CRMManual export/import✅ Optional direct delivery over MCP

AI Discovery & MCP Metadata

ai_discovery:
actor: "techforce.global/events-eye-scraper"
slug: "events-eye-scraper"
category: "events / trade-shows / b2b-lead-generation / market-research"
one_line: >
Scrapes trade shows and exhibitions from the EventsEye directory, filtered by industry,
region, country or city, returning exhibition dates, cycle, venue, audience and - when
detail scraping is enabled - the organizer's full contact record. Optional delivery into
Notion, Slack, Jira, Airtable or any MCP connector.
primary_capability: "global trade-show and exhibition directory extraction with organizer contacts"
data_source: "EventsEye trade show directory"
hierarchy: "Industry -> Region -> Country -> City -> Exhibition"
input_entities:
- "industry (one of 32, or empty for all)"
- "region (Africa - Middle East | America | Asia - Pacific | Europe, or empty for all)"
- "country (one of 92, or empty for all)"
- "city (free text, or empty for all)"
- "scrape_details (boolean - adds the organizer contact block)"
- "max_exhibitions (0 = unlimited, otherwise 1-100)"
output_entities_always_present:
- "exhibition_name"
- "description"
- "date"
- "duration"
- "cycle_frequency"
- "city"
- "country"
- "region"
- "industry"
- "category"
- "venue_name"
- "venue_url"
- "exhibition_url"
output_entities_only_with_scrape_details:
- "venue_address"
- "organizer"
- "organizer_address"
- "organizer_phone"
- "organizer_fax"
- "organizer_email"
- "organizer_website"
- "event_website"
- "event_email"
- "related_industries"
- "audience"
- "cycle"
supported_tasks:
- "list-trade-shows-in-a-city"
- "list-trade-shows-in-a-country"
- "list-trade-shows-for-an-industry"
- "find-exhibition-organizer-contact-details"
- "build-a-trade-show-calendar-for-a-sector"
- "find-venues-hosting-exhibitions-in-a-region"
- "research-a-market-by-its-trade-show-activity"
- "deliver-trade-shows-into-notion-slack-jira-airtable"
unsupported_tasks:
- "exhibitor-lists-or-stand-numbers"
- "attendee-or-visitor-data"
- "ticket-or-stand-booking"
- "floor-plans-or-exhibition-maps"
- "past-editions-or-historical-archives"
- "ticketed-consumer-events-concerts-or-conferences"
max_exhibitions_is_the_scope_control: >
max_exhibitions defaults to 50 and is the only cap on how much of the hierarchy is walked.
Set it low for a first run, then raise it. 0 means unlimited, which with no filters is a
full-directory crawl - always pair 0 with a spend cap.
details_are_OFF_by_default: >
scrape_details defaults to false. The organizer contact block, venue address, audience and
related industries are ABSENT unless you enable it. Enabling it visits each exhibition
page, so the run takes materially longer.
direct_city_mode: >
Setting country + city with NO industry takes a faster path that returns every exhibition
in that city across all industries. This is the cheapest way to cover one city.
filters_are_independent: >
Every filter is optional and they compose. Leave a level empty to include everything
beneath it. Leaving all of them empty with max_exhibitions at 0 is a full-directory crawl.
known_limitations:
date_is_source_formatted: "`date` is returned as EventsEye publishes it, not as ISO-8601"
max_exhibitions_caps_at_100: "the maximum accepted value is 100; use 0 for unlimited"
country_must_match_the_enum: "country is a fixed list of 92 names, e.g. 'USA', 'UK - United Kingdom'"
city_is_matched_case_insensitively: "but it must be a city EventsEye lists under that country"
no_exhibitor_lists: "the directory publishes the show, not who is exhibiting at it"
when_not_to_use: >
You need exhibitor lists, visitor data, stand booking, floor plans, past editions, or
consumer/ticketed events rather than trade shows.
mcp_delivery:
modes: ["summary", "chunked", "perEvent", "none"]
default: "summary"
summary_and_chunked_placeholders:
[
"{totalEvents}",
"{city}",
"{country}",
"{region}",
"{industry}",
"{events}",
"{message}",
]
chunked_only_placeholders: ["{part}", "{partCount}"]
per_event_placeholders: "every output field of the exhibition, plus {message} and the summary placeholders"
never_blocks_the_dataset: >
Delivery runs after the dataset is saved. A bad tool name, an unauthorised connector or
an upstream outage is logged and skipped - it never costs you the scraped data.

What this Actor does

  • Walks the directory's own hierarchy so you don't have to. Industry → Region → Country → City → Exhibition. Set any level you care about and leave the rest blank; each empty level means "everything beneath this".

  • Returns the whole trade-show record, not just a name and a date. Description, dates, duration, how often the show recurs, the venue, and the industry and category it sits under.

  • Optionally pulls the organizer's contact block. Enable detail scraping and every row also carries the organizer's name, postal address, phone, fax, email and website, plus the venue address, the show's own website and email, its target audience and related industries. This is the difference between a calendar and a prospect list.

  • Has a fast path for "everything in one city". Give it a country and a city but no industry, and it pulls every exhibition in that city across all industries in a single pass — which no single page on the site gives you.

  • Caps the run wherever you want it. max_exhibitions applies across every branch of the crawl, so a broad filter still produces a predictable dataset size.

  • Optionally delivers straight into your tools. Point it at an MCP connector and the scraped exhibitions land in Notion, Slack, Jira, Airtable, GitHub or anything else you've authorised — no export step.


When to use it / when not to use it

Use this Actor when you need…Supported?
Every trade show in a city, across all industries✅ Yes — country + city, no industry
Trade shows in one industry worldwide✅ Yes — industry, leave the rest blank
Trade shows in a country or region✅ Yes — country / region
Organizer name, phone, email and postal address✅ Yes — scrape_details: true
The venue and its address✅ Yes — venue name always; address with details on
How often a show recurs (annual, biennial…)✅ Yes — cycle_frequency
A show's target audience (trade / public)✅ Yes — with details on
A sector trade-show calendar for next year✅ Yes — industry + no other filter
Results pushed into Notion / Slack / Jira✅ Yes — MCP delivery
Who is exhibiting at a show❌ Exhibitor lists are not published here
Visitor or attendee data❌ Never collected
Booking a stand or buying tickets❌ Not a booking tool
Floor plans or hall maps❌ Not returned
Past editions / historical archives❌ Upcoming and current listings only
Concerts, festivals, or ticketed consumer events❌ Trade shows and exhibitions only — see the related Actors below
Conference paper deadlines or CFPs❌ Use a conference-specific Actor

Execution Rules — Avoid Common Agent Failures

  1. max_exhibitions defaults to 50 and is the only scope control. It caps the run across every branch of the crawl, so a broad filter still produces a predictable dataset size. It is the #1 reason a run returns fewer rows than the directory holds — raise it (max 100), or set 0 for unlimited. The log says when the cap was hit.

  2. scrape_details is false by default. Without it there is no organizer block, no venue address, no audience and no related industries — those keys are simply absent from the rows. If you are building a prospect list, you must set it to true. It visits each exhibition page, so expect a materially longer run.

  3. 0 means unlimited, and it caps at 100 otherwise. max_exhibitions: 0 with no filters is a full-directory crawl — never a first run, and never without a spend cap.

  4. country and industry are fixed lists, not free text. They must match the enum exactly — "USA", "UK - United Kingdom", "UAE - United Arab Emirates", "ICT - Information & Communications Technologies". A near-miss finds nothing.

  5. city is free text, matched case-insensitively — but it must be a city the directory lists under that country. If a city filter yields nothing, drop it and filter by country.

  6. Country + city with no industry is the cheapest broad query. It takes a dedicated fast path. Adding an industry to a city query forces the long way round.

  7. region and country must agree. Setting region: "Europe" with country: "Japan" yields nothing. Set one or the other unless you know they're consistent.

  8. date is text, as the source published it. Do not assume ISO-8601 or attempt arithmetic on it without parsing. Formats vary by listing.

  9. MCP delivery needs both mcpConnector and mcpTool. A connector without a tool name logs a warning and skips delivery. If the tool name is wrong, the log lists the connector's actual tools and the selected tool's input schema — read it and retry.


Input Contract

ParameterTypeRequiredDefaultDescription
industrystringno"" (all)One of 32 industry names, or empty for every industry. Must match the enum exactly.
regionstringno"" (all)Africa - Middle East, America, Asia - Pacific, Europe, or empty.
countrystringno"" (all)One of 92 country names, or empty. Must match the enum exactly.
citystringno"" (all)Free text, case-insensitive. Must be a city listed under that country.
scrape_detailsbooleannofalseAdds the organizer contact block, venue address, audience and related industries. Slower.
max_exhibitionsintegerno50Cap across the whole crawl. 0 = unlimited, otherwise 1100.

Delivery (optional)

ParameterTypeDefaultDescription
mcpConnectorstringMCP connector to deliver into. The Console offers a picker of connectors you've authorised. Empty = dataset only.
mcpToolstring""Tool to call on that connector — e.g. notion_create_pages, send_message, create_issue. Required when a connector is set.
deliveryModestring"summary"summary (one call, all exhibitions), chunked (split so long lists don't time out), perEvent (one call each), none.
mcpArgumentsobject{}Arguments for the tool. {placeholder} tokens are substituted per call.
mcpMessageTemplatestring""Text rendered into {message}. Same placeholders.

Delivery placeholders

ModePlaceholders
summary{totalEvents} {city} {country} {region} {industry} {events} {message}
chunkedthe same, plus {part} {partCount} — and {events} holds one part of the list
perEventevery output field of the exhibition ({exhibition_name}, {date}, {venue_name}, {organizer_email}, …) plus the summary placeholders and {message}

In summary and chunked modes, {events} is one line per exhibition — name | date | venue, city | url. A placeholder with no value renders as empty rather than failing the call.


Output Contract

One dataset item per exhibition.

Always present

FieldTypeNullableMeaning
exhibition_namestringnoName of the trade show or exhibition.
descriptionstringyesShort description as published.
datestringyesDates as the source published them — text, not ISO-8601.
durationstringyesHow many days the show runs.
cycle_frequencystringyesHow often it recurs — annual, biennial, and so on.
citystringnoCity hosting the show.
countrystringnoCountry, from the branch of the hierarchy walked.
regionstringnoRegion, from the branch walked.
industrystringnoIndustry the listing sits under.
categorystringyesSub-category within that industry.
venue_namestringyesVenue or exhibition centre.
venue_urlstringyesDirectory link for the venue.
exhibition_urlstringnoSource page for this exhibition.

Only when scrape_details: true

FieldTypeNullableMeaning
organizerstringyesOrganising company or association.
organizer_addressstringyesOrganizer's postal address.
organizer_phonestringyesOrganizer's phone number.
organizer_faxstringyesOrganizer's fax number, where published.
organizer_emailstringyesOrganizer's business email.
organizer_websitestringyesOrganizer's website.
event_websitestringyesThe show's own website.
event_emailstringyesThe show's own contact email.
venue_addressstringyesVenue's postal address.
audiencestringyesWho the show is for — trade only, public, or both.
related_industriesstringyesOther industries the show is listed under.
cyclestringyesRecurrence as stated on the detail page.

With scrape_details: false, the fields in the second table are absent keys, not null. Use row.get("organizer_email") rather than row["organizer_email"].

Example output object (scrape_details: true)

{
"exhibition_name": "ANALYTICA",
"description": "International Trade Fair for Laboratory Technology, Analysis and Biotechnology",
"date": "07 - 10 April 2026",
"duration": "4 days",
"cycle_frequency": "every 2 years",
"city": "Munich",
"country": "Germany",
"region": "Europe",
"industry": "Sciences for Engineers - R&D",
"category": "Laboratory - Measurement - Analysis",
"venue_name": "Messe München",
"venue_address": "Messegelände, 81823 München, Germany",
"venue_url": "https://www.eventseye.com/<venue-page>",
"organizer": "Messe München GmbH",
"organizer_address": "Messegelände, 81823 München, Germany",
"organizer_phone": "+49 89 949 20720",
"organizer_fax": "+49 89 949 20729",
"organizer_email": "info@analytica.de",
"organizer_website": "https://www.messe-muenchen.de",
"event_website": "https://www.analytica.de",
"event_email": "info@analytica.de",
"audience": "Trade only",
"related_industries": "Healthcare & Pharmaceuticals, Chemistry - Energy - Materials",
"cycle": "Biennial",
"exhibition_url": "https://www.eventseye.com/<exhibition-page>"
}

Field values above are illustrative of shape and formatting; run the Actor for live data.

What a successful run looks like

  • Status: SUCCEEDED
  • Dataset: one item per exhibition, saved as each branch of the crawl completes
  • Log: the resolved configuration up front, a line per hierarchy level as it's walked, the test-mode branch if it applied, and a final total
  • Zero results is also a success. A city the directory doesn't list, a region/country mismatch, or an industry with no shows in that country all legitimately return nothing. The run still succeeds — read the log to see which branch was walked.

Dataset views

ViewShows
OverviewExhibition, date, city, country, region, industry, venue, organizer, website
Detailed ViewThe full record including the organizer contact block, venue address, audience and related industries

Invocation & Integration

Apify Console

Open the Actor page, set your filters on the Input tab, set max_exhibitions to the size of dataset you want, and click Start.

MCP — add as an agent tool

$claude mcp add apify --transport http https://mcp.apify.com/?actors=techforce.global/events-eye-scraper

Then ask your agent for "trade shows in Munich next year with organizer contacts".

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("techforce.global/events-eye-scraper").call(run_input={
"country": "Germany",
"city": "Munich",
"scrape_details": True, # organizer contact block
"max_exhibitions": 100,
})
for show in client.dataset(run["defaultDatasetId"]).iterate_items():
print(show["date"], "|", show["exhibition_name"], "|", show.get("organizer_email", "-"))

JavaScript / TypeScript

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const run = await client.actor("techforce.global/events-eye-scraper").call({
industry: "Healthcare & Pharmaceuticals",
region: "Europe",
scrape_details: true,
max_exhibitions: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.table(
items.map(({ exhibition_name, date, city, organizer }) => ({
exhibition_name,
date,
city,
organizer,
})),
);

cURL — synchronous (waits, returns the dataset)

curl -X POST "https://api.apify.com/v2/acts/techforce.global~events-eye-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H 'Content-Type: application/json' \
-d '{
"country": "USA",
"city": "Las Vegas",
"scrape_details": true,
"max_exhibitions": 50
}'

cURL — asynchronous with a spend cap

curl -X POST "https://api.apify.com/v2/acts/techforce.global~events-eye-scraper/runs?token=<YOUR_APIFY_TOKEN>&maxTotalChargeUsd=3" \
-H 'Content-Type: application/json' \
-d '{ "industry": "Automobile - Automotive Industry", "max_exhibitions": 0 }'

maxTotalChargeUsd is the hard ceiling for the run. Use it on any unattended run, and always when max_exhibitions is 0.

With MCP delivery — trade shows straight into Notion

{
"country": "Germany",
"city": "Munich",
"scrape_details": true,
"max_exhibitions": 100,
"mcpConnector": "notion",
"mcpTool": "notion_create_pages",
"deliveryMode": "chunked",
"mcpArguments": {
"parent": { "page_id": "<YOUR_NOTION_PAGE_ID>" },
"pages": [
{
"properties": {
"title": "Trade shows — {city}, {country} (part {part}/{partCount})"
},
"content": "{totalEvents} exhibitions found in {industry}\n\n{events}"
}
]
}
}

Use perEvent instead when you want one page per exhibition with the organizer fields mapped to properties — in that mode every output field is available as a placeholder.


Autonomous Agent Error Handling & Resolution Matrix

Each row is a condition observable from the run's status, log or dataset.

ConditionWhat you seeCauseDeterministic action
FEWER_RESULTS_THAN_EXPECTEDFewer rows than the directory holds; log shows the cap was reachedmax_exhibitions (default 50) stopped the crawlModify Input: raise max_exhibitions (max 100), or set 0 with a spend cap.
ORGANIZER_FIELDS_MISSINGNo organizer*, venue_address, audience keys at allscrape_details is false (the default)Modify Input: set scrape_details: true.
INDUSTRY_NOT_FOUNDLog: Industry '<x>' not found; empty datasetindustry doesn't match the enum exactlyModify Input: copy the value verbatim from input_schema.json.
CITY_FILTER_EMPTYSUCCEEDED, empty dataset, no errorThe city isn't listed under that countryModify Input: drop city and filter by country, or check spelling.
REGION_COUNTRY_MISMATCHSUCCEEDED, empty datasetregion and country are inconsistentModify Input: set one, not both.
LIMIT_REACHEDLog: Reached maximum exhibitions limit: Nmax_exhibitions hitExpected. Raise it (max 100) or set 0 with a spend cap.
RUN_LONGER_THAN_EXPECTEDRun still going well past a usual durationscrape_details: true and/or max_exhibitions: 0 with broad filtersNarrow the filters, or abort and re-run with a cap.
DATE_NOT_PARSEABLEdate won't parse as ISO-8601By design — it's source-formatted textFix Expectation: parse leniently; formats vary.
CONNECTOR_TOOL_NOT_FOUNDLog: tool not available, followed by the available tools and the tool's input schemamcpTool name is wrongModify Input: copy an exact name from that log line. Dataset unaffected.
CONNECTOR_NO_TOOLLog: connector selected but no tool name providedmcpConnector set, mcpTool emptyModify Input: set mcpTool, or clear mcpConnector.
CONNECTOR_ARGS_REJECTEDConnector reports an error per call; schema logged just abovemcpArguments doesn't match the tool's required shapeModify Input: shape the arguments to the logged schema. Dataset unaffected.
CONNECTOR_UNREACHABLELog: could not reach the connectorConnector not authorised, or running outside the Apify platformAuthorise it in Apify, or set deliveryMode: "none". Data already saved.

Verify any platform-level HTTP status behaviour against the Apify API reference before relying on it in automation — the rows above describe this Actor's observable behaviour, not Apify's transport layer.


Natural Language → Actor Mapping

A user says…IntentInput
"Trade shows in Munich"City sweep{"country":"Germany","city":"Munich"}
"Every exhibition in Las Vegas with organizer contacts"City + contacts{"country":"USA","city":"Las Vegas","scrape_details":true}
"Pharma trade shows in Europe"Industry + region{"industry":"Healthcare & Pharmaceuticals","region":"Europe"}
"Automotive exhibitions worldwide"Industry only{"industry":"Automobile - Automotive Industry","max_exhibitions":0}
"What trade fairs happen in India?"Country sweep{"country":"India"}
"Food industry expos in Asia"Industry + region{"industry":"Agriculture - Food Processing","region":"Asia - Pacific"}
"Who organises the big electronics fairs in China?"Contacts{"industry":"Electronics - Electrotechnics","country":"China","scrape_details":true}
"Build me a 2026 fashion trade-show calendar"Industry sweep{"industry":"Fashion - Apparel - Textiles - Leather - Fur","max_exhibitions":0}
"Which venues host exhibitions in Dubai?"Venue research{"country":"UAE - United Arab Emirates","city":"Dubai","scrape_details":true}
"Just give me a quick sample first"Cheap probe{"country":"Germany","max_exhibitions":10}
"Put Munich's trade shows in our Notion"Scrape + deliverAbove, plus mcpConnector, mcpTool, mcpArguments
"Post this week's new UK expos to Slack"Scrape + deliver{"country":"UK - United Kingdom","mcpConnector":"slack","mcpTool":"send_message","deliveryMode":"summary"}

Should NOT route here: who is exhibiting at a show or their stand numbers · visitor or attendee data · booking a stand or buying tickets · floor plans or hall maps · past editions and historical archives · concerts, festivals and ticketed consumer events (use the Ticketmaster or Eventim Actors) · academic conference CFPs and paper deadlines · company data that isn't tied to a trade show.


Agent Execution & Routing Logic

Does the user want TRADE SHOWS / EXHIBITIONS?
├── NO → not this Actor.
│ concerts / ticketed events → Ticketmaster or Eventim Actor
│ meetups / local events → Smart Event Scraper
│ exhibitor or visitor lists → not published in this directory
│ stand booking / floor plans → not a scraping task
└── YES
├── Do they name a CITY?
│ ├── yesset country + city, and LEAVE industry EMPTY
│ │ (this is the fast path — every industry, one pass)
│ └── no → set whichever of industry / region / country they named
├── Do they want organizer or venue CONTACT details?
│ ├── yes → scrape_details: true (slower, but this is the prospect list)
│ └── no → scrape_details: false (calendar-grade data, faster)
├── How much do they want?
│ ├── a first probe → max_exhibitions: 10
│ ├── a sample → max_exhibitions: 10-50
│ ├── a full sweep → max_exhibitions: 0 + ALWAYS set a spend cap
│ └── unspecified → leave at 50 (the default)
└── Should results land in another app?
├── yes → mcpConnector + mcpTool + deliveryMode
│ one record per show → perEvent
│ one digest → summary
│ long list, one doc → chunked
└── no → leave mcpConnector empty; dataset only

Cost Control & Pricing Transparency

This Actor bills for platform usage — the compute time and resources the run consumes — not per row. Current rates are shown on the Actor's Apify page, and the Console shows the live total while a run is in progress. Because cost tracks run length, the two inputs that decide what you pay are how much of the hierarchy you walk and whether you open each exhibition's detail page.

ChoiceEffect on cost
max_exhibitions: 10Cheapest useful run. Enough rows to validate your filters and field shape before committing.
scrape_detailsThe biggest single multiplier. true visits every exhibition's own page, so run time scales with the number of exhibitions.
max_exhibitionsThe hard stop. 50 is a predictable run; 0 is unbounded and should always be paired with a spend cap.
Direct city mode (country + city, no industry)The cheapest way to cover a whole city — one pass instead of walking every industry.
Filter breadthEach level you leave blank multiplies the branches walked. An industry alone with max_exhibitions: 0 is a global crawl.

Keeping runs predictable:

  1. First run: max_exhibitions: 10 with scrape_details: false. Confirm your filters resolve and the field shape is what you expect, for pennies.
  2. Then raise max_exhibitions. Turn scrape_details on only once you know you want the contact block — it is the larger multiplier of the two.
  3. Always set a spend cap on unattended runsmaxTotalChargeUsd on the API call, or the run limit in the Console. With max_exhibitions: 0 this is the only hard ceiling.
  4. Prefer a narrow filter over a big cap. One country with details on is usually more useful, and cheaper, than a global crawl truncated at 100.

Companion machine-readable files

FileWhat it defines
.actor/input_schema.jsonEvery input, its type, default, and the exact industry, region and country enums
.actor/actor.jsonActor identity, Store categories, and the two dataset views
.actor/output_schema.jsonWhere the run's output is exposed

If this page and the schema files disagree, the schema files win. They are what the platform validates against at run time; this page is documentation and can lag a release. In particular, generate industry and country values from input_schema.json, never from the prose here.


Compliance & Data Privacy

  • Public directory listings only. Everything returned is published on a public page with no login and no paywall.

  • The contact data is business contact data. organizer_email, organizer_phone, organizer_fax, organizer_address and event_email are the organising company's published business contact points — the ones they publish precisely so exhibitors and visitors can reach them. No individual's name, personal email or direct line is collected.

  • But treat it as personal data when it is. If a published organizer email happens to be a named individual's (firstname.lastname@company.com) or a small organiser's personal number, that field is personal data under GDPR / UK GDPR and India's DPDP Act 2023 the moment you store it. You become the controller. Apply a retention policy, and honour erasure requests.

  • Marketing to organizers is your responsibility, and the rules are strict. A published business email is not consent to be marketed to. Outreach falls under CAN-SPAM (US), CASL (Canada — express or implied consent required), ePrivacy/PECR (UK/EU) and the DPDP Act. If you rely on GDPR legitimate interests for B2B outreach, do and keep the balancing test, identify yourself, and honour opt-outs on the first request.

  • EventsEye's Terms of Service apply to you. The directory sets its own terms on automated access and on redistributing its listings — including compiling them into a competing directory or reselling them as a database. Review those terms and stay within them; this Actor gives you the capability, not the licence.

  • Attribution over mirroring. Listings are EventsEye's compilation and the organisers' content. Link back via exhibition_url rather than republishing the directory wholesale, and don't present scraped listings as your own original research.

  • Data minimisation is also cost minimisation. Leave scrape_details off unless you actually need the contact block, and filter to the industry, country or city you're working on. Collecting less is cheaper, faster, and the defensible position if anyone asks.


🆘 Support & Custom Pipeline Engineering

Need automated multi-city scheduled feeds, webhook enrichment, or enterprise data warehouse syncs?


ActorBest for
This ActorTrade shows and exhibitions in depth — the full record, organizer contacts included
Smart Event ScraperFinding events across six platforms at once with category, keyword and date filters
Ticketmaster ScraperTicketed concerts, sports and shows
Eventim ScraperEuropean ticketed events
Meetup ScraperCommunity meetups in one city
Website Contact ScraperContact details from an organizer's own site once you have their domain

A natural pairing: run this Actor with scrape_details: true to get organizer websites, then feed those domains to Website Contact Scraper to go deeper on each one.

Browse the full catalogue at scraper.techforce.global.



{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "EventsEye Trade Show Scraper — Global Exhibition Directory with Organizer & Venue Contacts",
"applicationCategory": "BusinessApplication",
"applicationSubCategory": "Web Scraping / Trade Show & Exhibition Data",
"operatingSystem": "Any (cloud-hosted on Apify)",
"url": "https://apify.com/techforce.global/events-eye-scraper",
"description": "Scrapes trade shows and exhibitions from the EventsEye directory, filtered by industry, region, country or city, and returns each show's dates, duration, recurrence cycle, venue, industry and category — plus the organizer's full contact record and the show's target audience when detail scraping is enabled. Optional direct delivery into Notion, Slack, Jira, Airtable or any MCP connector.",
"author": {
"@type": "Organization",
"name": "Techforce Global",
"url": "https://scraper.techforce.global/"
},
"provider": {
"@type": "Organization",
"name": "Apify",
"url": "https://apify.com"
},
"offers": {
"@type": "Offer",
"category": "Pay per platform usage",
"description": "Billed for the compute time and resources a run consumes. Current rates are shown on the Actor's Apify page.",
"url": "https://apify.com/techforce.global/events-eye-scraper"
},
"featureList": [
"32 industries, 4 regions and 92 countries covered",
"Independent, composable industry / region / country / city filters",
"Direct city mode returns every exhibition in a city across all industries in one pass",
"Optional organizer contact block: name, address, phone, fax, email and website",
"Venue name and postal address",
"Recurrence cycle, duration and target audience per exhibition",
"Run cap applied across every branch of the crawl",
"Optional MCP delivery to Notion, Slack, Jira, Airtable and more",
"Two Console dataset views including a full detail view"
],
"isAccessibleForFree": false,
"softwareRequirements": "Apify account and API token",
"keywords": "trade show scraper, exhibition directory, EventsEye scraper, trade fair data, exhibition organizer contacts, B2B lead generation, trade show calendar, event venue data, industry exhibitions, MCP connector, market research"
}