Eventbrite Scraper | Events & Organizers avatar

Eventbrite Scraper | Events & Organizers

Pricing

from $3.00 / 1,000 events

Go to Apify Store
Eventbrite Scraper | Events & Organizers

Eventbrite Scraper | Events & Organizers

Export public Eventbrite events by city, filters or event/organizer URLs, with dates, venues, ticket prices and descriptions. $3 per 1,000 events plus platform usage. Independent third-party tool.

Pricing

from $3.00 / 1,000 events

Rating

0.0

(0)

Developer

tingyou333 zhuang

tingyou333 zhuang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Collect publicly visible Eventbrite events for local event feeds, market research and organizer discovery. Search by city, category, date, format and ticket price, or supply event, search or organizer profile URLs. Organizer input collects that organizer's public upcoming list, then verifies each event detail belongs to the same organizer. Each accepted event is read from its detail page and written as a structured dataset row. A separate SUMMARY record explains pagination, exclusions, failures and limits.

This is an independent third-party tool, not an Eventbrite product, partner or endorsed integration. It does not use personal cookies, login sessions, ticket purchases or paid upstream services.

Quick start

For a small export from a public organizer, click Try for free and use:

{
"startUrl": [
{
"url": "https://www.eventbrite.com/o/jiggytime-ent-5494940201"
}
],
"maxItems": 3,
"maxPages": 2,
"maxRequests": 12,
"maxRunSecs": 95,
"retrieveOrganizerData": false
}

For a city search, replace the input with:

{
"city": "ny--new-york",
"maxItems": 3,
"maxPages": 2,
"maxRequests": 12,
"maxRunSecs": 95,
"retrieveOrganizerData": false
}

Do not combine startUrl with city or search filters. Public events and organizer listings can expire or change. One accepted event produces one row. Download the dataset as JSON, CSV or Excel, and read SUMMARY for collection limits.

Pricing

$3 per 1,000 stored events ($0.003 each), plus Apify platform usage. There is no Actor start fee or separate organizer-profile fee. Optional organizer enrichment can increase source requests and platform usage. Failed/skipped events, SUMMARY and optional diagnostics incur no result fee. Compute, storage and transfer are additional platform costs. Use a spending limit and the maxItems, maxRequests and maxRunSecs controls. Keep the Actor timeout above maxRunSecs; the published default timeout is 660 seconds.

Input and filter semantics

Unknown inputs fail early instead of being silently ignored. Accepted enum values are listed in the input form.

FieldType / runtime defaultBehavior
maxItemsinteger / 10Strict global maximum of valid distinct events, 1–1,000,000. The upper input bound does not promise available coverage.
startUrlarray / emptyPlatform input requires { "url": "https://..." } objects. Plain URL strings remain supported by the local runtime only and do not pass the platform input schema. Public /e/ event, /d/ search or /o/ organizer profile URLs. Organizer input reads upcoming events, not past events or profile enrichment alone. Mutually exclusive with all search filters. No remote URL-list downloads.
citystring / absentSource city slug, e.g. ny--new-york, united-kingdom--london, spain--madrid. No typo correction or geocoding is inferred.
categorystring / absentKnown Eventbrite category slug; passed to the source and checked against category IDs in results.
datestring / absenttoday, tomorrow, this-weekend, this-week, next-week, this-month, next-month. Source filter plus a check of the event's local start date. Weekend is Saturday–Sunday; current week/month start today. Relative dates use each event's published IANA timezone.
formatstring / absentKnown format such as conference, festival, seminar, networking. Source must acknowledge its taxonomy ID; unexpected source mapping fails explicitly. See schema for accepted values.
pricefree / paid / absentRequires a published free or paid ticket option respectively. An event offering both may satisfy both filters. No ticket amount is inferred from its title.
onlineboolean / falseUses global online-event search and requires isOnline=true. If combined with city, city does not narrow the global online source; SUMMARY explicitly warns.
retrieveOrganizerDataboolean / falseExtra public profile request per unique organizer, cached during the run. Basic organizer data is already available from the event page. Profile failure preserves the valid event, adds a row warning and marks the run partial. External organizer links are returned as data, never visited.

Extensions:

FieldDefaultBehavior
keywordabsentEventbrite relevance search; not a literal-title substring filter.
startDate, endDateabsentBoth required together, YYYY-MM-DD, inclusive event-local start-date bounds. Cannot combine with date. This excludes events starting outside the range even if they overlap it.
domaineventbrite.comAllowlisted Eventbrite country site for search. Detail links may lead to another Eventbrite country domain.
maxPages20Maximum search or organizer upcoming-list pages per target, 1–1,000; source limits still apply.
maxRequests100Total source attempts, including redirects, details, enrichment and retries, 1–10,000. DoH queries are separately counted.
requestTimeoutSecs25Per-attempt timeout, 3–60 seconds.
maxRetries1Up to three configurable retries for network failures and selected 5xx; no retries for 401/403/429 or challenges.
requestDelaySecs0.3Delay between sequential requests, 0–10 seconds.
maxRunSecs600Overall work deadline, 10–7,200 seconds.
dnsModesystemsystem or explicit google-doh; both enforce public-IP validation.
diagnosticsEnabledfalseExplicitly opt into sanitized response diagnostics in KVS, separately from output rows and charging. Requires selected IDs. No extra source requests.
diagnosticEventIdsabsentOne or two numeric string IDs to capture if actually encountered. Does not add targets. Must be absent/empty when diagnostics are disabled.
diagnosticMaxBytes524288Maximum serialized UTF-8 bytes per diagnostic, 16384–1048576. Truncation and omitted content are marked.
diagnosticMaxObjects300Maximum visited JSON containers/collection width, 10–1000; deep structures are bounded too.

City search follows Eventbrite's metropolitan/relevance scope and organizer-supplied geography. A New York search can include surrounding boroughs or incorrectly geocoded listings; it is not a municipal-boundary guarantee. Source filter acknowledgement is saved for inspection. Not every enum/domain combination has been live tested. Unsupported or changed source semantics produce a diagnostic rather than unfiltered rows.

Output and missing-data rules

Every dataset row has stable id, eventbriteId, title, url, startDate, startDateTime and scrapedTimestamp. Other keys are present with null or empty-array values when the public page does not supply them. Dataset views show event overview and provenance/warnings.

GroupFields
TimestartDate, startTime, startDateTime, endDate, endTime, endDateTime, timezone, startDateTimeUtc, endDateTimeUtc, duration, durationSeconds
Venuevenue.name, city, state, country, streetAddress, postalCode, fullAddress, latitude, longitude; physical fields are null for online events
Organizerorganizer.id, name, url, description, website, socialUrls, followers, followersDisplay, verified, eventsHosted, attendeesHosted, hostingYears, isSuperOrganizer
Ticketspricing.isFree, minPrice, maxPrice, currency, availability, hasFreeTicketOption, hasPaidTicketOption, ticketsUrl, registrationUrl, isSoldOut, hasAvailableTickets
Contentsummary, description, category, subcategory, format, tags, imageUrl, images, status, isProtected, publishedAt, createdAt, language, ageRestriction, urgencySignals
Provenancesource.detailUrl, searchPage, responseSha256, detailParser, organizerEnrichment, taxonomy IDs, warnings, scrapedTimestamp

Dates from the primary embedded payload are local wall-clock values paired with timezone; UTC is separate. A JSON-LD-only fallback may include an explicit offset in startDateTime; its parser mode and warning make this visible. duration is an ISO-8601 duration string, when published, and durationSeconds is numeric. Created date is not substituted for published date. Direct details often do not publish publishedAt or a postal code. tags currently preserve tags from search results; direct-only details may have an empty tag array.

pricing.isFree preserves the source's whole-event flag. An observed mixed event had isFree=false, minimum 0 and maximum 55.2 USD. Prices are public offer amounts, not a verified checkout total, and can include expired or mixed ticket tiers. No purchase is performed. Null prices do not mean free.

description uses published text modules first. If those are absent, it can read the separate nested body inside the page's observed Overview DOM structure, while excluding the outer summary paragraph. source.descriptionSource identifies the route. Ambiguous or absent body content stays null with FULL_DESCRIPTION_UNAVAILABLE; summary and SEO description never substitute for a body. capacity and attendeeCount remain null unless actually published for that event. An organizer's lifetime attendeesHosted is not event attendance. Abbreviated follower counts such as 3.4k stay in followersDisplay; an exact numeric count is not invented.

Error records never enter the event dataset. SUMMARY.errors holds normalized safe diagnostics. A 200 response without known event/search data is a schema failure, not a successful empty result. A real empty result requires the search payload's zero result count. Protected events are skipped.

Pagination, limits and status

Search starts at the supplied page (default 1), follows numeric pages, verifies that the source page number advances, and deduplicates by stable event ID across all targets and domains. It stops at the requested result limit, page/request/time/fee limit, source last page, a repeated page or an access challenge. Recommendation rails and unrelated JSON-LD items are not harvested. Requested, final and parsed event IDs must match, including after redirects.

Organizer input reads upcomingEvents from the public profile. Every listed ID/URL and organizer owner is checked before fetching, and the detail must independently identify the same organizer. hasMoreUpcoming/hasMore control continuation through the observed read-only organizer events endpoint; numeric pages, repeated-page detection and the same HTTP budgets apply. The HTML upcomingEventsTotal is compared to the final distinct listed count: a mismatch is a partial/error result, never a complete collection. API total is preserved as a response-reported count, not assumed to be global. The real tested organizer had seven events and a first-page terminal signal; nonempty later-page behavior is tested with clearly labelled control fixtures and is not claimed as live coverage.

SUMMARY.status is SUCCEEDED, EMPTY, LIMITED, PARTIAL or FAILED. LIMITED includes intentional small samples; it is not proof of complete source coverage. PARTIAL means valid rows survived alongside an error. complete refers only to the requested publicly available source window and is false when errors or scope warnings exist. Inspect each target's termination reason and reported source count. Source page counts can change while paginating.

Search results are a bounded source window, not all events on Eventbrite. A September 26, 2026 New York observation reported 10,000 matches but exposed at most 49 pages of 20 results. Increasing maxItems cannot remove a source-imposed window. The seven-event organizer acceptance was a real cloud run; nonempty later organizer pages were checked with control fixtures, not live positive pagination evidence.

API and scheduled exports

Save your input as input.json, then start a run with your own Apify token:

curl --fail-with-body -X POST \
'https://api.apify.com/v2/acts/UC12YFWTPLXOztuLQ/runs' \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
--data-binary @input.json

Read the returned run's default dataset for rows and its key-value store SUMMARY record for coverage. Export JSON, CSV or Excel in Apify Console. You can configure an Apify schedule for repeated snapshots; this Actor does not create schedules itself.

For recurring feeds, upsert on eventbriteId and compare scrapedTimestamp. IDs are deduplicated within a run, not across separate runs.

Optional response diagnostics

DIAGNOSTICS is a bounded index, and DIAG_EVENT_<numeric ID> is a JSON envelope for each explicitly selected event encountered. It records requested/final URL, event ID, original response SHA-256, encoding/byte count, parser body length/hash, structural keys, sanitized event context and matching Event JSON-LD. The public event Overview DOM is retained for independent parser replay. Unknown event JSON branches are retained within the limits; account, session, tracking, bootstrap, executable scripts and unrelated events are removed. Unrelated visible page regions are omitted. Private/protected or identity-mismatched content is suppressed.

These are sanitized snapshots, not byte-identical raw response archives. sanitizedHtmlSha256 covers the replay HTML; the index payloadSha256 covers the exact UTF-8 JSON record bytes written to KVS. Redaction, omission and truncation are explicit. Diagnostics are disabled by default, never become dataset rows, are not charged, and never collect request headers, cookies or authorization. Storage failure appears as a normalized diagnostic error and is not retried.

Support

Use this Actor's Issues tab with the run ID, public Eventbrite URL and relevant SUMMARY diagnostic. Never post credentials or private run records containing sensitive information. Explicit access blocks, login gates and CAPTCHA stop the affected target. Missing organizer details and ticket prices remain null; an organizer's lifetime attendance is not an event's attendance.