Eventbrite Events Scraper
Pricing
from $2.55 / 1,000 event row with details
Eventbrite Events Scraper
Eventbrite events by location and keyword, or by event URL: dates, venue with coordinates, category, organizer, and ticket price range. One flat row per event, Clay ready. No login, no key. Refused pages are free.
Pricing
from $2.55 / 1,000 event row with details
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 hours ago
Last modified
Categories
Features
Share
Give a location and keywords, or Eventbrite event URLs. You get one flat row per event with its dates, venue and coordinates, category, organizer, and the ticket price range shown on the event page. You pay per event returned. No login, no Eventbrite key.
Features
- Search any Eventbrite location by keyword, or list all events in a location. A location can be "Austin, TX", "London, United Kingdom", an Eventbrite slug such as
ca--san-francisco, oronline. - Each event page is read for the organizer name, profile link, and description, and the lowest and highest ticket price, by default.
- Paste event URLs or event IDs from any Eventbrite domain to read those events only.
- Filter by start date. Events outside the range are skipped and not charged.
- One row per event, with the same columns on every row, ready for Clay, Sheets, or a CSV.
- Refused pages and missing events are free rows. Each location and keyword search that Eventbrite answers is charged once, with or without events.
How the data is read
The actor reads Eventbrite's public pages as a logged out visitor. Search pages carry their results as JSON in the page, and each event page carries schema.org event data with the organizer and the ticket offers. It does not call Eventbrite's internal API, which robots.txt disallows.
Eventbrite answers search pages from the Apify proxy's shared datacenter pool with a "Human Verification" page (HTTP 405), so search pages are read through Apify residential proxy addresses in the United States. Event pages load on the shared pool and are read there. No browser, no captcha solving, and no other developer's actor is used. A refused page is not retried on a new address: it becomes a free row, and after 3 refused search pages in a row the run stops searching and delivers what it has.
Eventbrite's Terms of Service bar automated data collection from its sites. This actor reads only pages any visitor can open without an account. Check that your use fits Eventbrite's terms and the laws that apply to you.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
locations | array | Places to search, one per line: "City, Region" such as "Austin, TX" or "London, United Kingdom", an Eventbrite location slug such as ca--san-francisco, or online. A location Eventbrite does not know returns a free row. | |
keywords | array | Search words, such as tech, startup, or yoga. Each keyword is searched in each location. Leave empty to list all events in a location. | |
event_urls | array | Eventbrite event URLs or event IDs, on any Eventbrite domain. Each event page is read for its organizer and price. | |
start_date_from | string | Optional, YYYY-MM-DD. Search results that start earlier are skipped and not charged. | |
start_date_to | string | Optional, YYYY-MM-DD. Search results that start later are skipped and not charged. | |
read_details | string | true | true (default) or false. With true, each event page is read for the organizer name and the ticket price range, at the event row with details price. With false, rows come from search pages only, at the lower event row price, with no organizer name and no price. |
max_events | string | 50 | The most events to return in this run, across every search and URL, from 1 to 2,000. Default 50. Text or a number. |
max_pages_per_search | string | 5 | Search pages read for each location and keyword pair, from 1 to 50. A page holds about 20 events. Default 5. |
max_charge_usd | string | Optional. The run stops before a charge that would pass this amount. Summary rows are always returned. |
Output
| Field | Type | What it holds |
|---|---|---|
row_type | string | One of: event, run_summary. run_summary is the one free row written when the input is refused. |
input | string | The search (keyword and location) or the event URL that produced this row. |
search_location | string | Eventbrite location slug searched. |
search_keyword | string | Keyword searched. Empty for all events in the location. |
search_page | integer | Search page the event was found on. |
event_id | string | Eventbrite event ID. |
event_name | string | Event name. |
summary | string | Short summary the organizer wrote. |
event_url | string | Link to the event on Eventbrite. |
start_date | string | Local start date, YYYY-MM-DD. |
start_time | string | Local start time, HH:MM. |
end_date | string | Local end date. |
end_time | string | Local end time. |
start_datetime | string | Start with its UTC offset, from the event page. |
end_datetime | string | End with its UTC offset, from the event page. |
timezone | string | Event time zone. |
is_online | boolean | True for an online event. |
is_cancelled | boolean | True when Eventbrite marks the event cancelled. Often empty. |
event_status | string | Status on the event page, such as EventScheduled or EventCancelled. |
attendance_mode | string | OfflineEventAttendanceMode, OnlineEventAttendanceMode, or MixedEventAttendanceMode. |
venue_name | string | Venue name. |
address | string | Venue address as Eventbrite shows it. |
city | string | Venue city. |
region | string | Venue state or region. |
postal_code | string | Venue postal code. |
country | string | Venue country code. |
latitude | number | Venue latitude. |
longitude | number | Venue longitude. |
category | string | Eventbrite category. |
subcategory | string | Eventbrite subcategory. |
event_format | string | Eventbrite format, such as Conference or Party or Social Gathering. |
tags | string | Organizer tags, comma separated. |
organizer_id | string | Eventbrite organizer ID. |
organizer_name | string | Organizer name, from the event page. |
organizer_url | string | Organizer profile on Eventbrite, from the event page. |
organizer_description | string | What the organizer wrote about itself, from the event page. |
price_low | number | Lowest ticket price shown on the event page, before checkout fees. 0 means a free ticket type exists. |
price_high | number | Highest ticket price shown on the event page. |
currency | string | Ticket price currency. |
is_free | boolean | True when every ticket shown is free. |
ticket_availability | string | InStock, SoldOut, or similar, from the event page. |
sales_end | string | When ticket sales end, UTC. |
tickets_url | string | Checkout link Eventbrite gives. |
tickets_by | string | Who sells the tickets. |
image_url | string | Event image URL. |
language | string | Event page language. |
published_at | string | When the event was published, UTC. |
keyword_in_text | boolean | True when the event name, summary, category, or tags carry a word of the keyword. False rows matched on the description or are looser matches from Eventbrite. Empty with no keyword. |
detail_read | boolean | True when the event page was read for the organizer and price. |
attempts | integer | Requests made for this page. 2 only after a network error. |
row_status | string | ok, or why this row carries no data: no_results, no_change, partial, blocked, or error. |
error_reason | string | Why the row is not ok. A refused input reads input_invalid: followed by what to fix. |
billable_events_json | string | What this row was billed as, for example {"event-detail-row":1}. {} means free. |
scraped_at | string | When the row was written, UTC. |
Pricing
Pay per event. Summary rows and a refused input are free.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
event-detail-row, one event with its event page read (organizer and price) | $0.003 | $0.00285 | $0.0027 | $0.00255 |
event-row, one event from a search page only (read_details false) | $0.0015 | $0.001425 | $0.00135 | $0.001275 |
search, one location and keyword search that Eventbrite answered, with or without events | $0.007 | $0.00665 | $0.0063 | $0.00595 |
apify-actor-start, once per run (one per GB of memory; the default 512 MB is one) | $0.026 | $0.026 | $0.026 | $0.026 |
Per 1,000 rows of event-detail-row: $3.00 on the free plan, $2.55 on Gold.
Free plan cap: 1.50 USD of evaluation a month, about 500 rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd input.
Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
With read_details set to false, rows come from search pages only and cost less, but carry no organizer name and no price. The organizer ID is on every row.
Usage examples
Search a city. {"locations": ["Austin, TX"], "keywords": ["startup", "ai"], "max_events": "40"} returns up to 40 events across both keywords, each with its organizer and price range.
Date range. Add "start_date_from": "2026-12-01", "start_date_to": "2026-12-31" to keep only events that start in December. Skipped events are not charged.
Known events. {"event_urls": ["https://www.eventbrite.com/e/french-tech-holiday-party-tickets-2002241613565"]} reads that event page.
Clay. Number and on or off inputs are text fields, which is what Clay sends. A list input takes a JSON list, so put the column inside a one item list. For locations, send a "City, State" column as a one item list.
MCP. The Mamba Labs MCP server @mambalabsdev/mcp-eventbrite-events-scraper exposes this actor to Claude and other MCP clients.
Error handling
| Case | What you get |
|---|---|
| Missing or unreadable input | One free row, row_type run_summary, error_reason starting input_invalid: with what to fix. The run ends successfully and charges nothing but the run start |
| A location Eventbrite does not know | One free row with row_status no_results |
| A search with no events | One row with row_status no_results, and the search is charged once (the search page was read) |
| Eventbrite refuses a page | One free row with row_status blocked, and a search row keeps the search card fields it already had. The page is not retried in the run |
| 3 refused search pages in a row | The run stops searching, reads the event pages it already has, and says so in RUN_SUMMARY |
| An event page with no event data (ended or private) | One free row with row_status partial |
| The run is close to its timeout | The actor stops starting new work 90 seconds before the timeout and delivers what it has |
Limitations
- A search page holds about 20 events.
max_pages_per_searchcaps pages per location and keyword pair, 5 by default. - Search results are ordered by Eventbrite's relevance, not by date. The date filter is applied to the results read, so a narrow date range can return fewer events than
max_events. - A date in the search address drops the keyword on Eventbrite's side, so dates are filtered by the actor, not by Eventbrite.
- Eventbrite answers a keyword it has no events for with every event in the location. When no result on the first search page carries a word of the keyword in its name, summary, category, or tags, the actor returns one
no_resultsrow for that search, and the search is charged once.keyword_in_textmarks each row; a row marked false matched on its description or is a looser match from Eventbrite. - Keyword words under 3 letters, such as "AI", are not checked.
- Prices are the range shown on the event page, before Eventbrite's checkout fees. Events with hidden or invite only tickets have no price.
is_cancelledis often empty on search results.event_statusfrom the event page is the better field.- Organizer email and phone are not returned. Eventbrite does not show them on public pages.
- Refused pages are not retried. Rerun the inputs that came back
blocked.
Mamba Labs actor suite
Built by Mamba Labs.