Luma Events Scraper: Tech, AI & Crypto Events by City avatar

Luma Events Scraper: Tech, AI & Crypto Events by City

Pricing

from $1.50 / 1,000 luma event scrapeds

Go to Apify Store
Luma Events Scraper: Tech, AI & Crypto Events by City

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

rj

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

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 groupFields
Eventid (evt-...), url, name, description (plain text), coverImageUrl, categories, tags
TimestartAt, endAt (UTC ISO), timezone, startAtLocal, endAtLocal (local time with offset)
LocationlocationType (in-person / online), onlinePlatform (zoom, google-meet...), venueName, address, city, region, country, countryCode, latitude, longitude, addressHidden
TicketsisFree, priceMin, priceMax, currency, isPayWhatYouWant, ticketTypes[] (name, price, currency, availability, sales end), isSoldOut, spotsRemaining, requiresApproval, waitlistActive, registrationStatus
AudienceguestCount (a number only)
Organisercalendar (name, slug, URL, avatar, city, website, X / Instagram / LinkedIn / YouTube / TikTok)
Hostshosts[] (name, Luma profile URL, avatar, short bio, verified flag, website, X / Instagram / LinkedIn / TikTok / YouTube links), hostNames
ProvenancesourceType, 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

  1. Click Try for free or Start.
  2. Add one or more Cities (e.g. london, sf, nyc), pick Categories, and/or paste Calendar URLs and Event URLs.
  3. Optionally narrow it down with Keywords and Events from / until dates, and set Max events per source (default 100).
  4. Click Start, then download the events as JSON, CSV, Excel or HTML, or fetch them through the API.

How the inputs combine

You giveYou get
Cities onlyThe events featured on each city's Luma page (e.g. luma.com/london)
Categories + citiesCategory events near each city: every category x city pair is one source ("AI near London", "AI near San Francisco")
Categories onlyCategory events near the location of the run's IP address (Luma localises category pages). Add a city for predictable results.
Calendar URLsAll upcoming events of each calendar, optionally its past events too
Event URLsExactly 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"]
}
FieldDescription
citiesLuma discover cities (slug or name).
categoriesai, tech, crypto, climate, arts, fitness, wellness, food, books, games, running, family.
calendarUrlsCalendar links or slugs (https://luma.com/ls, lu.ma/deepmind, ls, https://luma.com/calendar/cal-...).
eventUrlsEvent links or ids (https://luma.com/4lkgf2hc, https://lu.ma/event/evt-..., evt-...).
keywordsComma-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, dateToYYYY-MM-DD or relative (7 days, +2 weeks, -1 month). Default: upcoming events (from now, including events in progress), no end date.
includePastEventsCalendars only: also scrape past events, most recent first.
includeExternalEventsCalendars can list events hosted elsewhere; on by default (output with isExternal: true).
maxEventsLimit per source (each city, category x city pair and calendar). 0 = no limit. Default 100.
includeDetailsLoad each event's full record for the description, ticket types and categories (one extra request per event). Default true.
onlyNewEvents, stateKeyIncremental mode and the name of the monitor.
maxConcurrency, maxRequestsPerSecondPoliteness limits (defaults 3 and 3).
proxyConfigurationOff 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:

  • id is 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: true means the host shows the exact address to registered guests only. You still get the city, region, country and an approximate point (latitude/longitude), but address and venueName are null.
  • Prices are in currency units (5 = £5.00). priceMin/priceMax come from Luma's ticket summary and are refined from the ticket types when details are loaded. Free events have isFree: true and prices of 0.
  • description, ticketTypes and Luma categories need Include full details (on by default). With it off, detailsFetched is false and those fields are null or empty; everything else is still filled.
  • calendar.isPersonal: true means the event was created from the host's personal calendar rather than a community calendar; see hosts for the organiser.
  • External events (isExternal: true, id calev-...) are listed on a Luma calendar but hosted on another site. url is the external page; you get name, times, place, organiser name and calendar tags.
  • startAtLocal is 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.

EventPrice1,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

  1. Turn on Only new events and give the monitor a name in Monitor name (e.g. ai-london).
  2. Save the configuration as a Task and add a Schedule (e.g. every morning).
  3. The first run outputs all matching upcoming events (up to Max events per source each) and saves them as the baseline.
  4. 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 createdAt field. 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

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.