Scrape Ticketmaster event search results by keyword: event name, start date and time, venue, city and state, artists, sold-out and cancelled flags, and event URL, plus flagged parking and VIP add-on rows, as clean deduplicated data.
Search-only Ticketmaster scraper. src/client.py: curl-cffi with a mixed
Firefox/Safari/Chrome impersonation tuple, fresh proxy session id and profile
on every retry, backoff 2s doubling to 30s, max 5 attempts, honours
Retry-After; a request router refuses every URL that is not
https://www.ticketmaster.com/search before any network I/O. A block is
read from the body (challenge title, or a 200 with neither the searchEvents
payload nor event cards), never by substring, and raises
TicketmasterBlockedError.
src/parser.py: reads the searchEvents query in __NEXT_DATA__ (events,
total, add-ons); falls back to the server-rendered event cards.
Parking / VIP add-ons become flagged rows with parentEventId.
src/scraper.py: run-wide dedupe, maxPages / maxItems / target-total /
empty-page / no-new-ids stops, per-query fault isolation. total == 0
finishes SUCCEEDED with zero rows; a block with nothing emitted fails the run.
Default proxy is Apify RESIDENTIAL pinned to US.
Offline tests against trimmed real captures (no live network).