# Eventbrite Events Scraper (`devilscrapes/eventbrite-events-scraper`) Actor

Scrape public Eventbrite events, category/search listings, and organizer profiles into structured rows: title, timing, venue, pricing, and ticket availability. Discover by keyword, location, or category, or supply direct event/listing/organizer URLs. No login required.

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

## Pricing

Pay per event

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

<div align="center">
  <img src=".actor/icon.svg" width="160" alt="Devil Scrapes mark" />

## Eventbrite Events Scraper

**💰 $1.51 / 1 000 results**  ·  pay only for results  ·  no credit card to try

*We do the dirty work so your dataset stays clean.* 😈

Scrape public Eventbrite events, category/search listings, and organizer profiles into structured rows: title, timing, venue, pricing, and ticket availability. Discover by keyword, location, or category, or supply direct event/listing/organizer URLs. No login required.

</div>

***

### 🎯 What this scrapes

Eventbrite hosts millions of public events — conferences, meetups, concerts, workshops, fundraisers — and this Actor turns that into a clean, structured feed. Point it at direct event URLs, a category/search listing page, or a keyword + location combination, and it writes one row per event: title, start/end time, venue, price range, ticket availability, and organizer details. Add organizer enrichment to pull each event's organizer profile alongside it. Built for B2B events-intel — sponsorship prospecting, competitor-event tracking, and local-market research — without hand-building Eventbrite search URLs or parsing the site yourself.

### 🔥 What we handle for you

- 🛡️ **Browser fingerprint rotation** — `curl-cffi` impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
- 🌐 **Proxy rotation** via Apify Proxy — fresh session and exit IP on every block; the RESIDENTIAL group is one input toggle away if Eventbrite ever tightens up.
- 🔁 **Retries with exponential backoff** on `408 / 429 / 5xx` — up to 5 attempts per page, `Retry-After` honoured.
- 🧱 **Per-item fault isolation** — one broken event or listing page is logged and skipped; the rest of your run keeps going.
- 🧊 **Clean, typed dataset rows** — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
- 💰 **Pay-Per-Event pricing** — you only pay for events that land in your dataset. No data, no charge.

### 💡 Use cases

- **Sponsorship prospecting** — find every event in a category or region that matches your sponsor's target audience, with organizer contact context.
- **Competitor-event tracking** — watch what events a rival brand or organizer is running, where, and how their pricing/availability shifts over time.
- **Local-market research** — snapshot everything happening in a city or region for a given category to spot trends and gaps.
- **Organizer lead lists** — build a list of active Eventbrite organizers behind events in your niche.
- **Event-calendar aggregation** — pull structured event data into your own calendar, dashboard, or n8n / Make workflow on a schedule.

### ⚙️ How to use it

1. Click **Try for free** at the top of the Store listing.
2. Either add **Start URLs** (direct event / listing / organizer links), or set **Keyword** and/or **Category** together with **Location** to build a search automatically.
3. Set **Max items** and optionally enable **Include organizer details**.
4. Click **Start**. Rows stream into the dataset as events are discovered and fetched.
5. Export from **Storage → Dataset** as JSON, CSV, or Excel — or pull via the Apify API.

### 📥 Input

| Field | Type | Required | Default | Notes |
|---|---|:--:|---|---|
| `startUrls` | `array` | no | `—` | Direct mix of event (`/e/...`), listing (`/d/...`), and organizer (`/o/...`) URLs. |
| `keyword` | `string` | no | `—` | Free-text search term, combined into a listing URL. Requires `location`. |
| `location` | `string` | no | `—` | City/region, e.g. `"Los Angeles, CA"`. Required with `keyword`/`category` when `startUrls` is empty. |
| `category` | `string` | no | `—` | Eventbrite category slug or free text, e.g. `music`, `food-and-drink`. |
| `maxItems` | `integer` | no | `100` | Cap on total events returned across all sources (`1`–`1000`). |
| `includeOrganizerDetails` | `boolean` | no | `false` | Fetch each event's organizer page and merge extra fields onto the row. |
| `proxyConfiguration` | `object` | no | `{"useApifyProxy": true}` | Apify Proxy configuration. |

At least one of `startUrls` or (`keyword`/`category` + `location`) is required.

#### Example input

```json
{
  "startUrls": [
    "https://www.eventbrite.com/e/2026-alaska-geosummit-registration-1987460378493"
  ],
  "maxItems": 100,
  "includeOrganizerDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

### 📤 Output

Every row is one dataset item — one event.

| Field | Type | Notes |
|---|---|---|
| `event_id` | `string` | Trailing numeric segment of the event URL. |
| `event_url` | `string` | Canonical event page URL. |
| `title` | `string` | Event title. |
| `description` | `['string', 'null']` | Truncated to 500 chars. |
| `start_datetime` | `string` | ISO 8601. |
| `end_datetime` | `['string', 'null']` | ISO 8601. |
| `timezone` | `['string', 'null']` | Offset parsed from the start/end datetime. |
| `is_online_event` | `boolean` | True for virtual events. |
| `venue_name` | `['string', 'null']` | Venue name. |
| `venue_street_address` | `['string', 'null']` | Street address. |
| `venue_city` | `['string', 'null']` | City. |
| `venue_region` | `['string', 'null']` | State/region. |
| `venue_country` | `['string', 'null']` | Country. |
| `organizer_name` | `['string', 'null']` | Organizer name. |
| `organizer_url` | `['string', 'null']` | Organizer profile URL. |
| `price_low` | `['number', 'null']` | Minimum ticket price. |
| `price_high` | `['number', 'null']` | Maximum ticket price. |
| `price_currency` | `['string', 'null']` | Ticket price currency. |
| `ticket_availability` | `['string', 'null']` | e.g. `InStock` / `SoldOut`. |
| `image_url` | `['string', 'null']` | Event image URL. |
| `category` | `['string', 'null']` | Set when discovered via a listing; `null` for direct event URLs. |
| `source_url` | `string` | Page URL the row was extracted from. |
| `scraped_at` | `string` | ISO 8601 run-time timestamp. |
| `organizer_description` | `['string', 'null']` | Set only when `includeOrganizerDetails=true`. |
| `organizer_event_count` | `['integer', 'null']` | Set only when `includeOrganizerDetails=true`, if available. |

#### Example output

```json
{
  "event_id": "1987460378493",
  "event_url": "https://www.eventbrite.com/e/2026-alaska-geosummit-registration-1987460378493",
  "title": "2026 Alaska GeoSummit",
  "description": "Annual gathering of Alaska's geospatial community...",
  "start_datetime": "2026-09-15T08:00:00-08:00",
  "end_datetime": "2026-09-17T17:00:00-08:00",
  "timezone": "-08:00",
  "is_online_event": false,
  "venue_name": "Dena'ina Civic and Convention Center",
  "venue_street_address": "600 W 7th Ave",
  "venue_city": "Anchorage",
  "venue_region": "AK",
  "venue_country": "US",
  "organizer_name": "Alaska Geospatial Office",
  "organizer_url": "https://www.eventbrite.com/o/alaska-geospatial-office-61455617933",
  "price_low": 0.0,
  "price_high": 250.0,
  "price_currency": "USD",
  "ticket_availability": "https://schema.org/InStock",
  "image_url": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2Fexample.jpg",
  "category": "Science & Tech",
  "source_url": "https://www.eventbrite.com/e/2026-alaska-geosummit-registration-1987460378493",
  "scraped_at": "2026-08-10T12:00:00Z",
  "organizer_description": null,
  "organizer_event_count": null
}
```

### 💰 Pricing

Pay-Per-Event — you pay only when these events fire:

| Event | USD | What it is |
|---|---:|---|
| `actor-start` | $0.01 | One-off warm-up charge per run |
| `result-emitted` | $0.0015 | Charged for each event row written to the dataset |

Example: 1 000 results at the rates above ≈ **$1.51**. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

### 🚧 Limitations

Read-only, public data only — no ticket purchase/checkout flow, no attendee lists or RSVP identities, no private/unlisted events. This Actor scrapes public HTML only; it does not use Eventbrite's paid Partner API. Past/historical event archives beyond what search/category listing pages currently surface are out of scope, as is locale-switching beyond Eventbrite's default for a given location.

### ❓ FAQ

**Do I need an Eventbrite account or API key?**

No. This Actor scrapes Eventbrite's own publicly listed event data — no login, no API key.

**Can I mix event, listing, and organizer URLs in one run?**

Yes — `startUrls` accepts any mix of the three; each is dispatched to the right handler automatically based on its URL shape.

**What happens if I search by keyword or category instead of URLs?**

We compile `keyword`/`category` + `location` into a real Eventbrite search/category listing URL, fetch it, and discover events from it the same way a direct listing URL would.

**Does `organizer_description` always populate?**

Only when `includeOrganizerDetails` is `true` and the organizer's profile page exposes it; otherwise it's `null`.

### 💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an
issue on the Actor's **Issues** tab on Apify Console — we ship
fixes weekly and we read every report.

***

<div align="center">

Built by **[Devil Scrapes](https://apify.com/DevilScrapes)** 😈 — a small fleet of
opinionated public-data Actors. Honest pricing, real engineering, zero fine print.

</div>

# Actor input Schema

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

Direct mix of event (<code>/e/...</code>), search/category listing (<code>/d/...</code>), and organizer (<code>/o/...</code>) URLs. Each entry is validated against the three known URL shapes before any HTTP call. At least one of Start URLs or (Keyword/Category + Location) is required.

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

Free-text search term, mapped into a search/category listing URL (<code>/d/.../events/?q=\<keyword></code>). Requires Location when used instead of Start URLs.

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

City or region, e.g. "Los Angeles, CA". Required alongside Keyword or Category when Start URLs is empty.

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

Eventbrite category slug (e.g. <code>music</code>, <code>business</code>, <code>food-and-drink</code>) or free text — passed through, not validated against a live taxonomy. Requires Location when used instead of Start URLs.

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

Cap on total events returned across all sources. Direct event URLs count individually; listing URLs stop discovering once the cap is reached.

## `includeOrganizerDetails` (type: `boolean`):

When enabled, fetch each event's organizer page and merge organizer\_description/organizer\_event\_count onto the row (one extra fetch per unique organizer).

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

Apify Proxy configuration. Datacenter default is sufficient per the live reach check; the RESIDENTIAL group is a documented fallback, not required day one.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.eventbrite.com/e/2026-alaska-geosummit-registration-1987460378493"
  ],
  "maxItems": 100,
  "includeOrganizerDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

All dataset items as JSON.

## `datasetItemsCsv` (type: `string`):

Same data exported to CSV.

## `datasetView` (type: `string`):

Open the run dataset in the Console.

# 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/e/2026-alaska-geosummit-registration-1987460378493"
    ],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("devilscrapes/eventbrite-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 = {
    "startUrls": ["https://www.eventbrite.com/e/2026-alaska-geosummit-registration-1987460378493"],
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("devilscrapes/eventbrite-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 '{
  "startUrls": [
    "https://www.eventbrite.com/e/2026-alaska-geosummit-registration-1987460378493"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call devilscrapes/eventbrite-events-scraper --silent --output-dataset

```

## MCP server setup

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