Eventbrite Events Scraper
Pricing
from $0.89 / 1,000 events
Eventbrite Events Scraper
Scrape upcoming Eventbrite events in a city, one row each: title, start and end time, venue and full address, organiser and follower count, ticket price range and link. Filter by keyword, category, date, free or paid. No account. $0.92 per 1,000 events.
Pricing
from $0.89 / 1,000 events
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Scrape Eventbrite events in a city and get one row per event: title, start and end time, venue with the full address and coordinates, the organiser and their follower count, the ticket price range, and whether it is sold out. Filter by keyword, category, date, price or online events.
The honest limit is Eventbrite's, not ours: any one search stops at 1,000 events. Ask for more than that from a single city and you get 1,000. Split a big city by keyword, by category or by date window if you need to go past it.
| Input | Cities, regions or countries, up to 10 per run |
| Output | One row per event: title, times, venue and address, coordinates, organiser and followers, price range, sold-out flag, link |
| Ceiling | 5,000 rows per run, 1,000 per location |
| Account needed | None, and no API key |
| Price | $0.92 per 1,000 events on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 5,400 |
🔍 What Eventbrite Events Scraper does
Type a place name and it resolves that name to a real Eventbrite place before it searches. That step matters more than it looks: a search Eventbrite cannot tie to a place comes back as a worldwide feed that looks exactly like a successful search and is not one. So a name Eventbrite cannot place is reported and skipped. No search goes out for it, and nothing is charged.
If a name is ambiguous, paste an eventbrite.com/d/<slug>/ browse URL or the numeric place id
instead, and the run uses exactly that place.
There is a second check on the way out. Every event is compared against the place you asked for before it is charged. Anything that cannot be confirmed as being in that place is written into your dataset as an uncharged row so you can see it, and is never billed.
Filters on top: a keyword, Eventbrite's own categories, a date window, online-only, and free-only or paid-only.
📋 What data you get from each Eventbrite event
| What you get | Field |
|---|---|
| The event, its id, a short summary and its links | eventId, name, summary, url, ticketsUrl |
| When, in the venue's own time | startsAt, endsAt, timezone |
| Where | venueName, venueAddress, city, region, country, latitude, longitude |
| Online or at a venue | isOnline |
| Who runs it, and how many people follow them | organizerName, organizerUrl, organizerFollowers |
| The ticket price range and the free and sold-out flags | minPrice, maxPrice, currency, isFree, isSoldOut |
| Eventbrite's category labels | categories |
| What you typed, and the place Eventbrite matched it to | searchLocation, locationName, locationSubtitle, locationId, locationVerified |
| When it was read | scrapedAt |
▶️ How to scrape Eventbrite events
- Open Eventbrite Events Scraper and click Try for free.
- Put one city per line into Location.
- Add a Keyword or pick Categories if you want a narrower set.
- Choose When, or fill in both From date and To date.
- Set Maximum rows, click Start, then download the dataset as JSON, CSV or Excel.
Start it with Location empty and nothing else ticked and you get one labelled sample row, which is not charged.
💰 How much does it cost to scrape Eventbrite events?
$0.92 per 1,000 events on the Free plan. Paid plans pay a little less: $0.91 on Starter, $0.90 on Scale and $0.89 on Business. On the free plan, the $5 Apify gives you each month covers about 5,400 events.
You pay per event row delivered. Events that failed the location check or landed on the wrong side
of a free or paid filter, the sample row and diagnostic rows are not charged, and a search that finds
nothing writes a free NO_RESULTS row instead.
📥 What you give it
{"location": ["London"],"keyword": "startup","dateRange": "this_month","categories": ["102"],"maxItems": 100}
| Field | What the run uses if you leave it | What it is |
|---|---|---|
location | box starts at London | One place per line, up to 10. Plain names work. A browse URL or a numeric place id pins an ambiguous one. |
keyword | empty | Narrows results the way the search box on the site does. |
dateRange | current_future | current_future, today, tomorrow, this_weekend, this_week, next_week, this_month, next_month. The short windows follow Eventbrite's calendar where the events are, not where you are. |
startDate, endDate | empty | Your own window as YYYY-MM-DD. Fill in both or neither: one on its own is ignored. A date written any other way, or a start after the end, stops the run before it searches. |
categories | all | Eventbrite's own category ids, picked from the list in the form. 103 is Music, 102 Science & Technology, 101 Business & Professional, and so on. |
onlineOnly | off | Online events instead of venue events. Ticking it makes the location optional. |
freeOnly | off | Only events Eventbrite lists as free. |
paidOnly | off | Only events Eventbrite does not list as free. Some of them still show a minPrice of 0. Tick this or freeOnly, not both. |
maxItems | 50 | Total rows across all your locations, up to 5,000, split evenly between them. This is also your spending cap. |
proxyUrls | none | Optional. Your own servers, one URL per line as http://user:pass@host:port. |
📤 What you get back
A real row from a run in September 2026:
{"ok": true,"charged": true,"recordType": "event","searchLocation": "London","locationName": "London","locationSubtitle": "Greater London, United Kingdom","locationId": "101750367","name": "An Evening with Eckhart Tolle in London","summary": "We are delighted to invite you to a rare and transformational evening with Eckhart Tolle live in London.","startsAt": "2026-09-26T19:00:00","endsAt": "2026-09-26T21:00:00","timezone": "Europe/London","venueName": "ICC Auditorium","venueAddress": "Western Gateway, London, E16 1XL","city": "London","region": "England","country": "GB","latitude": 51.5075864,"longitude": 0.0340907,"organizerName": "Genius Productions","organizerUrl": "https://www.eventbrite.ca/o/genius-productions-9377090349","organizerFollowers": 7252,"minPrice": 44.4,"maxPrice": 212.4,"currency": "GBP","isFree": false,"isSoldOut": true,"isOnline": false,"categories": ["Religion & Spirituality"],"url": "https://www.eventbrite.ca/e/an-evening-with-eckhart-tolle-in-london-tickets-1979620158183","ticketsUrl": "https://www.eventbrite.com/checkout-external?eid=1979620158183","eventId": "1979620158183","scrapedAt": "2026-09-21T02:09:47.149Z"}
| Field | How to read it |
|---|---|
eventId | Eventbrite's own id. Stable, so use it to dedupe across runs. |
startsAt, endsAt, timezone | Local wall-clock times with the venue's timezone beside them, not converted. |
minPrice, maxPrice, currency | The published ticket range. Both null on events with no public price. |
isSoldOut | Eventbrite's own flag, and null when it does not say. |
searchLocation | Exactly what you typed, so you can join rows back to your own list. locationName is what Eventbrite matched it to. |
locationVerified | Only present, and only false, when the venue had no coordinates to check against the place. |
categories | Eventbrite's own labels, not the numeric ids you passed in. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it | Charged |
|---|---|---|
| An event | recordType: "event", charged: true | yes |
| The sample row | _sample: true, charged: false | no |
| A diagnostic | _diagnostic: true, recordType: "diagnostic" and an errorCode | no |
The sample row also says recordType: "event", so a filter on recordType alone keeps it.
Filter on _sample and _diagnostic being absent instead. The charged field is a label, not a
receipt: it goes on the row when the row is built, before billing happens, so read it as what
separates real events from sample and diagnostic rows, nothing more.
| Code | What it means |
|---|---|
LOCATION_NOT_FOUND | Eventbrite could not place that name, so nothing was searched for it. Try a browse URL or the place id. |
LOCATION_MISMATCH | An event came back that could not be confirmed as being in the place you asked for. It is listed so you can see it, and it was not charged. |
FILTER_MISMATCH | Events came back on the wrong side of freeOnly or paidOnly. They were left out and not charged; the row gives the count. |
BAD_INPUT | A date not written YYYY-MM-DD, a start after the end, a category Eventbrite does not have, or both price boxes ticked. Nothing was searched. |
NO_RESULTS | The place resolved, Eventbrite just has nothing matching in that window. |
TIME_BUDGET | The run ran out of time before finishing. Everything already delivered is complete. |
NOT_SERVED | This event was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED. |
NETWORK | Eventbrite was unreachable. Re-run it. |
PROXY_INPUT_ADJUSTED | A connection setting in your input could not be used and was replaced. The run carried on. |
CHARGE_ERROR | One or more charges could not be recorded, so some rows may have arrived unbilled. |
One bad location never stops the others, and a diagnostic row never fails the run.
💡 What people use it for
- Seeing which organisers are active in a city, from
organizerNameandorganizerFollowers. - Watching what a competitor is putting on next month, by keyword, on a schedule, deduping on
eventIdso each run is only what is newly listed. - Pricing research:
minPriceandmaxPriceacross a category tell you what a city will pay. - Finding venues that host a particular kind of event, by grouping rows on
venueName.
🚧 What it does not do
- 1,000 events per search, Eventbrite's own ceiling. Split by keyword, category or date to go deeper.
- Upcoming events only. There is no past-event archive here.
- No attendee lists, no ticket sales figures, no organiser email addresses.
minPriceandmaxPriceare the published range, not what any individual ticket costs after fees.- One date on its own is ignored.
startDateandendDatework as a pair. - The location check is a "somewhere else entirely" guard, not a precision filter, so a real Greater London event in Wembley is kept rather than dropped.
- Category ids are Eventbrite's, and the row gives you their labels rather than your ids back.
- Rows are a snapshot. Events get cancelled, moved and repriced, and
scrapedAtrecords when it was read. - It is not an official Eventbrite tool. Dami's Studio is independent and is not affiliated with or endorsed by Eventbrite, or by any other company named on this page.
🧭 Which events scraper do you need?
| If you want | Use |
|---|---|
| Upcoming Eventbrite events in a city, with venue, organiser and ticket prices | This one |
| Luma events by city or community calendar, with hosts and ticket prices | Luma Events Scraper |
| Public Facebook events by keyword, city or Page | Facebook Events Scraper |
❓ Questions people ask
Do I need an Eventbrite account or API key?
No. Nothing to apply for and no quota to manage.
My city name is ambiguous. What do I do?
Paste the eventbrite.com/d/<slug>/ browse URL, or the numeric place id. The run then uses exactly
that place.
Why did I get fewer events than I asked for?
Either the search is smaller than your budget, or it hit Eventbrite's 1,000-event ceiling for that location, or some events failed the location or price check and were set aside uncharged. The diagnostic rows say which.
Can I get online Eventbrite events?
Yes, tick onlineOnly. The location then becomes optional, since online events do not have one.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/eventbrite-events-scraper. Either way
the run happens on your Apify account at the same price.
Is it legal to scrape Eventbrite?
These are public event pages. Organiser names are personal data under GDPR when the organiser is a person, so have a reason for collecting them. Apify's write-up on the legality of web scraping is a sensible starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the run ID and the location you used. The errorCode
on the diagnostic row usually names the problem on its own.