# Luma Events Scraper: lu.ma Events by City & Organizer (`tommyonebig/luma-events-scraper`) Actor

Scrape public Luma (lu.ma) events by city, category, organizer calendar or URL: date, venue, price, ticket types, sold-out status, attendee count, organizer and full description. No login needed.

- **URL**: https://apify.com/tommyonebig/luma-events-scraper.md
- **Developed by:** [onebig](https://apify.com/tommyonebig) (community)
- **Categories:** Lead generation, Travel
- **Stats:** 2 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.

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

### What does Luma Events Scraper do?

**Luma Events Scraper** extracts public events from [Luma](https://lu.ma) (lu.ma), the event platform used by startups, tech communities, AI meetups, crypto groups and creators. You can search:

- **By city**: all upcoming events in 85+ Luma cities (San Francisco, New York, London, Toronto, Berlin, Singapore and more)
- **By category near a city**: Tech, AI, Crypto, Arts, Climate, Fitness, Wellness, Food, Books, Games, Running, Family
- **By organizer**: every upcoming event on an organizer's Luma calendar
- **By event URL**: one or more specific events

Each event comes with its date and time, time zone, venue and city, coordinates, **price and ticket types**, sold-out status, spots remaining, approval requirement, **number of people going**, organizer name, website and Luma page, host names, and optionally the **full description** in Markdown.

### Why scrape Luma?

- **Event discovery and newsletters**: build weekly "what's on" lists for a city or niche, such as AI events in San Francisco or crypto meetups in London.
- **Sponsorship and partnerships**: find active organizers and popular events (by number of attendees) to sponsor, speak at or partner with.
- **Market research**: track how many tech, AI or climate events happen in each city, how many are free, and what tickets cost.
- **Community and DevRel teams**: monitor competitor and partner calendars and spot events for outreach.
- **Apps and AI agents**: feed structured event data into calendars, chatbots and recommendation engines.

### How to use it

1. Enter one or more **cities** (for example `sf`, `New York`, `London`), choose **categories** if you want, and/or paste **Luma URLs** (organizer calendars, events, city or category pages).
2. Optionally filter by date, free events, in-person or online, or a keyword.
3. Turn on **Include full details** to add the description, ticket types, categories and full address.
4. Click **Start** and download the results as JSON, CSV, Excel or HTML, or use the API.

### Input example

```json
{
  "cities": ["sf", "nyc"],
  "categories": ["ai", "tech"],
  "maxEventsPerSource": 200,
  "includeDetails": true,
  "dateFrom": "2026-11-01",
  "dateTo": "2026-11-30"
}
```

All upcoming events from an organizer's calendar:

```json
{ "lumaUrls": ["https://lu.ma/hunterhub"] }
```

### Output example

```json
{
  "eventId": "evt-167fy5PERF9W1Lg",
  "name": "Hunter Hub Ingenuity Speaker Series: Nabeel Ramji",
  "url": "https://lu.ma/oly9ny74",
  "startAt": "2026-10-07T23:00:00.000Z",
  "endAt": "2026-10-08T01:00:00.000Z",
  "timezone": "America/Edmonton",
  "locationType": "offline",
  "venueName": "Hunter Hub for Entrepreneurial Thinking",
  "address": "Hunter Hub for Entrepreneurial Thinking, 460 Campus Lane NW, Calgary, AB T2N 1N4, Canada",
  "city": "Calgary",
  "region": "Alberta",
  "country": "Canada",
  "latitude": 51.078033,
  "longitude": -114.129151,
  "isFree": true,
  "price": null,
  "currency": null,
  "isSoldOut": false,
  "requiresApproval": false,
  "registrationStatus": "open",
  "guestCount": 63,
  "organizerName": "Hunter Hub Events",
  "organizerUrl": "https://lu.ma/hunterhub",
  "organizerWebsite": "https://ucalgary.ca/hunter-hub",
  "hostNames": ["Hunter Hub"],
  "sourceType": "city",
  "sourceName": "Calgary",
  "description": "## Breaking Down Barriers: An Entrepreneur's Perspective ...",
  "categories": ["Tech"],
  "ticketTypes": [{ "name": "Standard", "price": null, "currency": null, "isFree": true }]
}
```

When an organizer hides the exact venue until registration, `addressHidden` is `true` and only the city and region are returned.

### How much does it cost?

| Event | Price |
|---|---|
| Run start | $0.01 |
| Event | $0.01 (**$10 per 1,000 events**) |
| Event with full details | $0.02 (**$20 per 1,000 events**) |

You can cap any run with Apify's **maximum cost per run** setting, and the scraper stops cleanly when the cap is reached.

### Tips

- Combine **cities** and **categories** to get, for example, only AI events in Toronto.
- Schedule a daily or weekly run with **Starting on or after** set to today to collect only new events.
- Duplicate events (for example, an event listed under both Tech and AI) are returned only once per run.

### FAQ

**Does it scrape guest lists or attendee profiles?**
No. To respect people's privacy, it doesn't collect guest lists, featured guests or social media accounts. You get the attendee count and host display names only.

**Do I need a Luma account?**
No.

**My city isn't listed. What can I do?**
Paste the Luma URL of local organizer calendars instead. The input description lists the cities Luma supports for discovery.

**Is scraping Luma legal?**
The scraper collects only information that's publicly visible on Luma without logging in. You're responsible for using the data lawfully, including under privacy laws such as GDPR and Luma's terms.

**Something isn't working?**
Open an issue on the **Issues** tab with your run link, and it'll usually be fixed within a few days.

# Actor input Schema

## `cities` (type: `array`):

Luma discovery cities, by name or slug, e.g. <code>San Francisco</code>, <code>nyc</code>, <code>London</code>, <code>Toronto</code>. Supported: dc, philadelphia, pittsburgh, nyc, raleigh, toronto, waterloo_ca, detroit, cincinnati, boston, montreal, atlanta, chicago, minneapolis, miami, dallas, houston, austin, denver, salt-lake-city, mexico-city, calgary, phoenix, edmonton, las-vegas, sd, la, medellin, seattle, portland, vancouver, sacramento, bogota, sf, dublin, lisbon, london, madrid, paris, amsterdam, brussels, oslo, hamburg, barcelona, copenhagen, frankfurt, geneva, lausanne, stockholm, zurich, berlin, milan, munich, prague, helsinki, vienna, warsaw, rome, budapest, saopaulo, honolulu, rio, istanbul, buenos-aires, lagos, tel-aviv, tokyo, seoul, osaka, dubai, new-delhi, nairobi, taipei, capetown, mumbai, hongkong, bengaluru, manila, auckland, bangkok, ho-chi-minh-city, brisbane, kuala-lumpur, singapore, sydney, jakarta, melbourne.

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

Only events in these Luma categories, near each city above. Leave empty for all events in each city.

## `lumaUrls` (type: `array`):

Any Luma page: an organizer calendar (<code>https://lu.ma/hunterhub</code>), a single event (<code>https://lu.ma/abc123</code>), a city page or a category page.

## `maxEventsPerSource` (type: `integer`):

Upper limit of events collected from each source.

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

Adds the event description, ticket types with prices, categories, FAQs and the full venue address (when public). One extra request per event.

## `descriptionFormat` (type: `string`):

Format of the event description when full details are on.

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

Only events starting on or after this date.

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

Only events starting on or before this date.

## `freeOnly` (type: `boolean`):

Skip paid events.

## `locationType` (type: `string`):

Filter in-person or online events.

## `keyword` (type: `string`):

Only events whose name contains this word (case-insensitive).

## Actor input object example

```json
{
  "cities": [
    "sf"
  ],
  "maxEventsPerSource": 100,
  "includeDetails": false,
  "descriptionFormat": "markdown",
  "freeOnly": false,
  "locationType": "any"
}
```

# Actor output Schema

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

One record per event.

## `all` (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 = {
    "cities": [
        "sf"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tommyonebig/luma-events-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 = { "cities": ["sf"] }

# Run the Actor and wait for it to finish
run = client.actor("tommyonebig/luma-events-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 '{
  "cities": [
    "sf"
  ]
}' |
apify call tommyonebig/luma-events-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tommyonebig/luma-events-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/jRQrr6Z0mhSGGjtDU/builds/33TILCWtnaqKGElxA/openapi.json
