Luma Events Scraper API (lu.ma) avatar

Luma Events Scraper API (lu.ma)

Pricing

Pay per event

Go to Apify Store
Luma Events Scraper API (lu.ma)

Luma Events Scraper API (lu.ma)

Every lu.ma event belongs both to a city page and to whoever's calendar published it, and both are ways in here, as are categories and plain event links. Name, start and end time with timezone, venue or online link, host, ticket price and guest count. $2.125 per 1,000.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Reads public lu.ma events and gives you one row each. Point it at a city (sf, nyc, london), a community calendar, a category, or a single event link.

Each row has the event name, start and end time in its own timezone, where it is, who's hosting, what a ticket costs and how many people have signed up. Most of what sits on lu.ma is tech meetups, hackathons and demo days, so that's mostly what comes back.

$2.125 per 1,000 events ($0.002125 each), plus $0.001 when a run starts. Same rate on the free plan as on any paid plan. You pay for events that actually come back.

What a row looks like

Real row from a San Francisco run:

{
"eventId": "evt-alRUVBXQZ8yCaIO",
"slug": "s1szlu9h",
"url": "https://lu.ma/s1szlu9h",
"name": "Hardware Pitch Night",
"startAt": "2026-08-21T01:00:00.000Z",
"endAt": "2026-08-21T04:00:00.000Z",
"timezone": "America/Los_Angeles",
"startAtLocal": "2026-08-20 18:00",
"endAtLocal": "2026-08-20 21:00",
"durationMinutes": 180,
"locationType": "offline",
"isOnline": false,
"venueName": null,
"addressFull": null,
"city": "San Francisco",
"cityState": "San Francisco, CA",
"region": "California",
"country": "United States",
"countryCode": "US",
"latitude": 37.74554861,
"longitude": -122.42123642,
"addressIsHidden": true,
"hostName": "Nate Padgett",
"hostUsername": "informalnate",
"hostCount": 1,
"hosts": [{ "name": "Nate Padgett", "username": "informalnate", "twitter": "ngpadgett", "linkedin": "/in/nathanielpadgett", "website": "https://informal.cc" }],
"calendarName": "Studio 45 - informal spaces SF",
"calendarUrl": "https://lu.ma/workatthestudio",
"coverImageUrl": "https://images.lumacdn.com/uploads/h0/8ff90514-...png",
"isFree": true,
"price": null,
"priceCurrency": null,
"isSoldOut": false,
"spotsRemaining": 6,
"requiresApproval": false,
"registrationStatus": "open",
"guestCount": 294,
"ticketCount": 294,
"visibility": "public",
"source": "city",
"scrapedAt": "2026-08-21T03:31:10.298Z"
}

Paid events fill in price, priceCurrency and priceMax. Prices come back in whole currency units with zero-decimal currencies handled properly, so a 2,500 yen ticket is 2500 JPY, not 25.

Switch on Fetch the full description and ticket tiers and each row also carries description (the write-up as plain text), categories (Luma's own tags) and ticketTypes (every tier with its price and how many are registered). Those three are null otherwise.

Full field list: eventId, slug, url, name, startAt, endAt, timezone, startAtLocal, endAtLocal, durationMinutes, locationType, isOnline, venueName, addressFull, addressShort, city, cityState, region, country, countryCode, latitude, longitude, addressIsHidden, hostName, hostUsername, hostCount, hosts, calendarName, calendarSlug, calendarUrl, calendarIsPersonal, calendarIsVerified, coverImageUrl, socialImageUrl, isFree, price, priceMax, priceCurrency, priceIsFlexible, isSoldOut, spotsRemaining, requiresApproval, registrationStatus, waitlistActive, guestCount, ticketCount, visibility, eventType, description, categories, ticketTypes, source, sourceInput, position, scrapedAt.

Input

FieldWhat it does
startUrlsAny lu.ma link. Event pages (https://lu.ma/beta-fdnw), city pages (https://lu.ma/sf), community calendars (https://lu.ma/Beta-events) and category pages (https://lu.ma/ai). Bare slugs work.
citiesDiscover cities by slug (sf, nyc, london, berlin, tokyo, bengaluru) or plain name (San Francisco). Luma runs discover pages for 87 cities.
searchQueryKeyword applied to every city and calendar feed, e.g. hackathon.
categorytech, ai, crypto, climate, food, arts, fitness, wellness. Global feed only.
periodfuture (default) or past. Only affects community calendars.
includeDetailsAdds description, category tags and ticket tiers. One extra request per event, same price per row.
maxItemsHard cap on rows, 1 to 5000. You pay per row returned.

Two ways to start:

{ "cities": ["sf", "nyc"], "maxItems": 100 }
{ "startUrls": ["https://lu.ma/Beta-events"], "period": "past", "maxItems": 50 }

Run it with nothing filled in and you get one labelled _sample row, free, so you can see the shape first.

Things worth knowing before you buy

A city feed is not an archive. Luma's discover page only serves upcoming events and it runs out. San Francisco returned 82 on the day we measured it, New York 70, London 52, Berlin 16. If you want thousands of rows, list more cities. A bigger maxItems won't help.

Past events only exist on community calendars. Set period: "past" and pass a calendar URL. There is no past-events feed for a city.

Plenty of organisers hide the street address. Luma lets a host reveal the exact venue only to approved guests, and in a 300-row test run 106 rows came back that way: addressIsHidden: true, city and an approximate coordinate, no venue name. We report the flag instead of guessing.

No guest lists. guestCount is the number Luma shows publicly. Attendee names and emails belong to the organiser and this actor doesn't touch them.

No private, unlisted or password-gated events. If you can't see it logged out, neither can this.

The category filter is global, not per-city. Luma ignores a category when a city is also set, so use category on its own.

Billing

$0.002125 per event returned, plus $0.001 per run start. No tiers, no plan gates, no minimum.

Sample rows, diagnostic rows, blocked requests and empty runs are never charged. A run with no input costs you the start fee and nothing else. includeDetails adds a request per event but not a cent to the price.

FAQ

Is there an official Luma API I could use instead? There is one, but it's for managing calendars you already own, and it needs a key. There's no public endpoint for browsing anybody else's events. This actor reads what the website shows a logged-out visitor.

How do I get all the events in a city? Put the slug in cities. sf, nyc, london, berlin, tokyo, singapore, bengaluru, la and 79 others. You'll get whatever Luma currently lists as upcoming there, typically 50 to 90.

Can I get attendee or guest data? You get the public guestCount and ticketCount. Individual attendees, no.

Why is price null when isFree is true but priceMax has a number? That's Luma's "Free – £15" pattern. The entry tier is free and there are optional paid tiers above it. The cheapest ticket costs nothing, the dearest costs priceMax.

Can I watch one community's calendar? Yes. Paste the calendar page, schedule the run daily and diff on eventId. Calendars are also the only source that exposes past events.

What timezone are the dates in? startAt and endAt are UTC ISO-8601. timezone is the event's IANA zone, and startAtLocal / endAtLocal are already converted, so you don't have to do the arithmetic.

Does it need a login or a proxy? No Luma account, no cookies, no API key. The actor brings its own egress.

Which fields come back empty, and why? venueName and addressFull are null when the organiser hides the address, and addressIsHidden tells you which rows those are. description, categories and ticketTypes are null unless you switch on includeDetails.

Notes

Built and maintained by Dami Studio. If Luma changes something and rows stop arriving, the actor writes a diagnostic row saying what broke rather than quietly charging you for nothing.