Daemon Data

Luma (lu.ma) events as JSON API

Luma Events Scraper is a pay-per-record Apify Actor by Daemon Data that returns lu.ma events by city, category, keyword or calendar: dates, venue, tickets, hosts as JSON, CSV or Excel. It costs $0.0015 per event with the default options ($1.50 per 1,000); no login to the source site, no proxy, no browser, and the same input runs from the Apify console, one REST call, Python, Node.js, n8n or an AI assistant through MCP.

Daemon Data Luma Events Scraper on Apify   Listing as plain text

Checked on 19 Oct 2026, on the Apify platform

San Francisco listed 105 upcoming events; three cities (San Francisco, New York, London) gave 100 events with full details in 36 seconds for $0.15 plus the $0.001 start fee. The default run (the 25 soonest San Francisco events with details) takes about 10 seconds and costs $0.04.

Who uses it, for what

You areWhat you get
Sponsorship, developer-relations and field-marketing teamsEvery upcoming AI, crypto or tech event in your target cities with guest counts, hosts and organiser calendars, so you know which meetups to sponsor, speak at or send a team to.
B2B sales and lead generationHosts and organiser calendars are companies and community leaders with their website and LinkedIn / X / Instagram handles on the event page: a weekly list of who is running events in your market.
Event aggregators, newsletters and city guidesA JSON feed of Luma events by city or category with stable ids (dedupKey), local times, venues with coordinates, prices and cover images, de-duplicated across cities and runs.
Founders, investors and community managersTrack what the ecosystem is doing this week: founder dinners, demo days, hackathons, workshops; follow specific calendars (lu.ma/<organiser>) and get new events the morning they are published.
Researchers and analystsEvent volume by city, category, price and format over time; which organisers are most active; how fast events sell out.
AI agents (MCP)Ask Claude or ChatGPT "free AI meetups in London this week" and let it call this Actor through Apify's MCP server.

Output fields

The most useful top-level fields with values from a real record; the full list is id, dedupKey, url, name, startAt, endAt, timezone, startAtLocal, endAtLocal, format, venue, address, city, region, country, countryCode, lat, lng, addressHidden, isFree, price, maxPrice, currency, soldOut, spotsRemaining, nearCapacity, requireApproval, registration, waitlist, guestCount, eventType, seriesId, visibility, discoverCity, calendar, hosts, hostNames, categories, coverUrl, description, descriptionHtml, ticketTypes, source, scrapedAt. Per-field notes and the OpenAPI definition are on the Apify API page.

FieldTypeExample
idstring"evt-Dgnnl0IoUmK5Se1"
dedupKeystring"luma:evt-Dgnnl0IoUmK5Se1"
urlstring"https://lu.ma/qjw9i5a9"
namestring"PlanetScale Movie Night: You Can See Everything"
startAtstring"2026-10-18T00:30:00.000Z"
endAtstring"2026-10-18T05:30:00.000Z"
timezonestring"America/Los_Angeles"
startAtLocalstring"2026-10-17T17:30:00-07:00"
endAtLocalstring"2026-10-17T22:30:00-07:00"
formatstring"in-person"
venuestring"AMC Kabuki 8"
addressstring"AMC Kabuki 8, 1881 Post St, San Francisco, CA 94115, USA"
citystring"San Francisco"
regionstring"California"
countrystring"United States"

Input and how to call it

A verified example input (it returned data on 2026-10-23):

{
  "cities": [
    "London"
  ],
  "categories": [
    "ai"
  ],
  "daysAhead": 30,
  "includeDetails": true,
  "maxEvents": 50
}

One HTTP call starts a run, waits for it and returns the records (token from console.apify.com):

curl -X POST "https://api.apify.com/v2/acts/data_daemon~luma-events-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"cities": ["London"], "categories": ["ai"], "daysAhead": 30, "includeDetails": true, "maxEvents": 50}'

Python: ApifyClient(token).actor("data_daemon/luma-events-scraper").call(run_input=...), full file python/luma-events-scraper.py. Node.js: node/luma-events-scraper.mjs. n8n: importable workflow. AI assistant (MCP): add the remote server https://mcp.apify.com/?tools=data_daemon/luma-events-scraper with header Authorization: Bearer YOUR_APIFY_TOKEN in Claude, ChatGPT, Cursor or VS Code and ask for the data in plain words.

All input fields

FieldTypeMeaning
citiesarrayLuma discover cities, e.g. San Francisco, New York, London, Berlin, Bengaluru, Tokyo, Singapore (87 cities; a lu.ma/<city> URL or a discplace-... id works too). One upcoming-events feed per city, newest start date last. An event found in two feeds is saved and charged once. Leave one city for a quick first run; set the list empty to search worldwide with a keyword.
categoriesarrayOptional. Luma categories: ai, tech, arts, climate, crypto, fitness, wellness, running, books, games, family, fooddrink. Each category is scraped around each city above (Luma lists category events by location). Several categories = any of them.
querystringOptional keyword searched by Luma in event names and descriptions, e.g. hackathon, founders, yoga, web3. Applied inside each city, category and calendar feed (Luma returns the 50 best matches per feed). With cities set to an empty list and no other source, it searches worldwide.
startUrlsarrayOptional. Any public lu.ma / luma.com link: an organiser calendar (https://lu.ma/planetscale), a single event (https://lu.ma/qjw9i5a9), a city (https://lu.ma/sf) or a category (https://lu.ma/ai); cal-..., evt-..., discplace-... ids too. Calendars return their upcoming events. When only URLs are given, the default city is not scraped.
daysAheadintegerOnly events starting within the next N days (1-365), e.g. 7 for this week's events. Leave empty for all upcoming events (feeds are ordered by start date, so maxEvents takes the soonest ones).
startDateFromstringOptional earliest start date, YYYY-MM-DD or ISO date-time (UTC), e.g. 2026-11-01. Applied by Luma's own date cursor, so later pages are not fetched for nothing.
startDateTostringOptional latest start date, YYYY-MM-DD (inclusive) or ISO date-time. Each feed stops at the first event after this date.
priceTypestringany (default), free (ticket price 0 / no ticket) or paid (at least one paid ticket type). Checked on every event before it is saved or charged.
eventFormatstringany (default), in-person (events with a physical venue) or online (no venue or a meeting link as the venue, incl. events whose location is not announced).
includeDetailsbooleanOn (default): one extra request per new event adds the full description (plain text and HTML), every public ticket type with its price, the event's Luma categories and the sold-out flag. The price per event is the same either way. Off: feed fields only (name, dates, venue, GPS, price range, hosts, calendar, guest count), roughly twice as fast.
maxEventsintegerStop after this many saved events (default 25). Cost: $0.0015 per event with details, so 25 events = $0.04. A city has 50-150 upcoming events; raise this for full exports.
maxEventsPerSourceintegerOptional cap per feed so one busy city does not use up maxEvents (0 = no cap).
onlyNewSinceLastRunbooleanOn: deliver only events that an earlier run with the same stateName has not already delivered, and skip the rest without charging. Off (default): return every matching event.
stateNamestringOptional name for this search's memory when onlyNewSinceLastRun is on, e.g. sf-ai-daily. Leave empty to derive it from the cities, categories, keyword and URLs. Use a new key to start over.
skipEventIdsarrayEvent ids you already have (the id field from earlier runs, e.g. evt-Dgnnl0IoUmK5Se1; lu.ma/<slug> URLs are accepted too). Skipped before any detail fetch and never charged. Large lists are fine.

Price

$0.0015 per event ($1.50 per 1,000); $0.001 per run. List prices for Apify Free and Starter plans; Scale and Business plans pay 15% to 30% less.

EventPricePer 1,000Charged when
Event$0.0015$1.50One Luma event saved to the dataset: id, URL, name, start/end (UTC + local + timezone), in-person/online, venue, address, city, region, country, GPS, free/paid, price range and currency, sold-out, spots remaining, approval, guest count, organiser calendar (name, URL, website, socials), hosts (name, bio, profile URL, website, LinkedIn/X/Instagram handles), categories, cover image, full description (text + HTML) and ticket types. Details included in the price; skipped or filtered events are never charged.
Actor Start$0.001Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).

Worked example: the input above, capped at 50 events, costs at most $0.076. Apify's free plan includes $5 of usage a month, about 3,333 events; the Actor's own compute is included in the per-record price, and records skipped by filters, de-duplication or only-new mode are not charged.

What it is not for

Eventbrite, Meetup (not covered); attendee or guest lists (never collected). The data belongs to its publisher; the Actor reads public pages and endpoints and leaves out personal contact details.

Ready-made example pages

Saved inputs you can run with one click on Apify (Examples tab); each has its own page:

Questions buyers ask

How much does it cost to scrape Luma?

$0.0015 per event with its full details plus $0.001 per run, so 100 events cost about $0.15 and a daily feed of 20 new events about $1 a month.

Is there an official Luma API?

Luma has a paid API for calendar owners (their own events). This Actor reads the public JSON that the lu.ma website itself loads for discover, category, calendar and event pages, and exposes it as a REST API with schedules, webhooks and only-new runs. No login or API key is needed.

Does it collect attendees or guest lists?

No. The Actor never requests or outputs guest lists, guest names, e-mails or phone numbers, including the "N going" avatars shown on event pages. It outputs the hosts' and organiser calendar's public profile information exactly as the event page shows it (name, bio, profile URL, website and social handles).

Why is the address missing on some events?

Hosts can show the exact address only to registered guests. Luma then shows the city and neighbourhood, and so does the Actor: address and venue are null, addressHidden is true, and the coordinates are rounded to about 1 km. City, region and country are still filled in.

Why does an online-only run of a city return nothing?

Luma's city and category pages list events with a physical location near that city. Online events are found through organiser calendars (startUrls) and keyword searches with cities: [], and are marked format: "online".

Which cities and categories exist?

The 87 cities on lu.ma/discover (any lu.ma/<city> page; the Actor also resolves new cities live) and the 12 categories ai, tech, arts, climate, crypto, fitness, wellness, running, books, games, family, fooddrink. A city or category Luma does not know ends the run with Saved 0 events and the known examples in the status message.

Can I scrape past events?

Not in this version: Luma's public feeds list upcoming events. Open an issue if you need an organiser's past events.

Does it work for luma.com links?

Yes. lu.ma and luma.com are the same site; paste either form in startUrls.

Alternatives, honestly

OptionWhat it gives youWhere it falls short for this job
Luma website and iCal feedsBrowse; subscribe to one calendarNo cross-city export, no host profiles in bulk
Eventbrite or Meetup ActorsOther event platformsDifferent events; this API reads Luma only
Other Luma Actors on Apify StoreSame sourceCompare detail fields (hosts, tickets, GPS) and price per 1,000

Published by Daemon Data (data_daemon on Apify Store). Prices, fields and example pages on this page were read from the live Apify listing on 2026-10-23; the listing is the canonical description of the Actor.