Luma Events Scraper (lu.ma)
Pricing
from $2.00 / 1,000 results
Luma Events Scraper (lu.ma)
Scrape upcoming events from Luma by city: name, date and timezone, venue and coordinates, hosts, ticket price and availability, guest count and calendar. Keyless API, no login.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Farhan Febrian Nauval
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
Luma Events Scraper — Upcoming Events by City from lu.ma
Scrape upcoming events from Luma, the platform most tech meetups, hackathons and community events now run on: name, start and end times with timezone, venue and coordinates, hosts, ticket price and availability, guest counts and the owning calendar. Keyless API, no login, no browser.
Input
| Field | Type | Default | Description |
|---|---|---|---|
places | array | — | Luma city slugs as they appear at lu.ma/<slug> — london, singapore, tokyo, berlin, jakarta |
maxEventsPerPlace | integer | 100 | 20 events per request |
includeGlobalDiscover | boolean | false | Luma's worldwide featured feed — geo-personalised, so its size varies by where the run executes |
Output
{"_input": "london","_source": "S1-luma-api","_scrapedAt": "2026-09-12T16:41:12Z","eventId": "evt-bqICtbU4NTWPrxc","name": "AI Healthcare Hackathon with Anima x OpenAI","url": "https://lu.ma/animaxopenai", "slug": "animaxopenai","startAt": "2026-09-12T07:30:00.000Z","endAt": "2026-09-12T17:00:00.000Z","timezone": "Europe/London","locationType": "offline","venueName": "Join Kopi Depok", // null when the address is hidden"city": "London", "region": "England", "country": "GB","fullAddress": "…","addressIsHidden": false,"latitude": 51.5324597, "longitude": -0.1043,"searchedPlace": "London","isFree": true, "price": null, "maxPrice": null,"isSoldOut": false, "spotsRemaining": 40,"isNearCapacity": false, "requiresApproval": true, "waitlistActive": false,"guestCount": 15, "ticketCount": 15,"calendarName": "Anima Events","calendarId": "cal-LK7LUHWHXSJF4h5","calendarAccessLevel": "public","hosts": [{ "name": "…", "handle": "…", "bio": "…", "avatarUrl": "…" }],"hostCount": 4,"coverUrl": "…", "visibility": "public", "eventType": "independent"}
Three things worth knowing
The same URL returns four different kinds of object. GET /url?url=<slug> resolves a slug, and
its kind can be discover-place (a city), calendar (a calendar page, with no events array at
all), event (a single event — because some events own city-like slugs) or nothing. new-york
resolves to an event, not the city. bandung resolves to a calendar. Rather than return
silence, this actor checks kind and emits a not_a_city row naming what it actually got.
The city parameter name matters, and the wrong one is ignored rather than rejected. The correct
key is discover_place_api_id. Passing place_api_id — the obvious guess, and the name used inside
the place object — returns results byte-identical to sending no parameter at all: the global
feed, ~20 plausible-looking events with nothing to do with your city, and no error. Verified by
diffing the two responses.
The global discover feed is geo-personalised, so its size depends on where the run executes.
Paged to exhaustion it returned 21 events from an Indonesian IP and 60 from Apify's US datacenter —
same code, minutes apart. Treat it as a highlights reel, not coverage. Per-city paging is the
deterministic part: London reported event_count: 52 and cursor paging returned exactly 52 unique
events. The run logs the city's own total before paging, so you can see whether you got all of it.
A hidden address is a choice, not a gap
Organisers can hide the venue until you register, and Luma marks those. In one run, 33 of 79 events
had addressIsHidden: true — and those were exactly the 33 with no venueName and no
fullAddress, with the other 46 having both. addressIsHidden is there so an empty venue reads as
the organiser's decision rather than a scraping failure. Coordinates are still present on hidden
events, so mapping works either way.
Errors
_error | Meaning |
|---|---|
not_a_city | The slug resolved to a calendar or a single event; resolvedKind says which |
no_events | The city resolved but has nothing upcoming |
blocked | The API refused, or a slug does not exist at all (404) |
network_error | Never reached the server |
An event listed both in a city feed and in the global feed appears once per source, with different
_input — de-duplication is per source, because which feed surfaced it is usually the point.
If nothing is collected at all, the run fails rather than reporting success over an empty dataset.