# Eventbrite Scraper – Events API with Prices & Organizers (`scrapeworkshq/eventbrite-scraper`) Actor

Eventbrite scraper & events API: scrape Eventbrite events by city (or online), keyword and date range. Name, dates, venue & geo, ticket prices, free/sold-out status, category, organizer name, website & followers, image, URL. Export CSV/JSON. No login.

- **URL**: https://apify.com/scrapeworkshq/eventbrite-scraper.md
- **Developed by:** [Scrapeworks HQ](https://apify.com/scrapeworkshq) (community)
- **Categories:** Travel, Lead generation, Marketing
- **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/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 API – Ticket Prices, Dates, Venues, Sold-Out Status & Organizers

Scrape **public Eventbrite events** by **city (or online)**, **keyword/category** and **date range** – or paste any Eventbrite search URL. For every event you get the **name, summary, start/end date & time, timezone, venue name, full address, latitude/longitude, ticket price range (min–max), free flag, sold-out flag, sales status & sales end, category / subcategory / format, organizer name, organizer page, organizer website & follower count, series info, image and event URL**.

Fast HTTP-only (no browser), **no login, no API key, no attendee or personal data**. Export to JSON, CSV, Excel or via the Apify API.

### 🚀 Quick start (60 seconds)

1. Click **Try for free** – the input is prefilled with a working example.
2. Press **Start**. A small run finishes in seconds and costs fractions of a cent.
3. Open the **Output** tab (table view) and export **CSV, Excel, JSON** or connect Google Sheets.

```json
{
  "locations": [
    "New York, NY"
  ],
  "keywords": [
    "tech"
  ],
  "dateFilter": "this-week",
  "maxEventsPerSearch": 20
}
```

#### Sample output

| name | startLocal | venueName | city | minPrice | isFree | isSoldOut | organizerName |
|---|---|---|---|---|---|---|---|
| Jazz with Jordan Hyde | 2026-10-22T19:30 | St Mazie | Brooklyn | 12.51 | false | true | St Mazie |
| NYC Tech Founders Mixer | 2026-10-24T18:00 | WeWork | New York | 0 | true | false | Founders Club |

### Why this Eventbrite scraper / Eventbrite API alternative?

| | This Actor | Typical Eventbrite scrapers |
|---|---|---|
| City + keyword + date range searches (multi-city × multi-keyword) | ✅ | often a single URL |
| **Ticket price range** (min & max) + free flag | ✅ | price text or missing |
| **Sold-out / on-sale / sales-end** status | ✅ | ❌ |
| Organizer name, page, website & followers included (no extra charge) | ✅ | often a paid add-on |
| Venue address **with lat/long** | ✅ | partial |
| Filters: free only, exclude sold-out, online on/off | ✅ | rarely |
| De-duplication across searches | ✅ | ❌ |
| Price | **$3.38 / 1,000 events** | $4.50 / 1,000 (+$3/1k for organizer data) at the most-used-this-month Eventbrite Actor; up to $20 / 1,000 elsewhere |

### Use cases – local event discovery, lead lists & event monitoring

- 🎟️ **Event discovery apps & city guides** – fill "things to do" feeds by city and date.
- 🤝 **B2B lead gen / sponsorships** – find organizers running tech, business or networking events and their websites.
- 📊 **Market research** – price ranges, sell-out rates and categories by city.
- 🏟️ **Venue & competitor monitoring** – track what's scheduled near your venue.
- 🤖 **AI agents / RAG** – clean structured event JSON.

### Input

| Field | Description |
|---|---|
| `locations` | `"Atlanta, GA"`, `"London, United Kingdom"`, an Eventbrite slug like `ny--new-york`, or `online`. |
| `keywords` | e.g. `tech`, `networking`, `jazz`. Empty = all events. |
| `startUrls` | Any `eventbrite.com/d/...` search URL. |
| `dateFilter` | any / today / tomorrow / this-weekend / this-week / next-week / this-month / next-month. |
| `startDate`, `endDate` | Custom range (YYYY-MM-DD), overrides `dateFilter`. |
| `freeOnly`, `excludeSoldOut`, `includeOnline` | Filters. |
| `maxEventsPerSearch`, `maxEventsTotal` | Limits. Eventbrite shows at most ~980 events per search; split into date ranges for more. |
| `proxyConfiguration` | Usually not needed. |

```json
{
  "locations": ["Atlanta, GA", "online"],
  "keywords": ["tech", "networking"],
  "dateFilter": "this-month",
  "excludeSoldOut": true,
  "maxEventsPerSearch": 200
}
```

### Output

See `sample-output.json` for real records. Example:

```json
{
  "eventId": "2002257229272",
  "name": "Building High-Performing Teams: A 1-Day Course in Atlanta",
  "startDate": "2026-10-27", "startTime": "09:00", "endDate": "2026-10-27", "endTime": "17:00",
  "timezone": "America/New_York",
  "isOnline": false, "isFree": false,
  "minPrice": 339.6, "maxPrice": 452.53, "currency": "USD", "priceDisplay": "339.60 USD – 452.53 USD",
  "isSoldOut": false, "salesStatus": "on_sale", "salesEndAt": "2026-10-24T16:00:00Z",
  "category": "Science & Technology", "subcategory": "High Tech", "format": "Class, Training, or Workshop",
  "venueName": "Regus - Atlanta - 260 Peachtree", "city": "Atlanta", "region": "GA", "latitude": 33.761484, "longitude": -84.390079,
  "organizerName": "Mangates", "organizerWebsite": "https://mangates.com", "organizerFollowers": 2667,
  "url": "https://www.eventbrite.sg/e/building-high-performing-teams-a-1-day-course-in-atlanta-tickets-2002257229272"
}
```

Prices are the ticket face values Eventbrite shows (fees may be extra). A `RUN_STATS` record in the key-value store summarizes pages, events, duplicates and filtered items.

### ⭐ Unique: Monitor mode, CSV-ready output & webhook summary

**Event discovery feeds**: schedule with `monitorMode: "onlyNew"` to get only events listed since the last run, or `"changes"` to also catch events whose price, sold-out or sales status, start time or cancellation changed (e.g. *just sold out*, *price dropped*). Old/unchanged events are free.

- **Monitor mode** (`monitorMode`: `all` | `changes` | `onlyNew`, plus `monitorKey`) – cross-run dedupe and field-level diffs (`changeType`, `changedFields`, `changes`, `firstSeenAt`). Skipped items cost **$0**.
- **Flat / CSV-ready output** (`outputFormat: "flat"`) – one column per field, perfect for Excel and Google Sheets.
- **Run summary** – a free `SUMMARY` record in the run's key-value store (also linked in the Output tab) and optionally POSTed to `summaryWebhookUrl`.
- **Changes** dataset view – see what's new/changed at a glance.

### 💰 Pricing (pay per result)

| Event | Price |
|---|---|
| Run start | $0.00005 |
| Event (incl. organizer website & followers) | **$3.38 / 1,000** |

Organizer data is included in the base price – no extra "enrichment" event – and the price is ≥25% below typical Eventbrite Actors ($5–$20 / 1,000).

🎁 **Sweetener:** in Monitor mode you only pay for new/changed items, and duplicates within a run are never charged. Run summary + webhook are free.

### Legal & privacy

Collects only **publicly listed event information** that organizers publish for promotion, and organizers' public profile info (name, Eventbrite page, website, follower count). It never logs in and never collects attendee data, emails or phone numbers. Use the data in line with applicable laws and Eventbrite's terms.

### 🔌 Integrations & API

Works with Zapier, Make, n8n, Google Sheets, Slack, Airbyte, LangChain/LlamaIndex and the Apify MCP server (AI agents).

**JavaScript**

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('scrapeworkshq/eventbrite-scraper').call({"locations": ["New York, NY"], "keywords": ["tech"], "dateFilter": "this-week", "maxEventsPerSearch": 20});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**Python**

```python
from apify_client import ApifyClient
client = ApifyClient('<APIFY_TOKEN>')
run = client.actor('scrapeworkshq/eventbrite-scraper').call(run_input={"locations": ["New York, NY"], "keywords": ["tech"], "dateFilter": "this-week", "maxEventsPerSearch": 20})
items = client.dataset(run['defaultDatasetId']).list_items().items
```

**cURL (sync, returns items)**

```bash
curl -X POST 'https://api.apify.com/v2/acts/scrapeworkshq~eventbrite-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>&format=csv' \
  -H 'content-type: application/json' -d '{"locations": ["New York, NY"], "keywords": ["tech"], "dateFilter": "this-week", "maxEventsPerSearch": 20}'
```

### ❓ More FAQ

**Can I get more than ~1,000 events for a city?**\
Eventbrite caps one search at ~980; split by keyword or date range.

**Does it collect attendee data?**\
No – only public event and organizer page data.

**How does Monitor mode work?**\
The Actor remembers the IDs and key fields of items it returned before (in a named key-value store in *your* account, keyed by `monitorKey`). Next run, each item gets `changeType` = `new` / `changed` / `unchanged` plus a `changes` diff. In *Only new* / *Only new or changed* modes, the rest is skipped **and not charged**.

**How do I get a clean CSV / Excel / Google Sheet?**\
Set **Output format → Flat / CSV-ready**. Nested objects become `dot.columns` and lists are joined with `|`, so every export is one row per item with no JSON blobs.

**Can I get notified when a run finishes?**\
Set **Summary webhook URL** (Zapier/Make/n8n catch hook, Slack workflow, your API). You receive one compact JSON: counts, new/changed, price drops/rises, dataset ID. Or use Apify's native webhooks/integrations.

**How do I limit cost?**\
Use the max-results inputs and Apify's *Maximum cost per run*. The Actor stops cleanly when the limit is reached.

Found a bug or need a field? Open an issue on the **Issues** tab – we usually reply within 24 h.

### Changelog

- **2026-10-21** – Monitor mode (new/changed only, free skips), flat CSV-ready output, SUMMARY record + webhook, Changes view.

# Actor input Schema

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

"City, State/Country" (e.g. "Atlanta, GA", "London, United Kingdom"), an Eventbrite location slug (e.g. "ny--new-york") or "online".

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

e.g. "tech", "networking", "jazz", "business". Each keyword is searched in each location. Empty = all events.

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

Optional: any eventbrite.com/d/... search URL copied from your browser.

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

Preset date range (ignored if start/end date are set).

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

Custom range start.

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

Custom range end.

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

Keep only free events.

## `excludeSoldOut` (type: `boolean`):

Drop events with no tickets left.

## `includeOnline` (type: `boolean`):

Eventbrite mixes some online events into city results.

## `maxEventsPerSearch` (type: `integer`):

Per location × keyword (Eventbrite shows at most ~980 per search; split by date range for more).

## `maxEventsTotal` (type: `integer`):

0 = no overall limit.

## `maxRequestsPerMinute` (type: `integer`):

Polite global rate limit.

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

Usually not needed. Enable Apify Proxy if you see HTTP 403/429.

## `monitorMode` (type: `string`):

Remembers items from previous runs (per Monitor key) and adds changeType = new/changed/unchanged plus a field-level diff. In the two 'only' modes, unchanged/old items are not output and not charged.

## `monitorKey` (type: `string`):

Name of the memory used by Monitor mode. Use a different key per schedule/task (e.g. 'daily-pokemon'), so separate watchlists don't mix.

## `outputFormat` (type: `string`):

Flat makes CSV/Excel/Google Sheets exports one clean column per field.

## `summaryWebhookUrl` (type: `string`):

At the end of the run, POST a compact JSON summary (counts, new/changed, price drops, dataset ID) to this URL – e.g. Zapier/Make/n8n catch hook or Slack workflow. Free.

## Actor input object example

```json
{
  "locations": [
    "New York, NY",
    "online"
  ],
  "keywords": [
    "tech"
  ],
  "dateFilter": "any",
  "freeOnly": false,
  "excludeSoldOut": false,
  "includeOnline": true,
  "maxEventsPerSearch": 20,
  "maxEventsTotal": 0,
  "maxRequestsPerMinute": 40,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "monitorMode": "off",
  "monitorKey": "default",
  "outputFormat": "full"
}
```

# Actor output Schema

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

All scraped items in the default dataset

## `overview` (type: `string`):

No description

## `summary` (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": [
        "New York, NY",
        "online"
    ],
    "keywords": [
        "tech"
    ],
    "maxEventsPerSearch": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeworkshq/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": [
        "New York, NY",
        "online",
    ],
    "keywords": ["tech"],
    "maxEventsPerSearch": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapeworkshq/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": [
    "New York, NY",
    "online"
  ],
  "keywords": [
    "tech"
  ],
  "maxEventsPerSearch": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scrapeworkshq/eventbrite-scraper --silent --output-dataset

```

## MCP server setup

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