# Luma Scraper (`normdata/luma-scraper`) Actor

Scrape Luma (lu.ma) events in any city, country or worldwide, or from any calendar: date, venue, GPS, ticket price, spots left, guest count, and hosts with LinkedIn, X, Instagram and website. Filter by category, keyword, date, price. Optional description and ticket types.

- **URL**: https://apify.com/normdata/luma-scraper.md
- **Developed by:** [Norm Data](https://apify.com/normdata) (community)
- **Categories:** Lead generation, Automation, Social media
- **Features:** Limited permissions
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 events

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![Norm Data](https://raw.githubusercontent.com/FabriAV/normdata/refs/heads/main/assets/banner_norm2.png)

## 📅 Luma Scraper

Extract events from **Luma (lu.ma / luma.com)** in any city, state, country or the whole world, or from any calendar and community. Each event comes with date and local time, venue, address and GPS, ticket price, spots left, guest count, registration status, and the **hosts with their LinkedIn, X, Instagram, TikTok, YouTube and website**, plus the organising calendar's socials. Filter by category, keyword, date, price, in person or online, and open registration. Turn on **event details** for the full description, every ticket type with its capacity and spots left, categories, refund policy and registration questions.

> 👉 **Try it now:** press **Start**. The ready-made input gives you 10 events in a few seconds.<br>
> 💰 **$0.013 per event** on the Free plan (10 events per run), from $0.012 on paid plans. [See pricing](#-pricing)

### ✨ Why this scraper?

> - **Fast**<br>
>   1,000 events in about 25 seconds, 1,000 with full details in about a minute.
>
> - **Countries and the world, not just Luma's city list**<br>
>   Searches whole countries, states and continents, and keeps only events inside the country you asked for.
>
> - **Lead-ready**<br>
>   Host and calendar socials as clickable links (LinkedIn, X, Instagram, TikTok, YouTube, website).
>
> - **Clean data**<br>
>   Prices as numbers, local and UTC times, no duplicates across places, categories and links.
>
> - **No proxy needed**<br>
>   Nothing extra to set up or pay for.
>
> - **Any place**<br>
>   A city ("Berlin"), "City, Country", a state ("California"), a country ("Germany"), **Worldwide**, or "latitude, longitude". Several in one run.
>
> - **Apify platform**<br>
>   Schedule runs, get only new events, export to Excel or CSV, use the API, or connect Google Sheets, Zapier and Make.

### ⚖️ How it compares

Based on each Actor's public input options (October 2026).

| Capability | This actor | solidcode | aitorsm | haketa | hypebridge | matyascimbulka |
|---|:--:|:--:|:--:|:--:|:--:|:--:|
| Several places in one run | **yes** | one city (more via links) | no (one city) | yes | via links | yes |
| Countries, states, worldwide | **yes** | no | no | no | no | no |
| Custom radius | **yes** | no | no | no | no | no |
| Calendar / community links | **yes** | yes | yes | yes | yes | no |
| Past events of calendars | **yes** | no | yes | no | no | no |
| Categories | **12** | 8 | 8 | 8 | via links | yes |
| Keyword filter | **yes** | yes | no | no | no | no |
| Date range | **yes** | yes | no | no | no | no |
| In person / online filter | **yes** | yes | no | no | no | no |
| Free / paid filter | **yes** | yes | no | no | no | no |
| Min and max price | **yes** | no | no | no | no | no |
| Open registration only | **yes** | no | no | no | no | no |
| Event details (description, tickets) | **yes** | yes | description only | yes | yes | no |
| Proxy needed | **no** | no | no | optional | no | no |

### 🚀 How to scrape Luma

1. Create a free Apify account.
2. Pick the filters you need, or keep the ready-made input.
3. Click **Start**.
4. Download the events as Excel, CSV or JSON from the **Output** tab.

### 💰 Pricing

#### How much does it cost to scrape Luma?

You pay a one-time **$0.003** per run, plus a price for each event saved:

| Charged for | Free | Bronze | Silver | Gold+ |
| --- | --- | --- | --- | --- |
| **Event**: One Luma event saved to the dataset, with hosts, socials and (optionally) full details. | 0.013 | 0.012 | 0.011 | 0.01 |

Example: 1,000 events cost about **$12** on Bronze. No proxy or compute costs on top.

### 📦 What data you get

| Field | Description |
| --- | --- |
| `eventId`, `name`, `url`, `platform`, `coverImage` | Luma ID, title, event page and cover image. `platform` is `external` for events a calendar lists on another site (Partiful, Eventbrite...). |
| `startAt`, `endAt` | Start and end in UTC. |
| `startLocal`, `endLocal`, `timezone` | Start and end in the event's local time ("2026-10-12 18:30") and its time zone. |
| `locationType`, `isOnline` | In person or online. |
| `venue`, `fullAddress`, `city`, `region`, `country`, `countryCode`, `latitude`, `longitude` | Where it happens (null when the host hides the address until you register). |
| `isFree`, `price`, `maxPrice`, `currency`, `flexiblePrice` | Cheapest paid ticket and dearest ticket (as Luma shows them), and pay-what-you-want. |
| `registrationStatus`, `soldOut`, `spotsRemaining`, `nearCapacity`, `requiresApproval`, `waitlist` | Can you still get in, and how many spots are left. |
| `guestCount`, `ticketCount` | People going and tickets issued. With details on, hidden guest lists are counted from the tickets. |
| `calendarId`, `calendarName`, `calendarUrl`, `calendarDescription`, `calendarVerified` | The calendar or community that runs it (null for personal calendars). |
| `calendarWebsite`, `calendarTwitter`, `calendarLinkedin`, `calendarInstagram`, `calendarTiktok`, `calendarYoutube` | The calendar's links. |
| `hosts`, `featuredGuests` | `name`, `username`, `profileUrl`, `bio`, `website`, `twitter`, `linkedin`, `instagram`, `tiktok`, `youtube`, `verified`. |
| `searchLocation`, `searchCategory` | Which of your places, calendars or categories found it. |
| `description` | *(details)* Full description as plain text. |
| `categories` | *(details)* Luma's categories for the event. |
| `ticketTypes` | *(details)* `name`, `price`, `minPrice`, `currency`, `flexible`, `capacity`, `spotsRemaining`, `registered`, `requiresApproval`, `salesStart`, `salesEnd`, `description`. |
| `refundPolicy`, `registrationQuestions`, `phoneRequired`, `sessions` | *(details)* Refund terms, what the sign-up form asks, and multi-session schedules. |
| `scrapedAt` | When the row was collected (UTC). |
| `error` | Only present when an event's details didn't load. |

#### Example row (trimmed)

```json
{
  "eventId": "evt-plkQDIgx2uXuvPr",
  "name": "TFOT: Global Innovation Showcase: Deep Tech, Dual Tech, FinTech, Web3, Global Expansion and Scaling at SF War Memorial",
  "url": "https://luma.com/tfot-globalinnovationshowcase2026",
  "platform": "luma",
  "startAt": "2026-10-06T18:00:00.000Z",
  "endAt": "2026-10-07T02:00:00.000Z",
  "startLocal": "2026-10-06 11:00",
  "endLocal": "2026-10-06 19:00",
  "timezone": "America/Los_Angeles",
  "locationType": "offline",
  "isOnline": false,
  "venue": "War Memorial Veterans Building",
  "fullAddress": "War Memorial Veterans Building, 401 Van Ness Ave, San Francisco, CA 94102, USA",
  "city": "San Francisco",
  "region": "California",
  "country": "United States",
  "countryCode": "US",
  "latitude": 37.7795732,
  "longitude": -122.42101,
  "isFree": false,
  "price": 10,
  "maxPrice": 500,
  "currency": "USD",
  "registrationStatus": "open",
  "soldOut": false,
  "spotsRemaining": null,
  "requiresApproval": true,
  "guestCount": 327,
  "ticketCount": 0,
  "calendarId": "cal-Q32MaXasljdNP0W",
  "calendarName": "Orbis86 Events",
  "calendarUrl": "https://luma.com/orbis86",
  "calendarDescription": "Web3 and AI events hosted by Orbis86 globally | 50k+ followers across Twitter, Discord, Newsletter | 6000+ people hosted | 30+ Events hosted",
  "calendarWebsite": "https://orbis86.com",
  "calendarTwitter": "https://x.com/orbis86_x",
  "calendarLinkedin": "https://www.linkedin.com/company/thefutureoftech",
  "calendarInstagram": "https://www.instagram.com/orbis86.x",
  "hosts": [
    {
      "name": "Alina Aeby",
      "username": null,
      "profileUrl": "https://luma.com/user/usr-MChnoFcRFzQ29B4",
      "bio": "Founder & President, Silicon Valley PropTech Association (SVPA). Global partnerships in digital infrastructure, innovation, economic dev.",
      "website": "https://www.svproptech.com",
      "twitter": null,
      "linkedin": "https://www.linkedin.com/in/alina-aeby-80295120",
      "instagram": null,
      "tiktok": null,
      "youtube": null,
      "verified": false
    },
    {
      "name": "OffChain Global",
      "username": "offchainsf",
      "profileUrl": "https://luma.com/user/offchainsf",
      "bio": "Network of Web3 & entrepreneur professionals with over 70 chapters globally.",
      "website": "https://www.offchain.social",
      "twitter": "https://x.com/offchainglobal",
      "linkedin": "https://www.linkedin.com/in/kennimsf",
      "instagram": null,
      "tiktok": null,
      "youtube": null,
      "verified": false
    }
  ],
  "searchLocation": "San Francisco",
  "searchCategory": "AI",
  "description": "You've heard what's next. Now meet who's making it happen.\nThis October, get inside the room where founders, investors, government leaders, veterans, and technology pione...",
  "categories": [
    "AI",
    "Crypto"
  ],
  "ticketTypes": [
    {
      "name": "Standard",
      "price": 0,
      "minPrice": null,
      "currency": null,
      "flexible": false,
      "capacity": null,
      "spotsRemaining": null,
      "registered": 308,
      "requiresApproval": true,
      "salesStart": null,
      "salesEnd": null,
      "description": null
    },
    {
      "name": "Friends of Tech",
      "price": 10,
      "minPrice": null,
      "currency": "USD",
      "flexible": false,
      "capacity": null,
      "spotsRemaining": null,
      "registered": 12,
      "requiresApproval": false,
      "salesStart": null,
      "salesEnd": null,
      "description": "Instant confirmation. Support this event and the emerging tech community ❤\n\nNote: All ticket sales are final and non refundable"
    }
  ],
  "registrationQuestions": [
    "Please share your LinkedIn Profile URL",
    "Please let us know why you want to attend the event.",
    "How do you identify yourself? Please choose all that apply",
    "If you are a Funder or a Founder, please select one and what stage of funding you are raising or funding?"
  ],
  "scrapedAt": "2026-10-04T03:58:21.246Z"
}
```

### ⚙️ Input

| Section | What it's for |
| --- | --- |
| **Maximum events** | Always first, caps the whole run. Empty means no limit. |
| **Where** | Places, radius, Luma links, and past events of calendars. |
| **Filters** | Categories, keywords, dates, in person or online, price, open registration. |
| **What to include** | Event details (optional). |

#### Input examples

#### 🤖 Every AI event in California, with the hosts' LinkedIn

```json
{ "locations": ["California"], "categories": ["ai"], "maxItems": null }
```

#### 🌍 Paid tech events worldwide next month

```json
{ "locations": ["Worldwide"], "categories": ["tech"], "dateFrom": "+1 days", "dateTo": "+30 days", "price": "paid", "maxItems": 2000 }
```

#### 🗓️ A community's whole history, with descriptions and tickets

```json
{ "urls": ["https://luma.com/genai-sf"], "includePast": true, "includeDetails": true }
```

#### 🚀 Founder and hackathon events you can still join in London

```json
{ "locations": ["London"], "searchTerms": ["founder", "hackathon", "startup"], "availableOnly": true }
```

#### 📍 Free events within 5 km of a point

```json
{ "locations": ["40.7128, -74.006"], "radiusKm": 5, "price": "free" }
```

### 🔗 Related scrapers

> - [Meetup Scraper](https://apify.com/normdata/meetup-scraper)
> - [Pinterest Intelligence Scraper](https://apify.com/normdata/pinterest-intelligence-scraper)
> - [Resident Advisor Scraper](https://apify.com/normdata/resident-advisor-scraper)
> - [AUMA Trade Fairs Scraper](https://apify.com/normdata/auma-trade-fairs-scraper): Trade Shows & Organisers.

### ❓ FAQ and troubleshooting

#### Is there a Luma API? Do I need an API key?

> Luma has no public data API for this. This Actor works as a Luma API alternative: it reads the public pages and gives you clean JSON, CSV or Excel, with no API key, no login and no code to maintain. You can also call it from your own code with the Apify API, or from an AI agent through MCP:
> `claude mcp add --transport http apify "https://mcp.apify.com?tools=normdata/luma-scraper"`

#### Why do I get only 10 events?

> On the Apify free plan each run saves up to 10 results, so you can try it before paying. Any paid plan removes the limit.

#### A place was skipped

> Add the country ("Valencia, Spain"), or type "latitude, longitude".

#### No online events

> Luma's map search only lists in-person events. Online events come from calendar links.

#### Is this an official Luma tool?

> No. It is independent and not affiliated with Luma. It reads only data Luma publishes on its public pages, at a moderate pace. Use the data in line with Luma's terms and the laws that apply to you.

### 📧 Contact

Need a scraper for a different site, or found something wrong with this one? norm.data.scrapers@gmail.com

# Actor input Schema

## `maxItems` (type: `integer`):

Stop after this many events. Leave empty for no limit (every event that matches). The Apify Free plan is always capped at 10.

## `locations` (type: `array`):

A city ("San Francisco", "London"), "City, Country" ("Valencia, Spain"), a state ("California"), a country ("Germany"), "Worldwide", or "latitude, longitude". A city covers about 50 km around it.

## `radiusKm` (type: `integer`):

Search this far around each city or point instead of Luma's usual ~50 km. Leave empty for the default.

## `urls` (type: `array`):

Calendars and communities (luma.com/genai-sf: all their events), single events (luma.com/abc123), city pages (luma.com/sf) or category pages (luma.com/ai). lu.ma links work too.

## `includePast` (type: `boolean`):

For calendar links, also collect their past events (with attendance), newest first.

## `categories` (type: `array`):

Keep events in any of these Luma categories. Leave empty for all.

## `searchTerms` (type: `array`):

Keep events whose name, calendar or host mentions any of these words, e.g. "founders", "hackathon", "yoga".

## `dateFrom` (type: `string`):

A date (2026-11-20) or a relative one ("+7 days"). Leave empty for today.

## `dateTo` (type: `string`):

A date (2026-12-31) or a relative one ("+30 days"). Events starting up to this day.

## `format` (type: `string`):

Luma's map search only lists in-person events; online events come from calendar links.

## `price` (type: `string`):

Free events, paid events, or both.

## `minPrice` (type: `integer`):

Cheapest ticket, in the event's own currency.

## `maxPrice` (type: `integer`):

Cheapest ticket, in the event's own currency. 0 keeps free events only.

## `availableOnly` (type: `boolean`):

Skip sold-out events, waitlists and closed registrations.

## `includeDetails` (type: `boolean`):

Reads each event for its full description, every ticket type with price and spots left, categories, refund policy and registration questions. Slower: about 20 events per second.

## Actor input object example

```json
{
  "maxItems": 10,
  "locations": [
    "San Francisco"
  ]
}
```

# Actor output Schema

## `events` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 10,
    "locations": [
        "San Francisco"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/luma-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxItems": 10,
    "locations": ["San Francisco"],
}

# Run the Actor and wait for it to finish
run = client.actor("normdata/luma-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 10,
  "locations": [
    "San Francisco"
  ]
}' |
apify call normdata/luma-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,normdata/luma-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/x7PuahHnahkRKjebX/builds/sx04laEJmP9URERlV/openapi.json
