Universal Event Scraper
Pricing
Pay per event
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
Maintained by CommunityActor stats
1
Bookmarked
26
Total users
1
Monthly active users
a day ago
Last modified
Categories
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 input —
allevents,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 Case | Time Saved | What You Get |
|---|---|---|
| Event aggregator / directory site | 3–6 hrs/city | Every event across 5 platforms, normalized and ready to publish |
| City / market monitoring | 2–4 hrs/week | A recurring feed of what's happening in a city, without checking 5 sites |
| Lead generation from trade shows & conferences | 4–8 hrs/batch | Exhibitor-facing events with venue, address, and pricing pulled automatically |
| Calendar & CRM sync | 2–5 hrs/setup | Structured events fed straight into your calendar, CRM, or dashboard via MCP |
| Community & meetup tracking | 1–3 hrs/week | Local tech/social meetups collected without manually browsing Meetup |
🚀 How to Use
- Open the Actor on Apify.
- Select one or more Sources:
AllEvents.in,EventsEye.com,District.in,Meetup.com,Eventbrite(default:eventseye). - Enter the Location — a city name used by every selected scraper (e.g.
dubai,mumbai,chicago). - Set the Max Events (Per Source) — applies per source, not per run (default:
50,0= no limit on paid plans). - Click Run — results stream into the dataset as each source finishes.
- (Optional) Pick an MCP connector to deliver the scraped events into Notion, Slack, Airtable, or another tool automatically.
- 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
| Field | Type | Required | Description |
|---|---|---|---|
source | Array | ✔️ Yes | One or more of "allevents", "eventseye", "district", "meetup", "eventbrite". |
location | String | ✔️ Yes | City name used by all selected scrapers (e.g. "dubai"). |
limit | Integer | ❌ No | Max events per source. Default 50, minimum 0, maximum 50. |
mcpConnector | Connector | ❌ No | Deliver the scraped events into a connector you've authorized (Notion, Slack, Airtable, Jira, GitHub, …). |
deliveryMode | Enum | ❌ No | summary (one call listing all events), chunked (split a long event list across a few calls), perEvent (one call per event), or none. Default: summary. |
mcpTool | String | ❌ No | Tool to call on the connector (e.g. create_page, send_message, append_row). |
mcpArguments | Object | ❌ No | Arguments for the tool; string values support {placeholders} (see below). |
mcpMessageTemplate | String | ❌ No | Template 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:
limitapplies per source. Withlimit: 50and 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
| Field | Type | Description |
|---|---|---|
source | String | Platform the event was scraped from |
title | String | Event name |
url | String | Direct link to the event page |
date | String | Event date/time (format varies by source) |
city | String | City the event is in |
venue | String | Venue name ("N/A" if unavailable) |
price | String | Ticket price, "Free", or "N/A" |
venue_address | String | Full 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
chunkedmode 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:
summarysends every scraped event in one call,chunkedsplits a large event list across a few calls/pages, andperEventsends 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:
- allevents — launches Playwright, scrolls the lazy-loaded event list, and parses cards with BeautifulSoup.
- eventseye — fetches paginated HTML tables with
httpx, then optionally enriches each exhibition with organizer/venue detail-page data. - 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).
- meetup — loads the listing page in Playwright, intercepts GraphQL responses for event data, and falls back to SSR/DOM parsing where needed.
- 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.


