Luma Events Scraper
Pricing
from $2.07 / 1,000 events
Luma Events Scraper
Luma events scraper API for lu.ma events by city, community calendar, category or event link. Each row has the name, start and end time with the timezone, venue or online flag, hosts with their links, ticket price and guest count. Past events from calendars too. $2.125 per 1,000 events.
Pricing
from $2.07 / 1,000 events
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Features
Share
Luma events scraper for a city, a calendar or a link, one row per event: the 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. Past events live on community calendars, and you reach those by pasting the calendar and setting Past or upcoming to past.
| Input | lu.ma event, city, calendar or category links, or plain city names |
| Output | One row per event: name, times with the timezone, venue and coordinates or online, hosts and their links, price, registrations |
| Ceiling | 5,000 events per run. A run stops a little before its time limit and keeps the events it has delivered |
| Account needed | None |
| Price | $2.125 per 1,000 events on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 2,300 |
🔍 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 data you get from each Luma event
| What you get | Field |
|---|---|
| The event, its ids and its page | eventId, slug, url, name |
| Start and end, in UTC and in the event's own clock | startAt, endAt, startAtLocal, endAtLocal, timezone, durationMinutes |
| Online or at a venue | locationType, isOnline |
| The venue's address and coordinates, unless the host hides them | venueName, addressFull, addressShort, city, cityState, region, country, countryCode, latitude, longitude, addressIsHidden |
| Who hosts it, with the social links each host filled in | hostName, hostUsername, hostCount, hosts |
| The calendar it belongs to | calendarName, calendarSlug, calendarUrl, calendarIsPersonal, calendarIsVerified |
| Price and tickets | isFree, price, priceMax, priceCurrency, priceIsFlexible, isSoldOut, spotsRemaining |
| Registration and how many have signed up | requiresApproval, registrationStatus, waitlistActive, guestCount, ticketCount |
| Visibility, type and images | visibility, eventType, coverImageUrl, socialImageUrl |
| With the full details switched on: description, Luma's tags, every ticket tier | description, categories, ticketTypes |
| Which of your targets found it, and when | source, sourceInput, position, scrapedAt |
▶️ How to scrape Luma events
- Open Luma Events Scraper and click Try for free.
- Type city slugs into Cities, or paste links into Luma URLs. Both together is fine.
- Add a Keyword filter if you want to narrow a city feed.
- Set Maximum events. Start around 50 to see the output shape, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
Run it with nothing filled in and you get one labelled sample row, which is not charged.
💰 How much does it cost to scrape Luma events?
$2.125 per 1,000 events on the Free plan. Paid plans pay a little less: $2.105 on Starter, $2.085 on Scale and $2.065 on Business. On the free plan, the $5 Apify gives you each month covers about 2,300 events.
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 you give it
{"cities": ["sf", "nyc"],"searchQuery": "founders","maxItems": 200,"includeDetails": false}
| Field | Default | What it is |
|---|---|---|
startUrls | none, the box starts with https://lu.ma/sf | Any lu.ma link, one per line. Event pages, city pages, community calendars and category pages all work, and a bare slug works too. |
cities | none | Luma discover cities. Use the slug (sf, nyc, london, berlin, tokyo, bengaluru) or the plain name. Luma runs discover pages for 87 cities. |
searchQuery | none | Keyword filter applied to every city and calendar feed, for example hackathon or yoga. |
category | any | tech, ai, crypto, climate, food, arts, fitness, wellness. See the warning below. |
maxItems | 50 | Hard cap on rows across every target, 1 to 5,000. |
period | upcoming | past pulls a calendar's history instead. Only affects community calendars. |
includeDetails | off | One extra request per event, adding the description, Luma's own tags and every ticket tier with its price. |
proxyConfiguration | none | Optional. Only servers of your own, given as URLs, are used; the box's other options are ignored. |
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 run in September 2026:
{"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"}
| Field | How to read it |
|---|---|
eventId | Stable. Use it to dedupe across runs and across targets. |
startAtLocal, endAtLocal | The event's own wall clock, already in timezone. startAt and endAt are the UTC pair. |
addressIsHidden | When this is true, the address fields are null and stay that way. |
isFree, price, priceMax, priceCurrency | price and priceMax are the cheapest and dearest tier in major currency units. All null on a free event. |
priceIsFlexible | True 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, ticketCount | How many are registered. 0 is a real answer on a new event, not a missing value. |
spotsRemaining | null unless the host published a capacity. |
calendarIsPersonal | true means the event hangs off a person's own calendar rather than a community one, and calendarSlug and calendarUrl are then null. |
description, categories, ticketTypes | null unless you switch on includeDetails. |
source, sourceInput | Which 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.
| Row | How to spot it | Charged |
|---|---|---|
| An event | It has an eventId and neither flag below | yes |
| The sample row | _sample: true | no |
| A diagnostic | _diagnostic: true and an errorCode | no |
A real event row carries no ok or charged field, so filter on _sample and _diagnostic being
absent.
| Code | What it means |
|---|---|
BAD_URL | Not a lu.ma link, or not one this actor can read. |
UNSUPPORTED_URL | lu.ma/u/<username> is a person's profile, not an event feed. Paste their calendar instead. |
NOT_FOUND | That slug does not exist on lu.ma any more. |
CITY_NOT_FOUND | Luma has no discover page for that city. The error names the nearest matches it does have. |
NO_RESULTS | The feed answered and held nothing. On a calendar, try switching to past events. |
BAD_REQUEST | Luma turned the query down as malformed. |
API_ERROR | Luma answered with an error. Re-run it. |
BAD_RESPONSE | Luma answered with something this actor could not read. |
TIME_LIMIT | The run reached its time limit, stopped a little before it and kept the events it had delivered. Give it more time, or ask for fewer events. |
UNEXPECTED_ERROR | The run stopped early on an unexpected error. The results before this row are kept. |
One bad target never stops the others, and a diagnostic row never fails the run.
💡 What people use it for
- Pulling the week ahead in three or four cities and filtering by keyword to find the ones worth attending.
- Watching a community calendar on a schedule and picking up what was added since the last run,
deduping on
eventId. - 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. You get the count.
- Hidden addresses stay hidden. When
addressIsHiddenistrue, the address fields arenull. - A city feed is upcoming-only and short. A big run needs more cities rather than deeper paging into one.
- A category filter and a city do not combine.
- 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
scrapedAtrecords when it was read. - It is not an official Luma tool. Dami's Studio is independent and is not affiliated with or endorsed by Luma, or by any other company named on this page.
🧭 Which events scraper do you need?
| If you want | Use |
|---|---|
| Upcoming Eventbrite events in a city, with venue, organiser and ticket prices | Eventbrite Events Scraper |
| Luma events by city or community calendar, with hosts and ticket prices | This one |
| Public Facebook events by keyword, city or Page | Facebook Events Scraper |
| Hackathons and student competitions in India, from Unstop | Unstop Scraper |
❓ Questions people ask
Do I need a Luma account to scrape events?
No. Nothing to sign up for and no key to apply for.
How do I get past Luma events?
Paste a community calendar into Luma URLs and set Past or upcoming to past.
Which cities does Luma cover?
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 and ticket tiers?
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 call it from code or connect it to an AI assistant?
The API tab has code for Python, JavaScript and the
CLI. MCP clients like Claude and ChatGPT use
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/luma-events-scraper; coding assistants can load our
skill file. All
three bill your Apify account at the same price.
Is it legal to scrape Luma events?
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 the legality of web scraping 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.