# Events Scraper - Luma, Eventbrite, Meetup (`tacps126/events-scraper`) Actor

Upcoming events from Luma, Eventbrite, Meetup and any schema.org event page: name, date, venue, organiser, hosts, tickets, attendees. Search by topic and city or paste links. One schema.

- **URL**: https://apify.com/tacps126/events-scraper.md
- **Developed by:** [Tapaswai Ashok Choudhary](https://apify.com/tacps126) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 events

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

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

## Events Scraper — Luma, Eventbrite, Meetup

Get **upcoming events** as a clean, spreadsheet-ready list: name, start and end time, venue with address and coordinates, **organiser**, **hosts** (with their public LinkedIn where the event lists it), **ticket prices**, free / sold-out, attendee count, image and full description. Search by **topic and city**, or paste links. Luma, Eventbrite and Meetup come back in **one schema**, so they combine into one table.

**Built for:** event marketers and sponsors scouting where their audience meets; sales and partnership teams prospecting organisers and hosts; community builders and agencies; researchers mapping an industry's event calendar. If you work trade shows, see also [Trade Show Exhibitor List Scraper](https://apify.com/tacps126/exhibition-scraper).

### Why this scraper

- **Three sites, one format.** The same fields for Luma, Eventbrite and Meetup, plus any website that publishes schema.org events (most event platforms do, for Google).
- **Search like a person.** `AI` in `London`, `startup` in `Bengaluru`, `crypto` `online`, on all three sites. City names in plain words.
- **Or paste links:**
  - a Luma city, category, organiser calendar or event;
  - an Eventbrite search or event;
  - a Meetup search or group;
  - any events page.
- **Organisers and hosts.** Who runs each event, with their page; on Luma also the hosts.
- **Fast and light.** No browser; it reads each site's own data. A typical run takes seconds.
- **New-event alerts.** Schedule it with *Only new events*: each run returns only events you haven't received yet, and you pay only for those.
- **Change alerts.** Turn on *Changes only* and schedule it: each run returns only new events, events whose date, venue, status, price or sold-out state changed (old and new values in `changes`), and upcoming events that disappeared (`changeType: "removed"`, cancelled or unlisted).

### How to use it

1. Type **Topics or keywords** (e.g. `AI`) and a **Location** (e.g. `London`, or `online`), or paste **Event links**.
2. Choose **Sites to search** (Luma, Eventbrite, Meetup), or keep all three.
3. Press **Start**. Download from the **Output** tab, or connect Google Sheets, Slack, Make, Zapier, n8n or webhooks.

```json
{
  "searches": ["AI", "startup"],
  "location": "London",
  "maxItems": 100,
  "startUrls": [
    { "url": "https://luma.com/ai" },
    { "url": "https://www.meetup.com/find/?keywords=ai&location=us--ca--San%20Francisco&source=EVENTS" }
  ]
}
```

`maxItems` applies to each search on each site and to each link.

**Meetup** knows about 70 big cities by name; for other cities write `City, CC` with the two-letter country code (`Lyon, FR`), or paste a Meetup search or group link. **Luma** searches within a city; without a location, a keyword like `ai`, `tech` or `crypto` is used as a Luma category.

### What you get

| Field | Description |
|-------|-------------|
| `name`, `url`, `source` | Event, link, and `luma` / `eventbrite` / `meetup` / `website` |
| `startAt`, `endAt`, `timezone` | Times (ISO 8601) |
| `isOnline`, `status` | Online or in person; scheduled / cancelled / postponed where published |
| `venue` | `{name, street, city, region, postalCode, country, fullAddress, latitude, longitude}` |
| `organizer` | `{name, url}` |
| `hosts` | Luma hosts: `{name, linkedin, website}` |
| `price` | `{isFree, min, max, currency, soldOut}` |
| `attendeeCount` | Guests going (Luma) |
| `description`, `imageUrl` | Full text (plain) and cover image |
| `foundVia` | The search or link it came from |

### Pricing

Pay per result: about **$1 per 1,000 events**. Events filtered out as past or already delivered (*Only new*) are free. On Apify's free plan a run returns up to 200 events, enough to try it.

### Use it in n8n, Make, Zapier or AI agents

Every run is one API call (`run-sync-get-dataset-items`). In n8n, use an HTTP Request node, or Apify's own node. AI agents can call it through Apify's hosted MCP server (`https://mcp.apify.com?tools=tacps126/events-scraper`).

### Notes

- Only public event pages are read. Hosts' names and LinkedIn links are shown as the organiser published them; use personal data within GDPR and the platforms' terms.
- Sites that ask for a human check (captcha) are skipped and reported in the run log; this Actor does not solve captchas.

### Support

Missing a site or a field? Open an issue on the **Issues** tab with a link; requests decide what gets added next.

# Actor input Schema

## `searches` (type: `array`):

What the events are about, e.g. `AI`, `startup`, `real estate`, `marketing`. Each search runs on every site in **Sites to search**.

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

City in plain words (`London`, `New York`, `Bengaluru`) or `online`. Luma searches within a city; leave empty to use the keyword as a Luma category (`ai`, `tech`, `crypto`). Meetup knows about 70 big cities by name; for others write `City, CC` with the two-letter country code (`Lyon, FR`).

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

Paste links instead of (or as well as) searching: a Luma city, category, organiser calendar or event (`luma.com/…`); an Eventbrite search or event; a Meetup search or group events page; or any page that publishes schema.org events.

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

Where **Topics or keywords** are searched.

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

Maximum events from each link, and from each search on each site.

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

Open each Eventbrite and Meetup event (and Luma events missing text) for the organiser, ticket prices, end time and full description. Off = faster.

## `upcomingOnly` (type: `boolean`):

Skip events that have already ended.

## `onlyNew` (type: `boolean`):

Return only events no earlier run with the same input delivered. Schedule it for new-event alerts; you pay only for new events.

## `changesOnly` (type: `boolean`):

Return only events that are new, changed (date, venue, status, price or sold-out — with old and new values in `changes`) or gone before they started (`changeType: "removed"`: cancelled or unlisted) since the last run with the same input. The first run returns everything as new.

## `monitorName` (type: `string`):

Optional name for the *Only new* memory, to share it between differently configured runs.

## `delivery` (type: `object`):

Webhook: {"webhookUrl": "https://…", "format": "json" | "slack" | "discord", "onlyWhenResults": true, "includeItems": 10}. Google Sheets: {"spreadsheetId": "<id from the sheet URL>", "sheetName": "Sheet1"} plus the service account key below; share the sheet with the service account's e-mail first. Leave empty to only save results in the dataset.

## `googleServiceAccountJson` (type: `string`):

Only for Google Sheets delivery: paste the service account's JSON key. Stored encrypted; the account sees only sheets you share with it.

## `proxyConfiguration` (type: `object`):

Not needed for these sites; available if a site starts refusing requests.

## Actor input object example

```json
{
  "searches": [
    "AI"
  ],
  "location": "London",
  "sources": [
    "luma",
    "eventbrite",
    "meetup"
  ],
  "maxItems": 100,
  "includeDetails": true,
  "upcomingOnly": true,
  "onlyNew": false,
  "changesOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

The produced items (default dataset items).

# 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 = {
    "searches": [
        "AI"
    ],
    "location": "London"
};

// Run the Actor and wait for it to finish
const run = await client.actor("tacps126/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 = {
    "searches": ["AI"],
    "location": "London",
}

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

```

## MCP server setup

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