Luma Event Scraper
Pricing
from $2.50 / 1,000 results
Luma Event Scraper
[π° $2.5 / 1K] Extract public events from Luma (lu.ma) β titles, dates, hosts, venues with coordinates, ticket prices, sold-out status, categories, and host social handles. Works on event pages, city/place pages, category pages, calendar/community pages, and the global discover feed.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
SolidCode
Maintained by CommunityActor stats
0
Bookmarked
83
Total users
19
Monthly active users
10 days ago
Last modified
Categories
Share
Extract structured event data from Luma (lu.ma) β the RSVP platform powering AI meetups, crypto summits, hackathons, founder dinners, and city-scoped community gatherings. Drop in event URLs, calendars, communities, cities, or free-text search queries and get a clean row per event with hosts, location, ticketing, and featured guests. Built for event marketers, community builders, sales teams, and trend researchers who need a reliable feed of upcoming Luma events without manually scrolling discover pages every morning.
Why This Scraper?
- 8 native Luma categories β AI, Tech, Crypto, Food & Drink, Arts & Culture, Climate, Fitness, Wellness β matching Luma's own taxonomy exactly, so your filters line up with the discover UI without remapping.
- 6 source types in one input β direct event pages, community calendars, city pages, category feeds, the global discover feed, and user-profile hosting pages, all mixable in a single run.
- Category runs read Luma's own category pages, city by city β asking for Crypto in London returns the same events Luma's London crypto page lists, drawn from everything happening within 50 km rather than the handful a city's front page features. Leave the city empty and one category sweeps every region on Luma, hundreds of events instead of a nearby few.
- 14 city spellings auto-corrected β Luma's handles are short and unguessable (
sf, notsan-francisco;nyc, notnew-york;bengaluru, notbangalore). Type the long form and it's mapped for you. A handle Luma genuinely doesn't have stops the run with a message instead of quietly returning another city's events. - Ticket tiers priced in the event's own currency β GBP, EUR, JPY, SGD, AED and USD all come through as the event actually sells them, never flattened to one assumed currency. Up to 6 tiers per event arrive as separate entries with name, price, availability and tier size, so a Β£9.99 early bird and a Β£38 door ticket stay distinct instead of collapsing into a price range.
- Speaker and host social handles across 6 networks β Twitter, Instagram, LinkedIn, YouTube, TikTok, and personal website, captured for organizers, every listed co-host, and up to 10 featured guests per event.
- Guest counts that admit when they're hidden β when a host makes the RSVP count private, you get an empty value, not a misleading
0. Where ticket tiers are public the count is reconstructed from live tier registrations instead. - Virtual events identified by platform β online events are flagged and named (Zoom, Google Meet, YouTube), so a remote-only event is never filed as in-person with a blank address.
- Date-range early-stop β set a
dateToand the run stops pulling pages the moment the feed passes your window, so you never pay for events outside the range you asked for.
Use Cases
Market Intelligence
- Track which AI / crypto / climate communities are most active by city and month
- Benchmark conference attendance trends across categories
- Map the competitive landscape for your own meetup series
Lead Generation
- Find event organizers in your target industry with their social handles attached
- Identify featured speakers and panelists for outreach
- Build prospect lists from recurring hosts in your city
Community Research
- Monitor what topics your audience is gathering around
- Discover emerging communities before they're widely known
- Track seasonal patterns in event programming
Sponsorship & Partnerships
- Find paid events near capacity in your category β high-intent sponsorship targets
- Surface free, high-attendance events open to brand activation
- Audit how often specific hosts run events to gauge partnership longevity
Trend Spotting
- Detect rising event themes by tracking category-tag frequency over time
- Spot geographic clusters of innovation (AI Tokyo, climate Berlin, crypto Lisbon)
- Watch what topics venture-backed communities like YC, a16z, and South Park Commons are programming
Calendar & Event Discovery
- Build a personal "what's worth attending this week" digest
- Populate your CRM or CMS with curated upcoming events
- Power a public-facing event directory for your niche
Getting Started
Paste any combination of Luma URLs and search queries, then add filters. Below are four input examples ranging from simple to advanced.
1. Quickest start β pull this week's discover feed
{"lumaUrls": ["https://lu.ma/discover"],"maxResults": 100}
2. Find AI events in San Francisco
{"discoverCity": "sf","category": "ai","maxResults": 250}
3. Track a community calendar
{"lumaUrls": ["https://lu.ma/superteam"],"scrapeEventDetails": true,"includeFeaturedGuests": true,"maxResults": 500}
4. Wide-net research β paid crypto events worldwide for the next month
{"lumaUrls": ["https://lu.ma/crypto","https://lu.ma/nyc","https://lu.ma/london","https://lu.ma/sf"],"searchQueries": ["Web3", "DeFi", "blockchain"],"category": "crypto","pricing": "paid","dateFrom": "2026-06-01","dateTo": "2026-06-30","scrapeEventDetails": true,"maxResults": 2000}
Input Reference
Sources
| Parameter | Type | Default | Description |
|---|---|---|---|
lumaUrls | array of strings | ["https://lu.ma/discover"] | Luma URLs of any type β event, calendar, community, city, category, discover, or user-profile. Mix freely in one list. |
searchQueries | array of strings | [] | Free-text queries run against Luma's discover feed (e.g. "AI Tokyo", "Brooklyn music"). Each runs independently and returns up to 50 best matches. |
discoverCity | string | none | Luma city handle, not the full city name: sf, nyc, la, london, tokyo, berlin, paris, singapore, toronto, amsterdam, sydney, mumbai, dubai, seoul and more. It is the handle in the city's Luma address (lu.ma/<handle>). An unrecognised handle stops the run with a message rather than returning another city's events. |
Filters
| Parameter | Type | Default | Description |
|---|---|---|---|
category | enum | All categories | Restrict to one of: AI, Tech, Crypto, Food & Drink, Arts & Culture, Climate, Fitness, Wellness. Combines with discoverCity and with searchQueries. |
dateFrom | date | none | Only include events starting on or after this date (YYYY-MM-DD). |
dateTo | date | none | Only include events starting on or before this date (YYYY-MM-DD). Triggers smart early-stop on ascending feeds. |
eventType | enum | All | All / In-person only / Virtual only. |
pricing | enum | All | All / Free only / Paid only. |
Output Control
| Parameter | Type | Default | Description |
|---|---|---|---|
scrapeEventDetails | boolean | true | On by default. Fetches the full event payload β description, ticket types, category labels, richer hosts, registration questions. Turn it off for faster, lighter runs, but description, ticketTypes, registrationQuestions, locale and categoryNames then come back empty. |
includeFeaturedGuests | boolean | false | Attach Luma's public featured-guest list (up to 10 names per event). Full attendee lists are organizer-only and never available publicly. |
Limits
| Parameter | Type | Default | Description |
|---|---|---|---|
maxEventsPerUrl | integer | 1000 | Cap on events per URL or query. Set 0 for no per-source cap. |
maxResults | integer | 1000 | Hard cap on total rows across every source. 0 = unlimited (internal safety cap of 50,000). |
Output
Each row represents one event. Below is a representative payload (truncated for readability).
{"eventId": "evt-7jzkcmnq","eventUrl": "https://luma.com/7jzkcmnq","name": "AI Founders Dinner β SF","description": "An intimate dinner for AI founders building in production...","startAt": "2026-06-12T01:00:00.000Z","endAt": "2026-06-12T04:00:00.000Z","timezone": "America/Los_Angeles","coverUrl": "https://images.lumacdn.com/.../cover.jpg","socialImage": "https://images.lumacdn.com/.../social.jpg","eventType": "in_person","categoryNames": ["AI", "Tech"],"location": {"name": "South Park Commons","address": "529 Bryant St, San Francisco, CA 94107","neighborhood": "SoMa","city": "San Francisco","region": "California","country": "United States","latitude": 37.7811,"longitude": -122.3961,"isVirtual": false,"virtualProvider": null},"organizer": {"name": "Jane Doe","slug": "janedoe","profileUrl": "https://luma.com/user/janedoe","avatarUrl": "https://images.lumacdn.com/.../avatar.jpg","bio": "Investor at Acme Ventures, building AI tooling.","socialHandles": {"twitter": "janedoe","instagram": "jane.doe","linkedin": "https://www.linkedin.com/in/janedoe","youtube": null,"tiktok": null,"website": "https://janedoe.com"}},"hosts": [ { "name": "Jane Doe", "slug": "janedoe", "...": "..." } ],"featuredGuests": [ { "name": "Sam Speaker", "slug": "samspeaker", "...": "..." } ],"ticketing": {"isFree": false,"isSoldOut": false,"requiresApproval": true,"minPrice": 25.00,"maxPrice": 100.00,"currency": "USD","spotsRemaining": 18,"guestCount": 42,"isNearCapacity": false},"ticketTypes": [{ "name": "Early Bird", "price": 25.00, "currency": "USD", "available": false, "total": 20 },{ "name": "Standard", "price": 100.00, "currency": "USD", "available": true, "total": 60 }],"registrationQuestions": [{ "label": "Company", "type": "text", "required": true },{ "label": "What are you building?", "type": "long-text", "required": false }],"guestCount": 42,"locale": "en","detailsFetched": true,"sourceUrl": "https://luma.com/discover/berlin/ai","sourceQuery": null,"scrapedAt": "2026-05-16T14:32:11.421Z"}
Core Fields
| Field | Type | Description |
|---|---|---|
eventId | string | Luma's stable event identifier (evt-...). |
eventUrl | string | Canonical event URL: https://luma.com/<slug>. |
name | string | Event title. |
description | string | The event write-up as clean, readable plain text, ready to drop into a CRM or a digest. Needs scrapeEventDetails, which is on by default. |
eventType | enum | in_person or virtual. |
categoryNames | array of strings | Luma's own category labels for the event, e.g. AI, Tech, Arts & Culture, Crypto, Climate, Food & Drink, Fitness, Wellness. Luma publishes these only on the full event page, so this needs scrapeEventDetails, which is on by default. With it switched off the column is empty. Picking a category is optional for organisers, so roughly one event in ten carries none and this column comes back empty even when the full page was read β check detailsFetched to tell the two apart. |
locale | string | Event language code, e.g. en or nl. Needs scrapeEventDetails, which is on by default. |
detailsFetched | boolean | true when the full event page was read for this row, so description, ticketTypes, registrationQuestions and locale are populated. false means the row is listing-level only β either because you turned scrapeEventDetails off, or because that one event page didn't load on this run. Filter on it to separate complete rows from partial ones, and re-run to fill the gaps. |
sourceUrl | string | The Luma page this row's feed came from, as a link you can open β the city page for a city run (luma.com/discover/berlin), the city-and-category page when you also set a category (luma.com/discover/berlin/ai), the category page for a category-only run (luma.com/category/crypto), or the discover feed. Handy for telling several merged exports apart. Luma's page shows the feed live, so it will hold more (and newer) events than your run kept after date, type and pricing filters. |
sourceQuery | string | The search term that produced this row, or empty when the row didn't come from a search. Luma has no shareable search-results page, so the term is given as its own column rather than folded into sourceUrl. |
scrapedAt | datetime | UTC timestamp the row was captured. |
Schedule & Location
| Field | Type | Description |
|---|---|---|
startAt | datetime | Event start (UTC). |
endAt | datetime | Event end (UTC). |
timezone | string | IANA timezone (e.g. America/Los_Angeles). |
coverUrl | string | Event cover image. |
socialImage | string | Social-share image. |
location.name | string | Venue name, e.g. South Park Commons. Empty when the host keeps the address for registered guests only. How often that happens swings a lot by feed, from about one event in ten to nearly one in two, and it runs highest on big-city feeds like London and San Francisco. Use location.neighborhood and location.city for those. |
location.address | string | Full street address. Empty on guests-only events, same as location.name. |
location.neighborhood | string | District or neighbourhood, e.g. SoMa, Vondelparkbuurt. Fills for most guests-only events too, so you still know which part of town an event sits in even when the venue is withheld. |
location.city | string | City. Populated on every event with a physical location, including guests-only ones. One spelling per city, so grouping an export by this column never splits one city into two. |
location.region | string | State / region. |
location.country | string | Country. |
location.latitude | number | Latitude. |
location.longitude | number | Longitude. |
location.isVirtual | boolean | True for online events. |
location.virtualProvider | string | Provider name for virtual events (when public). |
Ticketing
| Field | Type | Description |
|---|---|---|
ticketing.isFree | boolean | Free event flag. |
ticketing.isSoldOut | boolean | Sold-out flag. |
ticketing.requiresApproval | boolean | Whether RSVPs need organizer approval. |
ticketing.minPrice | number | Lowest ticket price, in the event's own currency. |
ticketing.maxPrice | number | Highest ticket price, in the event's own currency. |
ticketing.currency | string | ISO currency code for the ticket prices (empty on free events). |
ticketing.spotsRemaining | integer | Remaining capacity (when public). |
ticketing.guestCount | integer | The same registration count as the top-level guestCount. |
ticketing.isNearCapacity | boolean | Luma's near-capacity signal. |
ticketTypes[] | array | Per-ticket type: name, price, currency, available, total. Needs scrapeEventDetails, which is on by default. |
People
| Field | Type | Description |
|---|---|---|
organizer | object | Primary organizer with name, slug, profile URL, avatar, bio, and social handles. Where an event is run by a company or community calendar rather than by a named person, this is that organization, with its own Luma page and social handles attached. |
hosts[] | array | The individual hosts Luma lists on the event, in the same person shape as organizer. Social handles are filled in when scrapeEventDetails is on. Empty on events that list no individual host, which is exactly when organizer carries the organization running it. |
featuredGuests[] | array | Up to 10 featured guests with the same person shape (when includeFeaturedGuests is on). |
guestCount | integer | How many people are registered. Where the host keeps that number private, it falls back to the total tickets registered across all ticket tiers, which needs scrapeEventDetails (on by default). Left empty when neither number is public β never reported as zero unless the event really has no registrations. |
Registration
| Field | Type | Description |
|---|---|---|
registrationQuestions[] | array | Public registration form fields: label, type, required. type tells you what the host is asking for β text, long-text, dropdown, multi-select, agree-check, terms, url, phone-number, company, linkedin, twitter, instagram or github β so you can tell a one-line box from a pick-list at a glance. Answers themselves are never public. Needs scrapeEventDetails, which is on by default. |
Tips for Best Results
- Use
discoverCityto defeat geo-bias. Luma's discover feed weights results toward the requester's region. Explicitly setting a city slug delivers reliable, predictable coverage of that metro. - Lean on the
dateToearly-stop. SettingdateTodoesn't just filter β it tells the actor to stop paginating once the feed passes that date, dramatically cutting cost for short windows. - Turn off
scrapeEventDetailsonly for fast scans. It is on by default. Switched off, a run returns listing-level fields (name, time, location, ticketing summary, organizer) and finishes much faster β butdescription,ticketTypes,registrationQuestions,localeandcategoryNamescome back empty, so leave it on whenever you need those. - Check
detailsFetchedbefore you trust a blank description. Occasionally one event page won't load on a given run. Those rows still arrive with their listing fields intact anddetailsFetched: false, so you can tell a genuinely empty description from one that just didn't load, and re-run to fill the gaps. - Set
includeFeaturedGuestsfor prospecting. Featured guests come with structured social handles β the cleanest path to identifying decision-makers attached to an event. - Power-user tip β stack a search query with a city and a category. All three narrow together: "yoga" alone returns 50 yoga events worldwide, while "yoga" plus the Tech category returns only the founder and startup yoga sessions. Each query returns up to 50 best matches, so run several related terms (
["AI", "LLM", "agents"]) rather than one broad term. - Validate small first. Run with
maxResults: 50to confirm filters behave as expected, then scale up.
Pricing
From $2.10 per 1,000 results. You pay per event row returned, plus a small fixed start fee each time a run begins. There are no compute or time-based charges, so a slow source costs the same as a fast one. Events that your category, date, type, or pricing filters exclude are dropped before billing, so you never pay for rows you don't see. Bronze, Silver, and Gold subscribers pay progressively less, and the table shows the total cost at each discount tier.
| Results | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| 100 | $0.25 | $0.24 | $0.22 | $0.21 |
| 1,000 | $2.50 | $2.38 | $2.20 | $2.10 |
| 10,000 | $25.00 | $23.80 | $22.00 | $21.00 |
| 100,000 | $250.00 | $238.00 | $220.00 | $210.00 |
A "result" is one event row in your dataset. Standard Apify platform fees apply on top.
Integrations
The Luma Event Scraper plugs into the entire Apify ecosystem:
- Zapier β push new events into Slack, Notion, Airtable, or HubSpot as they're discovered.
- Make (Integromat) β build multi-step workflows that enrich, route, and act on event data.
- Google Sheets β sync results into a live spreadsheet for non-technical teammates.
- REST API β call the actor from any backend and pull results from your dataset.
- Webhooks β get notified the moment a run finishes; trigger downstream pipelines automatically.
- Apify Storage β every run produces a structured dataset you can export to JSON, CSV, Excel, or XML with one click.
Legal & Ethical Use
This actor extracts publicly available event data from Luma β the same information any user can see by visiting a Luma page in their browser. It does not access private events, organizer dashboards, attendee lists, or any login-gated content.
You are responsible for using the extracted data in compliance with Luma's terms of service, applicable data-protection laws (GDPR, CCPA, and equivalents), and the rights of the individuals named in the data. Personal information of organizers, hosts, and featured guests is sourced from their public profiles and should be treated with the same care you would apply to any public-facing personal data: avoid spam, respect opt-outs, and keep your outreach relevant and consensual.