Skip to content

About

Scrape Eventbrite events into clean JSON/CSV with Python: search any city or online events by keyword, category, format, date and free/paid, with ticket prices, venues, organizers (followers, website) and full event details. CLI + library, powered by the ScrapeUnblocker API.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Eventbrite Scraper

CI Python 3.9+ License: MIT Powered by ScrapeUnblocker

Scrape Eventbrite events into clean JSON or CSV: ticket prices, venues, dates, organizers and full event details, for any city or for online events. Search with Eventbrite's own filters (keywords, category, format, date preset or a custom date range, free/paid) and collect up to about 1,000 events per search. Every result comes with its venue address and coordinates, category and tags, and, by default, its ticket price range, sold-out flag and the organizer's name, follower count and website. Open any event for the full description, refund policy, age restriction, duration and organizer stats, or pull an organizer's profile with their upcoming events.

Powered by ScrapeUnblocker: the getPageSource API loads every Eventbrite page in a real browser and returns it, and this package turns the JSON that Eventbrite embeds in its pages into typed records. You don't need an Eventbrite account or API token, proxies, a headless browser or retry logic of your own.

Features

  • Search events anywhere. Any city ("Austin, TX", "London, United Kingdom", or a slug like ca--san-francisco) or online. 20 events per page, about 50 pages per search. Several keyword queries in one run are merged and de-duplicated.
  • Eventbrite's own filters. Keywords, 21 categories (music, business, food-and-drink, ...), 15 formats (classes, conferences, networking, ...), date presets (today, this-weekend, next-month, ...) or a custom --start-date / --end-date range, and free or paid only. Or paste a search URL straight from your browser.
  • Filters are verified. Eventbrite silently ignores filter words it does not know. This package validates every filter before the request, then checks Eventbrite's own echo of the search and raises an error if a filter was dropped, so you never get unfiltered data by mistake.
  • Clean event records. Event ID, name, summary, URL, start/end date and time, timezone, online flag, venue name and ID, full address, city, region, postal code, country, latitude/longitude, neighbourhood, category, subcategory, format, organizer tags, urgency badges (goingFast, fewTickets, salesEndSoon), series ID and number of dates, image, publish date and promoted flag.
  • Ticket prices and organizers. Lowest and highest ticket price with currency, free and sold-out flags, sales status, and the organizer's ID, name, Eventbrite page, exact follower count and website. Loaded the same way Eventbrite's search page loads them: one extra request per 20 events (skip it with --no-prices).
  • Full event details. Description as plain text, status, start/end in local time and UTC, duration, location type, price range and availability, sales start/end, age restriction, door time, parking, refund policy, recurring-series info with the next session, performers, reserved seating, external ticketing, images, and organizer stats (verified badge, events hosted, total attendees, description).
  • Organizer profiles. Name, verified badge, bio, followers, events hosted, attendees hosted, website and social links, plus their first upcoming events (with prices) and the total number of upcoming events.
  • Resilient. Timeouts, transient API errors and half-loaded pages are retried with doubling backoff. Unknown locations, deleted events and unknown organizers are reported clearly.
  • JSON, JSON Lines or CSV. CSV files are UTF-8 with a BOM, so Excel shows accents and currency symbols correctly.
  • CLI + Python library. Fully typed, and tested offline with a mocked client.

Install

git clone https://github.com/ScrapeUnblocker/eventbrite-scraper.git
cd eventbrite-scraper
pip install .

Get an API key at scrapeunblocker.com and expose it as SCRAPEUNBLOCKER_KEY (the official SDK reads it from there):

export SCRAPEUNBLOCKER_KEY=your_key_here        # Windows PowerShell: $env:SCRAPEUNBLOCKER_KEY="your_key_here"

You can also copy .env.example to .env and load it with your tool of choice.

CLI usage

# Jazz in New York this weekend, with ticket prices
eventbrite-scraper search jazz -l "New York, NY" --date this-weekend --pretty

# Every free tech class in San Francisco next week, to CSV
eventbrite-scraper search -l "San Francisco, CA" --category science-and-tech \
    --event-format classes --date next-week --price free -p 5 -f csv -o sf_classes.csv

# Online business conferences in a custom date range
eventbrite-scraper search -l online --category business --event-format conferences \
    --start-date 2026-11-01 --end-date 2026-11-30 -p 3 -f jsonl -o conferences.jsonl

# Several queries in one city, merged and de-duplicated, without the price lookup
eventbrite-scraper search "ai meetup" "startup networking" -l "London, United Kingdom" \
    -p 2 --no-prices -f csv -o london.csv

# Paste a search URL from your browser (filters included)
eventbrite-scraper search --url "https://www.eventbrite.com/d/tx--austin/food-and-drink--events/" -p 2

# Only print the URL that would be fetched (no API call), handy for checking a location
eventbrite-scraper search comedy -l "Chicago, IL" --date today --dry-run

# Full details of events (IDs or URLs)
eventbrite-scraper event 1999821006464 https://www.eventbrite.com/e/some-event-tickets-1234567890 --pretty

# Organizer profiles, or their upcoming events as CSV
eventbrite-scraper organizer https://www.eventbrite.com/o/elsewhere-105655500371 --pretty
eventbrite-scraper organizer 105655500371 --events -f csv -o elsewhere_events.csv

# Categories, formats and date presets (no API call)
eventbrite-scraper filters
Command What it returns
search [QUERY ...] Events for each query (20 per page, --pages up to 50)
event EVENT ... Full details of each event (ID or URL)
organizer ORGANIZER ... Organizer profiles; --events outputs their upcoming events instead
filters The category, format, date and price values the filters accept
Option Meaning
-l, --location "New York, NY", "London, United Kingdom", a slug like tx--austin, or online
--category music, business, food-and-drink, science-and-tech, arts, ... (see filters)
--event-format classes, conferences, networking, parties, festivals, ...
--date today, tomorrow, this-weekend, this-week, next-week, this-month, next-month
--start-date, --end-date A custom date range (YYYY-MM-DD) instead of --date
--price free|paid Only free or only paid events
--url An Eventbrite search URL from the browser (replaces QUERY, location and filters)
-p, --pages, -n, --limit Pages per query (1-50) and maximum events per query
--no-prices, --skip-promoted Skip the ticket price lookup / drop promoted events
-f, --format json|jsonl|csv, -o, --output, --pretty Output format, file and indentation
--proxy-country, --retries, -q Route through another country, retries per page, no progress

Run eventbrite-scraper <command> --help for every option. python -m eventbrite_scraper works too.

Locations. Write a city as "City, Region": "Austin, TX" becomes tx--austin, "Berlin, Germany" becomes germany--berlin. If Eventbrite does not know the place you get a clear error; open the city on eventbrite.com and copy the slug from the /d/<slug>/ part of the URL.

Library usage

from eventbrite_scraper import EventbriteScraper, events_to_csv

eb = EventbriteScraper()  # reads SCRAPEUNBLOCKER_KEY; or EventbriteScraper(api_key="...")

# Search with filters (ticket prices and organizer details are included by default)
events = eb.search(
    "Austin, TX",
    "live music",
    date="this-weekend",
    pages=3,
)
for e in events[:5]:
    print(e.start_date, e.start_time, e.price_min, e.currency, e.name, e.venue_name)
events_to_csv(events, "austin_music.csv")

# Category, format, custom dates, free only, online
classes = eb.search(
    "online",
    category="science-and-tech",
    format="classes",
    start_date="2026-11-01",
    end_date="2026-11-30",
    price="free",
    pages=5,
)

# A search URL copied from the browser
food = eb.search(url="https://www.eventbrite.com/d/tx--austin/food-and-drink--events/", pages=2)

# Several queries, merged and de-duplicated
meetups = eb.search_many(["ai meetup", "startup networking"], "San Francisco, CA", pages=2)

# Cheapest run: no price lookup (add prices later for the events you keep)
cheap = eb.search("Chicago, IL", "comedy", prices=False)
eb.add_prices(cheap[:20])

# Full event details
details = eb.event(events[0].id)
print(details.description, details.refund_policy, details.age_restriction)

# An organizer and their upcoming events
org = eb.organizer(details.organizer_id)
print(org.name, org.followers, org.website, org.upcoming_total)
for e in org.upcoming_events:
    print(e.start_date, e.name, e.price_min)

search raises EventbriteNotFoundError for a location Eventbrite does not know and EventbriteFilterError if Eventbrite drops a filter; event and organizer raise EventbriteNotFoundError for deleted events and unknown organizers. Invalid arguments (an unknown category, a date preset together with a date range, ...) raise ValueError before any request is made.

Example output

One event from eventbrite-scraper search "live music" -l "Austin, TX" --date this-weekend (image URL shortened):

{
  "id": "1999821006464",
  "name": "The Peterson Brothers Live at The Continental Club 10/10/26",
  "url": "https://www.eventbrite.com/e/the-peterson-brothers-live-at-the-continental-club-101026-tickets-1999821006464",
  "summary": "The Peterson Brothers light up Austin’s Continental Club with Texas blues, soul & funk!",
  "start_date": "2026-10-10",
  "start_time": "20:00",
  "end_date": "2026-10-10",
  "end_time": "21:30",
  "timezone": "America/Chicago",
  "is_online": false,
  "venue_name": "The Continental Club, South Congress Avenue, Austin, TX, USA",
  "venue_id": "299298515",
  "address": "1315 South Congress Avenue, Austin, TX 78704",
  "city": "Austin",
  "region": "TX",
  "postal_code": "78704",
  "country": "US",
  "latitude": 30.250506,
  "longitude": -97.7490768,
  "neighbourhood": "South River City",
  "category": "Music",
  "subcategory": "Blues & Jazz",
  "format": "Concert or Performance",
  "tags": ["Rock", "Blues", "Funk", "Austin", "Soul", "Livemusic", "austin_events", "r_b", "texas_blues", "peterson_brothers"],
  "urgency": ["salesEndSoon"],
  "series_id": null,
  "series_url": null,
  "date_count": 1,
  "price_min": 17.85,
  "price_max": 17.85,
  "currency": "USD",
  "is_free": false,
  "is_sold_out": false,
  "sales_status": "on_sale",
  "tickets_by": "Eventbrite",
  "tickets_url": "https://www.eventbrite.com/checkout-external?eid=1999821006464",
  "organizer_id": "28603644677",
  "organizer_name": "The Peterson Brothers",
  "organizer_url": "https://www.eventbrite.com/o/the-peterson-brothers-28603644677",
  "organizer_followers": 122,
  "organizer_website": "https://www.petersonbrothersband.com/",
  "image": "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F...",
  "published": "2026-09-05T01:45:29Z",
  "language": "en-us",
  "promoted": false,
  "query": "live music",
  "page": 1,
  "position": 2
}

Part of the same event from eventbrite-scraper event 1999821006464 (description and organizer description shortened):

{
  "id": "1999821006464",
  "description": "Get ready for an unforgettable night of music you can feel in your bones.\n\nStraight out of Austin, Texas ...",
  "status": "live",
  "event_status": "EventScheduled",
  "start": "2026-10-10T20:00:00",
  "end": "2026-10-10T21:30:00",
  "timezone": "America/Chicago",
  "start_utc": "2026-10-11T01:00:00Z",
  "duration_minutes": 90,
  "location_type": "in_person",
  "price_min": 17.85,
  "price_max": 17.85,
  "currency": "USD",
  "availability": "InStock",
  "sales_status": "on_sale",
  "sales_start": "2026-03-12T01:30:00Z",
  "sales_end": "2026-10-10T23:00:00Z",
  "age_restriction": "21+",
  "door_time": "2026-10-10T19:30:00-05",
  "refund_policy": "no_refunds",
  "is_series": false,
  "performers": ["The Peterson Brothers"],
  "organizer_name": "The Peterson Brothers",
  "organizer_verified": false,
  "organizer_events": 54,
  "organizer_attendees": 2940
}

examples/organizer_leads.py "ai meetup" --location "San Francisco, CA" --pages 1 (the organizers behind one page of results; your results will differ):

  2 events     8030 followers  Ermantourage by ADDVentures               https://ermantourage.com
  1 events     2348 followers  Mechanics' Institute                      https://www.milibrary.org/
  1 events     1589 followers  Ascent Valley                             https://ascentvalley.com
  1 events      779 followers  Blockchain Smart Solutions                https://www.blocksmartsol.com/
  ...
20 organizers from 22 events written to organizers.csv

Good to know

  • About 1,000 events per search. Eventbrite serves about 50 pages of 20 results. To go further, split a search into narrower ones (categories, formats, date ranges, keywords) and merge them; search_many and the shared seen set de-duplicate for you.
  • Recurring events. Eventbrite shows a recurring series once per search, at its next date. series_id and series_url identify the series and date_count is how many of its dates matched the search.
  • Prices are the lowest and highest ticket prices Eventbrite lists for the event, in the event's currency. Search cards do not include them, so they are fetched in batches of 20 (one extra request per page of results). --no-prices skips this; promoted events and organizer pages already include prices.
  • Promoted events (paid placements) are marked promoted: true and have no position. Drop them with --skip-promoted.
  • Organizer follower counts. Search results carry the exact count (organizer_followers); organizer profiles show it the way the page does ("15k").
  • Organizer pages list only the first upcoming events (the ones the page shows) and the total (upcoming_total). To find more, search for the organizer's events by keyword.
  • Times are local to the event (timezone); event details also give UTC times.

Responsible use

This project reads public pages that anyone can open without logging in. Respect Eventbrite's terms of service, keep request volumes reasonable, and handle any personal data according to the laws that apply to you, for example the GDPR.

Project layout

src/eventbrite_scraper/
  __init__.py     package exports and version
  scraper.py      EventbriteScraper: search, prices, events, organizers, retries
  parsing.py      embedded-JSON extraction and the page parsers
  urls.py         search URL builder, locations, categories, formats, date presets
  models.py       Event, EventDetails, Organizer, SearchPage dataclasses
  export.py       JSON, JSON Lines and CSV writers
  cli.py          the eventbrite-scraper command
examples/
  weekend_events.py    this weekend's events in a city, cheapest first
  free_events_csv.py   free events this week across several cities, to CSV
  organizer_leads.py   the organizers behind a topic, with followers and websites
tests/            offline tests with synthetic Eventbrite pages and a fake client

Development

make install   # pip install -e ".[dev]"
make lint      # ruff check .
make format    # ruff format .
make test      # pytest -q (offline, no API credit used)

Optionally run pre-commit install to lint and format on every commit.

Links

License

MIT © ScrapeUnblocker

About

Scrape Eventbrite events into clean JSON/CSV with Python: search any city or online events by keyword, category, format, date and free/paid, with ticket prices, venues, organizers (followers, website) and full event details. CLI + library, powered by the ScrapeUnblocker API.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages