# Eventbrite Scraper – Events, Tickets & Organizers by City (`openharvest/eventbrite-scraper`) Actor

Eventbrite scraper for public events by city, category, keyword and date range: start/end times, venues, addresses, geo coordinates, organizers, ticket prices, free/sold-out status and full descriptions. No login. Pay only per event.

- **URL**: https://apify.com/openharvest/eventbrite-scraper.md
- **Developed by:** [Enes Bulanık](https://apify.com/openharvest) (community)
- **Categories:** Travel, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 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.

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

## Eventbrite Scraper – Events, Tickets & Organizers by City

Eventbrite scraper for public events by city, category, keyword and date range: start/end times, venues, addresses, geo coordinates, organizers, ticket prices, free/sold-out status and full descriptions. No login. Pay only per event.

**Price: $1.50 per 1,000 events.** Error rows are free.

### What does Eventbrite Scraper do?

The Actor reads the same public search that eventbrite.com uses (no browser, no login, no API key) and gets 50 events per request. For every event you get:

- **Dates** – `startAt` / `endAt` in UTC plus `startLocal` / `endLocal` and the event `timezone`
- **Location** – venue name, full public address, postal code, city, region, country, latitude / longitude, or `isOnline` for online events
- **Tickets** – free or paid, lowest and highest ticket price (`price`, `maxPrice`), currency, readable `priceText`, sold-out and sales status, cancelled flag, ticket link
- **Organizer** – name, Eventbrite profile URL, follower count and website
- **Classification** – Eventbrite category, subcategory, format (concert, conference, class…) and the organizer's tags
- **Full details (optional)** – full plain-text description, duration, age restriction, refund policy, performers, organizer description and number of events hosted
- **Automatic de-duplication** across all cities, keywords and categories, and a run summary in the key-value store

Field names match our **Luma Events Scraper** (`eventId`, `startAt`, `venueName`, `latitude`, `isFree`, `price`, `isSoldOut`…), so you can merge Eventbrite and Luma events into one table.

### Use cases

- **Event discovery & newsletters** – "What's on this weekend in Austin" digests, niche event calendars (tech, jazz, yoga, food festivals).
- **Lead generation & partnerships** – find active organizers, venues and promoters in a city or category.
- **Market & pricing research** – compare ticket prices, free vs paid events and sell-outs across cities.
- **Travel, hospitality & local media** – enrich city guides and apps with live events.
- **Data journalism & academic research** on cultural and business activity.
- **AI agents & RAG** – give an assistant up-to-date event data for any city.

### How to use

1. Click **Try for free**.
2. Enter **Locations** – city names (`New York`, `London`, `Paris, France`, `Austin, TX`), `online`, or Eventbrite URLs.
3. Optionally add **Keywords** (`jazz`, `startup`), **Categories** (Music, Food & Drink…), a **Date range**, **Free events only** or **Online events only**.
4. Set **Max events** and click **Start**. Download the results or connect them to Google Sheets, Make, Zapier, n8n, Slack or webhooks.

### Input

| Field | Description |
|---|---|
| `locations` | City names, `online`, Eventbrite search URLs (`/d/...`) or event URLs (`/e/...`). Default: San Francisco. |
| `keywords` | Search terms – each one is searched separately in every location. |
| `categories` | `business`, `science-and-tech`, `music`, `film-and-media`, `arts`, `fashion`, `health`, `sports-and-fitness`, `travel-and-outdoor`, `food-and-drink`, `charity-and-causes`, `government`, `community`, `spirituality`, `family-and-education`, `holiday`, `home-and-lifestyle`, `auto-boat-and-air`, `hobbies`, `school-activities`, `other`. |
| `dateRange` | `any` (default), `today`, `tomorrow`, `this_weekend`, `this_week`, `next_week`, `this_month`, `next_month`, `custom`. |
| `startDate` / `endDate` | `YYYY-MM-DD`, used with `dateRange: "custom"`. |
| `onlineOnly` | Only online events (city names are then ignored, as online events have no city). |
| `freeOnly` | Only free events. |
| `includeDetails` | Open each event page for the full description, duration, refund policy, performers… Same price. |
| `maxItems` | Total limit (default 30, `0` = unlimited). |
| `maxItemsPerSource` | Optional cap per location × keyword × category combination. |
| `proxyConfiguration` | Usually not needed. |

Example input:

```json
{
    "locations": ["New York", "London", "https://www.eventbrite.com/d/ca--los-angeles/food-and-drink--events/"],
    "keywords": ["jazz"],
    "categories": ["music"],
    "dateRange": "next_month",
    "includeDetails": true,
    "maxItems": 300,
    "maxItemsPerSource": 100
}
```

### Output

Real example (London, keyword "jazz", `includeDetails: true`, long texts shortened):

```json
{
    "type": "event",
    "eventId": "2000437764203",
    "url": "https://www.eventbrite.co.uk/e/jazz-at-george-iv-59-deville-tickets-2000437764203",
    "name": "Jazz at George IV -  59  DeVille",
    "summary": "A bluesy, jazz infused take on bebop and classic standards, with swinging grooves and a stellar quartet of London jazz and blues musicians.",
    "startAt": "2026-10-22T18:30:00.000Z",
    "endAt": null,
    "startLocal": "2026-10-22T19:30",
    "endLocal": null,
    "timezone": "Europe/London",
    "city": "London",
    "region": "Greater London",
    "country": "United Kingdom",
    "countryCode": "GB",
    "venueName": "Boston Room at George IV",
    "address": "185 Chiswick High Rd Chiswick, London, W4 2DR",
    "postalCode": "W4 2DR",
    "latitude": 51.4923651,
    "longitude": -0.25704510000002756,
    "isOnline": false,
    "coverUrl": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F1193165040%2F...",
    "organizerName": "The Chiswick Calendar",
    "organizerUrl": "https://www.eventbrite.co.uk/o/the-chiswick-calendar-11327461040",
    "organizerId": "11327461040",
    "organizerFollowers": 701,
    "organizerWebsite": null,
    "isFree": false,
    "price": 14.79,
    "maxPrice": 98.22,
    "currency": "GBP",
    "priceText": "£14.79 – £98.22",
    "isSoldOut": false,
    "salesStatus": "on_sale",
    "isCancelled": false,
    "category": "Music",
    "subcategory": "Blues & Jazz",
    "format": "Concert or Performance",
    "tags": ["Jazz", "London"],
    "language": "en-gb",
    "isSeries": false,
    "seriesId": null,
    "ticketsUrl": "https://www.eventbrite.com/checkout-external?eid=2000437764203",
    "publishedAt": "2026-09-10T14:32:05Z",
    "platform": "eventbrite",
    "source": "London, United Kingdom / \"jazz\"",
    "scrapedAt": "2026-10-07T21:14:37.265Z",
    "description": "With a strong blues & jazz vibe, 59 DeVille's repertoire showcases a fresh take on bebop and blues standards...",
    "durationMinutes": 150,
    "ageRestriction": null,
    "refundPolicy": "no refunds",
    "performers": [],
    "organizerDescription": "The Chiswick Calendar is a website which celebrates life in Chiswick...",
    "organizerTotalEvents": 338,
    "organizerVerified": false
}
```

Notes on fields:

- `price` / `maxPrice` are the lowest / highest ticket prices (ticket price min / max) in `currency`. Eventbrite prices include fees as shown on the site.
- `endAt` / `startAt` are `null` when the organizer hides them on Eventbrite.
- `description`, `durationMinutes`, `ageRestriction`, `refundPolicy`, `performers`, `organizerDescription`, `organizerTotalEvents` are added with `includeDetails: true`.
- Rows with `"type": "error"` explain inputs that could not be scraped (unknown city, bad URL…). They are **free**.

The Output tab has ready-made views: **Events**, **Location & geo**, **Tickets & pricing**, **Organizers & categories** and **Errors**. A run summary (events found per search, stop reason) is saved as `SUMMARY` in the key-value store.

### Pricing

Pay-per-event: you pay only for events saved to the dataset. Platform usage is included.

| Event | Price | When it is charged |
|---|---|---|
| `event` | **$0.0015** per event ($1.50 / 1,000) | Each event row (with or without `includeDetails`) |
| Errors | **Free** | Unknown locations or categories, invalid URLs, removed events |

Examples: 30 events ≈ **$0.05** · 1,000 events ≈ **$1.50** · 10,000 events ≈ **$15**.

Duplicates are never charged. Set **Maximum cost per run** in the run options – the scraper stops cleanly when the budget is reached.

### Use with AI agents (MCP)

This Actor works as a tool in the [Apify MCP server](https://mcp.apify.com), so Claude, ChatGPT, Cursor and other MCP clients can call it directly. Add the Actor to your MCP server and ask, for example: *"Find free tech events in Berlin next week and list the venues."* The agent can call it with:

```json
{
    "locations": ["Berlin"],
    "categories": ["science-and-tech"],
    "dateRange": "next_week",
    "freeOnly": true,
    "maxItems": 20
}
```

The flat output (one row per event, UTC + local times, prices as numbers) is easy for LLMs to reason about.

### FAQ

**How many events can I get?**
Eventbrite returns up to about 10,000 events per search. For bigger cities, combine categories, keywords or date ranges (each combination is a separate search) and duplicates are removed automatically.

**Which cities are supported?**
Any city that has an Eventbrite location page. Type the city name; if a name is ambiguous use `City, Country` or `City, State` (e.g. `Paris, France`, `Portland, OR`) or paste the Eventbrite search URL from your browser.

**Can I paste a search URL with filters?**
Yes. Open eventbrite.com, filter by location, category, date or price, and paste the URL (e.g. `https://www.eventbrite.com/d/ny--new-york/music--events--this-weekend/`). The Actor uses exactly those filters.

**How does keyword search work?**
Keywords use Eventbrite's own relevance search, so results are ranked by relevance and can include related events (e.g. "jazz" also finds blues brunches with live music).

**Do I get attendee lists or emails?**
No. Only public event and organizer information is returned – no attendee data, emails or phone numbers.

**Do I need a proxy or an Eventbrite account?**
No. Enable Apify Proxy only if you run very large jobs and see rate limiting.

**Can I schedule it?**
Yes – use Apify Schedules (e.g. every morning with `dateRange: "this_week"`) and integrations to push new events to Google Sheets, Slack or your database.

### Is it legal to scrape Eventbrite?

This Actor only collects **publicly available event information** that anyone can see on eventbrite.com without logging in. It does not access attendee data, private events or personal contact details. Organizer names and profile links are included as they appear publicly. You are responsible for using the data in line with Eventbrite's Terms of Service, GDPR and other applicable laws – especially if you plan to contact organizers. If unsure, consult a lawyer.

### Related actors

- Luma Events Scraper – lu.ma events, hosts & tickets by city or category (same output fields)
- *Meetup Events Scraper – coming soon*
- *Ticket price monitor – coming soon*

### Support

Found a bug or need a field that is missing? Open an issue on the Actor's **Issues** tab.

# Actor input Schema

## `locations` (type: `array`):

City names such as "San Francisco", "London", "Paris, France" or "Austin, TX"; the word "online" for online events; Eventbrite search URLs (https://www.eventbrite.com/d/ny--new-york/music--events--this-weekend/) or single event URLs (https://www.eventbrite.com/e/...). Empty = San Francisco.

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

Optional search terms, e.g. "jazz", "startup", "yoga". Each keyword is searched separately in every location (Eventbrite ranks by relevance).

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

Optional Eventbrite categories. Each category is searched separately in every location.

## `dateRange` (type: `string`):

When the events take place. "custom" uses Start date / End date below.

## `startDate` (type: `string`):

First day for dateRange "custom", format YYYY-MM-DD, e.g. 2026-11-01.

## `endDate` (type: `string`):

Last day for dateRange "custom", format YYYY-MM-DD, e.g. 2026-11-30. Empty = same as start date.

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

Only return online events (webinars, virtual classes). Online events are not tied to a city, so city names are ignored when this is on.

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

Only return free events.

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

Open each event page to add the full description, duration, age restriction, refund policy, performers and organizer info. Slower, same price.

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

Maximum number of events to return in total (0 = no limit). You are only charged for events actually returned.

## `maxItemsPerSource` (type: `integer`):

Optional cap for each search combination so one big city does not use up the whole budget (0 = no cap).

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

Eventbrite usually works without a proxy. Enable Apify Proxy if you see blocking or rate limits.

## Actor input object example

```json
{
  "locations": [
    "New York",
    "London",
    "https://www.eventbrite.com/d/ca--los-angeles/food-and-drink--events/"
  ],
  "keywords": [
    "jazz",
    "tech meetup"
  ],
  "categories": [
    "music",
    "food-and-drink"
  ],
  "dateRange": "any",
  "startDate": "2026-11-01",
  "endDate": "2026-11-30",
  "onlineOnly": false,
  "freeOnly": false,
  "includeDetails": false,
  "maxItems": 100,
  "maxItemsPerSource": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped items in the default dataset (JSON, CSV, Excel and more via the dataset export).

## `files` (type: `string`):

Records saved in the default key-value store, e.g. the run summary.

# 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 = {
    "locations": [
        "San Francisco"
    ],
    "maxItems": 30,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("openharvest/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 = {
    "locations": ["San Francisco"],
    "maxItems": 30,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("openharvest/eventbrite-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 '{
  "locations": [
    "San Francisco"
  ],
  "maxItems": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call openharvest/eventbrite-scraper --silent --output-dataset

```

## MCP server setup

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