Luma Event Scraper
Pricing
from $2.50 / 1,000 results
Luma Event Scraper
Extract structured event data from lu.ma public event and calendar pages — name, dates, venue, price, organizer and more. One dataset item per event.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Conor G
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Luma Event Scraper — scrape lu.ma events into structured data
A Luma event scraper that turns lu.ma into structured data: event pages, organizer calendars, and city pages, all in one run. Give it an event link, an organizer's calendar link, or a city page like lu.ma/sf, and get back one dataset row per event: name, dates, venue, price, organizer, tags, and more.
Built for reliability first. It reads the same structured data lu.ma's own app renders from — not brittle CSS selectors — so it keeps working as the site's visual design changes.
What it extracts
For every event, you get:
| Field | Description |
|---|---|
url | Canonical event page URL |
eventId | Luma's internal event ID |
name | Event title |
description | Full event description as plain text |
startAt / endAt | ISO 8601 start/end datetimes |
timezone | IANA timezone of the event |
isVirtual | Whether the event is online/hybrid |
venueName, address, city, region, country | Location details, when public |
coverImageUrl | Event cover image |
isFree, priceDisplay, spotsRemaining, isSoldOut | Ticket/pricing info as shown on the page |
organizerName, organizerSlug, organizerWebsite | The hosting calendar/organizer |
organizerSocials | Public organizer social handles (Twitter/X, Instagram, LinkedIn, TikTok, YouTube) |
tags | Category tags (e.g. Tech, Crypto, Music) |
scrapedAt | Timestamp of extraction |
Sample output
{"url": "https://lu.ma/runway-i8gw","eventId": "evt-A7mOelcMzgsO5kt","name": "Inside Runway: NYC Industry Night","description": "Join us for a night of mingling, pizza and drinks at Runway's NYC office. Meet the Runway team and network with other creatives and industry talent.","startAt": "2026-07-29T22:00:00.000Z","endAt": "2026-07-30T00:00:00.000Z","timezone": "America/New_York","isVirtual": false,"venueName": null,"address": null,"city": "New York","region": "New York","country": "United States","coverImageUrl": "https://images.lumacdn.com/uploads/mu/475dfd13-54a9-44e9-8b2c-d0dd723c6a35.png","isFree": false,"priceDisplay": "Free","spotsRemaining": null,"isSoldOut": false,"organizerName": "Runway","organizerSlug": "runway","organizerWebsite": "https://runwayml.com","organizerSocials": {"twitter": "runwayml","instagram": "runwayapp","linkedin": "/company/runwayml","youtube": "runwayml"},"tags": ["Tech"],"scrapedAt": "2026-07-29T07:55:37.400Z"}
This is real output from a live run against lu.ma/runway-i8gw. Note venueName and address are null here — the organizer didn't make the exact address public on the page, so the actor doesn't have it either. That's typical, not a bug.
Input
| Field | Type | Description |
|---|---|---|
startUrls | array (required) | lu.ma URLs to scrape. See below for the three supported kinds. |
maxEvents | integer | Stop after this many unique events have been scraped. Leave empty for no limit. |
dateFrom / dateTo | string | Optional ISO date bounds — only events starting in this window are kept. |
maxConcurrency | integer | Parallel page fetches (default 5). Kept modest to be respectful of lu.ma. |
maxRequestRetries | integer | Retries per page before it's skipped with a warning (default 3). |
Supported URL types
- Event pages —
https://lu.ma/on-mercury-sf— scraped directly. - Calendar / organizer pages —
https://lu.ma/mercuryevents— the actor discovers that organizer's listed events and scrapes each one. - City or category discovery pages —
https://lu.ma/sf,https://lu.ma/tech— the actor discovers the events shown on that page and scrapes each one.
Mix and match all three in one startUrls list.
Example input
{"startUrls": [{ "url": "https://lu.ma/sf" },{ "url": "https://lu.ma/mercuryevents" }],"maxEvents": 100,"maxConcurrency": 5}
Use cases
- Event marketing — find relevant tech/community events in a city to sponsor, speak at, or exhibit at.
- Community research — track what a specific organizer, accelerator, or DAO is running over time.
- Market mapping — build a dataset of event density, pricing, and topics across cities or categories.
- Lead generation — identify active event organizers in a niche as partnership or outreach targets.
How it works (and why it's reliable)
Lu.ma is built on Next.js and server-renders each public page with a full JSON snapshot of the page's data embedded in a __NEXT_DATA__ script tag. This actor reads that JSON directly instead of scraping visible HTML/CSS. That means:
- It survives lu.ma redesigning its page layout or CSS classes.
- Field extraction (dates, prices, organizer info) is exact — it comes from the same data lu.ma's own frontend renders from, not fragile text parsing.
- No headless browser is required for the documented page types, which makes runs faster and cheaper.
Every page fetch is retried on failure; a page that can't be parsed is skipped with a logged warning rather than crashing the run. Events are deduplicated by their lu.ma event ID, so the same event linked from multiple discovery pages is only saved once. The run ends with a summary log of events scraped vs. pages that failed or were skipped, and only exits with a failure status if every input page failed.
Limitations (honest, by design)
- No attendee/guest-list data. This actor only reads public event/calendar/discovery pages. It does not, and will not, extract guest lists, RSVPs, or any data behind a login.
- No login, no CAPTCHA bypassing. Private or invite-only events are out of scope.
- Discovery pages return what lu.ma renders server-side. Very large calendars/cities that lu.ma paginates client-side may not surface every historical event in one page load; re-run periodically to pick up new listings, or supply direct event/calendar URLs for anything missed.
- Fields depend on what the organizer made public. If an organizer hides the exact address or ticket price, this actor won't have it either — it reads only what lu.ma itself shows to a visitor.
FAQ
Is it legal to scrape lu.ma? This actor only reads public pages — the same event, calendar, and city pages anyone can open in a browser without logging in. It doesn't access private events, guest lists, or anything behind authentication. You're responsible for how you use the data (e.g. respecting an organizer's own terms if you republish their content), but the extraction itself is limited to public information by design.
What does it cost to run? You pay per event returned (pay-per-result), not per page crawled. See the Pricing tab on this actor's page for the current rate. A run against a single event page or a small calendar costs very little; a large discovery page with hundreds of events costs proportionally more.
How do I run this on a schedule? In the Apify Console, open this actor, save an input as a Task, then add a Schedule to that task (e.g. daily or weekly). Each scheduled run appends new events to a fresh dataset, so you can diff runs to see what's new.
Can I get a field that isn't listed here? Only if lu.ma itself shows it on the public page — this actor doesn't invent data. If you need a specific field lu.ma displays that isn't in the output above, open an Issue on the actor's Issues tab and it'll get evaluated.
Does it work on lu.ma calendars outside tech (music, sports, etc.)?
Yes — the actor doesn't filter by category. Any public lu.ma event, calendar, or discovery page works the same way; lu.ma/tech and lu.ma/sf are just examples.
Output
One dataset item per event — pay-per-result friendly. Use the Events dataset view in the Apify Console for a quick table (name, dates, city, price, organizer), or export the full dataset as JSON/CSV/Excel for further analysis.