Ticketmaster Scraper - Events, Artists & Venues
Pricing
from $1.20 / 1,000 event records
Ticketmaster Scraper - Events, Artists & Venues
Discover and scrape Ticketmaster events across the US, UK, Australia and Canada. Search by keyword, artist or venue, filter by city and date, or paste URLs directly. Includes incremental monitoring and resume support for ongoing event tracking.
Pricing
from $1.20 / 1,000 event records
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Ticketmaster Scraper: Events, Venues, Artists and Presale Dates
Ticketmaster Scraper turns Ticketmaster event listings into structured data you can use anywhere. Get upcoming events across 16 Ticketmaster markets, including the US, UK, Australia and Canada, with venue details, full artist lineups, presale windows and live status flags such as sold out, cancelled or postponed. Search by keyword on one market, or paste Ticketmaster search, venue and artist links to read their listings directly. Narrow by city or date, then export to JSON, CSV or Excel, or pull records straight into your app through the API.
Why This Scraper?
- Two ways to find events. Search by keyword on one market, or paste search, venue and artist links to read exact listings without building URLs by hand.
- Sixteen markets.
us,uk,au,ca,ae,at,ch,cz,de,dk,fi,it,mx,nz,seandza, each read from its own Ticketmaster site. - Rich event records. Venue address and coordinates, the full artist lineup, every presale window, and status flags for cancelled, postponed, rescheduled, sold out and limited availability shows.
- Narrow without extra requests. City and date filters trim the fetched rows down to just what you need.
- Built for schedules. Incremental mode returns only new and changed events on recurring runs, and a refused run fails loudly instead of returning an empty dataset.
- Resume anytime. Continue an interrupted crawl without paying twice for records you already collected.
- Nothing lost. The complete source event object rides along with every record.
Use Cases
- Ticket resale and pricing tools: track lineups, sold out status and onsale dates to plan when to buy or list tickets.
- Fan alert services: watch an artist or venue for newly announced shows and presale windows.
- Event aggregators and listing sites: build a searchable calendar of concerts, sports and other live events across multiple markets.
- Tour and venue analytics: track how often venues host events, and which cities an artist is touring through.
- Marketing and CRM teams: match upcoming shows in a city to customer segments for local promotions.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
kind | "event" |
recordId | "us:SAMPLE0001A" |
eventId / discoveryId | "SAMPLE0001A" / "sampleDiscoveryId1" |
market | "us" (also "uk", "au", "ca", "ae", "at", "ch", "cz", "de", "dk", "fi", "it", "mx", "nz", "se", "za") |
title | "Sample Arena Rock Night" |
url | Ticketmaster link to the event page |
startDate / onsaleDate | "2027-06-12T19:30:00Z" / "2027-01-05T14:00:00Z" |
spanMultipleDays / timeZone | false / "America/New_York" |
cancelled / postponed / rescheduled | false / false / false |
soldOut / limitedAvailability | false / false |
ticketingStatus / virtual | "onsale" / false |
venueName / venueCity | "Sample Arena" / "Sampleville" |
venueState / venueCountry / venueCountryCode | "SV" / "Sample Country" / "SC" |
venueAddress / venuePostalCode | "1 Sample Way" / "00000" |
venueLatitude / venueLongitude | 40.0 / -75.0 |
venueUrl / venueImageUrl | venue page link / venue photo link |
artists | [{ "name": "Sample Act", "url": "...", "imageUrl": "..." }] |
artistNames | ["Sample Act"] |
presales | [{ "name": "Artist Presale", "startDateTime": "...", "endDateTime": "..." }] |
seatmapImageUrl | static seatmap image link |
categoryId | "SampleCategoryId1" |
changeType / changedFields | "NEW" / [] (incremental mode only) |
firstSeenAt / lastSeenAt | timestamps (incremental mode only) |
raw | the complete source object |
Per-event ticket price tiers are not part of any record: Ticketmaster serves them only on its event detail pages, and those pages refuse automated reads on every connection. The listing pages this actor reads carry no price fields either.
How to Use
- Pick a mode:
search(keyword lookup on one market) orurl(paste Ticketmaster links). - For search mode, set the market, search query, and optionally sort, city filter or a date range. For URL mode, paste one or more Ticketmaster links.
- Set Max items and, if needed, Max pages to control run size and cost, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it through the API.
Search by keyword:
{"mode": "search","query": "sample rock festival","market": "us","maxItems": 20}
Narrow by city and date range:
{"mode": "search","query": "concerts","city": "Chicago","dateFrom": "2027-01-01","dateTo": "2027-03-31","maxItems": 50}
In URL mode, if you leave the links field untouched it now reads one example per link type: US keyword search, a paginated search, a date-sorted search, a venue page, an artist page, and one search each on the UK, Australian and Canadian sites. Max items is split across them, so replace the list with your own links for a real job.
Paste links (search, venue or artist):
{"mode": "url","urls": ["https://www.ticketmaster.com/search?q=sample+festival","https://www.ticketmaster.com/sample-arena-tickets-sampleville/venue/000000"],"maxItems": 100}
Track one search across scheduled runs:
{"mode": "search","query": "sample band tour","incrementalMode": true,"stateKey": "sample-band-tour-us","maxItems": 0}
Supported link shapes (8): keyword search (/search?q=...), a later search page (&page=2), a date-sorted search (&sort=date), a venue page (/venue/<id>), an artist page (/artist/<id>), and keyword searches on the UK, Australian and Canadian sites. Any other Ticketmaster link (category pages, /discover/ pages, event pages) is skipped with a "Link skipped, not a search, venue or artist page" warning, and if no link is usable the run fails with a message saying so.
Event detail links cannot be read by automated clients and are skipped with a warning; paste the venue or artist link instead, or use search mode for the keyword.
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/ticketmaster-event-discovery").call(run_input={"mode": "search", "query": "sample rock festival", "market": "us"})for event in client.dataset(run["defaultDatasetId"]).iterate_items():print(event["title"], event["venueCity"], event["startDate"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/ticketmaster-event-discovery').call({mode: 'search', query: 'sample rock festival', market: 'us',});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
How Max items works across multiple links
In URL mode, Max items is split evenly across the links you paste, calculated once at the start of the run. A link with fewer available events than its share cannot hand its unused budget to another link that has plenty more available. If one link needs a much larger share than the others, give it its own run, or space your links across a few runs instead of one.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips every record id already collected there, so you don't pay twice. Ids are matched on therecordIdfield only, so the ID must belong to a run or dataset of this actor. An ID whose items carry norecordIdseeds nothing (the log shows "0 record id(s) seeded") and every record is collected and billed again. - Incremental mode (
incrementalMode) is for scheduled runs over the same search or links. Each record is classifiedNEW,UPDATED(withchangedFields),UNCHANGED(suppressed and not billed unlessemitUnchangedis on),REAPPEAREDorEXPIRED(only after a run that scanned the whole scope end to end, and only withemitExpired).stateKeynames or shares the stored state. With Incremental mode off, output is exactly as before. - What counts as a change.
UPDATEDmeans any field of the event record changed (title, dates, venue, artists, presale windows, status flags such as sold out, cancelled or postponed, image links), except fields you list inignoreFieldsForChanges. Ticket prices are not part of the record, so price moves are never flagged. Ignored fields stay in the output and are never named inchangedFields. A dotted name such aspresales.endDateTimeignores that key inside every presale element only. Saved baselines are re-compared with your current ignore list, so changing it never marks stored events as updated. - Availability monitoring.
changeScopeset to availability only compares just the on-sale date, sold out, limited availability, ticketing status, cancelled, postponed, rescheduled and presale windows; title, venue, artist and image changes never return a row.compactUpdatesturnsUPDATEDandEXPIREDrows into short rows withpriceChangesandvariantChanges(old and new values);NEWrows stay complete. SwitchingchangeScopekeeps the same stored baseline: stored events are re-compared with the new scope, so nothing is returned asNEWorUPDATEDjust because you changed it. Both are off by default and the row count and billing unit do not change: every returned row is billed as before. - Expiry is a listing drop, not a delisting.
expireAfterMissedScans(default 1) marks an eventEXPIREDonly after it was missing from that many complete scans in a row. A run that was resumed, hit Max items or Max pages, or started from a link past the first page never expires anything. - Do not turn on Resume from run and Incremental mode in the same run. The actor does not block the combination. Records that Resume skips are never added to the Incremental baseline, so if they were not already in it (for example on the first Incremental run, or when the interrupted run never saved its state), the next Incremental run reports them as
NEWagain and bills them a second time. To pick up an interrupted Incremental schedule, simply run it again with Incremental mode alone. - Expired rows in URL mode. If one pasted link hits an error partway through its listing (for example a page the actor cannot parse), that link is skipped with a "Link ... errored" warning in the log, but the run still counts as a complete scan. With
emitExpiredon, every stored event from that link's unread pages is then returned asEXPIREDand billed, even though it is still live, and the next clean run returns the same events asREAPPEARED, billed again. The run succeeds and shows no status warning. Search mode is not affected: there the same error stops the run without saving state. Workaround: in URL mode, leaveemitExpiredoff, or check the log for "errored" before acting onEXPIREDrows.
Output views
The dataset has three views: Records (the core event columns), Venue, artists & presales (location, lineup and presale windows), and Changes (incremental) (change type, changed fields, priceChanges, variantChanges, first and last seen).
Send results into your apps (MCP connectors)
Results can be piped straight into the apps you already use through Apify MCP connectors. Authorize a connector under Apify, Settings, API & Integrations, then select it in the input. Notion receives a rich page-per-event export; other connectors receive a best-effort write or digest. This is optional: leave the field empty and the run is unchanged.
| Parameter | Type | Default | Description |
|---|---|---|---|
mcpConnectors | array | empty | Select one or more authorized MCP connectors. |
notionParentPageUrl | string | empty | URL or id of the Notion page under which event pages are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. |
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (keyword lookup) or url (paste Ticketmaster links). |
query | string | concerts | Search mode: a keyword, for example an artist, team, venue or city name. |
market | string | us | Search mode: one of us, uk, au, ca, ae, at, ch, cz, de, dk, fi, it, mx, nz, se, za. Each market reads its own site. |
sort | string | (none, effectively relevance) | Search mode: relevance or date result order. |
city | string | (none) | Narrow rows to a venue city, state or country substring. Applied after the fetch. |
dateFrom | string | (none) | Keep events starting on or after this date (YYYY-MM-DD). Applied after the fetch. |
dateTo | string | (none) | Keep events starting on or before this date (YYYY-MM-DD). Applied after the fetch. |
startDate | string | (none) | Alias of dateFrom. |
endDate | string | (none) | Alias of dateTo. |
urls | array | eight example links (see below) | URL mode: one or more Ticketmaster search, venue or artist links. Event detail links and other page types are skipped with a warning in the log. |
maxItems | integer | 20 | Maximum event records returned. 0 means no limit. |
maxPages | integer | 0 | Maximum listing pages read per scope. 0 means no cap set by you; a built-in hard limit of 1000 pages per scope always applies. |
proxyConfiguration | object | Apify Proxy (Residential) | Connection settings. Residential is required for reliable results (see Plan Requirement). |
resumeFromRunId | string | (none) | Continue an interrupted crawl: record ids (recordId) from this actor's run or dataset id are skipped. |
incrementalMode | boolean | false | Track this search across runs: only new or changed events are returned, with changeType stamps. Do not combine with Resume from run: the combination is not blocked and can bill skipped records again as NEW later (see the tips above). |
stateKey | string | (none) | Custom baseline name for Incremental mode. Leave empty to derive one from the mode, market, query, filters and links; in search mode the pre-filled link list is ignored, and the ignore list and change scope are never part of it. |
emitUnchanged | boolean | false | Incremental mode: also return (and bill) unchanged events, with changeType UNCHANGED. |
emitExpired | boolean | false | Incremental mode: also return (and bill) events that vanished since the last run, with changeType EXPIRED. In URL mode a link that errors partway can produce false EXPIRED rows (see the tips above). |
changeScope | string | all | Incremental mode: all compares the whole record, priceAndStock compares only availability fields (on-sale date, status flags, presale windows). Ticket prices are not part of the record. |
compactUpdates | boolean | false | Incremental mode: short UPDATED and EXPIRED rows with priceChanges and variantChanges. |
expireAfterMissedScans | integer | 1 | Incremental mode with emitExpired: expire an event only after it was missing from this many complete scans in a row. |
ignoreFieldsForChanges | array | (none) | Incremental mode: field names (or dotted names such as presales.endDateTime) that never make a row UPDATED. |
mcpConnectors | array | (none) | Optional: select authorized MCP connectors to receive the results (see the MCP section above). |
notionParentPageUrl | string | (none) | Notion connector only: URL or id of the parent page for event pages. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"kind": "event","recordId": "us:SAMPLE0001A","eventId": "SAMPLE0001A","discoveryId": "sampleDiscoveryId1","market": "us","url": "https://www.ticketmaster.com/sample-arena-rock-night-sampleville/event/SAMPLE0001A","title": "Sample Arena Rock Night","startDate": "2027-06-12T19:30:00Z","onsaleDate": "2027-01-05T14:00:00Z","spanMultipleDays": false,"timeZone": "America/New_York","cancelled": false,"postponed": false,"rescheduled": false,"soldOut": false,"limitedAvailability": false,"ticketingStatus": "onsale","virtual": false,"venueName": "Sample Arena","venueCity": "Sampleville","venueState": "SV","venueCountry": "Sample Country","venueCountryCode": "SC","venueAddress": "1 Sample Way","venuePostalCode": "00000","venueLatitude": 40.0,"venueLongitude": -75.0,"venueUrl": "https://www.ticketmaster.com/sample-arena-tickets-sampleville/venue/000000","venueImageUrl": "https://example.invalid/sample-venue.jpg","artists": [{ "name": "Sample Act", "url": "https://www.ticketmaster.com/sample-act-tickets/artist/000000", "imageUrl": "https://example.invalid/sample-act.jpg" }],"artistNames": ["Sample Act"],"presales": [{ "name": "Artist Presale", "startDateTime": "2027-01-03T14:00:00Z", "endDateTime": "2027-01-05T02:00:00Z" }],"seatmapImageUrl": "https://example.invalid/sample-seatmap.png","categoryId": "SampleCategoryId1","raw": {}}
Plan Requirement
A residential proxy is required for reliable results, so a paid Apify plan (or your own residential proxy URLs) is needed. Ticketmaster answers plain datacenter connections inconsistently: in our measurements some connections were served normally while others got a "Let's Get Your Identity Verified" page instead of listings, so datacenter access is a lottery rather than a working option. The default connection setting therefore uses the residential group. A single refused connection is retried on a fresh one within a 25 second budget per page, and the run stops with a clear failure message when no page can be read at all.
Apify free plans include no residential proxies. On a free plan the actor logs "The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable." and keeps going on a backup connection. When that backup cannot load the requested pages either, the run fails with "No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested Ticketmaster pages. Upgrade at https://apify.com/pricing or supply your own proxy URLs, then try again." If the account's proxy access is refused outright, the failure reads "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required: https://apify.com/pricing. If you entered your own proxy URLs, check that their credentials are valid." When pages fail for other reasons the run fails with "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later." instead of returning an empty dataset.
FAQ
How much does it cost?
You pay per event record returned, plus a small per run start charge. The Pricing tab shows the current rates for your plan tier. Use Max items to cap the cost of any run.
Is it legal to scrape Ticketmaster?
This actor collects only publicly available event listings. You are responsible for how you use it: follow Ticketmaster's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Event and venue facts are generally not protected, but artist and venue photos may be subject to third party rights.
Can I get only new or changed events on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated, reappeared or expired records for that search or link set, and unchanged ones are not billed unless you turn that on too. Do not add Resume from run to these runs: records it skips are not added to the baseline and can come back later as NEW and be billed again. In URL mode with Emit expired on, a link that errors partway through can return still-live events as EXPIRED, so check the log for "errored" before acting on those rows, or leave Emit expired off.
Why doesn't this include ticket prices?
Ticketmaster serves per-event ticket price tiers only on its event detail pages, and those pages refuse automated reads on every connection. The listing pages this actor reads carry no price fields either, so price tiers are never part of a record. Paste a venue or artist link instead of an event link to read everything else about the same show.
Why did my run fail instead of returning an empty dataset?
If every request is refused, the run stops with a clear message so "no events found" is never confused with "nothing could be read". Run it again in a few minutes. If only some pages or links could be read, you still get what was found, and the run succeeds.
Can I use it with AI agents?
Yes. Call it from any Apify integration, or through Apify's API, and read the results from your own agent or app.
🔗 More scrapers you might like
Pair this actor with these related scrapers from the same team:
| 🧩 Bandsintown Scraper Scrape Bandsintown concert and festival dates: artist tour calendars, venue profiles... | 🧩 Songkick Scraper Scrape Songkick concert and event calendars: upcoming and past dates, venues, cities... |
| ✈️ Pollstar Scraper Scrape Pollstar upcoming concerts and tour dates: play date, venue with full address and... | 🧩 Viagogo Scraper Scrape Viagogo events by artist, production, venue, city, category, or URL. Extract event... |
| 🛒 SeatGeek Scraper Scrape SeatGeek events with ticket price ranges (lowest, highest, average, median)... | 🧩 Fever Scraper Scrape Fever events by city, category, keyword or URL. Extract from-prices, venues, dates... |
💬 Support
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.