# Luma Events Scraper: Every Event in Any City (lu.ma) (`tidyharvest/luma-events-scraper`) Actor

Every public Luma (lu.ma) event in any city, calendar or link: dates, venue and coordinates, hosts with social links, RSVPs, ticket tiers, descriptions. Built to beat solidcode/luma-scraper: 970 vs 75 events on the same 3 cities and week (Oct 2026), at $1.50 per 1,000 vs $2.50.

- **URL**: https://apify.com/tidyharvest/luma-events-scraper.md
- **Developed by:** [TidyHarvest](https://apify.com/tidyharvest) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 90.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 event scrapeds

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 Events Scraper: Every Event in Any City, Calendar or Link (lu.ma)

Pull upcoming events from **Luma (luma.com / lu.ma)**, the home of tech meetups, hackathons, founder dinners, demo days, run clubs and community events, as clean structured data: **name, date and time, venue, address and coordinates, distance from the city centre, hosts with their public social links, RSVP counts, prices and every ticket tier, descriptions, categories, registration questions and capacity signals.**

Type a city (`sf`, `San Francisco`, `London`, `São Paulo`), a point (`30.2672,-97.7431`), a community calendar (`genai-collective`) or paste any Luma link. **No login, cookies, API key or proxy needed.**

### Built to beat solidcode/luma-scraper

Same three cities (San Francisco, London, Tokyo), same week (Oct 20-27, 2026), same day:

| | This actor | solidcode/luma-scraper |
|---|---|---|
| Events returned | **970** (SF 477, London 356, Tokyo 137) | 75 (SF 34, London 25, Tokyo 16) |
| Their events we also return | 75 of 75 | - |
| Price per 1,000 events (Free plan) | **$1.50** (down to $0.90 on Gold) | $2.50 (from $2.10) |
| Cost of this test | ~$1.46 for 970 events | $0.19 for 75 events |

A city page on Luma shows a curated pick of about 50 events spread over months. This actor returns **every public event Luma lists in the city's area** by default (about 70 km around the centre, each row with `distanceKm`), or just the curated picks with `cityFeed: "featured"`.

**Where solidcode still wins:** it names the video provider of online events and reads user-profile links; we do neither. If you only want Luma's own featured list, both actors give you the same events.

### What you can do with it

- **Event aggregators and city guides:** keep a local "what's on" site or newsletter complete with a daily run.
- **Sales and recruiting leads:** find who hosts AI, startup and VC events in your city, with their public LinkedIn/X/Instagram links.
- **Sponsors and event marketers:** discover relevant events, size them from RSVP counts and ticket tiers, spot hosts to partner with.
- **Calendar sync and alerts:** pipe events into Google Calendar, Slack, Notion or Sheets with Apify integrations.
- **Research:** map a city's event scene by category, topic or host.

### Input

```json
{
  "sources": ["San Francisco", "nyc", "genai-collective"],
  "categories": ["ai"],
  "dateFrom": "2026-11-01",
  "dateTo": "2026-11-07",
  "freeOnly": true,
  "maxEventsPerSource": 500
}
```

| Field | What it does |
|---|---|
| `sources` | Cities (slug or name, any of Luma's 87 cities), `latitude,longitude`, calendar slugs, event slugs, or luma.com / lu.ma links. `all` = every Luma city. |
| `cityFeed` | `all` (default): every public event near the city. `featured`: only Luma's curated city picks. |
| `searchQueries` | Luma's own search in each city (`hackathon`, `run club`): up to 50 best matches per term and city. |
| `categories` | `tech`, `ai`, `crypto`, `food`, `arts`, `climate`, `fitness`, `wellness`, `running`, `books`, `games`, `family`. |
| `daysAhead`, `dateFrom`, `dateTo` | Time window (default: the next 30 days). |
| `keywords` / `excludeKeywords` | Filter by name, tags, categories, host calendar or description. |
| `freeOnly`, `paidOnly`, `format` | Free or paid events only; online or in person. |
| `maxDistanceKm` | Drop events farther than this from the city centre or your point. |
| `includeDetails` | Description, every ticket tier, categories and registration questions (on by default). |
| `includeFeaturedGuests` | Up to 10 guests the event shows publicly, with the links they published (off by default). |
| `maxEventsPerSource`, `maxEvents` | Caps to control cost. Events come in date order, so raise the per-source cap for a whole month in a busy city. |

### Output

```json
{
  "name": "AI Engineer New York Hackathon",
  "url": "https://luma.com/abc123", "startAt": "2026-10-11T13:00:00.000Z", "endAt": "2026-10-11T22:00:00.000Z",
  "timezone": "America/New_York", "city": "New York", "neighborhood": "Manhattan", "venue": "...", "address": "...",
  "addressHidden": false, "latitude": 40.7, "longitude": -74.0, "distanceKm": 2.4,
  "isOnline": false, "isFree": false, "priceMin": 10, "priceMax": 25, "currency": "usd",
  "ticketTypes": [{"name": "Early bird", "price": 10, "capacity": 100, "spotsLeft": 12, "registered": 88, "requiresApproval": false}],
  "guestCount": 745, "soldOut": false, "waitlist": true, "requiresApproval": true, "spotsLeft": null,
  "hosts": [{"name": "Major League Hacking", "handle": "mlhacks", "twitter": "mlhacks", "linkedin": "https://www.linkedin.com/company/mlh"}],
  "calendarName": "...", "organizer": {"name": "...", "website": "...", "twitter": "...", "isPersonal": false},
  "categories": ["AI", "Tech"], "tags": ["Hackathon"],
  "registrationQuestions": [{"label": "What is your LinkedIn profile?", "type": "linkedin", "required": true}],
  "description": "...", "detailsFetched": true, "source": "nyc", "sourceLabel": "New York"
}
```

- `guestCount` is `null` when the host hides RSVPs. `addressHidden: true` means the host shows the address to registered guests only (common in San Francisco and London).
- `detailsFetched: false` marks a row whose detail request failed; the listing fields are still filled.

### Pricing

Pay per event, by Apify plan: **$1.50 per 1,000 events on Free, $1.40 Bronze, $1.10 Silver, $0.90 Gold and up.** Keyword, date, distance, free/paid and format filters run before billing, so you only pay for events you keep.

### Notes

- Only public events are returned. Private and unlisted events are not accessible.
- Is it legal? The actor reads the same public event pages anyone can open without an account. Host and featured-guest social links are what those people chose to publish on their Luma profile; featured guests are off unless you turn them on. Use the data in line with privacy law where you are (e.g. GDPR for EU residents).

# Actor input Schema

## `sources` (type: `array`):

Cities, calendars or events, one per line. A city by slug or name (`sf`, `San Francisco`, `nyc`, `London`, `São Paulo`: any of Luma's 87 cities), a point as `latitude,longitude` (`30.2672,-97.7431`), a calendar slug (`genai-collective`), an event slug, or any luma.com / lu.ma link. `all` = every Luma city.

## `cityFeed` (type: `string`):

`all` (default): every public event Luma lists within about 70 km of the city, in date order. `featured`: only the curated list on Luma's city page (about 50 events, spread over months).

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

Run Luma's own event search in each city (e.g. `hackathon`, `AI`, `run club`). Luma returns up to 50 best matches per term and city. Leave empty to list every event.

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

Luma categories to list in each city: `tech`, `ai`, `crypto`, `food`, `arts`, `climate`, `fitness`, `wellness`, `running`, `books`, `games`, `family`. Leave empty for all events.

## `daysAhead` (type: `integer`):

Only events starting within this many days (from From date, or from now).

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

Only events on or after this day (YYYY-MM-DD). Default: now (events already under way today are included).

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

Only events starting on or before this day (YYYY-MM-DD). Overrides Days ahead.

## `keywords` (type: `array`):

Keep events whose name, tags, host calendar or description contains one of these (e.g. `AI`, `founder`, `hackathon`). You are billed only for events that match.

## `excludeKeywords` (type: `array`):

Drop events matching any of these words.

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

Skip paid events.

## `paidOnly` (type: `boolean`):

Keep only events that sell paid tickets.

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

Filter by online or in-person events.

## `maxDistanceKm` (type: `integer`):

Drop events farther than this from the city centre (or your latitude,longitude). Empty = Luma's own area (about 70 km). Each row has `distanceKm`.

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

Adds the full description, every ticket tier (price, capacity, spots left, registered), Luma categories and the registration questions (one extra request per event). Turn off for a fast list of names, dates, venues, prices and hosts.

## `includeFeaturedGuests` (type: `boolean`):

Adds up to 10 guests the event shows publicly on its page, with the social links they chose to publish.

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

Maximum events returned for each city, calendar or event (per source, after filters). Events come in date order, so a busy city fills this within days: raise it for a whole month.

## `maxEvents` (type: `integer`):

Hard cap for the whole run (also caps your cost).

## Actor input object example

```json
{
  "sources": [
    "sf",
    "nyc"
  ],
  "cityFeed": "all",
  "daysAhead": 30,
  "freeOnly": false,
  "paidOnly": false,
  "format": "any",
  "includeDetails": true,
  "includeFeaturedGuests": false,
  "maxEventsPerSource": 100
}
```

# Actor output Schema

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

Luma events, one item per event.

# 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 = {
    "sources": [
        "sf",
        "nyc"
    ]
};

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

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

```

## MCP server setup

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