DEV Community

CleanScrape
CleanScrape

Posted on AI-assisted

Track "Map Your Show" exhibitor changes without comparing spreadsheets by hand

I'm building CleanScrape as a small collection of practical data tools. With the Event Exhibitor Scraper and Change Monitor, I want to make one fairly specific task easier: export an exhibitor list, then see what changed without comparing the next spreadsheet by hand.

A new company, a different booth or an updated description can be useful information when you are planning an event visit or researching suppliers. But I do not want an incomplete download to look like dozens of companies disappearing. That is why the monitoring checks matter as much as the export.

I'll show a small snapshot first, then how to keep a baseline for later comparisons. This is a paid Actor on Apify. Its scope is public "Map Your Show" 8_0 directories on EVENT.mapyourshow.com, not every conference website. It does not provide attendee or hidden contact data.

First, export a small list

Open the Actor in Apify and use this input:

{
  "eventUrls": [
    "https://iaapaexpo26.mapyourshow.com/8_0/explore/exhibitor-alphalist.cfm"
  ],
  "mode": "snapshot",
  "maxExhibitorsPerEvent": 100,
  "includeDetails": false
}
Enter fullscreen mode Exit fullscreen mode

Review the Pricing tab and set a run spending limit before starting. This requests up to 100 exhibitors, with optional profile enrichment switched off. The IAAPA example depends on that edition's directory remaining public.

After the run finishes, open Output and export CSV or Excel. Rows include company names, booths, listing descriptions and source links where available. Booths are arrays in the JSON because an exhibitor can have more than one.

Open SUMMARY in the run's key-value store as well. A capped_snapshot is a deliberately limited sample, not a claim that you collected the entire directory. With optional details off, website and location fields can be null.

At the base rate, a snapshot returning 100 records costs $0.20, with no startup fee. I recommend starting here so you can see whether the fields are useful before setting up a recurring check.

Keep a baseline when you need comparisons

For monitoring, use a stable watchlist name and a source-record limit large enough for the whole directory:

{
  "eventUrls": ["https://iaapaexpo26.mapyourshow.com"],
  "mode": "monitor",
  "watchlistName": "iaapa-research-2026",
  "maxExhibitorsPerEvent": 5000,
  "includeDetails": false,
  "keywords": []
}
Enter fullscreen mode Exit fullscreen mode

This is not another 100-row sample. The first complete monitoring run exports the baseline, and those rows are billable. A directory with 1,000 exhibitors costs $2.05 at the base rate for that first check, without optional details. A larger baseline costs more.

The Actor needs permission to create and access its named watchlist storage in the run owner's account. Reuse the same watchlist name and settings on later runs. You can save an Apify Task and add a schedule, but the input alone does not create one.

What a later run tells you

Later runs export changes rather than another copy of the baseline. Change records distinguish additions, updates and confirmed absence. For an update, changedFields tells you what changed, and before and after hold the compared values.

The following is an illustration, not a report about a real exhibitor:

Company Previous booth Current booth Interpretation
Example Manufacturing B12 C08 Booth field changed between checks

An unchanged directory can correctly produce zero change rows. The completed monitoring check still costs $0.05 per directory at the base rate. A check returning ten changes costs $0.07 without optional details.

Those prices are stated as of 15 September 2026, before subscription discounts. The Pricing tab has current rates. Optional enrichment is separately charged when enabled and public details are extracted.

Why I would not treat one missing result as a removal

The monitor requires a complete scan that reconciles retrieved IDs with the directory's reported total. Failed requests, overlapping pages and incompatible source responses must not silently become a new baseline.

A company is reported as no_longer_listed only after two consecutive complete checks miss it. Even then, that means it was no longer observed in the directory, not that it definitely withdrew from the event.

There is an additional guard against sudden mass disappearance: when a baseline has at least ten exhibitors and more than 40% disappear at once, the check is quarantined rather than advancing the baseline. Empty source directories are treated as unavailable.

I prefer that cautious behavior to a convincing-looking list of removals based on a failed fetch. It still has limits: the website can change between requests, and a change that happens and reverts between runs can go unseen. These checks do not make the snapshot perfectly atomic.

Before adding notifications

Run the workflow manually first and inspect SUMMARY. A run covering multiple events can have mixed outcomes. Monitoring supports at most 5,000 source records per event; optional details support at most 500 matched profiles per event.

A retry after interrupted delivery can repeat records, so use recordId for downstream deduplication. Do not assume exactly-once delivery. If you use keyword filters, a company leaving the matching scope is not necessarily leaving the directory.

Email, Slack and CRM actions belong in a separate integration; the Actor does not send messages or contact exhibitors. Start with the snapshot example, inspect the fields, and add monitoring only if you need it.

CleanScrape is independent of Map Your Show and the event organizers. Public availability does not remove the need to respect source terms and data-use restrictions.

I'd like to hear from people who actually work with exhibitor lists. Which changes affect your planning enough to be worth tracking: new companies, booth moves, updated descriptions, or something else?

Top comments (0)