Universal Event Scraper avatar

Universal Event Scraper

Pricing

Pay per event

Go to Apify Store
Universal Event Scraper

Universal Event Scraper

The Universal Event Scraper is an Apify Actor that combines four specialized scrapers into a single run. Allevents.in Eventseye.com District.in Meetup.com. It automatically handles dynamic content and produces clean structured data that can be exported or integrated into other systems.

Pricing

Pay per event

Rating

4.4

(5)

Developer

Techforce Global

Techforce Global

Maintained by Community

Actor stats

1

Bookmarked

26

Total users

1

Monthly active users

a day ago

Last modified

Share

Universal Event Scraper & MCP Connector

Scrape live events from five platforms — AllEvents, EventsEye, District, Meetup, and Eventbrite — for any city, in one run, all normalized into a single clean schema. No juggling five separate scrapers, no reconciling five different field names.

Built for event marketers, researchers, aggregator sites, and automation builders who need "what's happening in this city" as structured data — not a pile of mismatched HTML.

Pick your sources → enter a city → get every event, normalized → deliver it straight into Notion, Slack, Airtable, or your CRM.


⭐ Why This Actor?

  • Five sources, one inputallevents, eventseye, district, meetup, eventbrite. Select any combination and get results from all of them in a single dataset.
  • One schema to rule them all — every platform's raw HTML/JSON is normalized to the same 8 fields (source, title, url, date, city, venue, price, venue_address), so downstream code never has to special-case a platform.
  • Handles the hard parts per platform — infinite scroll and lazy loading (AllEvents), paginated HTML tables plus detail-page enrichment (EventsEye), city-picker dialogs with a concurrent page pool (District), GraphQL response interception with SSR fallback (Meetup), and embedded JSON parsing (Eventbrite).
  • Never silently drops a platform — if a source can't be reached, it logs a warning and the rest of the run continues; you still get results from the other sources.
  • Deliver anywhere via MCP connectors — push scraped events straight into Notion, Slack, Airtable, Jira, GitHub, and more, right after the scrape finishes.
  • Export-ready — JSON, CSV, Excel, or direct API integration for your own pipeline.

📝 Use Cases & ROI

Use CaseTime SavedWhat You Get
Event aggregator / directory site3–6 hrs/cityEvery event across 5 platforms, normalized and ready to publish
City / market monitoring2–4 hrs/weekA recurring feed of what's happening in a city, without checking 5 sites
Lead generation from trade shows & conferences4–8 hrs/batchExhibitor-facing events with venue, address, and pricing pulled automatically
Calendar & CRM sync2–5 hrs/setupStructured events fed straight into your calendar, CRM, or dashboard via MCP
Community & meetup tracking1–3 hrs/weekLocal tech/social meetups collected without manually browsing Meetup

🚀 How to Use

  1. Open the Actor on Apify.
  2. Select one or more Sources: AllEvents.in, EventsEye.com, District.in, Meetup.com, Eventbrite (default: eventseye).
  3. Enter the Location — a city name used by every selected scraper (e.g. dubai, mumbai, chicago).
  4. Set the Max Events (Per Source) — applies per source, not per run (default: 50, 0 = no limit on paid plans).
  5. Click Run — results stream into the dataset as each source finishes.
  6. (Optional) Pick an MCP connector to deliver the scraped events into Notion, Slack, Airtable, or another tool automatically.
  7. Download as JSON, CSV, or Excel — or let the connector push results into your tools directly.

💰 Free vs. paid plans: on the free plan, results are capped at 2 events per source with no charge. On a paid plan, results are unlimited and each scraped event is billed via Actor.charge().

💡 First time with a connector? Run once with a connector selected — the run log prints the connector's available tool names, so you know what to put in Connector tool name.


🧩 Input Configuration

FieldTypeRequiredDescription
sourceArray✔️ YesOne or more of "allevents", "eventseye", "district", "meetup", "eventbrite".
locationString✔️ YesCity name used by all selected scrapers (e.g. "dubai").
limitInteger❌ NoMax events per source. Default 50, minimum 0, maximum 50.
mcpConnectorConnector❌ NoDeliver the scraped events into a connector you've authorized (Notion, Slack, Airtable, Jira, GitHub, …).
deliveryModeEnum❌ Nosummary (one call listing all events), chunked (split a long event list across a few calls), perEvent (one call per event), or none. Default: summary.
mcpToolString❌ NoTool to call on the connector (e.g. create_page, send_message, append_row).
mcpArgumentsObject❌ NoArguments for the tool; string values support {placeholders} (see below).
mcpMessageTemplateString❌ NoTemplate rendered once per call, exposed as the {message} placeholder.

Example — Scrape four sources in one run

{
"source": ["allevents", "eventseye", "district", "meetup"],
"location": "chicago",
"limit": 50
}

Note: limit applies per source. With limit: 50 and four sources selected, you get up to 200 total records.

Example — Scrape and post a summary to Slack

{
"source": ["eventseye", "district"],
"location": "dubai",
"limit": 25,
"mcpConnector": "<your-slack-connector>",
"deliveryMode": "summary",
"mcpTool": "send_message",
"mcpArguments": { "channel": "#events", "text": "{message}" },
"mcpMessageTemplate": "Found {eventCount} events in {location} from {sources}:\n\n{events}"
}

Example — Scrape and append a row per event to Google Sheets (or Airtable)

{
"source": ["meetup"],
"location": "berlin",
"limit": 50,
"mcpConnector": "<your-sheets-connector>",
"deliveryMode": "perEvent",
"mcpTool": "append_row",
"mcpArguments": {
"row": {
"Title": "{title}",
"Date": "{date}",
"Venue": "{venue}",
"City": "{city}",
"Price": "{price}",
"URL": "{url}"
}
}
}

Example — Scrape and create a Notion page, chunked for large result sets

{
"source": ["allevents", "eventbrite"],
"location": "mumbai",
"limit": 50,
"mcpConnector": "<your-notion-connector>",
"deliveryMode": "chunked",
"mcpTool": "create_page",
"mcpArguments": {
"parent": { "page_id": "<your-page-id>" },
"pages": [
{
"properties": { "title": "Events in {location} (part {part}/{partCount})" },
"content": "{events}"
}
]
}
}

Placeholders available in arguments / template

Summary & chunked modes: {location} · {sources} (comma-separated list of scraped sources) · {eventCount} · {events} (all events, one per line: • Title — date @ venue, city (price) — url) · {message} Chunked mode adds: {part} · {partCount} Per-event mode: {source} · {title} · {url} · {date} · {city} · {venue} · {price} · {venue_address} · {message}


📤 Output Dataset

All five sources produce records in the same standardized schema. The source field tells you which platform each record came from. Fields that are unavailable for a given source are returned as "N/A".

Output Schema

FieldTypeDescription
sourceStringPlatform the event was scraped from
titleStringEvent name
urlStringDirect link to the event page
dateStringEvent date/time (format varies by source)
cityStringCity the event is in
venueStringVenue name ("N/A" if unavailable)
priceStringTicket price, "Free", or "N/A"
venue_addressStringFull venue address ("N/A" if unavailable)

allevents.in

{
"source": "allevents",
"title": "Chicago Jazz Festival 2025",
"url": "https://allevents.in/chicago/chicago-jazz-festival/2600029621208446",
"date": "Fri, 29 Aug, 2025 - 06:00 PM",
"city": "Chicago",
"venue": "Millennium Park",
"price": "N/A",
"venue_address": "N/A"
}

eventseye.com

{
"source": "eventseye",
"title": "International Manufacturing Technology Show",
"url": "https://www.eventseye.com/fairs/f-imts-1234.html",
"date": "13 - 18 Sep 2026",
"city": "Chicago",
"venue": "McCormick Place",
"price": "N/A",
"venue_address": "2301 S Lake Shore Dr, Chicago, IL 60616"
}

district.in

{
"source": "district",
"title": "Lollapalooza Chicago 2025",
"url": "https://www.district.in/events/lollapalooza-chicago-2025",
"date": "2025-07-31T12:00:00",
"city": "Chicago",
"venue": "Grant Park",
"price": "USD149",
"venue_address": "N/A"
}

meetup.com

{
"source": "meetup",
"title": "Chicago Python User Group — Monthly Meetup",
"url": "https://www.meetup.com/chipy/events/305123456",
"date": "2025-08-14T18:30:00+00:00",
"city": "Chicago",
"venue": "Braintree",
"price": "Free",
"venue_address": "222 W Merchandise Mart Plaza, Chicago, IL"
}

eventbrite.com

{
"source": "eventbrite",
"title": "Dubai Food Festival",
"url": "https://www.eventbrite.com/e/dubai-food-festival-tickets-123456789",
"date": "2025-03-15T18:00:00",
"city": "Dubai",
"venue": "Dubai World Trade Centre",
"price": "Free",
"venue_address": "N/A"
}

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.


🔌 Integrations & Delivery

Deliver scraped events into any MCP connector you've authorized in Apify — no glue code, no webhooks:

  • Notion — create a page per run or per event (use chunked mode for large result sets so Notion never times out)
  • Slack / Discord — post a summary or per-event alerts to a channel
  • Airtable / Google Sheets — append a structured row per event
  • Jira / GitHub / Linear — open tasks or issues from scraped events
  • …or any other MCP-compatible connector

Credentials stay private — delivery runs through the Apify MCP Proxy, so the Actor never sees your connector tokens. You can also consume the dataset directly via the Apify API, or wire it into n8n, Zapier, and Make.

⚙️ Delivery modes: summary sends every scraped event in one call, chunked splits a large event list across a few calls/pages, and perEvent sends one call per scraped event. MCP delivery only runs on the Apify platform and never affects what's saved to the dataset — it happens after every selected source has finished scraping.


🛠️ How It Works

my_actor/main.py reads the input, then for each selected source:

  1. allevents — launches Playwright, scrolls the lazy-loaded event list, and parses cards with BeautifulSoup.
  2. eventseye — fetches paginated HTML tables with httpx, then optionally enriches each exhibition with organizer/venue detail-page data.
  3. district — resolves the city via a click-driven picker dialog, collects event links, then scrapes detail pages through a concurrent page pool (5 pages by default).
  4. meetup — loads the listing page in Playwright, intercepts GraphQL responses for event data, and falls back to SSR/DOM parsing where needed.
  5. eventbrite — fetches the public browse page and parses the embedded __SERVER_DATA__ JSON blob (no API key required).

Every scraped record is normalized to the shared schema and pushed to the dataset (respecting the free-plan cap or billing via Actor.charge()). Once all selected sources finish, if an MCP connector is configured, deliver_to_connector() sends the collected events to the chosen tool in summary, chunked, or perEvent mode.

Built with: Apify SDK for Python · Playwright · httpx · BeautifulSoup · MCP


🆘 Support

For issues, custom scraping requests, or feature suggestions: Email: bhavin.shah@techforceglobal.com


Need a Custom Pipeline?

Want more sources, scheduled refreshes, deeper enrichment, or a full data-warehouse integration?

📅 Book a Free 15-min Consultation


Made with ❤️ by Techforce Specialists in High-Performance Web Scrapers and AI Automation.


Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by AllEvents, EventsEye, District, Meetup, Eventbrite, or their respective owners. All trademarks are the property of their respective owners. The Actor collects only publicly available event listings and does not log into, or scrape behind the authentication of, any platform. Use the data responsibly and in compliance with applicable laws (including GDPR/CCPA) and the terms of the platforms you operate on.