Luma Events Scraper avatar

Luma Events Scraper

Pricing

from $5.05 / 1,000 results

Go to Apify Store
Luma Events Scraper

Luma Events Scraper

Collects public events from Luma and returns event times, venue and location, ticket details, guest counts, calendar information, hosts and public profile links. Start from a city, category, calendar, single event or keyword search; data comes from Luma's unauthenticated JSON API.

Pricing

from $5.05 / 1,000 results

Rating

0.0

(0)

Developer

Axiom Works

Axiom Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Returns: one row per Luma event with name, startAt, city, country, isFree, guestCount, hosts and url. Input: {"startUrls":[{"url":"https://luma.com/sf"}],"maxItems":20,"includeDetails":true} Best for: building event lead lists, tracking tech and startup events in a city, monitoring organiser calendars and ticket prices.

{
"id": "evt-Gxrb7efa9lu5vw5",
"name": "Fast Forward",
"startAt": "2026-10-14T17:00:00.000Z",
"city": "San Francisco",
"isFree": true,
"guestCount": 347,
"url": "https://luma.com/fastforwardhack"
}

What does Luma Events Scraper do?

Luma Events Scraper is a Luma scraper and Luma API alternative that collects public events from luma.com (formerly lu.ma). It returns one record per event with the name, start and end time, timezone, venue, address, coordinates, ticket information (free or paid, price, sold out, near capacity), guest count, the organising calendar with its socials and website, the hosts with their public profiles, and optionally the full description and ticket types.

You can start from the same places the site itself offers: a city page such as luma.com/sf, a category page such as luma.com/ai, a calendar page such as luma.com/genai-sf, a single event page, or a keyword search. You can also combine them, for example a category within a city, or a category around a latitude and longitude. No login is needed, and the Actor reads the public JSON data that the Luma website itself loads.

What data can you get from Luma?

With details enabled, registrationQuestions contains public form definitions (id, label, type, required and options), never attendee answers. locale copies the event locale. detailsFetched is true after a detail response, false for listing-only or external rows and failed detail requests. An empty question array means no custom questions were published; null means details were unavailable.

With details enabled, each ticket type also includes its public description, copied verbatim. Missing or blank ticket descriptions are null; this text can explain what a ticket includes or how approval works.

Every record has the same set of fields. A value that Luma does not provide for an event is null. External events that a calendar links to (platform external) have no hosts, ticket types or description.

FieldDescriptionExample
idStable Luma ID of the event (evt-...), or of the calendar item for external events.evt-cQoVVZaVuGt0StV
eventIdLuma event API ID; null for external calendar entries.evt-cQoVVZaVuGt0StV
platformluma for events hosted on Luma, external for events a calendar links to elsewhere.luma
nameEvent name.Open Intelligence Summit
urlPublic event page (luma.com/slug), or the external URL for external events.https://luma.com/digita-ghqh
slugEvent slug used in the Luma URL; null for external events.digita-ghqh
startAtStart time as ISO 8601 (UTC).2026-10-13T18:30:00.000Z
endAtEnd time as ISO 8601 (UTC).2026-10-14T01:30:00.000Z
timezoneIANA timezone of the event.America/Los_Angeles
locationTypeoffline, online or tbd.offline
eventTypeLuma event type, e.g. independent.independent
visibilityEvent visibility, public for listed events.public
venueNameVenue name or street address when shown publicly.Pier 48
fullAddressFull address when the host makes it public.Pier 48, San Francisco, CA 94158, USA
shortAddressShort address line.Pier 48
cityCity of the event.San Francisco
regionState or region.California
countryCountry name.United States
countryCodeISO country code.US
latitudeEvent latitude (approximate when the address is hidden).37.7469
longitudeEvent longitude (approximate when the address is hidden).-122.3866
googlePlaceIdGoogle place ID of the venue when public.ChIJxxxxxxxx
coverUrlURL of the event cover image.https://images.lumacdn.com/uploads/example.png
guestCountNumber of guests registered, as reported by Luma.306
ticketCountNumber of tickets issued, as reported by Luma.306
isFreeTrue when the event is free.true
priceCentsLowest ticket price in minor currency units; null when free.2500
priceCurrencyCurrency code of the price.usd
priceIsFlexibleTrue when guests choose what to pay.false
isSoldOutTrue when no tickets are left.false
spotsRemainingTickets left when the host sets a capacity; null otherwise.12
isNearCapacityTrue when the event is almost full.false
requireApprovalTrue when the host approves each guest.true
registrationAvailabilityRegistration state, e.g. open.open
waitlistActiveTrue when a waitlist is open.false
calendarIdID of the organising calendar.cal-aibKRDXjMS2Dj9q
calendarNameName of the organising calendar.DigitalOcean Community Events
calendarSlugCalendar slug; null for personal calendars.digitalocean
calendarUrlLink to the calendar page.https://luma.com/digitalocean
calendarIsPersonalTrue for a personal calendar.false
calendarIsVerifiedTrue when the calendar is verified by Luma.false
calendarPlanLuma plan of the calendar.plus
calendarDescriptionShort calendar description.Keep track of all DigitalOcean events under one page
calendarWebsiteCalendar website.https://www.digitalocean.com
calendarInstagramInstagram handle.thedigitalocean
calendarLinkedinLinkedIn handle./company/digitalocean
calendarTwitterTwitter/X handle.digitalocean
calendarYoutubeYouTube handle.d
calendarTiktokTikTok handle.example
hostsPublic hosts: id, name, username, profileUrl, bio, avatarUrl, isVerified, socials, website, timezone.[{"id": "usr-0qh333qMq4tTuNc", "name": "DigitalOcean", "username": "DigitalOcean"}]
hostCountNumber of hosts.1
detailsFetchedWhether a full event detail response was received.true
localePublic event locale; null without details.en
registrationQuestionsPublic registration form definitions, without answers.[{"label":"Company","type":"text","required":true}]
descriptionLinksUnique HTTP/HTTPS destinations in description link marks; null without details, empty when none. Destinations are not fetched.[]
descriptionPlain-text event description; null when includeDetails is off.The argument is no longer ...
ticketTypesTicket types with price, capacity, spots remaining and nullable ticket-level description; null when includeDetails is off.[{"id": "ttype-FTaIGraJmLz3rQB", "name": "Standard", "type": "free"}]
categoriesLuma categories of the event; null when includeDetails is off.[{"id": "cat-ai", "slug": "ai", "name": "AI"}]
sourceKindWhere the record came from: discover-place, category, calendar, event or global.discover-place
sourceSlugSlug of the city, category, calendar or event page that produced the record.sf
searchQueryQuery input, echoed.hackathon
scrapedAtISO timestamp of the run.2026-10-13T12:00:00.000Z
sourceUrlPage the record came from.https://luma.com/digita-ghqh

How to use Luma Events Scraper

  1. Open the Actor in Apify Console and go to the Input tab.
  2. Enter a start URL, or fill in a city, category, calendar or search query. With nothing filled in, the San Francisco city page is scraped.
  3. Set maxItems to the number of events you want. The limit is shared by all sources in the run.
  4. Leave includeDetails on if you want descriptions and ticket types; turn it off for a faster run.
  5. Click Start, then export the dataset as JSON, CSV, Excel or XML when the run finishes.

City listings are upcoming. Categories combine with city or coordinates using radiusKm. Calendars support period: "past". Search returns at most 50 matches per query.

Input

FieldTypeRequiredDescription
startUrlsarrayNoLuma or lu.ma URLs: city, category, calendar or event pages.
citystringNoLuma city slug or name such as sf, london or San Francisco.
categorystringNoOne of ai, tech, crypto, climate, arts, books, family, fitness, food, games, running, wellness.
calendarstringNoCalendar slug such as genai-sf or a cal- ID.
querystringNoFree-text search over event names, at most 50 matches.
queriesstring arrayNoAdditional searches, default empty; query runs first and all share maxItems.
eventIdsstring arrayNoDirect public evt- IDs, default empty; shares maxItems.
periodstringNofuture (default) or past. Calendars only.
latitude, longitudenumberNoCentre for a category search without a city.
radiusKmintegerNoRadius in km, 1-500, default 50.
maxItemsintegerNoMaximum events across all sources, 1-10000, default 100.
includeDetailsbooleanNoFetch description, links, tickets, categories, locale and registration questions; default true.
proxyConfigurationobjectNoProxy settings. Default: Apify Proxy.
{
"city": "london",
"category": "ai",
"radiusKm": 50,
"maxItems": 50,
"includeDetails": true,
"proxyConfiguration": { "useApifyProxy": true }
}

A page or city that does not exist is skipped with a clear message, and the run finishes with 0 items instead of failing. When several sources are given, they run in order and share the maxItems budget; the same event found twice is returned once.

Batch searches use queries, for example {"queries": ["hackathon", "meetup"], "city": "london", "maxItems": 20}. Each term uses the same source scope. query runs first when both fields are supplied, then additional terms in input order. Duplicate terms are removed without regard to case. The first search that produces an event supplies its searchQuery; an event matching later searches is saved only once.

For events already stored in your database, use {"eventIds": ["evt-BlQwkRLguP9KuyU"], "maxItems": 1}. Event IDs run after start URLs and before standalone sources. The calendar field accepts a calendar URL, slug or cal- ID. Neither form needs a login. A valid ID that no longer exists is skipped with a clear status message.

descriptionLinks contains the destinations of public HTTP/HTTPS links embedded in an event description. It preserves each destination as Luma returns it and removes repeats. It does not infer links from plain text, inspect external websites or extract private meeting links. Turn off includeDetails to make this field null; a fetched description with no links produces an empty array.

Output

Each run writes one dataset item per event. This shortened record came from a local direct-ID run with details enabled. Seven questions were returned; only the first is shown:

{
"id": "evt-VMd5nQt9FGodKjX",
"name": "Bay Area Frontier Research Club #27 | Robotics & Embodied AI: Feel or Think? (dinner + paper discussion @ Mission Robotics)",
"startAt": "2026-10-15T00:30:00.000Z",
"url": "https://luma.com/sxoqc4og",
"detailsFetched": true,
"locale": "en",
"registrationQuestions": [
{
"id": "xk0vxjlw",
"label": "Where do you work, and what's your role?",
"type": "text",
"required": true,
"options": null
}
],
"sourceUrl": "https://luma.com/sxoqc4og"
}

The dataset can be exported as JSON, CSV, Excel, XML or RSS, or read through the API.

How much does it cost to scrape Luma?

Luma Events Scraper is charged per result. You pay only for the events returned, and maxItems caps how many that can be. See the Pricing tab for the current price. Turning off includeDetails makes runs faster because it saves one request per event.

Use with AI agents (MCP)

Connect Luma Events Scraper to Claude, Cursor or any MCP client through the Apify MCP server:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=axiomworks/luma-events-scraper"
}
}
}

Example prompts:

  1. "Use Luma Events Scraper to list the next 20 AI events in London with their start times and whether they are free."
  2. "Get past events of the Luma calendar deepmind and tell me who hosted them."
  3. "Search Luma for hackathon events and group them by city."

Integrations and API

Run Luma Events Scraper from your own code with the Apify API. Set APIFY_TOKEN to your Apify API token (send it in the Authorization header, never in the URL).

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("axiomworks/luma-events-scraper").call(run_input={"city": "london", "category": "ai", "maxItems": 50})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item["startAt"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('axiomworks/luma-events-scraper').call({ city: 'london', category: 'ai', maxItems: 50 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

cURL

curl -X POST "https://api.apify.com/v2/acts/axiomworks~luma-events-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"city": "london", "category": "ai", "maxItems": 50}'

Results can also be sent to Make, Zapier, n8n, Google Sheets or a webhook from the Integrations tab, and runs can be scheduled to track new events every day.

FAQ

How many events can I get? As many as Luma lists, up to 10,000 per run. Pagination stops at maxItems or the end of the feed.

Why did my run return 0 results? The page, city or calendar you gave does not exist on Luma, or the search matched nothing. The status message of the run names the cause. Check the slug on luma.com and try again.

Can I get past events? Yes, for calendars: set calendar (or a calendar start URL) and period to past. City, category and search results only show upcoming events.

Are guests and attendees included? No. The Actor returns the public guest count, not the list of guests. Hosts and the organising calendar are included with their public profile data.

Why are some fields null? Luma can hide addresses or omit profile fields. External events lack ticket and host data. Check detailsFetched for unavailable details.

Does the address show the exact venue? Only when the host makes it public. Otherwise Luma shows the city and an approximate position, and the Actor returns exactly that.

Do I need a proxy? Apify Proxy is on by default and is enough. Blocked requests are retried on a new IP automatically.

The Actor collects only publicly available event data that Luma shows to anyone without logging in. Hosts and calendar owners appear with the public profile data shown on their event pages. You are responsible for using personal data such as host names and social handles in line with the laws that apply to you, including GDPR, and with Luma's terms. This is not legal advice.

Luma Events Scraper is an independent tool. It is not affiliated with, endorsed by or sponsored by Luma.

Feedback

Found a bug or need a field that isn't here? Open an issue on the Issues tab and we'll look at it.