# Eventbrite, Lu.ma & Meetup \[$0.99] Events + Organizer Leads (`memo23/eventbrite-scraper`) Actor

Turn Eventbrite into an events feed AND an organizer lead list: event name, dates, venue, geo, ticket price range and category, plus each organizer’s website, socials, followers and a best-effort email. Any search, event or organizer URL in. One row per event, JSON or CSV out.

- **URL**: https://apify.com/memo23/eventbrite-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Lead generation, AI, Agents
- **Stats:** 18 total users, 16 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 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.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Eventbrite + Lu.ma + Meetup Events Scraper

**Three event platforms, one scraper.** Pull structured events from any **Eventbrite**, **Lu.ma**, or **Meetup** URL — name, description, start/end dates, venue + address + real lat/long, price, attendance mode, and the organizer/host/group behind each event (incl. **website, social links, and best-effort contact email** on Eventbrite & Lu.ma). Each row carries a `source` field (`eventbrite`, `luma`, or `meetup`) so you can keep all three in one dataset or split them. One row per event, JSON or CSV out, billed per result.

#### How it works

![How the Events Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-events.png)

#### ✨ Why use this scraper?

Building an events feed across platforms? Prospecting organizers for sponsorship, venues, or services? Mapping active communities by topic and size? This actor pulls the full event **and** the organizer/host behind it — from all three platforms — into one consistent dataset.

- 🎯 **Three platforms, auto-routed.** Mix Eventbrite, Lu.ma, and Meetup URLs in one run. Each URL is classified by host and sent to the right parser — no separate actors, no separate runs.
- 🧩 **One unified schema + a `source` tag.** Every row uses the same core columns (name, dates, venue, geo, price, organizer) regardless of platform, with a `source` field so you can filter or split.
- 📧 **Organizer/host lead-gen (Eventbrite & Lu.ma).** Adds `organizerWebsite`, `organizerDomain`, `organizerSocials`, and a best-effort `organizerEmail` harvested from the organizer's own website. Turn an events list into an outreach list.
- 👥 **Community data (Meetup).** Each Meetup row carries its host group's **member count**, topics, and the event's **RSVP/going** count — ideal for finding active communities by size and subject.
- 📍 **Venue + real coordinates.** Venue, address, and `latitude`/`longitude` for in-person events; online events are flagged `isOnline: true`.
- 💰 **Price + tickets.** `priceMin`/`priceMax`/`isFree` across sources, plus on-sale window (Eventbrite) and approval/spots (Lu.ma).
- 🔁 **Monitoring mode.** Run on a schedule and get only NEW events each time — a private per-user record tracks what was already delivered.
- 🧰 **No anti-bot, no auth.** Reliable, fast parallel fetching. JSON + CSV exports.

#### 🎯 Use cases

| Team | What they build |
|------|-----------------|
| **Event marketers / sponsorship sales** | Outreach lists of organizers (website + email) across Eventbrite & Lu.ma in a category or city |
| **Venues, caterers, A/V, ticketing vendors** | Lead lists of nearby organizers with upcoming events |
| **Developer relations / community teams** | Find active Meetup groups by topic + member size to partner with or sponsor |
| **Event aggregators / city guides** | One always-fresh feed spanning all three platforms |
| **Market & pricing research** | Ticket-price + attendance benchmarks across a category or city |
| **Competitive intelligence** | Track a competitor's events, cadence, pricing, and growth across platforms |
| **Data journalists / researchers** | Datasets on local event activity, pricing, and community trends |

#### 📥 Supported inputs

Pass any mix of URLs in `startUrls` — each is classified automatically by host. Leave `startUrls` empty to build an Eventbrite search from the convenience fields.

| URL pattern | Source | Behaviour |
|---|---|---|
| `https://www.eventbrite.com/d/{location}/{category}/` | Eventbrite | **Search / listing** — walks every result page (`?page=N`) collecting events |
| `https://www.eventbrite.com/e/{slug}-tickets-{id}` | Eventbrite | **Event detail** — routed straight to the parser |
| `https://www.eventbrite.com/o/{slug}-{id}` | Eventbrite | **Organizer** — used to enrich events from that organizer |
| `https://luma.com/{slug}` | Lu.ma | **Event detail** — auto-detected (Lu.ma event pages and city pages share this shape) |
| `https://luma.com/{city}` or a calendar page | Lu.ma | **Listing** — collects the events on the page |
| `https://www.meetup.com/{group}/events/{id}` | Meetup | **Event detail** — routed straight to the parser |
| `https://www.meetup.com/find/?source=EVENTS&keywords=...` or `/{group}/events/` | Meetup | **Listing** — collects the events on the page |
| *location + category + keyword + onlineOnly* | Eventbrite | The actor builds `https://www.eventbrite.com/d/{location}/{category}/?q={keyword}` for you |

URLs are routed by host — each source uses its own purpose-built parser. All three share the core event + organizer columns; each adds a few source-specific fields:
- **Eventbrite**: `saleStart`/`saleEnd`, `organizerFollowers`, `organizerEmail` (harvested).
- **Lu.ma**: `guestCount`, `requiresApproval`, `spotsRemaining`, `hostName`, `timezone`, `organizerEmail` (harvested).
- **Meetup**: `going`, `waitlist`, `maxTickets`, `groupMembers`, `groupUrlname`, `hostNames`, `topics`. (No email lead-gen — Meetup groups are a closed community.)

Easiest workflow: run a search on eventbrite.com / luma.com / meetup.com in your browser, copy the URL from the address bar, and paste it (or several) into `startUrls`.

**Not supported:** authenticated/attendee data, and hosts other than `eventbrite.*`, `luma.com`/`lu.ma`, and `meetup.com`.

> **Note on the `maxItems` cap across sources:** start URLs are processed in order, and `maxItems` is a single shared cap — so when you mix sources in one run, earlier URLs fill the budget first. For an even split across platforms, raise `maxItems` or run sources separately.

#### 🔄 How it works

1. **Classify each `startUrl` by host** → Eventbrite, Lu.ma, or Meetup (or build an Eventbrite search from `location` + `category` + `keyword`).
2. **Collect event links** from listing/search/city/group pages, then **fetch each event** in parallel via a global sliding window.
3. **Parse each source with its purpose-built extractor** and **map everything onto one unified schema** with a `source` tag.
4. **Enrich the organizer/host** (Eventbrite & Lu.ma) — website, socials, and a best-effort contact **email** harvested from the organizer's own site. (Meetup adds the host group + member count inline — no extra fetch.)
5. **Push one row per event** to the dataset.

#### ⚙️ Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | `["https://www.eventbrite.com/d/ny--new-york/all-events/", "https://luma.com/sf", "https://www.meetup.com/find/?source=EVENTS&keywords=technology"]` | Eventbrite, Lu.ma, and/or Meetup URLs. Mix any of them. |
| `location` / `category` / `keyword` / `onlineOnly` | string / bool | — | **Eventbrite-only** convenience search builder, used only when `startUrls` is empty. |
| `enrichOrganizer` | boolean | `true` | Eventbrite & Lu.ma: add `organizerWebsite`, `organizerDomain`, `organizerSocials` (Eventbrite also `organizerFollowers`). |
| `harvestOrganizerEmails` | boolean | `true` | Eventbrite & Lu.ma: best-effort `organizerEmail` from the organizer's website. Requires `enrichOrganizer`. |
| `monitoringMode` | boolean | `false` | Only return events not delivered to you on a previous run. The first run seeds the baseline. |
| `resetMonitoringState` | boolean | `false` | One-shot: clear the saved "events seen" record at run start. |
| `maxItems` | integer | `1000` | Hard cap on events collected across all start URLs (controls billing). |
| `maxConcurrency` / `minConcurrency` | integer | `10` / `1` | Parallel HTTP request limits. |
| `proxy` | object | Apify residential | Apify proxy configuration. None of the three sources has aggressive anti-bot. |

#### 📊 Output overview

Each scraped event is one **single dataset row** with a `source` field (`eventbrite` / `luma` / `meetup`). All three sources share the core event + organizer columns (so the dataset lines up); each adds its own extras. The organizer/host is merged inline — no separate rows, so the row count equals the event count exactly.

#### 📦 Output samples

**Eventbrite** (`source: "eventbrite"`) — organizer website + harvested email:

```json
{
    "source": "eventbrite",
    "type": "event",
    "eventId": "1984643225312",
    "name": "The 2026 Gracies Luncheon",
    "startDate": "2026-06-16T11:00:00-04:00",
    "isOnline": false,
    "venueName": "Cipriani 42nd Street",
    "addressLocality": "New York",
    "latitude": 40.7515845,
    "longitude": -73.9771076,
    "priceMin": 215.26,
    "priceMax": 482.02,
    "currency": "USD",
    "isFree": false,
    "category": "Business",
    "organizerName": "Alliance for Women in Media",
    "organizerWebsite": "https://allwomeninmedia.org/",
    "organizerEmail": "info@allwomeninmedia.org",
    "organizerFollowers": 75,
    "scrapedAt": "2026-06-10T14:48:58.354Z"
}
````

**Lu.ma** (`source: "luma"`) — host calendar + socials + harvested email + Lu.ma extras:

```json
{
    "source": "luma",
    "type": "event",
    "eventId": "evt-kTedGXXQYZLkTdB",
    "eventUrl": "https://luma.com/harnesshack",
    "name": "Harness Engineering Hack",
    "startDate": "2026-06-12T16:30:00.000Z",
    "timezone": "America/Los_Angeles",
    "isOnline": false,
    "addressLocality": "San Francisco",
    "country": "United States",
    "latitude": 37.789,
    "longitude": -122.396,
    "isFree": false,
    "requiresApproval": true,
    "spotsRemaining": 805,
    "guestCount": 0,
    "hostName": "AWS Builder Loft",
    "organizerName": "tokens&",
    "organizerWebsite": "https://tokensand.ai/",
    "organizerSocials": ["https://twitter.com/tokensandai", "https://www.linkedin.com/company/tokensand"],
    "organizerEmail": null
}
```

**Meetup** (`source: "meetup"`) — host group + member count + RSVP/going + topics:

```json
{
    "source": "meetup",
    "type": "event",
    "eventId": "315135716",
    "eventUrl": "https://www.meetup.com/joinmytrip-dublin-travel-club/events/315135716/",
    "name": "Novalja Summer Getaway",
    "startDate": "2026-06-22T19:00:00+01:00",
    "eventType": "PHYSICAL",
    "isOnline": false,
    "venueName": "Novalja",
    "addressLocality": "Novalja",
    "country": "hr",
    "latitude": 44.556763,
    "longitude": 14.882576,
    "isFree": true,
    "going": 1,
    "waitlist": 0,
    "organizerName": "The Dublin Travelers Club - JoinMyTrip",
    "organizerUrl": "https://www.meetup.com/joinmytrip-dublin-travel-club",
    "groupMembers": 5803,
    "category": "Travel & Outdoor",
    "hostNames": ["Gabo"],
    "topics": ["Travel", "Solo Travelers", "Vacations"]
}
```

#### 🗂 Key output fields

| Group | Fields |
|---|---|
| **Source & identifiers** | `source` (`eventbrite`/`luma`/`meetup`), `type`, `eventId`, `eventUrl`, `scrapedAt` |
| **Event** | `name`, `description`, `image`, `category`, `status`, `isOnline`, `attendanceMode` |
| **Schedule** | `startDate`, `endDate` (ISO with offset), `timezone`/`timezoneOffset` |
| **Venue** | `venueName`, `streetAddress`, `addressLocality`, `addressRegion`, `postalCode`, `country`, `latitude`, `longitude` *(null for online events)* |
| **Tickets** | `priceMin`, `priceMax`, `currency`, `isFree`, `ticketAvailability` |
| **Organizer / host** | `organizerName`, `organizerUrl`, `organizerId`, `organizerWebsite`, `organizerDomain`, `organizerSocials[]`, `organizerEmail` |
| **Eventbrite extras** | `saleStart`, `saleEnd`, `organizerFollowers` |
| **Lu.ma extras** | `guestCount`, `requiresApproval`, `spotsRemaining`, `hostName` |
| **Meetup extras** | `going`, `waitlist`, `maxTickets`, `groupMembers`, `groupUrlname`, `groupCity`/`groupCountry`, `hostNames[]`, `topics[]` |

Fields not applicable to a given source are returned as `null` so every row has the same shape.

#### ❓ FAQ

**Which platforms and URLs are supported?**
Eventbrite (search `/d/...`, event `/e/...`, organizer `/o/...`), Lu.ma (event `luma.com/{slug}`, city/calendar pages), and Meetup (find `/find/?source=EVENTS&...`, group `/{group}/events/`, event `/{group}/events/{id}`). Each URL is auto-classified by host. Anything else is skipped.

**How do I tell the sources apart in the output?**
Every row has a `source` field — `eventbrite`, `luma`, or `meetup`. Core columns are identical across sources; each adds source-specific extras (see Key output fields).

**Why is `organizerEmail` sometimes `null`?**
It applies to Eventbrite and Lu.ma only (Meetup is a closed community and exposes no organizer contact). For those two, the actor finds the organizer's own website and best-effort extracts a public contact email; if no site is linked or no email is exposed, the field is `null` — that's expected.

**Why are some venue/geo fields `null`?**
Those are online events (`isOnline: true`) — there's no physical venue.

**Does it paginate?**
Eventbrite search pages paginate via `?page=N` and are walked automatically. Lu.ma city pages and Meetup find pages return the events present on the page (Meetup uses cursor pagination, not numbered pages) — pass multiple URLs for breadth.

**How does monitoring mode work?**
With `monitoringMode: true`, events whose ID was already delivered to you are skipped (no fetch, no charge). The first run seeds your baseline; later runs return only new events.

**Can I scrape private or attendee data?**
No. Only publicly available event and organizer/group pages — no logged-in content, no attendee data.

#### 💬 Support

- For issues or feature requests, please use the **Issues** tab on the actor's Apify Console page.
- Author's website: <https://muhamed-didovic.github.io/>
- Email: <muhamed.didovic@gmail.com>

#### 🛠 Additional services

- Custom output shape, extra fields, or one-off datasets: <muhamed.didovic@gmail.com>
- Need another event / ticketing source added (Ticketmaster, Dice, Bandsintown, etc.)? Drop an email.
- For API access (no Apify fee, just a usage fee for the API): <muhamed.didovic@gmail.com>

#### 🔎 Explore more scrapers

If this Events Scraper was useful, see other scrapers and actors at [memo23's Apify profile](https://apify.com/memo23) — covering events, job boards, real estate, social media, and more.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Eventbrite, Inc., Lu.ma, Meetup, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available event, organizer, and group pages on eventbrite.com, luma.com, and meetup.com — no authenticated endpoints, attendee data, or content behind a login. The best-effort organizer email (Eventbrite & Lu.ma) is collected from the organizer's own public website. Users are responsible for ensuring their use complies with each platform's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organisation, including lawful basis for any outreach.

***

### SEO Keywords

eventbrite scraper, luma scraper, lu.ma scraper, meetup scraper, events scraper, event data api, multi-source events scraper, scrape eventbrite, scrape luma events, scrape meetup events, eventbrite organizer emails, luma host emails, event lead generation scraper, event organizer leads, meetup group members scraper, meetup rsvp data, eventbrite ticket price scraper, scrape events by city, event aggregator feed, event marketing leads, sponsorship prospecting, eventbrite api, meetup api, luma api alternative

# Actor input Schema

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

Full Eventbrite, Lu.ma, and/or Meetup URLs to crawl. Mix any of them in the same array.

## `location` (type: `string`):

Eventbrite location slug used to build a search when no Start URLs are given — e.g. `ny--new-york`, `united-states`, `london`, or `online`. Tip: run a search on eventbrite.com and copy the segment after `/d/`.

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

Eventbrite category to search within (used only when no Start URLs are given).

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

Optional free-text keyword for the built search (becomes `?q=`). Used only when no Start URLs are given.

## `onlineOnly` (type: `boolean`):

Restrict the built search to online events (sets the location segment to `online`). Used only when no Start URLs are given.

## `enrichOrganizer` (type: `boolean`):

Eventbrite & Lu.ma: add `organizerWebsite`, `organizerDomain`, `organizerSocials` (Eventbrite also `organizerFollowers`). Eventbrite fetches the organizer page; Lu.ma reads the host calendar inline.

## `harvestOrganizerEmails` (type: `boolean`):

When an organizer/host website is found, fetch it (homepage + /contact + /about) and extract a contact email into `organizerEmail`. Requires organizer enrichment. The email is `null` when the site doesn't expose one — normal, not an error. Does not apply to Meetup.

## `monitoringMode` (type: `boolean`):

When enabled, events whose ID has already been delivered to you are silently skipped (no detail page is fetched, no charge applies for them). The first run after enabling monitoring returns every match — that builds your baseline. Every subsequent run returns only new events.

## `resetMonitoringState` (type: `boolean`):

One-shot toggle: clear the saved 'events already seen' record at the start of this run. Use this when you change search URL or want to rebuild the baseline. Has no effect when monitoring mode is off.

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

Hard cap on the number of events collected across all start URLs. Use this to control billing.

## `maxConcurrency` (type: `integer`):

Maximum number of event pages processed in parallel.

## `minConcurrency` (type: `integer`):

Minimum number of event pages processed in parallel.

## `maxRequestRetries` (type: `integer`):

Number of retries before a failed request is given up.

## `proxy` (type: `object`):

Apify proxy settings. None of the three sources (Eventbrite, Lu.ma, Meetup) has aggressive anti-bot, so a small residential pool (or even datacenter) works fine.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.eventbrite.com/d/ny--new-york/all-events/",
    "https://luma.com/sf",
    "https://www.meetup.com/find/?source=EVENTS&keywords=technology"
  ],
  "location": "ny--new-york",
  "category": "all-events",
  "keyword": "tech conference",
  "onlineOnly": false,
  "enrichOrganizer": true,
  "harvestOrganizerEmails": true,
  "monitoringMode": false,
  "resetMonitoringState": false,
  "maxItems": 1000,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 5,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": [
        "https://www.eventbrite.com/d/ny--new-york/all-events/",
        "https://luma.com/sf",
        "https://www.meetup.com/find/?source=EVENTS&keywords=technology"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/eventbrite-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": [
        "https://www.eventbrite.com/d/ny--new-york/all-events/",
        "https://luma.com/sf",
        "https://www.meetup.com/find/?source=EVENTS&keywords=technology",
    ],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "https://www.eventbrite.com/d/ny--new-york/all-events/",
    "https://luma.com/sf",
    "https://www.meetup.com/find/?source=EVENTS&keywords=technology"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/eventbrite-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/eventbrite-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Eventbrite, Lu.ma & Meetup [$0.99] Events + Organizer Leads",
        "description": "Turn Eventbrite into an events feed AND an organizer lead list: event name, dates, venue, geo, ticket price range and category, plus each organizer’s website, socials, followers and a best-effort email. Any search, event or organizer URL in. One row per event, JSON or CSV out.",
        "version": "0.0",
        "x-build-id": "bp7NmRxyWSECVHHwg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~eventbrite-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-eventbrite-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~eventbrite-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-eventbrite-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~eventbrite-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-eventbrite-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Eventbrite, Lu.ma & Meetup URLs",
                        "type": "array",
                        "description": "Full Eventbrite, Lu.ma, and/or Meetup URLs to crawl. Mix any of them in the same array.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Eventbrite location slug used to build a search when no Start URLs are given — e.g. `ny--new-york`, `united-states`, `london`, or `online`. Tip: run a search on eventbrite.com and copy the segment after `/d/`."
                    },
                    "category": {
                        "title": "Category",
                        "enum": [
                            "all-events",
                            "music--events",
                            "business--events",
                            "food-and-drink--events",
                            "community--events",
                            "arts--events",
                            "film-and-media--events",
                            "sports-and-fitness--events",
                            "health--events",
                            "science-and-tech--events",
                            "travel-and-outdoor--events",
                            "charity-and-causes--events",
                            "family-and-education--events",
                            "fashion--events",
                            "hobbies--events",
                            "home-and-lifestyle--events",
                            "spirituality--events"
                        ],
                        "type": "string",
                        "description": "Eventbrite category to search within (used only when no Start URLs are given).",
                        "default": "all-events"
                    },
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Optional free-text keyword for the built search (becomes `?q=`). Used only when no Start URLs are given."
                    },
                    "onlineOnly": {
                        "title": "Online events only",
                        "type": "boolean",
                        "description": "Restrict the built search to online events (sets the location segment to `online`). Used only when no Start URLs are given.",
                        "default": false
                    },
                    "enrichOrganizer": {
                        "title": "Enrich organizer/host (website, socials, description, followers)",
                        "type": "boolean",
                        "description": "Eventbrite & Lu.ma: add `organizerWebsite`, `organizerDomain`, `organizerSocials` (Eventbrite also `organizerFollowers`). Eventbrite fetches the organizer page; Lu.ma reads the host calendar inline.",
                        "default": true
                    },
                    "harvestOrganizerEmails": {
                        "title": "Harvest organizer contact email (best-effort, Eventbrite & Lu.ma)",
                        "type": "boolean",
                        "description": "When an organizer/host website is found, fetch it (homepage + /contact + /about) and extract a contact email into `organizerEmail`. Requires organizer enrichment. The email is `null` when the site doesn't expose one — normal, not an error. Does not apply to Meetup.",
                        "default": true
                    },
                    "monitoringMode": {
                        "title": "Monitoring mode (only return events not seen on previous runs)",
                        "type": "boolean",
                        "description": "When enabled, events whose ID has already been delivered to you are silently skipped (no detail page is fetched, no charge applies for them). The first run after enabling monitoring returns every match — that builds your baseline. Every subsequent run returns only new events.",
                        "default": false
                    },
                    "resetMonitoringState": {
                        "title": "Reset monitoring state (one-shot)",
                        "type": "boolean",
                        "description": "One-shot toggle: clear the saved 'events already seen' record at the start of this run. Use this when you change search URL or want to rebuild the baseline. Has no effect when monitoring mode is off.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum events to scrape",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on the number of events collected across all start URLs. Use this to control billing.",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of event pages processed in parallel.",
                        "default": 10
                    },
                    "minConcurrency": {
                        "title": "Min concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Minimum number of event pages processed in parallel.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of retries before a failed request is given up.",
                        "default": 5
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy settings. None of the three sources (Eventbrite, Lu.ma, Meetup) has aggressive anti-bot, so a small residential pool (or even datacenter) works fine.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
