How to Scrape Eventbrite Events for a Local Calendar
An event list is not ready to become a calendar until dates, venues, and time zones have been checked. This is especially important when one search mixes physical events and online sessions.
The Eventbrite Event Scraper collects event names, dates, descriptions, tags, venue data, and source links from Eventbrite search URLs. I maintain this Apify Actor. The workflow below creates a reviewed local event sheet; the published output sample does not establish ticket prices, organizer contacts, or attendee lists.

Select a place and date range on Eventbrite
Use Eventbrite's search to select the area, event type, and date range for your calendar. Copy the resulting search URL. Checking the search in the browser first helps catch a location or date filter that did not persist in the link.
The Actor input accepts searchUrls as an array of strings. It also exposes maxItems, defaulting to 100. Set a small positive value explicitly rather than relying on blank or zero behavior.
Before starting, check the rental terms: pricing as of September 6, 2026 is $12 per month, with a configured 4,320-minute trial, equivalent to three days. Eligibility and current terms should be confirmed on the pricing page. Platform usage is separate; this is not a $12 all-inclusive collection allowance.
Run one search with a small cap
Open the Actor on Apify and switch Input to JSON. This example uses the documented Texas search and requests twenty events:
{
"searchUrls": [
"https://www.eventbrite.com/d/united-states--texas/all-events/"
],
"maxItems": 20
}
For a local calendar, substitute your reviewed city-and-date search URL. The broad Texas example is useful for checking the fields but cannot be treated as a complete city calendar.
Click Start, then inspect the output dataset and log after completion. Check several url values against the event pages. Verify that the returned events actually fall in your planned geography and dates before increasing the cap.
The schema describes maxItems as the maximum events to scrape without specifying per-URL allocation. Keep one search in the first run. If you need an equal sample from several cities, separate runs avoid relying on an undocumented distribution of the cap.
Review dates and venues before exporting
The historical sample is a Dallas event dated February 16, 2025. It shows the field structure, not an upcoming event suggestion:
{
"name": "Dallas Mardi Gras Food Brunch",
"startDate": "2025-02-16",
"endDate": "2025-02-16",
"startTime": "11:00",
"endTime": "16:00",
"isOnlineEvent": false,
"publishedAt": "2025-01-13T01:36:07Z"
}
publishedAt is when the listing was published, not when the event begins. The sample separates the event date from the time and supplies no explicit time-zone field. Confirm the zone from the event page before turning these values into an absolute timestamp.
For physical events, venue.name identifies the location and venue.address contains city, region, postal code, formatted address, latitude, and longitude where present. The sample coordinates are strings, so convert them carefully if you plan to map venues. For online events, do not manufacture a physical venue from the search city.

Build a calendar review sheet
Export JSON if you need the nested venue object; CSV is convenient after selecting or flattening the relevant fields. Keep name, url, start and end dates and times, isOnlineEvent, venue name, city, address, tags, and description. Add collection time, verified time zone, and a review-status column.
First filter by the actual event start date. Next separate online events from physical ones, then check physical venues against your intended city or travel radius. Keep rows with missing dates or locations in a review queue rather than silently dropping them into the calendar.
Deduplicate by event URL before counting events. Similar titles can represent separate dates or sessions, so do not merge them by name alone. For repeated listings, open the event page to check which date the returned record represents.
Before creating a calendar entry, verify its start time, end time, time zone, and registration link. If an end time is absent, leave it unresolved rather than inventing a standard two-hour duration. Include the source URL in the calendar description so someone can check updates or registration requirements.
For a local newsletter, write a short factual summary from the event information and link to the organizer's page. The scraper output is a research source; it does not confirm available tickets, permission to reuse promotional images, or that an event has not changed since collection.
Maintain the calendar without false cancellations
Save a working search as an Apify task and keep dated exports. On refresh, compare matching event URLs for changed dates, times, or venues. Review changed records before updating any public calendar.
An event absent from the next capped search is not automatically canceled. It may have moved outside the date filter, dropped below the result limit, or failed to load. Open the source page before marking it canceled. If many expected events are missing, inspect the search filters and run log before expanding the crawl.
The Eventbrite Node.js example can support scheduled collection after the manual review process is working. If your project also needs permanent venue locations, the separate store locator guide covers location data rather than event occurrences.
Frequently asked questions
Does the documented output include ticket prices or attendee lists?
The published output sample does not establish ticket-price, organizer-contact, or attendee fields. This guide uses the documented event, date, location, and tag fields.
Are the returned times safe to import directly into a calendar?
Check the event page for the time zone first. The documented startDate and startTime fields do not include an explicit time-zone field.
Is the scraper priced per event?
Pricing as of September 6, 2026 is $12 per month. Platform usage is separate from that rental; consult live pricing before subscribing.
