# Luma Scraper (`aboo.script/luma-scraper`) Actor

\[💰$4.5 / 1K] ⚡ Fast Luma (lu.ma) scraper. No login, no API key. Get events by city, category, calendar, keyword or event URL with dates, venue and GPS, every ticket type and price, guest counts, hosts and organizers with websites and socials. Filter by date, online or in person, free or paid.

- **URL**: https://apify.com/aboo.script/luma-scraper.md
- **Developed by:** [Aboo Script](https://apify.com/aboo.script) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.15 / 1,000 results

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

## Luma Scraper

![Luma Scraper](https://i.ibb.co/yc7JFbCG/luma-banner.png)

**Luma Scraper** extracts public events from [Luma](https://luma.com/) (formerly lu.ma) into clean, structured data you can download as JSON, CSV, Excel, or HTML. Paste a Luma city, category, calendar, or event URL, or type a few keywords, and get the event name, date and time, venue with address and coordinates, ticket prices, guest count, hosts with their social profiles, and the full description for every event. No account or login required.

### Introduction

[Luma](https://luma.com/) is an event platform used by communities, startups, and creators to run meetups, conferences, hackathons, workshops, parties, and run clubs. It is especially popular for AI, tech, crypto, and startup events in cities like New York, San Francisco, London, and Dubai, which makes its data valuable for finding events, organizers, and active communities.

This Luma scraper collects the same public information you see in your browser and turns it into a ready-to-use dataset. You can run it once, schedule it to run daily, or connect it to your own tools as a Luma API alternative.

### What data can you extract from Luma?

- 🏷️ Event name, description, cover image, categories, and language
- 📅 Start and end date and time, with the event time zone
- 📍 In person or online, venue name, full address, city, region, country, country code, latitude, and longitude
- 💲 Free or paid, ticket price, maximum price, and currency
- 🎟️ Every ticket type with its name, price, capacity, spots remaining, registrations, approval requirement, and sales window
- 👥 Guest count, spots remaining, sold out status, registration status, and waitlist status
- 🏢 Calendar (organizer) with name, page URL, bio, website, and social links (Instagram, X, LinkedIn, TikTok, YouTube)
- 🧑‍💼 Hosts and featured guests with name, profile URL, bio, website, and social links
- 🔗 Direct URL to each event

### Use Cases

- 📈 **Market research**: see which topics, cities, and communities run the most events, and how prices and attendance change over time.
- 🤝 **Lead generation**: build lists of event organizers, hosts, and speakers with their websites and social profiles.
- 🎯 **Sponsorship and partnerships**: find relevant meetups and conferences to sponsor, speak at, or partner with.
- 🗓️ **Event aggregation**: power a city newsletter, community calendar, or app with fresh upcoming events.
- 🤖 **AI and automation**: feed clean, structured event data into spreadsheets, dashboards, CRMs, or AI workflows.

### How to scrape Luma step by step

1. Paste one or more Luma URLs into **Start URLs**, or type keywords into **Search queries**.
2. Optionally set **City**, **Category**, **Date from**, **Date to**, **Event type**, or **Price** to narrow your search queries.
3. Set **Maximum number of results** to how many events you want per URL or per query.
4. Click **Start** and wait for the run to finish.
5. Download your data in JSON, CSV, Excel, or HTML from the **Output** tab.

### Input

- **Start URLs**: Luma URLs to scrape. Supported pages:
  - City pages, for example `https://luma.com/nyc` or `https://luma.com/dubai`
  - Category pages, for example `https://luma.com/ai` or `https://luma.com/tech` (set **City** to choose where the events are)
  - Calendar and community pages, for example `https://luma.com/clickhouse-events`; add `?period=past` to get past events
  - Single event pages, for example `https://luma.com/wbaz5nm8`
  - Old `lu.ma` links work too.
- **Search queries**: keywords to search Luma events for, one per line (for example `startup` or `design`). Each query is scraped separately.
- **Maximum number of results**: how many events to collect for each start URL or search query. Set `0` for no limit.
- **City**: a Luma city name or slug, for example `New York`, `nyc`, `Dubai`, or `london`. It limits search queries to that city and sets the location for category pages.
- **Category**: limits search queries to one Luma category (AI, Arts & Culture, Books, Climate, Crypto, Family, Fitness, Food & Drink, Games, Running, Tech, Wellness).
- **Date from** and **Date to**: only events starting within these dates. Applies to search queries.
- **Event type**: any, in person, or online events. Applies to search queries.
- **Price**: any, free, or paid events. Applies to search queries.

You can use start URLs, search queries, or both in the same run.

### Input Examples

Scrape upcoming events in New York:

```json
{
  "startUrls": [{ "url": "https://luma.com/nyc" }],
  "maxResults": 5
}
```

Search by keyword:

```json
{
  "searchQueries": ["startup"],
  "maxResults": 5
}
```

Search for free, in-person AI events about founders in New York in November:

```json
{
  "searchQueries": ["founders"],
  "city": "New York",
  "category": "ai",
  "dateFrom": "2026-11-01",
  "dateTo": "2026-11-30",
  "eventType": "in-person",
  "price": "free",
  "maxResults": 5
}
```

### Output

Each event is saved as one item in the dataset. Here is an example of a single item:

```json
{
  "url": "https://luma.com/undefined-20261022",
  "id": "evt-Mhu0MM7WcH2hVNl",
  "name": "Undefined + EvolveDigital / Oct 22nd 2026",
  "description": "A live game show for people who build on the web\n\nEvolveDigital and Undefined are teaming up at Automattic's NoHo office ahead of EvolveDigital NYC, the two-day...",
  "startAt": "2026-10-22T22:00:00.000Z",
  "endAt": "2026-10-23T01:00:00.000Z",
  "timezone": "America/New_York",
  "locationType": "In person",
  "venue": "Automattic",
  "address": "Automattic, 166 Crosby St, New York, NY 10012, USA",
  "city": "New York",
  "region": "New York",
  "country": "United States",
  "countryCode": "US",
  "latitude": 40.7258728,
  "longitude": -73.9954015,
  "lumaCity": "New York",
  "imageUrl": "https://images.lumacdn.com/uploads/y5/b9090853-35f8-463d-9061-7f6c2d62021c.png",
  "categories": ["Games", "Tech"],
  "isFree": false,
  "price": 10,
  "maxPrice": null,
  "currency": "USD",
  "isSoldOut": false,
  "spotsRemaining": 39,
  "requiresApproval": false,
  "registrationStatus": "Open",
  "waitlistActive": false,
  "guestCount": 61,
  "ticketTypes": [
    {
      "id": "ttype-AM1dPg3QJsKizC5",
      "name": "Standard",
      "type": "Paid",
      "price": 10,
      "minPrice": null,
      "currency": "USD",
      "isFlexible": false,
      "description": null,
      "capacity": null,
      "spotsRemaining": null,
      "registered": 61,
      "requiresApproval": false,
      "isAvailable": true,
      "salesStart": null,
      "salesEnd": null
    }
  ],
  "calendar": {
    "id": "cal-WQdHOC8maJn4fyw",
    "name": "Undefined by Design Systems House",
    "username": null,
    "url": "https://luma.com/undefined-live",
    "bio": "Undefined is research at play. An in-person event that asks people in the industry questions about usability and best practices in tech.",
    "avatarUrl": "https://images.lumacdn.com/calendars/wn/a056527a-975c-460e-8a5f-829e750afd4e.png",
    "website": "https://undefined.ds.house",
    "instagram": "https://www.instagram.com/designsyshouse",
    "twitter": "https://x.com/designsyshouse",
    "linkedin": "https://www.linkedin.com/company/designsyshouse",
    "tiktok": "https://www.tiktok.com/@designsyshouse",
    "youtube": "https://www.youtube.com/@designsyshouse",
    "isVerified": false
  },
  "hosts": [
    {
      "id": "usr-fsHqi6dWYW70MHF",
      "name": "Design Systems House",
      "username": "designsyshouse",
      "url": "https://luma.com/user/designsyshouse",
      "bio": "Dedicated to the future of design systems.",
      "avatarUrl": "https://images.lumacdn.com/avatars/vl/996cab10-4375-4ae7-a78f-90b968a558f1.jpg",
      "website": "https://ds.house",
      "instagram": "https://www.instagram.com/designsyshouse",
      "twitter": "https://x.com/designsyshouse",
      "linkedin": null,
      "tiktok": "https://www.tiktok.com/@designsyshouse",
      "youtube": "https://www.youtube.com/@designsyshouse",
      "isVerified": false
    }
  ],
  "featuredGuests": [
    {
      "id": "usr-1XmNIzg1XXiPEih",
      "name": "Abhi Gupta",
      "username": "abhigupta",
      "url": "https://luma.com/user/abhigupta",
      "bio": "I'm a savvy Engineer, Investor, and Entrepreneur who thrives on transforming grand ideas into tangible success.",
      "avatarUrl": "https://images.lumacdn.com/avatars/jq/99954fe3-f213-4ac1-8a01-b8e75ab5035f.jpg",
      "website": "https://www.abhigupta.com",
      "instagram": null,
      "twitter": null,
      "linkedin": "https://www.linkedin.com/in/abhimanyug",
      "tiktok": null,
      "youtube": null,
      "isVerified": false
    }
  ],
  "language": "en"
}
```

You can download the dataset in JSON, CSV, Excel, XML, or HTML, or access it through the Apify API.

### Notes

- Luma returns at most 50 events per keyword search. For more results, use a city or calendar URL, or split a broad keyword into several narrower ones.
- Category pages on Luma show events near a location, so category start URLs need the **City** input. Without it, the category URL is skipped with a warning.
- **Date from**, **Date to**, **Event type**, and **Price** apply to search queries only. City and calendar URLs return their events as shown on Luma.
- The Luma discover page and user profile pages are not supported; these URLs are skipped.
- Some organizers show the exact address only to registered guests. For those events, venue and address are empty, while city and country are usually still filled.
- City names and addresses follow what the organizer entered, so some may appear in the local language.
- Each event is saved once per run, even when it matches several start URLs or queries.

### Why use the Luma Scraper?

- ✅ **No login needed**: works with public data only, so there is no account to manage.
- 🌍 **Every way to find events**: cities, categories, calendars, single events, and keyword search with city, category, date, type, and price filters.
- 🎟️ **Full ticket details**: every ticket type with price, capacity, and remaining spots, not only a single price.
- 🧑‍💼 **Organizer leads included**: calendars, hosts, and featured guests come with websites and social links.
- 🧹 **Clean data**: prices are real numbers, dates use one standard format, and descriptions are plain text.
- 🔄 **Ready for automation**: schedule runs, export to Google Sheets, or connect to Make, Zapier, and n8n.

### FAQ

#### How many events can I scrape?

Set any number in **Maximum number of results**, or `0` for no limit. The actor keeps going until it reaches your limit or runs out of events. See **Notes** for the limit on keyword searches.

#### Do I need a Luma account?

No. The actor only collects publicly available event data. You do not need to log in or provide any account details.

#### Can I get past events?

Yes, for calendar and community pages. Add `?period=past` to the calendar URL, for example `https://luma.com/clickhouse-events?period=past`.

#### Can I scrape data on a schedule?

Yes. Use Apify Schedules to run the actor every hour, day, or week, and get fresh Luma events automatically.

#### Why are some fields empty?

Not every event shows every piece of information. When a field is not available on Luma, it is returned as `null`.

#### Can I request a new feature or filter?

Yes. If you need other inputs, such as attendee details or more filters, get in touch and they can be added.

#### Can I get a custom or private version?

Yes. The actor can be customized for your workflow, delivered as a private version, or a new scraper can be built for a different website. Use the contact details below.

### Need to scrape other event platforms?

- [Fever Scraper - Events & Experiences](https://apify.com/aboo.script/feverup-scraper): events and experiences by city, category, or keyword.
- [Ticketmaster Scraper](https://apify.com/aboo.script/ticketmaster-scraper): concerts, sports, and theatre events with ticket prices.
- [Get-In Scraper - Events](https://apify.com/aboo.script/get-in-scraper): events, parties, festivals, and concerts.
- [Get-In Producers Scraper](https://apify.com/aboo.script/get-in-producers-scraper): event organizers and artists with their profiles.
- [Webook Scraper - Events & Experiences](https://apify.com/aboo.script/webook-scraper): events, concerts, matches, and experiences.

***

**Need help or want a custom solution?**

- 📧 Email: aboo.script@gmail.com
- 🧩 More scrapers: [Apify profile](https://apify.com/aboo.script)

### Image Credit

Image credit: [Luma](https://luma.com/)

# Actor input Schema

## `startUrls` (type: `array`):

Luma URLs to start with: city pages (https://luma.com/nyc), category pages (https://luma.com/ai, needs the City input), calendar or community pages (https://luma.com/<calendar>, add ?period=past for past events) and event pages (https://luma.com/<event>).

## `searchQueries` (type: `array`):

Keywords to search Luma events for (for example "startup" or "design"). Each query is scraped separately. Luma returns at most 50 events per search.

## `maxResults` (type: `integer`):

Maximum number of events to scrape per start URL or search query. Set 0 for no limit.

## `city` (type: `string`):

Luma city name or slug (for example "New York", "nyc", "Dubai" or "london"). Limits search queries to that city and sets the location for category start URLs.

## `category` (type: `string`):

Limits search queries to one Luma category. Applies to search queries only.

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

Only events starting on or after this date (YYYY-MM-DD). Applies to search queries only.

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

Only events starting on or before this date (YYYY-MM-DD). Applies to search queries only.

## `eventType` (type: `string`):

In-person or online events. Applies to search queries only.

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

Free or paid events. Applies to search queries only.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://luma.com/nyc"
    }
  ],
  "searchQueries": [
    "startup"
  ],
  "maxResults": 5,
  "eventType": "any",
  "price": "any"
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://luma.com/nyc"
        }
    ],
    "searchQueries": [
        "startup"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aboo.script/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 = {
    "startUrls": [{ "url": "https://luma.com/nyc" }],
    "searchQueries": ["startup"],
}

# Run the Actor and wait for it to finish
run = client.actor("aboo.script/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 '{
  "startUrls": [
    {
      "url": "https://luma.com/nyc"
    }
  ],
  "searchQueries": [
    "startup"
  ]
}' |
apify call aboo.script/luma-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aboo.script/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/NRzV6c37X6wzSATDB/builds/J65oM45KeHBFdMthD/openapi.json
