Multi Source Event Scraper avatar
Multi Source Event Scraper

Pricing

Pay per event

Go to Apify Store
Multi Source Event Scraper

Multi Source Event Scraper

Normalize and dedupe events from Eventbrite, Meetup, and Luma into a single canonical feed. Outputs clean JSON/CSV/iCal with source links, tags, and “last verified” timestamps, perfect for directories, newsletters, and automation.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Alex Pavlov

Alex Pavlov

Maintained by Community

Actor stats

2

Bookmarked

3

Total users

2

Monthly active users

10 hours ago

Last modified

Share

Multi-Source Event Extractor

An Apify Actor that extracts events from Eventbrite, Meetup, and Luma, normalizes them to a canonical schema, deduplicates across sources, and outputs clean data in multiple formats.

Features

  • Multi-platform extraction: Eventbrite, Meetup, and Luma
  • Two operation modes: Direct URLs or location-based discovery
  • Smart deduplication: Fingerprint-based matching to identify duplicate events across platforms
  • Multiple export formats: JSON (Dataset), CSV, and iCal (.ics)
  • Canonical schema: All events normalized to a consistent output format
  • Geo-coordinates: Extracts venue latitude/longitude when available
  • Date filtering: Filter events by start date range

Input Configuration

Basic Example (URLs Mode)

{
"mode": "urls",
"sources": ["eventbrite", "meetup", "luma"],
"startUrls": [
{ "url": "https://www.eventbrite.com/o/your-organizer-page" },
{ "url": "https://www.meetup.com/your-meetup-group/" },
{ "url": "https://lu.ma/your-event" }
],
"maxItems": 100
}

Discovery Mode Example

{
"mode": "discover",
"sources": ["eventbrite", "meetup", "luma"],
"discover": {
"locationQuery": "San Francisco",
"keywords": ["tech", "ai"],
"dateRange": "this_week",
"priceRange": "free"
},
"maxItems": 50
}

Input Parameters

ParameterTypeRequiredDefaultDescription
modestringYes-"urls" for direct URLs, "discover" for location search
sourcesarrayNoAllPlatforms to extract from: eventbrite, meetup, luma
startUrlsarrayRequired for urls mode-List of URLs to process
discoverobjectRequired for discover mode-Discovery configuration
maxItemsnumberNo0 (unlimited)Maximum events to extract
minStartDatestringNo-ISO date string for minimum event start
maxStartDatestringNo-ISO date string for maximum event start
debugbooleanNofalseEnable verbose logging

Discover Configuration

ParameterTypeDescription
locationQuerystringCity or location to search (e.g., "San Francisco", "New York")
keywordsarraySearch keywords (e.g., ["tech", "networking"])
dateRangestringtoday, tomorrow, this_week, this_weekend, next_week, this_month, custom
dateFromstringStart date for custom range (ISO format)
dateTostringEnd date for custom range (ISO format)
priceRangestringfree, paid, or all
sortBystringdate, relevance, or popularity
onlineOnlybooleanOnly include online events

Output Schema

Each event is output in the CanonicalEvent format:

{
canonicalId: string; // Stable fingerprint-based ID
title: string;
startTime: string; // ISO 8601
endTime?: string; // ISO 8601
timezone?: string;
url: string; // Primary URL
platform: "eventbrite" | "meetup" | "luma" | "multi";
venue?: {
name?: string;
address?: string;
city?: string;
region?: string;
country?: string;
lat?: number;
lng?: number;
};
organizer?: {
name?: string;
url?: string;
};
price?: {
isFree: boolean;
min?: number;
max?: number;
currency?: string;
raw?: string;
};
images?: string[];
descriptionSnippet?: string; // Max 500 chars
sourceListings: Array<{ // All sources where event was found
source: string;
url: string;
extractedAt: string;
sourceEventId?: string;
}>;
dedupe?: {
fingerprint: string;
mergedCount: number;
};
meta: {
extractedAt: string;
};
}

Output Formats

1. Dataset (JSON)

Events are pushed to the default Apify Dataset. Access via:

  • Apify Console: Dataset tab in run details
  • API: https://api.apify.com/v2/datasets/{datasetId}/items

2. iCal Export

Automatically exported to Key-Value Store as events.ics:

  • Import directly into Google Calendar, Apple Calendar, Outlook
  • Includes location, description, and geo-coordinates
  • Download from Key-Value Store tab or API

Tip: For CSV export, use Apify's native Dataset export: add ?format=csv to the Dataset API URL.

Deduplication

The Actor automatically identifies and merges duplicate events across platforms using fingerprint-based matching:

  • Title matching: Normalized (lowercase, no special characters)
  • Time window: Events within 15 minutes are considered the same
  • Venue matching: Geographic bucket (~1km) or city-level fallback

When duplicates are found, events are merged with:

  • Platform precedence: Eventbrite > Meetup > Luma
  • All source URLs preserved in sourceListings
  • platform set to "multi" if from multiple sources

Supported URL Patterns

Eventbrite

  • Event pages: eventbrite.com/e/{event-slug}
  • Organizer pages: eventbrite.com/o/{organizer}
  • Search results: eventbrite.com/d/{location}/{category}

Meetup

  • Event pages: meetup.com/{group}/events/{event-id}
  • Group pages: meetup.com/{group}
  • Search: meetup.com/find/

Luma

  • Event pages: lu.ma/{event-slug}
  • City pages: lu.ma/sf, lu.ma/nyc
  • Category pages: lu.ma/tech, lu.ma/ai

Usage Examples

Extract from Specific Organizers

{
"mode": "urls",
"sources": ["eventbrite"],
"startUrls": [
{ "url": "https://www.eventbrite.com/o/techcrunch-8868586981" }
],
"maxItems": 20
}

Discover Tech Events in Multiple Cities

{
"mode": "discover",
"sources": ["eventbrite", "meetup", "luma"],
"discover": {
"locationQuery": "New York",
"keywords": ["tech", "startup", "networking"],
"dateRange": "this_month",
"priceRange": "free"
},
"maxItems": 100
}

Extract Free Events This Weekend

{
"mode": "discover",
"sources": ["eventbrite", "luma"],
"discover": {
"locationQuery": "Los Angeles",
"dateRange": "this_weekend",
"priceRange": "free"
}
}

Local Development

# Install dependencies
npm install
# Build
npm run build
# Run locally
npx apify-cli run --input-file=input.json
# Run tests
npm test

Proxy Configuration

For production use on Apify platform, configure proxy:

{
"proxyConfiguration": {
"useApifyProxy": true
}
}

Limitations

  • Rate limiting may apply on source platforms
  • Some events may require login to access full details
  • Geo-coordinates depend on venue data quality from source
  • Discovery mode availability varies by platform and location

Cost Estimation

Resource usage depends on:

  • Number of URLs/events to process
  • Whether JavaScript rendering is needed (always enabled)
  • Network conditions and retries

Typical runs:

  • 50 events from URLs: ~0.05 compute units
  • Discovery mode (100 events): ~0.15 compute units

License

Apache 2.0