A Python scraper for extracting event listings from Eventbrite.com using the ScrapingAnt web scraping API.
- Scrapes event listings from Eventbrite.com across multiple locations
- Extracts comprehensive event details:
- Event ID and title
- Date and time
- Location and venue name
- Ticket price
- Event status (Sales end soon, Almost full, Going fast)
- Promoted event indicator
- Event URL
- Image URL
- Supports 20+ locations worldwide (US and International)
- Handles URL-based pagination
- Exports data to CSV and JSON formats
- Deduplicates events automatically
- Uses CSS selectors for reliable extraction
- Python 3.8+
- ScrapingAnt API key (Get free API key)
Note: The ScrapingAnt free plan has a concurrency limit of 1 thread. For higher throughput, consider upgrading to a paid plan.
- Clone this repository:
git clone https://github.com/kami4ka/eventbrite-scraper.git
cd eventbrite-scraper- Create and activate a virtual environment:
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate- Install dependencies:
pip install -r requirements.txt- Set your ScrapingAnt API key:
export SCRAPINGANT_API_KEY="your_api_key_here"Scrape events from New York and Los Angeles (default):
python main.pypython main.py [OPTIONS]
Options:
--location TEXT Scrape a specific location only
--locations TEXT... Scrape multiple specific locations
--all-locations Scrape all available locations
--pages N Number of pages to scrape per location (default: 2)
-o, --output PATH Output CSV file path (default: output/eventbrite_events.csv)
--json Also export to JSON format
-v, --verbose Enable verbose output
--api-key TEXT ScrapingAnt API key (or set SCRAPINGANT_API_KEY env var)
--list-locations List available locations and exitScrape with verbose output:
python main.py --verboseScrape a specific location:
python main.py --location ny--new-york --verboseScrape multiple locations:
python main.py --locations ny--new-york ca--los-angeles il--chicago --verboseScrape all available locations:
python main.py --all-locations --verboseScrape 3 pages per location:
python main.py --pages 3 --verboseExport to both CSV and JSON:
python main.py --json -o output/events.csvList available locations:
python main.py --list-locationsny--new-york- New Yorkca--los-angeles- Los Angelesil--chicago- Chicagofl--miami- Miamica--san-francisco- San Franciscoma--boston- Bostondc--washington- Washington DCnv--las-vegas- Las Vegastx--austin- Austinwa--seattle- Seattleco--denver- Denverga--atlanta- Atlantatx--houston- Houstontx--dallas- Dallaspa--philadelphia- Philadelphia
united-kingdom--london- Londoncanada--toronto- Torontoaustralia--sydney- Sydneyaustralia--melbourne- Melbourneireland--dublin- Dublin
| Field | Description | Example |
|---|---|---|
| event_id | Unique event identifier | 1978410657534 |
| title | Event name/title | Back In The 2000s at Polygon |
| date_time | Event date and time | Saturday - 11:00 PM |
| location | Neighborhood/area | Brooklyn |
| venue | Venue name | Polygon Brooklyn |
| price | Ticket price | From $15.00 |
| status | Event status | Almost full |
| is_promoted | Whether event is promoted | False |
| event_url | Direct link to event | https://www.eventbrite.com/e/1978410657534 |
| image_url | Event image URL | https://... |
| city | City name | New York |
| scraped_at | Timestamp of scraping | 2026-01-08T10:30:00Z |
event_id,title,date_time,location,venue,price,status,is_promoted,event_url,image_url,city,scraped_at
1978410657534,Back In The 2000s at Polygon,Saturday - 11:00 PM,Brooklyn,Polygon Brooklyn,Free,Sales end soon,False,https://www.eventbrite.com/e/1978410657534,...,New York,2026-01-08T10:30:00ZEventbriteScraper/
├── config.py # Configuration settings and selectors
├── models.py # Event and EventCollection data classes
├── utils.py # Utility functions for parsing
├── scraper.py # Main scraper class
├── main.py # CLI entry point
├── requirements.txt # Python dependencies
├── .gitignore # Git ignore patterns
├── output/ # Output directory for scraped data
│ └── .gitkeep
└── README.md # This file
The scraper fetches event listing pages from Eventbrite.com using ScrapingAnt's browser rendering capability.
Each event card contains:
- Event image and title
- Date and time
- Venue location
- Ticket price
- Event status badges
- Direct event URL
The scraper:
- Navigates to the location's all-events page
- Parses the HTML to extract event data using CSS selectors
- Handles pagination via URL parameters (?page=N)
- Deduplicates events by event ID across multiple pages/locations
- Exports to CSV/JSON format
Each page typically loads 20 events. Use the --pages option to scrape multiple pages per location.
MIT License
This scraper is for educational purposes only. Please respect Eventbrite.com's terms of service and rate limits when using this tool. Always ensure your scraping activities comply with applicable laws and website policies.