Eventbrite Events Scraper avatar

Eventbrite Events Scraper

Pricing

from $0.89 / 1,000 events

Go to Apify Store
Eventbrite Events Scraper

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

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

8 days ago

Last modified

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.

InputCities, regions or countries, up to 10 per run
OutputOne row per event: title, times, venue and address, coordinates, organiser and followers, price range, sold-out flag, link
Ceiling5,000 rows per run, 1,000 per location
Account neededNone, 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 getField
The event, its id, a short summary and its linkseventId, name, summary, url, ticketsUrl
When, in the venue's own timestartsAt, endsAt, timezone
WherevenueName, venueAddress, city, region, country, latitude, longitude
Online or at a venueisOnline
Who runs it, and how many people follow themorganizerName, organizerUrl, organizerFollowers
The ticket price range and the free and sold-out flagsminPrice, maxPrice, currency, isFree, isSoldOut
Eventbrite's category labelscategories
What you typed, and the place Eventbrite matched it tosearchLocation, locationName, locationSubtitle, locationId, locationVerified
When it was readscrapedAt

▶️ How to scrape Eventbrite events

  1. Open Eventbrite Events Scraper and click Try for free.
  2. Put one city per line into Location.
  3. Add a Keyword or pick Categories if you want a narrower set.
  4. Choose When, or fill in both From date and To date.
  5. 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
}
FieldWhat the run uses if you leave itWhat it is
locationbox starts at LondonOne place per line, up to 10. Plain names work. A browse URL or a numeric place id pins an ambiguous one.
keywordemptyNarrows results the way the search box on the site does.
dateRangecurrent_futurecurrent_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, endDateemptyYour 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.
categoriesallEventbrite's own category ids, picked from the list in the form. 103 is Music, 102 Science & Technology, 101 Business & Professional, and so on.
onlineOnlyoffOnline events instead of venue events. Ticking it makes the location optional.
freeOnlyoffOnly events Eventbrite lists as free.
paidOnlyoffOnly events Eventbrite does not list as free. Some of them still show a minPrice of 0. Tick this or freeOnly, not both.
maxItems50Total rows across all your locations, up to 5,000, split evenly between them. This is also your spending cap.
proxyUrlsnoneOptional. 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"
}
FieldHow to read it
eventIdEventbrite's own id. Stable, so use it to dedupe across runs.
startsAt, endsAt, timezoneLocal wall-clock times with the venue's timezone beside them, not converted.
minPrice, maxPrice, currencyThe published ticket range. Both null on events with no public price.
isSoldOutEventbrite's own flag, and null when it does not say.
searchLocationExactly what you typed, so you can join rows back to your own list. locationName is what Eventbrite matched it to.
locationVerifiedOnly present, and only false, when the venue had no coordinates to check against the place.
categoriesEventbrite's own labels, not the numeric ids you passed in.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itCharged
An eventrecordType: "event", charged: trueyes
The sample row_sample: true, charged: falseno
A diagnostic_diagnostic: true, recordType: "diagnostic" and an errorCodeno

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.

CodeWhat it means
LOCATION_NOT_FOUNDEventbrite could not place that name, so nothing was searched for it. Try a browse URL or the place id.
LOCATION_MISMATCHAn 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_MISMATCHEvents came back on the wrong side of freeOnly or paidOnly. They were left out and not charged; the row gives the count.
BAD_INPUTA 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_RESULTSThe place resolved, Eventbrite just has nothing matching in that window.
TIME_BUDGETThe run ran out of time before finishing. Everything already delivered is complete.
NOT_SERVEDThis event was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED.
NETWORKEventbrite was unreachable. Re-run it.
PROXY_INPUT_ADJUSTEDA connection setting in your input could not be used and was replaced. The run carried on.
CHARGE_ERROROne 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 organizerName and organizerFollowers.
  • Watching what a competitor is putting on next month, by keyword, on a schedule, deduping on eventId so each run is only what is newly listed.
  • Pricing research: minPrice and maxPrice across 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.
  • minPrice and maxPrice are the published range, not what any individual ticket costs after fees.
  • One date on its own is ignored. startDate and endDate work 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 scrapedAt records 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 wantUse
Upcoming Eventbrite events in a city, with venue, organiser and ticket pricesThis one
Luma events by city or community calendar, with hosts and ticket pricesLuma Events Scraper
Public Facebook events by keyword, city or PageFacebook 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.

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.