# Eventbrite Scraper - Events, Ticket Prices & Organizers (`scrapewise/eventbrite-scraper`) Actor

Scrape Eventbrite events by city, country or online, keyword, category, format, dates, free or paid. Ticket price range, sold out, venue with GPS, organizer followers and website, full description. From US$ 6 per 1,000.

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

## Pricing

from $5.10 / 1,000 event delivereds

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

## Eventbrite Scraper

Eventbrite Scraper turns **public Eventbrite events** into clean JSON, CSV or Excel, **without login, cookies or an API key**. Search any city, country or online events by keyword, category, format, date window, free or paid, and get every event's **ticket price range and currency, sold-out status**, start and end with time zone and UTC, **venue address with GPS coordinates**, and the **organizer's name, page, followers, website and social links**. Turn on `includeEventDetails` for the full description, refund policy, age limit, performers and the organizer's event and attendee counts.

**US$ 6 per 1,000 events, US$ 14 per 1,000 with full details. No monthly fee, no start fee. Error rows are free.**

### At a glance

- **Price per 1,000 events:** US$ 6 from search results, US$ 14 with the event page details
- **Search:** City, country or online, keyword, category, format, date window, free or paid, language, soonest first
- **More than 1,000 per search:** Eventbrite stops at about 1,000; the Actor splits by week and keeps going
- **Tickets:** Minimum and maximum price, currency, free, sold out, sales status
- **Organizer:** Name, page, followers, website, X/Twitter and Facebook; with details, events hosted and total attendees
- **Error rows:** Free, with an `errorCode`

### One real row

`New York` + `jazz`, this month, with `includeEventDetails` on (collected on 2026-09-30, trimmed):

```json
{
  "id": "2001634712307",
  "url": "https://www.eventbrite.com/e/elias-meister-chinchilla-with-scott-colberg-b-jeremy-gustin-d-tickets-2001634712307",
  "name": "Elias Meister - CHINCHILLA with  Scott Colberg (b) & Jeremy Gustin (d)",
  "detailed": true,
  "startDate": "2026-09-30",
  "startTime": "21:00",
  "timezone": "America/New_York",
  "startUtc": "2026-10-01T01:00:00Z",
  "endUtc": "2026-10-01T03:00:00Z",
  "isOnline": false,
  "venueName": "Dada",
  "address": "6047 Myrtle Avenue, Queens, NY 11385",
  "latitude": 40.70079140000001,
  "longitude": -73.89664239999999,
  "isFree": false,
  "minPrice": 12.51,
  "maxPrice": 81.88,
  "currency": "USD",
  "isSoldOut": false,
  "salesStatus": "on_sale",
  "category": "Music",
  "subcategory": "Jazz",
  "format": "Concert or Performance",
  "ticketsUrl": "https://www.eventbrite.com/checkout-external?eid=2001634712307",
  "organizerName": "DADA",
  "organizerUrl": "https://www.eventbrite.com/o/dada-108250881751",
  "organizerFollowers": 346,
  "organizerWebsite": "https://www.dadabar.nyc/",
  "description": "Elias Meister's music combines many genres into a new and personal sound...",
  "durationMinutes": 120,
  "refundPolicy": "custom",
  "isRefundAllowed": false,
  "performers": ["Elias Meister"],
  "organizerEventsCount": 575,
  "organizerTotalAttendees": 2825,
  "source": "search:New York | jazz"
}
```

### What you can do with it

- **Event lead generation:** build a list of event organizers in any city or niche, with their website, social links, follower count and how many events they have hosted. Useful for venues, caterers, ticketing, sponsors and event marketing agencies.
- **Event aggregation and calendars:** feed a city guide, newsletter or app with upcoming events, times in UTC and GPS coordinates.
- **Ticket price research:** compare price ranges and sold-out events by city, category or format.
- **Market research:** which categories and formats grow where, and who organizes them.

### Search Eventbrite events by city, keyword and date

| Field | What it does |
|---|---|
| `locations` | Cities or countries as you would type them: `London`, `Austin`, `Paris, France`, `United Kingdom`, or `online` |
| `searchQueries` | Optional keywords (`tech`, `jazz`, `yoga`). Every location is searched with every keyword |
| `categories` | Optional, e.g. `music`, `business`, `food-and-drink`, `science-and-tech` (several = OR) |
| `formats` | Optional, e.g. `conference`, `class`, `concert`, `networking`, `festival` (several = OR) |
| `dateFilter` | `any`, `today`, `tomorrow`, `this_weekend`, `this_week`, `next_week`, `this_month`, `next_month`, `custom` |
| `startDate`, `endDate` | Date window, `YYYY-MM-DD` |
| `eventType` | `any`, `in_person` or `online` |
| `price` | `any`, `free` or `paid` |
| `languages` | Two-letter codes, e.g. `en`, `es` |
| `sortBy` | `relevance` (Eventbrite default) or `date` (soonest first) |
| `startUrls` | Eventbrite search pages (`/d/...`, scraped with all their filters) and event pages (`/e/...`, always with full details) |
| `maxItems` | Default 100, per location and keyword |
| `includeEventDetails` | Opens each event page for the full description and the fields below. One extra request per event |
| `onlyNew` | For schedules: delivers, and charges, only events not delivered by earlier runs of the same search (see below) |

```json
{
  "locations": ["London", "Berlin"],
  "searchQueries": ["startup"],
  "formats": ["networking", "conference"],
  "dateFilter": "next_month",
  "price": "free",
  "maxItems": 300,
  "includeEventDetails": true
}
```

### Schedule it daily: only new events

Turn on `onlyNew`, save your locations, keywords and filters as a Task and attach a daily Schedule:

```json
{
  "locations": ["London"],
  "searchQueries": ["startup"],
  "formats": ["networking", "conference"],
  "maxItems": 200,
  "onlyNew": true
}
```

- The first run delivers up to `maxItems` and marks every other event of the search as seen.
- Every run after that delivers, and charges, only events organizers published since: an event must be new to this search and published after the watch started (Eventbrite reshuffles its relevance results on every request, so the publish date is what tells a new event from an old one). Already delivered events do not count toward `maxItems`.
- A day with nothing new ends successfully with the status "No new events since the last run" and charges nothing.
- The memory lives in a Key-Value Store in your own Apify account (`eventbrite-scraper-only-new`), one record per search and filter set. Delete it to start over.
- Connect Slack, e-mail or Google Sheets to the Task and new events land where you read them.

### Output fields

**Every row:** `id`, `url`, `name`, `summary`, `startDate`, `startTime`, `endDate`, `endTime`, `timezone`, `startUtc`, `endUtc`, `isOnline`, `isCancelled`, `venueName`, `address`, `city`, `region`, `country`, `postalCode`, `latitude`, `longitude`, `isFree`, `minPrice`, `maxPrice`, `currency`, `isSoldOut`, `hasAvailableTickets`, `salesStatus`, `salesMessage`, `urgencySignals` (e.g. few tickets left), `category`, `subcategory`, `format`, `tags`, `imageUrl`, `ticketsUrl`, `ticketsBy`, `language`, `publishedAt`, `seriesId`, `organizerId`, `organizerName`, `organizerUrl`, `organizerFollowers`, `organizerWebsite`, `organizerTwitter`, `organizerFacebook`, `organizerSummary`, `source`, `scrapedAt`.

**With `includeEventDetails` (or event links):** `description` (plain text), `descriptionHtml`, `durationMinutes`, `createdAt`, `eventStatus`, `isSeries`, `hasReservedSeating`, `ageRestriction`, `doorTime`, `parking`, `refundPolicy`, `isRefundAllowed`, `refundDays`, `performers`, `agenda`, `faqs`, `galleryImages`, `organizerDescription`, `organizerEventsCount`, `organizerTotalAttendees`, `organizerYearsOnEventbrite`, `organizerVerified`.

Only what the organizer publishes as a business on Eventbrite. Never attendee data.

#### Error codes (never charged)

| errorCode | Meaning |
|---|---|
| `LOCATION_NOT_FOUND` | Eventbrite does not know this place; try `City, Country` |
| `EVENT_NOT_FOUND` | No public event with this id |
| `NO_RESULTS` | Eventbrite returned no event for this search |
| `INVALID_URL`, `INVALID_INPUT` | A value the Actor does not understand, or filters Eventbrite refused |
| `BLOCKED` | Eventbrite did not answer after retries; run again |
| `NOT_REACHED`, `UNEXPECTED` | The run timeout arrived, or something unforeseen broke; only that input is lost |

If an event page fails while search data is fine, the row is delivered and charged as a plain event, with `detailsError` saying why.

### Pricing

| Event | Per 1,000 |
|---|---|
| Event delivered (search data) | US$ 6 |
| Event delivered with details (event page read) | US$ 14 |

Each event is charged once, as one or the other. Duplicates and error rows are free, and there is no Apify compute bill on top.

### FAQ

**Why not the official Eventbrite API?** Eventbrite's public API no longer offers event search: it only returns events of organizations you manage, and it needs an app key. This Actor reads the same public search pages anyone can open, in any city.

**How many events can I get?** Eventbrite shows about 1,000 per search. When you ask for more, the Actor splits the search week by week and removes duplicates.

**Keyword without a location?** It searches online events. Add a location for in-person events.

### Limitations

- Eventbrite ranks keyword searches by relevance; when few events match, it fills the list with other events of the place, as on the site.
- `organizerEventsCount`, `organizerTotalAttendees` and the full description come only from the event page (`includeEventDetails`).
- Only public events. This Actor reads public pages only and respects the site's terms.

### Changelog

- **2026-10-04:** `onlyNew` (alias `onlyNewEvents`) for daily schedules: only events not delivered by earlier runs of the same search are delivered and charged; a day with nothing new charges nothing.

- **2026-09-30, 0.1:** first release. City, country and online search with keyword, category, format, date, price, language and sort filters; weekly split past 1,000; search and event links; optional event page details; free error rows.

# Actor input Schema

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

Cities or countries as you would type them: London, Austin, "Paris, France", United Kingdom. Use "online" for online events. Each location is searched with each keyword.

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

Optional. Words as you would type them on Eventbrite (tech, jazz, yoga). Leave empty for all events in the location. Keywords without a location search online events.

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

Optional. Several categories are combined with OR.

## `formats` (type: `array`):

Optional. Conference, class, concert, networking... Several formats are combined with OR, and with the categories by AND.

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

Search pages (eventbrite.com/d/...) are scraped with all their filters. Event pages (eventbrite.com/e/...) always come with full details.

## `dateFilter` (type: `string`):

Time window of the events.

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

YYYY-MM-DD. Used with "Between the dates below" (setting a date is enough).

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

YYYY-MM-DD. Defaults to one year after the start.

## `eventType` (type: `string`):

In a location, "Online only" returns the online events listed for it.

## `price` (type: `string`):

Free or paid events.

## `languages` (type: `array`):

Optional. Two-letter codes (en, fr, es, pt, de).

## `sortBy` (type: `string`):

Order of the results.

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

Upper limit per location and keyword. Eventbrite stops at about 1,000 per search; above that the Actor splits the search by week to go further.

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

For scheduled runs. Remembers which events of each search were already delivered (in a named key-value store in your account, 'eventbrite-scraper-only-new') and skips them on the next runs: they are not delivered, not charged and do not count toward the limit. The first run also marks the events past your limit as seen, so later runs bring only events published since. A run with nothing new ends successfully and charges nothing. With this on, each search is read up to Eventbrite's ~1,000 cap, without the weekly split. Delete the store to start over.

## `includeEventDetails` (type: `boolean`):

Adds the full description, UTC start and end, duration, refund policy, age limit, performers, gallery and the organizer's event and attendee counts. One extra request per event, charged as 'Event delivered with details'.

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

Apify Proxy is recommended.

## Actor input object example

```json
{
  "locations": [
    "London"
  ],
  "searchQueries": [
    "tech"
  ],
  "dateFilter": "any",
  "eventType": "any",
  "price": "any",
  "sortBy": "relevance",
  "maxItems": 100,
  "onlyNew": false,
  "includeEventDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `resultsCsv` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "locations": [
        "London"
    ],
    "searchQueries": [
        "tech"
    ],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/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": ["London"],
    "searchQueries": ["tech"],
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/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": [
    "London"
  ],
  "searchQueries": [
    "tech"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/eventbrite-scraper --silent --output-dataset

```

## MCP server setup

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