Trade Fair Exhibitor Extractor avatar

Trade Fair Exhibitor Extractor

Pricing

Pay per usage

Go to Apify Store
Trade Fair Exhibitor Extractor

Trade Fair Exhibitor Extractor

Extracts exhibitor companies from trade fair directories — name, country, website and a corporate email — and refuses to deliver rows it cannot verify. Rejects archived and cancelled events before crawling, and never passes off the fair organiser’s address as an exhibitor’s.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

NguyenNhatHao

NguyenNhatHao

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

Extracts exhibitor company data from trade fair directories — company name, country, website and a corporate email address — and refuses to deliver rows it cannot verify.

Why this exists

Two things go wrong when scraping fair directories, and neither of them raises an error.

Archived events look identical to upcoming ones. Fair websites keep past editions online for years. A search-driven crawl picks up the 2024 edition, extracts it perfectly cleanly, and hands you a thousand exhibitors from an event that finished eighteen months ago.

The "contact by email" link usually belongs to the organiser. On many directories that control points at the fair's own address, not the exhibitor's. Take it at face value and every row in your file carries the same valid, useless address — and it parses, validates and exports without complaint.

This Actor is built around rejecting both.

What it does

  • Checks the event dates before crawling. If the fair has ended, was cancelled, or falls outside the target month, the run stops immediately — zero requests spent.
  • Verifies every email against the company's own domain. An address that doesn't match the exhibitor's website is withheld, whatever page it appeared on.
  • Decodes obfuscated addresses. Directories often base64-encode the exhibitor's real address to defeat naive scrapers while leaving the organiser's in plain text. This Actor reads the encoded one.
  • Prefers role mailboxes (info@, sales@) over named individuals, which keeps the output on the safer side of EU data-protection rules.
  • Reports its yield. Every run returns how many rows were delivered, how many were withheld, and why.

Input

{
"startUrls": [
{ "url": "https://www.example-fair.com/en/exhibitors/company-name-123" }
],
"fairName": "GaLaBau 2026",
"fairDateText": "15.09. - 18.09.2026",
"targetMonth": "2026-09",
"country": "Germany",
"maxRequestsPerCrawl": 100
}
FieldRequiredMeaning
startUrlsyesExhibitor pages to process
fairDateTextnoEvent dates. If given, the fair is checked before any crawling
targetMonthnoYYYY-MM. Defaults to the current month
fairNamenoLabel used in logs and the rejection record
countrynoApplied to every row when the directory doesn't publish it
organiserDomainsnoHosts belonging to the fair. Defaults cover the major European venues
roleMailboxesOnlynoDefault true. Set false to accept named work addresses
allowBrandMatchnoDefault true. Treats wuerth.com and wuerth.de as the same company

Output

One dataset row per verified exhibitor:

{
"company": "4F Maschinentechnik GmbH",
"country": "Germany",
"website": "https://4-f.de",
"email": "info@4-f.de",
"domain": "4-f.de",
"sourceUrl": "https://www.example-fair.com/en/exhibitors/4f-maschinentechnik-gmbh"
}

domain is the deduplication key. Company names drift between editions — ACO GmbH, ACO Gmbh, ACO Group SE — while the registrable domain stays put.

The run also stores a RUN_SUMMARY:

{ "delivered": 27, "withheld": 23, "total": 50, "yieldPct": 54,
"reasons": { "personal_mailbox": 12, "third_party_email": 11 } }

What gets withheld, and why

Rows are never silently dropped. Each one is logged with a reason:

ReasonMeaning
organiser_emailThe only address on the listing belonged to the fair
third_party_emailThe address didn't match the company's own domain
personal_mailboxOnly a named individual's inbox was published
no_websiteThe directory didn't publish a company website
no_corporate_emailNo address found at all

A visible gap is more useful than a plausible address that goes nowhere.

Expected yield

Measured on 72 real exhibitor pages from a live directory:

Rule setDelivered
Role mailboxes only, exact domain match54–64%
Plus brand matching across TLDs60–68%
Plus named individuals at the company domain77–84%

Most of the remainder are companies that publish a parent company's or a distributor's address. Those aren't recoverable by rule — expect a practical ceiling around 80%.

Limitations

  • Directory-specific selectors. The default handler looks for the first external link and any mailto: on the page. Layouts vary; some directories need adjusting.
  • No JavaScript rendering. This uses Cheerio, so directories that render exhibitor lists client-side need a browser-based crawler instead.
  • Cancellation detection is keyword-based. It catches explicit wording; a quietly cancelled event will still pass the date check.
  • It doesn't make outreach lawful. Verify your basis for contacting the companies you collect.

Tests

$npm test

41 tests, no network required. Most are built from data captured from a live directory, including the exhibitor page whose only visible email belongs to the organiser.