Luma Events Scraper: Tech, AI & Crypto Events by City
Pricing
from $1.50 / 1,000 luma event scrapeds
Luma Events Scraper: Tech, AI & Crypto Events by City
Scrape Luma (lu.ma / luma.com) events by city, category (AI, tech, crypto...), calendar or event URL: dates, venue, coordinates, ticket prices, guest counts, hosts with public social links, description. Incremental "only new events" mode. No login.
Pricing
from $1.50 / 1,000 luma event scrapeds
Rating
0.0
(0)
Developer
rj
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
Luma Events Scraper extracts public events from Luma (lu.ma / luma.com), the platform most AI, tech, startup and crypto communities use for meetups, hackathons, demo days and conference side events. Give it cities (London, San Francisco, New York, Berlin...), categories (AI, Tech, Crypto, Climate...), calendar URLs or event URLs, and get clean, structured event data: dates in UTC and local time, venue and coordinates, ticket prices, sold-out / waitlist / approval flags, guest count, the organising calendar and every host's public profile with their social links.
It reads the same public JSON API that luma.com uses, so it is fast, cheap and reliable: no login, no browser, no proxy by default. Unlike other Luma scrapers it accepts all four input types in one run (city, category x city, calendar, event URL), returns structured ticket pricing and host profiles, handles external events listed on calendars, and has an incremental "only new events" mode so you can schedule a daily feed of newly announced events. You only pay for the events you get.
What data can you get from Luma?
| Field group | Fields |
|---|---|
| Event | id (evt-...), url, name, description (plain text), coverImageUrl, categories, tags |
| Time | startAt, endAt (UTC ISO), timezone, startAtLocal, endAtLocal (local time with offset) |
| Location | locationType (in-person / online), onlinePlatform (zoom, google-meet...), venueName, address, city, region, country, countryCode, latitude, longitude, addressHidden |
| Tickets | isFree, priceMin, priceMax, currency, isPayWhatYouWant, ticketTypes[] (name, price, currency, availability, sales end), isSoldOut, spotsRemaining, requiresApproval, waitlistActive, registrationStatus |
| Audience | guestCount (a number only) |
| Organiser | calendar (name, slug, URL, avatar, city, website, X / Instagram / LinkedIn / YouTube / TikTok) |
| Hosts | hosts[] (name, Luma profile URL, avatar, short bio, verified flag, website, X / Instagram / LinkedIn / TikTok / YouTube links), hostNames |
| Provenance | sourceType, sourceValue, discoverCity, isExternal, detailsFetched, scrapedAt |
Use cases
- Event discovery feeds. A daily list of new AI, crypto or startup events in your cities for a newsletter, Slack channel, community calendar or "what's on" site.
- Developer relations and community teams. Track every meetup and hackathon in your ecosystem, who hosts them and how many people register.
- Sales and partnerships. Find active community organisers, venues and sponsors in a city, with their public websites and social profiles.
- Market and competitor research. Which topics, companies and venues run the most events, how prices and attendance compare, which calendars are growing.
- Travel and conference planning. All side events around a conference (NeurIPS, ETHGlobal, Web Summit...) from its Luma calendar in one spreadsheet.
How to use
- Click Try for free or Start.
- Add one or more Cities (e.g.
london,sf,nyc), pick Categories, and/or paste Calendar URLs and Event URLs. - Optionally narrow it down with Keywords and Events from / until dates, and set Max events per source (default 100).
- Click Start, then download the events as JSON, CSV, Excel or HTML, or fetch them through the API.
How the inputs combine
| You give | You get |
|---|---|
| Cities only | The events featured on each city's Luma page (e.g. luma.com/london) |
| Categories + cities | Category events near each city: every category x city pair is one source ("AI near London", "AI near San Francisco") |
| Categories only | Category events near the location of the run's IP address (Luma localises category pages). Add a city for predictable results. |
| Calendar URLs | All upcoming events of each calendar, optionally its past events too |
| Event URLs | Exactly those events, always with full details |
Cities accept Luma's slugs (london, sf, nyc, la, dc, berlin, singapore, tokyo, bengaluru... see luma.com/discover) and common names (New York, San Francisco, São Paulo). URLs can be lu.ma/... or luma.com/...; the Actor works out whether a link is a calendar or an event.
Input examples
AI and crypto events in London and San Francisco in the next 30 days:
{"cities": ["london", "sf"],"categories": ["ai", "crypto"],"dateTo": "30 days","maxEvents": 200}
Every upcoming event of two community calendars, plus their past events since January, hackathons only:
{"calendarUrls": ["https://luma.com/genai-collective", "https://lu.ma/ls"],"includePastEvents": true,"dateFrom": "2026-01-01","keywords": "hackathon, buildathon","maxEvents": 0}
A daily "new events" feed (save as a Task and schedule it):
{"cities": ["nyc", "sf", "london", "berlin"],"categories": ["ai", "tech"],"onlyNewEvents": true,"stateKey": "ai-tech-4-cities","maxEvents": 300}
Specific events:
{"eventUrls": ["https://luma.com/4lkgf2hc", "https://lu.ma/event/evt-b5bf1CMZEGpykgB"]}
| Field | Description |
|---|---|
cities | Luma discover cities (slug or name). |
categories | ai, tech, crypto, climate, arts, fitness, wellness, food, books, games, running, family. |
calendarUrls | Calendar links or slugs (https://luma.com/ls, lu.ma/deepmind, ls, https://luma.com/calendar/cal-...). |
eventUrls | Event links or ids (https://luma.com/4lkgf2hc, https://lu.ma/event/evt-..., evt-...). |
keywords | Comma-separated; an event matches if its name, description, calendar, hosts, venue, city, tags or categories contain any of them. Short words like ai match whole words only. |
dateFrom, dateTo | YYYY-MM-DD or relative (7 days, +2 weeks, -1 month). Default: upcoming events (from now, including events in progress), no end date. |
includePastEvents | Calendars only: also scrape past events, most recent first. |
includeExternalEvents | Calendars can list events hosted elsewhere; on by default (output with isExternal: true). |
maxEvents | Limit per source (each city, category x city pair and calendar). 0 = no limit. Default 100. |
includeDetails | Load each event's full record for the description, ticket types and categories (one extra request per event). Default true. |
onlyNewEvents, stateKey | Incremental mode and the name of the monitor. |
maxConcurrency, maxRequestsPerSecond | Politeness limits (defaults 3 and 3). |
proxyConfiguration | Off by default; see the FAQ. |
Output example
One dataset item per event (from a real run; description shortened, two of three hosts and one ticket type omitted):
{"id": "evt-jpvedgsEI3u6nq1","url": "https://luma.com/4lkgf2hc","name": "Designing Futures: What We Give Forward","startAt": "2026-11-05T18:00:00.000Z","endAt": "2026-11-05T21:00:00.000Z","timezone": "Europe/London","startAtLocal": "2026-11-05T18:00:00+00:00","endAtLocal": "2026-11-05T21:00:00+00:00","locationType": "in-person","onlinePlatform": null,"venueName": "French Protestant Church of London","address": "French Protestant Church of London, French Protestant Church, 8-9 Soho Square, London W1D 3QD, UK","city": "London","region": "England","country": "United Kingdom","countryCode": "GB","latitude": 51.5156376,"longitude": -0.1329888,"addressHidden": false,"coverImageUrl": "https://images.lumacdn.com/uploads/aw/b53b97d6-df9f-459d-99c8-4ed94fbd8bf7.png","description": "Join us for Designing Futures!\n\n⚡ Event Overview\n\nJoin us for a unique evening of UX, networking and forward-thinking to champion education. ...","isFree": false,"priceMin": 5,"priceMax": 20,"currency": "GBP","isPayWhatYouWant": true,"ticketTypes": [{ "name": "Standard ticket", "price": 5, "minPrice": null, "currency": "GBP", "isPayWhatYouWant": false, "requiresApproval": false, "isSoldOut": false, "spotsRemaining": null, "salesEndAt": "2026-11-04T12:00:59.000Z", "kind": "fiat-price" },{ "name": "Changemaker ticket (custom)", "price": 20, "minPrice": 5, "currency": "GBP", "isPayWhatYouWant": true, "requiresApproval": false, "isSoldOut": false, "spotsRemaining": null, "salesEndAt": "2026-11-04T12:00:59.000Z", "kind": "fiat-price" }],"isSoldOut": false,"spotsRemaining": 6,"requiresApproval": false,"waitlistActive": false,"registrationStatus": "open","guestCount": 73,"calendar": { "id": "cal-XPWEL40Bfs1ickY", "name": "Personal", "slug": null, "url": null, "isPersonal": true, "avatarUrl": "https://cdn.lu.ma/avatars-default/community_avatar_16.png", "description": null, "city": null, "country": null, "website": null, "twitterUrl": null, "instagramUrl": null, "linkedinUrl": null, "youtubeUrl": null, "tiktokUrl": null },"hosts": [{"id": "usr-f3QmhBlQCZQWVFi","name": "Children of the Mekong","username": "childrenmekong","profileUrl": "https://luma.com/user/childrenmekong","avatarUrl": "https://images.lumacdn.com/avatars/he/20d35a11-cd87-4ed0-9616-893e84095db1","bio": "Passionate about providing access to education in Southeast Asia","isVerified": false,"website": "https://www.childrenofthemekong.org/","twitterUrl": null,"instagramUrl": "https://www.instagram.com/childrenofthemekong","linkedinUrl": "https://www.linkedin.com/in/children-of-the-mekong","tiktokUrl": null,"youtubeUrl": "https://www.youtube.com/@childrenofthemekong"}],"hostNames": "Children of the Mekong, ...","categories": ["arts", "tech"],"tags": [],"discoverCity": "london","isExternal": false,"sourceType": "event","sourceValue": "https://luma.com/4lkgf2hc","detailsFetched": true,"scrapedAt": "2026-11-02T13:28:05.594Z"}
Notes on the fields:
idis Luma's event id and is stable across runs; use it to de-duplicate. An event found by several of your sources in one run is output (and charged) once.addressHidden: truemeans the host shows the exact address to registered guests only. You still get the city, region, country and an approximate point (latitude/longitude), butaddressandvenueNameare null.- Prices are in currency units (5 = £5.00).
priceMin/priceMaxcome from Luma's ticket summary and are refined from the ticket types when details are loaded. Free events haveisFree: trueand prices of 0. description,ticketTypesand Lumacategoriesneed Include full details (on by default). With it off,detailsFetchedis false and those fields are null or empty; everything else is still filled.calendar.isPersonal: truemeans the event was created from the host's personal calendar rather than a community calendar; seehostsfor the organiser.- External events (
isExternal: true, idcalev-...) are listed on a Luma calendar but hosted on another site.urlis the external page; you get name, times, place, organiser name and calendar tags. startAtLocalis the start time in the event's own time zone, which is what you want for "Tuesday 6 pm" style displays.
A RUN_SUMMARY record in the run's key-value store lists every source with its status, events output, events listed, duplicates, already-seen and filtered counts, plus request statistics and warnings.
What this scraper does not collect
No guest or attendee lists, ever. Luma shows some registered guests' names and avatars on event pages; this Actor never reads them into the output. guestCount is a number only. It also never outputs e-mail addresses or phone numbers: hosts' short bios are scrubbed of them, and online events' meeting links are private to registered guests and not available. Host data is limited to what Luma shows publicly on a host's profile.
Pricing
This Actor uses pay-per-event pricing. You pay only for events in your dataset; there is no start fee from us.
| Event | Price | 1,000 events |
|---|---|---|
event: one Luma event in the output | $0.0015 | $1.50 |
Examples: the default "20 London events" run costs about $0.03; a daily feed that finds 50 new events a day costs about $0.075 a day (~$2.25 a month). Events skipped as already seen in incremental mode, duplicates across your sources, filtered events and failed sources cost nothing. Set Maximum cost per run in the run options to cap spending: the scraper stops cleanly when the budget is reached and says so in its status message.
Scheduling: a feed of new events
- Turn on Only new events and give the monitor a name in Monitor name (e.g.
ai-london). - Save the configuration as a Task and add a Schedule (e.g. every morning).
- The first run outputs all matching upcoming events (up to Max events per source each) and saves them as the baseline.
- Every later run outputs only events it has not output before, so you get newly announced events, and pay only for those.
The memory lives in a named key-value store (luma-events-scraper-state by default) under the monitor name and is shared by all sources in the run. Events are forgotten 120 days after they were last listed. Don't run two runs with the same monitor name at the same time.
Tips and limits
- City pages are curated. A Luma city page features a selection of events (London shows about 60 upcoming events at a time). For broader coverage of a topic in a city, combine the city with categories (
ai,tech,crypto...): category feeds near a city are much larger. - Categories without a city follow the location of the run's IP address, as on luma.com. On Apify that is a data-centre location, so add cities for predictable results.
- Upcoming only on discover pages. Luma's city and category pages list upcoming events. For past events, use calendar URLs with Include past events.
- Event creation date is not published by Luma, so there is no
createdAtfield. Use incremental mode to learn when an event first appeared. - Speed. Lists return up to 50 events per request; with full details each event takes one more request. At the default 3 requests per second, 100 events with details take about 40 seconds.
- Unofficial interface. Luma has no public API for discovery; this Actor uses the endpoints luma.com itself uses, which can change without notice. Parsing is covered by tests against saved responses and failures are reported clearly. If Luma ever answers HTTP 403 or 429, the run stops with a clear message, keeps what it already saved, and suggests enabling a proxy.
Integrations and API
-
API. Start runs and fetch results with the Apify API, or the JavaScript and Python clients:
curl -X POST "https://api.apify.com/v2/acts/rjmacarthy~luma-events-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"cities":["sf"],"categories":["ai"],"maxEvents":50}' -
Webhooks. Get notified, or trigger your pipeline, when a run finishes.
-
Make, Zapier, n8n. Send new events to Google Sheets, Airtable, Notion, Slack, Discord, e-mail or your CRM with no code.
-
Google Sheets, Slack, Airbyte, Keboola and more through Apify integrations.
-
AI agents (MCP). Use the Actor as a tool through the Apify MCP server, e.g. "find AI hackathons in Berlin next month".
FAQ
Do I need a Luma account, cookies or a proxy? No. The events are public and the Actor uses no login. The proxy option is only there in case Luma starts blocking requests from Apify's servers.
Which cities are supported? Every city on luma.com/discover (about 90, from Amsterdam to Zurich). Other slugs are checked live against Luma, and an unknown name gets a "did you mean" hint.
Why does an event have no address?
The host chose to show the address to registered guests only (addressHidden: true), or it is an online event.
Can I get the attendee list?
No. That is personal data, and this Actor deliberately does not collect it. You get guestCount.
Can I scrape a host's profile or all events of a user?
Profiles (luma.com/user/...) are not an input. Use the host's calendar URL, which lists their events.
Is it legal to scrape Luma? The Actor only collects event information that organisers publish publicly to promote their events, and public host profile fields. It does not collect guest lists, e-mail addresses or phone numbers. You are responsible for making sure your use complies with Luma's terms and the laws that apply to you (for example GDPR if you process data about people in the EU).
More scrapers by the same developer
- Google Ads Transparency Scraper
- Substack Scraper
- Telegram Channel Scraper
- ATS Jobs Scraper: Greenhouse, Lever, Ashby & Workday
- Dice Jobs Scraper
- SEEK Jobs Scraper
Browse all my Actors on my Apify Store profile.
Support
Found an input that doesn't work, or need another field? Open an issue on the Issues tab with your input. Fixes are usually quick.
Changelog
- 0.1 (November 2026): First release. Cities, categories (with city coordinates), calendars (upcoming, past, external events) and event URLs; full details with plain-text descriptions and ticket types; host profiles with social links; keyword and date filters; incremental "only new events" mode; budget-aware pay-per-event billing.