# Eventbrite Scraper (`lowlanddata/eventbrite-scraper`) Actor

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

## Pricing

from $7.30 / 1,000 results

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?

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

## Eventbrite Scraper — events, prices and organizers as clean JSON

Extract Eventbrite events for any city, category or search — titles, dates, venues with coordinates, category tags, ticket price ranges, organizers and performers — as flat JSON rows ready for a spreadsheet, a CRM or an automation. Search a whole city, slice by category and date, or paste specific event URLs.

**Live health record:** [lowlanddata.com/status/eventbrite-scraper](https://lowlanddata.com/status/eventbrite-scraper/) - 30-day success rate and daily canary results, failures included. Full input/output reference: [tool page](https://lowlanddata.com/tools/eventbrite-scraper/).

**No personal data, ever.** Attendee information is never touched. Organizers and performers appear exactly as the event bills them publicly — a name and a public profile link, never emails, phone numbers or social handles. There is no "contact enrichment" here and there never will be: the output is safe to store, share and CRM-import without a compliance review.

### Quick start (30 seconds)

1. Set **country** and **city** the way Eventbrite writes them (`germany` / `berlin`, `belgium` / `brussels`, `united-states` / `new-york`).
2. Click **Start**. That's the whole minimum setup.
3. Open the dataset's **Overview** tab for a clean table, or **Export** as CSV/Excel/JSON.

Optional knobs: a free-text **searchQuery**, one of 21 **categories**, a **date window**, **free events only**, **online events only**, and **scrapeDetails** for ticket prices + organizer identity. Any input works on a daily Schedule.

### What you can build with it

- **Event lead lists.** Every conference, workshop or trade show in your city next quarter, with the organizer's name — sponsor outreach and vendor pitches start here.
- **A local events feed.** Schedule daily with a category filter; feed a newsletter, a city guide, a Telegram channel or your app.
- **Competitor and market watch.** Track what events appear in your niche, at what price points, at which venues.
- **Pricing research.** With `scrapeDetails`, every event carries its ticket price range — median ticket prices per category or city are one groupby away.
- **Specific events, monitored.** Paste event URLs into `eventUrls` and re-run on a schedule to watch prices and availability.

### What you get

One JSON object per event:

```json
{
  "eventId": "1992749628783",
  "title": "Face aux pervers narcissiques",
  "summary": "Une conférence par Christine Calonne, psychologue et écrivaine spécialisée dans l'aide aux victimes",
  "url": "https://www.eventbrite.be/e/billets-face-aux-pervers-narcissiques-1992749628783",
  "ticketsUrl": "https://www.eventbrite.com/checkout-external?eid=1992749628783",
  "startDate": "2026-09-17",
  "startTime": "18:30",
  "endDate": "2026-09-17",
  "endTime": "20:00",
  "timezone": "Europe/Brussels",
  "publishedAt": "2026-06-29T09:06:27Z",
  "language": "fr-fr",
  "isOnline": false,
  "isCancelled": false,
  "seriesId": null,
  "category": "Health & Wellness",
  "subcategory": "Mental health",
  "format": "Seminar or Talk",
  "venueName": "Rue des Francs 79",
  "venueAddress": "79 Rue des Francs, 1040 Etterbeek",
  "city": "Etterbeek",
  "region": "Bruxelles",
  "postalCode": "1040",
  "country": "BE",
  "latitude": "50.8371255",
  "longitude": "4.399750900000001",
  "imageUrl": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F1187827176%2F166307976391%2F1%2Foriginal.20260629-085702?w=300&auto=format%2Ccompress&q=75&sharp=10&s=4c4e106c893460692ff93cb57f9dc09d",
  "priceMin": 5,
  "priceMax": 10,
  "currency": "EUR",
  "availability": "InStock",
  "eventStatus": "EventScheduled",
  "startDateTime": "2026-09-17T18:30:00+02:00",
  "endDateTime": "2026-09-17T20:00:00+02:00",
  "organizerName": "La Libre Belgique",
  "organizerUrl": "https://www.eventbrite.be/o/la-libre-belgique-16870603310",
  "performers": []
}
```

With `scrapeDetails: true`, each row additionally carries `priceMin`, `priceMax`, `currency`, `availability`, `eventStatus`, exact `startDateTime`/`endDateTime` with timezone offsets, `organizerName`, `organizerUrl` and `performers`.

### How much does it cost?

Pay per event row plus a small start fee — no subscription. A 500-event city sweep costs about **$4**; with full details, the same sweep just takes longer, not more per row. Free-plan users can try it capped at 25 events. Platform usage (a few cents per run) is billed by Apify.

### Not technical? Let your AI assistant set it up

Copy this into ChatGPT/Claude along with what you want:

```
I want to use the Eventbrite Scraper (lowlanddata/eventbrite-scraper) on Apify.

What I want: [E.G. "all tech events in Amsterdam in October, with ticket prices"]

Guide me to:
1. Propose input values: country and city as Eventbrite writes them in URLs,
   optional searchQuery, category (one of the 21 in the input dropdown),
   dateFrom/dateTo (YYYY-MM-DD), freeOnly or onlineOnly if relevant,
   scrapeDetails true when I need prices and organizers, and maxItems.
2. Explain how to run it in the Apify Console and export the dataset as CSV.
3. If I gave you specific event links, put them in eventUrls instead.
```

### Input reference

| Field                 | Type     | Default     | Notes                                                                                |
| --------------------- | -------- | ----------- | ------------------------------------------------------------------------------------ |
| `country`             | string   | `germany`   | As in Eventbrite URLs: `germany`, `united-kingdom`, `belgium`, `united-states`...    |
| `city`                | string   | `berlin`    | City name; accents and spaces handled.                                               |
| `searchQuery`         | string   | —           | Free text, like the Eventbrite search box.                                           |
| `category`            | select   | —           | One of 21 Eventbrite categories. Also the way past the ~1,000-result serving window. |
| `onlineOnly`          | boolean  | `false`     | Online events instead of a place.                                                    |
| `freeOnly`            | boolean  | `false`     | Free-admission events only; combines with a category.                                |
| `dateFrom` / `dateTo` | string   | —           | Keep events starting in this window (YYYY-MM-DD).                                    |
| `eventUrls`           | string\[] | `[]`        | Direct mode: scrape exactly these event pages; search inputs are ignored.            |
| `scrapeDetails`       | boolean  | `false`     | One extra request per event: prices, organizer, performers, exact times.             |
| `maxItems`            | integer  | `500`       | Stop after this many events.                                                         |
| `proxyConfiguration`  | object   | residential | Eventbrite rejects datacenter IPs — keep the residential group on.                   |

**Coverage note:** Eventbrite serves at most ~1,000 results per query. Broad city sweeps that match more get the newest slice; add a `category` or a date window for full coverage — the run log tells you when that matters.

### Scheduling and API use

Run it on a Schedule from the Apify Console (daily city sweeps pair well with `dateFrom` set to today). Or via API:

```bash
curl -X POST "https://api.apify.com/v2/acts/lowlanddata~eventbrite-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"country": "belgium", "city": "brussels", "category": "business", "maxItems": 200}'
```

### Use it with AI agents (MCP)

Every Lowland Data actor doubles as an MCP endpoint — Claude, Cursor and other agents can run it directly: [apify.com/lowlanddata/eventbrite-scraper/api/mcp](https://apify.com/lowlanddata/eventbrite-scraper/api/mcp). Setup details: [Apify MCP docs](https://docs.apify.com/platform/integrations/mcp).

### Is it legal to scrape Eventbrite?

The actor reads only public event pages — the same information any visitor sees, published by organizers precisely to be seen. It collects no attendee data and no private information, respects a polite request rate, and outputs organizer identities only as publicly billed. Event data is factual information (dates, places, prices); nothing here bypasses a login or a paywall. As always: how you use the data downstream is yours to assess.

### FAQ

**Why is the proxy set to residential?** Eventbrite answers HTTP 405 to datacenter IPs. The residential default just works; switching it off will break runs.

**I need more than 1,000 events for a big city.** Run per category (21 runs cover everything), or slice by date window. Each run's log tells you the total match count so you know when you're capped.

**Where are the ticket prices?** Turn on `scrapeDetails` — prices live on event pages, not in search results. Rows then carry `priceMin`/`priceMax`/`currency`.

**Can I get organizer emails or phone numbers?** No, by design. Organizer name and public profile link only — this output is meant to pass a compliance review.

**An eventUrls link returned nothing.** The event was unpublished, ended, or the URL isn't an event page. The run continues past it and says so in the log.

### Troubleshooting

- **"Eventbrite served a challenge or interstitial page"** — temporary edge protection; the actor already retries with fresh routes. If a whole run fails this way, re-run in a few minutes.
- **"page without its data island"** — Eventbrite changed their markup. Report it on the **Issues tab**; markup breaks are treated as incidents, fixed and regression-tested, not shrugged at.
- **Zero results with filters** — a narrow query in a small city can genuinely match nothing; the log shows the site's own match count.

Something else off? Open an issue on the actor's **Issues tab** — reports get read and answered.

And if this saves you an afternoon, a **rating on this page** takes ten seconds and helps other buyers find the GDPR-clean option among the lookalikes.

# Actor input Schema

## `country` (type: `string`):

Country as it appears in Eventbrite URLs, e.g. <code>germany</code>, <code>united-kingdom</code>, <code>france</code>, <code>belgium</code>, <code>united-states</code>.

## `city` (type: `string`):

City name, e.g. <code>berlin</code>, <code>paris</code>, <code>london</code>. Accents and spaces are handled.

## `searchQuery` (type: `string`):

Free-text search, like the Eventbrite search box. Optional - without it you get all events for the place.

## `eventUrls` (type: `array`):

Paste specific event page URLs to scrape just those (search inputs are then ignored).

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

Limit to one Eventbrite category. Also the way past the ~1,000-result serving window on broad queries.

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

Search Eventbrite's online events instead of a place.

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

Only free-admission events. Combines with a category.

## `dateFrom` (type: `string`):

Keep events starting on or after this date (YYYY-MM-DD).

## `dateTo` (type: `string`):

Keep events starting on or before this date (YYYY-MM-DD).

## `scrapeDetails` (type: `boolean`):

Fetch each event's page for ticket price range, organizer name and performers. One extra request per event - slower, richer.

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

Stop after this many events.

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

Eventbrite blocks datacenter IPs (HTTP 405) - keep the residential group on.

## Actor input object example

```json
{
  "country": "germany",
  "city": "berlin",
  "onlineOnly": false,
  "freeOnly": false,
  "scrapeDetails": false,
  "maxItems": 500,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `events` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("lowlanddata/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("lowlanddata/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 '{}' |
apify call lowlanddata/eventbrite-scraper --silent --output-dataset

```

## MCP server setup

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