Luma Events Scraper API (lu.ma) avatar

Luma Events Scraper API (lu.ma)

Pricing

from $2.13 / 1,000 event returneds

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

Luma Events Scraper API (lu.ma)

Scrape lu.ma events by city, calendar, category or event link. Each event has its name, start and end time with the timezone. You get the venue or online link. You also get the host, ticket price and guest count. $2.125 per 1,000.

Pricing

from $2.13 / 1,000 event returneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Share

Luma Events Scraper: lu.ma events by city, calendar or link

Paste a lu.ma link or name a city, and you get one row per event. Name, start and end time with the timezone, the venue or the online flag, who is hosting, the ticket price, and how many people have registered so far.

A city's discover feed is upcoming-only and finite, roughly 70 to 90 events at a time. Past events live on community calendars, and you reach those by pasting the calendar and switching Past events on.

Inputlu.ma event, city, calendar or category links, or plain city names
OutputOne row per event
Ceiling5,000 events per run
Account neededNone
Price$2.125 per 1,000 events, flat on every plan

🔍 What Luma Events Scraper does

It reads four kinds of lu.ma page and turns all of them into the same row. A single event page, a city discover page like lu.ma/sf, a community calendar, or a category page like lu.ma/ai. Name the cities instead of pasting links if you prefer, by slug or by plain name.

Times come back three ways so you do not have to do the arithmetic: startAt and endAt in UTC, startAtLocal and endAtLocal in the event's own clock, and timezone alongside them.

Prices are converted into the currency's major units properly, which matters more than it sounds. A yen price has no decimal places and a Bahraini dinar has three, and both come back right.

📥 What you give it

{
"cities": ["sf", "nyc"],
"searchQuery": "founders",
"maxItems": 200,
"includeDetails": false
}
FieldDefaultWhat it is
startUrlsnone, the box starts with https://lu.ma/sfAny lu.ma link, one per line. Event pages, city pages, community calendars and category pages all work, and a bare slug works too.
citiesnoneLuma discover cities. Use the slug (sf, nyc, london, berlin, tokyo, bengaluru) or the plain name. Luma runs discover pages for 87 cities.
searchQuerynoneKeyword filter applied to every city and calendar feed, for example hackathon or yoga.
categoryanytech, ai, crypto, climate, food, arts, fitness, wellness. See the warning below.
maxItems50Hard cap on rows across every target, 1 to 5,000.
periodupcomingpast pulls a calendar's history instead. Only affects community calendars.
includeDetailsoffOne extra request per event, adding the description, Luma's own tags and every ticket tier with its price.
proxyConfigurationnoneOptional. Only touch it if the run has to leave through your own servers.

category only applies to the global feed. Set a city and Luma ignores the category filter entirely, so you get that city's whole upcoming list. Use searchQuery to narrow a city instead.

period: past does nothing on a city page. Luma's city discover feeds only ever list what is coming up. A community calendar is the only surface with a history to read.

📤 What you get back

A real row from a recent run:

{
"eventId": "evt-DglQU0ckykBp1nQ",
"slug": "ou0z635y",
"url": "https://lu.ma/ou0z635y",
"name": "Maum Market SF",
"startAt": "2026-09-20T18:00:00.000Z",
"endAt": "2026-09-20T23:00:00.000Z",
"timezone": "America/Los_Angeles",
"startAtLocal": "2026-09-20 11:00",
"endAtLocal": "2026-09-20 16:00",
"durationMinutes": 300,
"locationType": "offline",
"isOnline": false,
"venueName": "Ferry Building",
"addressFull": "1 Ferry Building, San Francisco, CA 94105, USA",
"addressShort": "1 Ferry Building, San Francisco",
"city": "San Francisco",
"cityState": "San Francisco, California",
"region": "California",
"country": "United States",
"countryCode": "US",
"latitude": 37.7954425,
"longitude": -122.3936136,
"addressIsHidden": false,
"hostName": "Maum Market",
"hostUsername": "maummarket",
"hostCount": 1,
"hosts": [
{
"name": "Maum Market",
"username": "maummarket",
"avatarUrl": "https://images.lumacdn.com/uploads/ty/...",
"twitter": null,
"linkedin": null,
"instagram": "maum.market",
"website": "https://maum.market",
"isVerified": false
}
],
"calendarName": "Maum Market",
"calendarSlug": null,
"calendarUrl": null,
"calendarIsPersonal": true,
"calendarIsVerified": true,
"coverImageUrl": "https://images.lumacdn.com/uploads/9a/...",
"socialImageUrl": "https://images.lumacdn.com/event-social/f6/...",
"isFree": true,
"price": null,
"priceMax": null,
"priceCurrency": null,
"priceIsFlexible": null,
"isSoldOut": false,
"spotsRemaining": null,
"requiresApproval": false,
"registrationStatus": "open",
"waitlistActive": false,
"guestCount": 0,
"ticketCount": 0,
"visibility": "public",
"eventType": "independent",
"description": null,
"categories": null,
"ticketTypes": null,
"source": "city",
"sourceInput": "https://lu.ma/sf",
"position": 1,
"scrapedAt": "2026-09-20T07:04:49.921Z"
}
FieldWhat it is
eventIdStable. Use it to dedupe across runs and across targets.
startAtLocal, endAtLocalThe event's own wall clock, already in timezone. startAt and endAt are the UTC pair.
addressIsHiddenSome hosts only reveal the address after you register. When this is true, the address fields are null and stay that way.
isFree, price, priceMax, priceCurrencyprice and priceMax are the cheapest and dearest tier in major currency units. All null on a free event.
priceIsFlexibleTrue when the host lets attendees pick what to pay.
hosts[]Every host, with the social links each one has filled in. hostName and hostUsername repeat the first.
guestCount, ticketCountHow many are registered. 0 is a real answer on a new event, not a missing value.
spotsRemainingnull unless the host published a capacity.
calendarIsPersonaltrue means the event hangs off a person's own calendar rather than a community one, and calendarSlug and calendarUrl are then null.
description, categories, ticketTypesnull unless you switch on includeDetails.
source, sourceInputWhich target produced the row: event-url, city, calendar or sample, plus what you typed.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itCharged
An eventIt has an eventId and neither flag belowyes
The sample row_sample: trueno
A diagnostic_diagnostic: true and an errorCodeno

A real event row carries no ok or charged field, so filter on _sample and _diagnostic being absent. Run it with nothing filled in and you get the sample row on its own.

The errorCode on a diagnostic row names what went wrong:

CodeWhat it means
BAD_URLNot a lu.ma link, or not one this actor can read.
UNSUPPORTED_URLlu.ma/u/<username> is a person's profile, not an event feed. Paste their calendar instead.
NOT_FOUNDThat slug does not exist on lu.ma any more.
CITY_NOT_FOUNDLuma has no discover page for that city. The error names the nearest matches it does have.
NO_RESULTSThe feed answered and held nothing. On a calendar, try switching to past events.
BAD_REQUESTLuma refused the query as malformed.
API_ERRORLuma answered with an error. Re-run it.
BAD_RESPONSELuma answered with something this actor could not read.

One bad target never stops the others, and a diagnostic row never fails the run.

▶️ How to run it

  1. Open Luma Events Scraper and click Try for free.
  2. Type city slugs into Cities, or paste links into Luma URLs. Both together is fine.
  3. Add a Keyword filter if you want to narrow a city feed.
  4. Set Maximum events. Start around 50 to see the output shape, then click Start.
  5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$2.125 per 1,000 events. Flat on every Apify plan, no volume tiers.

You pay per event row delivered. The sample row and diagnostic rows carry no event charge, and an event that turns up in two of your targets is charged once, not twice. Switching on the full description and ticket tiers costs nothing extra per event.

💡 What people use it for

  • Pulling the week ahead in three or four cities and filtering by keyword to find the ones worth attending.
  • Building a list of hosts running events in a niche, with the social links they published.
  • Watching a community calendar on a schedule and picking up what was added since last run.
  • Reading a calendar's past events to see how often a series actually runs and how full it got.

🚧 What it does not do

  • No guest lists. Luma does not publish who registered, so neither does this. You get the count.
  • Hidden addresses stay hidden. If the host only reveals the venue after registration, addressIsHidden is true and the address fields are null.
  • A city feed is upcoming-only and short. Roughly 70 to 90 events at a time, so a big run needs more cities rather than deeper paging into one.
  • A category filter and a city do not combine. Luma drops the category on a city page.
  • A calendar run can stop a little short of maxItems. Calendars can list events hosted on other platforms; those are skipped rather than returned, but they still count against your cap.
  • It does not register for anything and it does not log in, so private and invite-only events are out of reach.
  • Rows are a snapshot. A host can move or cancel an event afterwards, and scrapedAt records when it was read.

🧭 Which events scraper do you need?

If you wantUse
lu.ma events, with hosts and ticket tiersThis one
Eventbrite listings by city or keywordEventbrite Events Scraper
Trade shows and conferences worldwide10Times Events Scraper
Public events on FacebookFacebook Events Scraper

❓ Questions people ask

Do I need a Luma account? No. Nothing to sign up for and no key to apply for.

How do I get past events? Paste a community calendar into Luma URLs and set Past or upcoming to past. City pages have no history to give.

Which cities work? Luma runs discover pages for 87 of them. Give it a slug or a plain name, and if there is no match the error names the nearest cities it does cover.

Can I get the full description? Yes, switch on Fetch the full description and ticket tiers. It adds an extra request per event, so the run is slower, and the per-event price is unchanged.

Can I watch a calendar on a schedule? Yes. Schedule the run, keep maxItems modest, and dedupe on eventId.

Is scraping event listings legal? These are public event pages. Host names and social links are personal data all the same, which GDPR and similar laws cover, so have a reason for collecting them. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the link or city you used and the run ID. The errorCode on the diagnostic row usually names the problem on its own.