Luma Events Scraper & Monitor avatar

Luma Events Scraper & Monitor

Pricing

from $0.05 / 1,000 luma events

Go to Apify Store
Luma Events Scraper & Monitor

Luma Events Scraper & Monitor

Collect public Luma events by city, category, calendar or exact URL, enrich event details, and track reliable NEW, UPDATED and confirmed ENDED changes.

Pricing

from $0.05 / 1,000 luma events

Rating

0.0

(0)

Developer

Luka

Luka

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Collect public Luma events by city, category, calendar, or exact event URL. Get clean event rows with stable identities, enrich public details, or safely track NEW, UPDATED, and confirmed ENDED changes across scheduled runs.

🚀 Start in 60 seconds

The default collects upcoming San Francisco events. Copy this input into the Actor, press Start, and open the Dataset:

{
"workflow": "collect",
"citySlugs": ["sf"],
"detailLevel": "core",
"maxResults": 100
}

Every successful event has a stable luma:event:<event-id> identity, canonical URL, start/end time, timezone, location, registration context, organizer calendar, and source-published fields. Missing optional fields remain null; nothing is guessed.

🎯 Choose the right workflow

GoalChooseResult
Export current eventsworkflow: collect + detailLevel: coreFast normalized event rows
Get descriptions, categories and ticket typesworkflow: collect + detailLevel: detailedPublic detail-enriched rows, up to 100 events
Track changesworkflow: monitorOnly delivered NEW, UPDATED, and confirmed ENDED changes

For monitoring, schedule the same input and keep the same stateNamespace. The first run creates a baseline by default. Repeat runs compare the current complete scope with that baseline; one missing observation never ends an event.

📦 What you get

Actual normalized Luma event rows with stable identities and explicit coverage

GroupFields
IdentitystableId, sourceId, eventId, slug, url
Eventtitle, description, startAt, endAt, timezone, eventType, visibility
LocationlocationType, fullAddress, address, city, region, country, countryCode, latitude, longitude, virtualUrl
RegistrationisFree, price, maxPrice, currency, isSoldOut, spotsRemaining, requiresApproval, registrationAvailability, waitlistActive
OrganizercalendarId, calendarName, calendarUrl, public social links, hosts
DetailcategoryNames, featuredGuests, ticketTypes, media URLs
AuditobservedAt, sourceTargets, sourceClass, coverageStatus

Example event:

{
"recordType": "event",
"stableId": "luma:event:evt-NRWoIJ0rk2BEm8a",
"url": "https://luma.com/a16zgrokbotbuildnight",
"title": "Grok Bot build night for women",
"startAt": "2026-09-04T00:00:00.000Z",
"timezone": "America/Los_Angeles",
"city": "San Francisco",
"country": "United States",
"latitude": 37.779409,
"longitude": -122.3926127,
"isFree": true,
"calendarName": "SpaceXAI Community",
"sourceClass": "PUBLIC_FIRST_PARTY"
}

🎛️ Input guide

  • citySlugs — public city slugs such as sf, nyc, london, or berlin.
  • categorySlugs — public categories such as ai, climate, or startups.
  • calendarUrls — exact public Luma calendar URLs.
  • eventUrls — exact public event URLs.
  • period — upcoming, past, or both for calendar targets.
  • detailLevel — Core is the low-cost default; Detailed opens one public detail response per event.
  • Date, format, price, include-keyword, and exclude-keyword filters narrow delivered rows deterministically.
  • maxResults, per-target pages, details, runtime, transfer, and buyer-charge guards stop surprise cost. A stopped walk reports CAPPED.

You may combine up to eight source targets. Duplicate events are merged by stable event ID. Exact URLs do not silently add the default city.

💰 Pricing

Core event rows cost $0.05 per 1,000 events, below the current category leader's advertised $0.07 per 1,000 results. A successful collection also has a $0.001 verified-source charge per run; failed or blocked runs do not pay it. At the 100-event default, the total is $0.006, versus about $0.00705 for the leader.

Paid eventPrice
Core event$0.05 / 1,000
Detailed event$2.00 / 1,000
Comparable monitoring scan$0.004 / scan
Delivered change$0.05 / 1,000

Detailed replaces the Core row price; the same row is not charged twice. Monitoring charges its scan only when coverage is complete and comparable. Coverage rows are free.

✅ Coverage you can trust

Every run returns a free coverage row and an OUTPUT summary:

  • COMPLETE — the selected public window completed and is safe for state.
  • EMPTY_CONFIRMED — the completed public source returned no events.
  • FILTERED — useful filters were applied; absence is not comparable.
  • CAPPED — a declared limit stopped a full walk.
  • PARTIAL, BLOCKED, or FAILED — the scope is not safe for removal decisions.

Only COMPLETE or EMPTY_CONFIRMED with comparable target receipts may update monitoring state. ENDED requires two consecutive complete comparable misses. FAILED, FILTERED, PARTIAL, CAPPED, and BLOCKED never create false removals or commit degraded state.

🔌 API and automation

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('luminar/luma-events-scraper-monitor').call({
workflow: 'collect',
citySlugs: ['sf', 'nyc'],
detailLevel: 'core',
maxResults: 200
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Use the Dataset views for event columns, changes, and coverage. Use KVS OUTPUT for counts, field coverage, limits, billing events, and the recommended next action. Sequential Apify schedules are the simplest reliable monitoring setup.

⚠️ Not yet supported

Private attendee lists, login-only event data, CAPTCHA solving, automatic email/SMS alerts, outbound messaging, and inferred popularity or investment scores are outside this Actor. Public field coverage varies by event; the Actor reports actual coverage instead of promising universal optional fields.

❓ FAQ and support

Why is an event field null?
The selected public Luma surface did not publish it. Detailed mode may add public description, categories, ticket types, and calendar fields.

Why did monitoring return no rows?
The first run normally seeds a quiet baseline. Later unchanged runs also return no paid changes; inspect the free coverage row and OUTPUT.

Can a failed run end events?
No. Unsafe coverage never evaluates removals or advances state.

How do I keep two monitors separate?
Give each scope a different stateNamespace, then keep each Task input unchanged between sequential runs.

For reproducible support, share the run ID, public input, coverage status, and OUTPUT summary. Never share account cookies or private attendee data.