# Ticketmaster Scraper (`lhotanova/ticketmaster-scraper`) Actor

Scrapes events from Ticketmaster.com based on their categories, genres, location and date. Enhances Ticketmaster's built-in event search by searching multiple categories and genres at once. Provides dataset sorting options corresponding to the Ticketmaster's UI.

- **URL**: https://apify.com/lhotanova/ticketmaster-scraper.md
- **Developed by:** [Kristýna Lhoťanová](https://apify.com/lhotanova) (community)
- **Categories:** E-commerce, Open source
- **Stats:** 619 total users, 7 monthly users, 100.0% runs succeeded, 21 bookmarks
- **User rating**: 1.03 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Ticketmaster Scraper

### Table of contents

- [Introduction](#introduction)
- [Cost of usage](#cost-of-usage)
- [Number of results](#number-of-results)
- [Use Cases](#use-cases)
- [Input](#input)
- [Output](#output)

### Introduction

Want to know about all relevant events [Ticketmaster.com](https://www.ticketmaster.com/) promotes but don't have enough time to inspect the whole website? Going through all categories and genres one by one can get really time consuming when you're interested in many categories but still want to exclude some of them for which you need to use a filter. Ticketmaster.com user interface only provides filtering of 1 category and 1 genre (e. g. you can search category Concerts and filter rock genre only). But what if you're also fan of metal, pop or even classical music? Ticketmaster Scraper searches all of these events at once and stores them in one dataset. You can merge different categories with their corresponding subcategories or generate the individual datasets for each category or genre, it's only up to you.

Another useful feature that is missing on [Ticketmaster.com](https://www.ticketmaster.com/) website is filtering events based on their location. Ticketmaster uses location from your web browser and searches events close to your area. That's definitely handy but what if you want to change the settings and give another location? Or you're currently near country borders which results in searching of events that take place in a different country. This happens quite often as only the exact geographical location is considered. With this actor, you can easily specify country or the exact location through [geohash](https://www.movable-type.co.uk/scripts/geohash.html) value. It's enough to set only one of these values but you can also combine them to get events from a specific country near the city represented by a certain geohash.

To provide compatibility with Ticketmaster's built-in search engine, Ticketmaster Scraper comes with sort options and date filter as well. You can sort the events by:

- Date
- Most Popular
- Distance
- Names A-Z
- Names Z-A

And finally filter events in a specific date range. However, Ticketmaster offers many events with no date announced or defined yet. In such case, the shortcuts TBA or TBD are used respectively. TBA and TBD events are included in the dataset by default. You can exclude them by setting TBA Events and TBD Events to `No`. Or you can even create a dataset of TBA and TBD events only.

### Cost of usage

Ticketmaster Scraper is a free of charge actor but it requires [Apify Proxy](https://apify.com/proxy) to work properly. More specifically, it needs the [residential proxy](https://apify.com/pricing/proxy) as Ticketmaster's blocking policy is strict and it blocks datacenter proxies by default. Apart from the residential IPs cost, [compute units](https://apify.com/pricing/actors) are charged for running the actor at the Apify platform.

Ticketmaster Scraper is able to scrape 200 events per 1 request which keeps both compute units and residential proxy expenses very low.

#### Residential proxies

You can use residential proxies if you subscribe to a paid [plan at the Apify platform](https://apify.com/pricing). Residential IPs are charged based on the transferred data so try to optimize the maximum number of events scraped with respect to [residential proxy pricing](https://apify.com/proxy?pricing=residential-ip#pricing). These proxies are only available to be run within actors on the Apify platform, not externally. If you're interested in using residential proxies for this scraper, contact `support@apify.com` via email or in-app chat to get the proxies enabled.

#### Consumption units

The actor is able to scrape approximately **20,000 events for 1 CU**. However, you'll never consume the whole CU during 1 run due to Ticketmaster's max items limitation. When you scrape the maximum number of events per 1 run which is about 5000 items, it should cost about 1/4 CU.

### Number of results

Set the maximum number of scraped events using the `maxItems` input field.

> **_NOTE:_**  Ticketmaster limits searched results to 5100 with 200 items per 1 page (26 pages). If you need to scrape more events, you'll have to create multiple more specific input configurations that give you fewer search results and then combine the results together.

### Use Cases

Ticketmaster is one of the leading companies in the field of event tickets purchasing. It comes with the nice search engine which helps you find the relevant events but it's missing a few features that can simplify the search process. Mainly the filtering of multiple categories and subcategories at once and also proper location specification. The events scraper can be useful e. g. in the following situations:

- **Personal monitoring of relevant events** - handy search filters, no need to browse the [Ticketmaster.com](https://www.ticketmaster.com/) website
- **Price analysis** - compare Ticketmaster's price offers to other ticket providers
- **Ticket availability monitoring** - set notifications to remind you the time when the relevant tickets are put up for sale
- **Events analysis by different criteria** (location, date range) - monitor which countries are missing the events of a specific category and fill this spot

### Input

Ticketmaster Scraper offers various settings for customized event searching. Some of them follow the standard [Ticketmaster.com](https://www.ticketmaster.com/) API, others are designed to extend the existing API by new features.

#### Categories

First, check all event categories you want to scrape. Input categories are mapped on the categories at [Ticketmaster.com](https://www.ticketmaster.com/). You can choose from:

- **Concert** Events
- **Sport** Events
- **Arts & Theater** Events
- **Family** Events

> **_NOTE:_**  Feel free to check multiple categories at once but keep in mind that Ticketmaster limits the maximum [number of results](#numberOfResults) it returns. So it might be a good idea to create a separate dataset for each category and only specify more subcategories. Or you could add more restrictive filter such as the exact location or date range.

#### Subcategories

The actor provides the list of subcategories for each of the main categories. These subcategories are hidden in the collapsible sections and they represent different **disciplines** of Sport events and various **genres** of Concerts, Arts & Theater and Family events. When you leave all subcategories of the scraped category unchecked, the actor scrapes everything from the given category.

> **_NOTE:_**  Always check the category you want to scrape at the top of the input. If you only check the specific subcategories (genres or sport disciplines) without checking the corresponding category, the actor won't discover the subcategories you checked.

##### Property names

Categories can contain subcategories of the same name. Sometimes they refer to the same subcategory, other time they represent different kinds of events (such as classical concerts vs classical arts and theater). To distinguish which subcategory should be scraped, use *'\_category-name'* suffix after the subcategory name (see examples in the [Input Schema](https://apify.com/lhotanok/ticketmaster-scraper/input-schema), e. g. `classical_concerts` vs `classical_arts-theater`). You can use property names without *'\_category-name'* suffix as well but they will be matched with all categories that include this subcategory. So if you check `concerts` and `arts-theater` categories for scraping and then specify `classical` as `true`, both classical concerts and theaters will be scraped. Whereas if you wanted to scrape only classical concerts and all theaters, you would have to set `classical_concerts` property to achieve this behavior.

#### Location

Specify a desired `country` in the form of [ISO Alpha-2 Country Code](https://www.iban.com/country-codes) or an exact geographical point by filling the `geohash` value. Depending on your needs, you can use both of these fields or just one of them. Last but not least, set the `distance` radius in mile units.

#### Date

No date restrictions are set by default so all dates are scraped. If you wish to put some date restrictions, check `This Weekend` field or specify the date range. While setting the date range, you don't have to fill both `From` and `To` fields. If it suits you, fill one of them only. Inside the date section, `TBA` and `TBD` events filter is also handled. By choosing the appropriate value, you can exclude the events whose date is to be announced (TBA) or to be defined (TBD). Or you can go the other way round and include TBA and TBD events only.

#### Other

Apart from the previously mentioned fields, Ticketmaster Scraper also provides `Max Items` settings to limit the size of the result dataset. And to keep dataset processing simplified, it's able to sort the items by their date, relevance, distance or name.

#### Examples

**Scrape all concerts**

```json
{
    "concerts": true,
    "countryCode": "US",
    "geoHash": "dr5regw3pg6ft"
}
```

**Scrape specific concerts**

```json
{
    "concerts": true,
    "rock": true,
    "metal": true,
    "pop": true,
    "countryCode": "US"
}
```

**Scrape multiple categories with specific subcategories**

```json
{
    "concerts": true,
    "arts-theater": true,
    "rock": true,
    "metal": true,
    "pop": true,
    "comedy": true,
    "opera": true,
    "classical_arts-theater": true,
    "geoHash": "dr5regw3pg6ft"
}
```

### Output

The actor stores all scraped events in a dataset where each event is a separate item in the dataset. You can get the following information for each event:

- **id**
- **url**
- **name**
- **description**
- **segment name** (category)
- **genre name**
- **date** (title, subtitle)
- **location** (address, postal code, place url)
- **offer** (url, start date for ticket purchase, price)
- **performers** (list of performers with their name and url)

#### Example dataset event item

```json
{
  "id": "vvG1YZpdLJK6fm",
  "url": "https://www.ticketmaster.com/mickey-gilley-and-johnny-lee-thackerville-oklahoma-10-25-2020/event/0C005837E64C752E",
  "name": "Mickey Gilley and Johnny Lee",
  "description": "Mickey Gilley and Johnny Lee | Sun 10/25 @ 3:00pm | Global Event Center at WinStar World Casino and Resort, Thackerville, OK",
  "segmentName": "Music",
  "genreName": "Country",
  "dateTitle": "Oct 25",
  "dateSubTitle": "Sun 3:00pm",
  "streetAddress": "777 Casino Avenue",
  "addressLocality": "Thackerville",
  "addressRegion": "OK",
  "postalCode": "73459",
  "addressCountry": "US",
  "placeUrl": "https://www.ticketmaster.com/global-event-center-at-winstar-world-casino-and-resort-tickets-thackerville/venue/99186",
  "offer": {
    "offerUrl": "https://www.ticketmaster.com/mickey-gilley-and-johnny-lee-thackerville-oklahoma-10-25-2020/event/0C005837E64C752E",
    "availabilityStarts": "",
    "price": "35",
    "priceCurrency": "USD"
  },
  "performers": [
    {
      "name": "Mickey Gilley",
      "url": "https://www.ticketmaster.com/mickey-gilley-tickets/artist/732778"
    },
    {
      "name": "Johnny Lee",
      "url": "https://www.ticketmaster.com/johnny-lee-tickets/artist/732830"
    }
  ]
}
```

# Actor input Schema

## `concerts` (type: `boolean`):

Specifies whether concert events category should be scraped.

## `sports` (type: `boolean`):

Specifies whether sport events category should be scraped.

## `arts-theater` (type: `boolean`):

Specifies whether arts and theater events category should be scraped.

## `family` (type: `boolean`):

Specifies whether family events category should be scraped.

## `sortBy` (type: `string`):

Choose sort order for scraped events.

## `maxItems` (type: `integer`):

Choose maximum number of items you want to scrape and save to the result dataset.

## `alternative` (type: `boolean`):

Alternative concerts events

## `ballads-and-romantic` (type: `boolean`):

Ballads/Romantic concerts events

## `blues` (type: `boolean`):

Blues concerts events

## `chanson-francaise` (type: `boolean`):

Chanson Francaise concerts events

## `childrens-music_concerts` (type: `boolean`):

Children's Music concerts events

## `classical_concerts` (type: `boolean`):

Classical concerts events

## `country` (type: `boolean`):

Country concerts events

## `dance-and-electronic` (type: `boolean`):

Dance/Electronic concerts events

## `folk` (type: `boolean`):

Folk concerts events

## `hip-hop-and-rap` (type: `boolean`):

Hip-Hop/Rap concerts events

## `holiday` (type: `boolean`):

Holiday concerts events

## `jazz` (type: `boolean`):

Jazz concerts events

## `latin` (type: `boolean`):

Latin concerts events

## `medieval-and-renaissance` (type: `boolean`):

Medieval/Renaissance concerts events

## `metal` (type: `boolean`):

Metal concerts events

## `new-age` (type: `boolean`):

New Age concerts events

## `other` (type: `boolean`):

Other concerts events

## `pop` (type: `boolean`):

Pop concerts events

## `randb` (type: `boolean`):

R\&B concerts events

## `reggae` (type: `boolean`):

Reggae concerts events

## `religious` (type: `boolean`):

Religious concerts events

## `rock` (type: `boolean`):

Rock concerts events

## `world` (type: `boolean`):

World concerts events

## `aquatics` (type: `boolean`):

Aquatics sports events

## `athletic-races` (type: `boolean`):

Athletic Races sports events

## `badminton` (type: `boolean`):

Badminton sports events

## `bandy` (type: `boolean`):

Bandy sports events

## `baseball` (type: `boolean`):

Baseball sports events

## `basketball` (type: `boolean`):

Basketball sports events

## `biathlon` (type: `boolean`):

Biathlon sports events

## `body-building` (type: `boolean`):

Body Building sports events

## `boxing` (type: `boolean`):

Boxing sports events

## `cricket` (type: `boolean`):

Cricket sports events

## `curling` (type: `boolean`):

Curling sports events

## `cycling` (type: `boolean`):

Cycling sports events

## `equestrian` (type: `boolean`):

Equestrian sports events

## `esports` (type: `boolean`):

eSports sports events

## `extreme` (type: `boolean`):

Extreme sports events

## `field-hockey` (type: `boolean`):

Field Hockey sports events

## `fitness` (type: `boolean`):

Fitness sports events

## `floorball` (type: `boolean`):

Floorball sports events

## `football` (type: `boolean`):

Football sports events

## `golf` (type: `boolean`):

Golf sports events

## `gymnastics` (type: `boolean`):

Gymnastics sports events

## `handball` (type: `boolean`):

Handball sports events

## `hockey` (type: `boolean`):

Hockey sports events

## `ice-skating` (type: `boolean`):

Ice Skating sports events

## `indoor-soccer` (type: `boolean`):

Indoor Soccer sports events

## `lacrosse` (type: `boolean`):

Lacrosse sports events

## `martial-arts` (type: `boolean`):

Martial Arts sports events

## `miscellaneous_sports` (type: `boolean`):

Miscellaneous sports events

## `motorsports-and-racing` (type: `boolean`):

Motorsports/Racing sports events

## `netball` (type: `boolean`):

Netball sports events

## `rodeo_sports` (type: `boolean`):

Rodeo sports events

## `roller-derby` (type: `boolean`):

Roller Derby sports events

## `roller-hockey` (type: `boolean`):

Roller Hockey sports events

## `rugby` (type: `boolean`):

Rugby sports events

## `ski-jumping` (type: `boolean`):

Ski Jumping sports events

## `skiing` (type: `boolean`):

Skiing sports events

## `soccer` (type: `boolean`):

Soccer sports events

## `softball` (type: `boolean`):

Softball sports events

## `squash` (type: `boolean`):

Squash sports events

## `surfing` (type: `boolean`):

Surfing sports events

## `swimming` (type: `boolean`):

Swimming sports events

## `table-tennis` (type: `boolean`):

Table Tennis sports events

## `tennis` (type: `boolean`):

Tennis sports events

## `toros` (type: `boolean`):

Toros sports events

## `track-and-field` (type: `boolean`):

Track & Field sports events

## `volleyball` (type: `boolean`):

Volleyball sports events

## `waterpolo` (type: `boolean`):

Waterpolo sports events

## `wrestling` (type: `boolean`):

Wrestling sports events

## `childrens-theatre` (type: `boolean`):

Children's Theatre arts-theater events

## `circus-and-specialty-acts_arts-theater` (type: `boolean`):

Circus & Specialty Acts arts-theater events

## `classical_arts-theater` (type: `boolean`):

Classical arts-theater events

## `comedy` (type: `boolean`):

Comedy arts-theater events

## `cultural` (type: `boolean`):

Cultural arts-theater events

## `dance` (type: `boolean`):

Dance arts-theater events

## `espectaculo` (type: `boolean`):

Espectaculo arts-theater events

## `fashion` (type: `boolean`):

Fashion arts-theater events

## `fine-art` (type: `boolean`):

Fine Art arts-theater events

## `magic-and-illusion_arts-theater` (type: `boolean`):

Magic & Illusion arts-theater events

## `miscellaneous_arts-theater` (type: `boolean`):

Miscellaneous arts-theater events

## `miscellaneous-theatre` (type: `boolean`):

Miscellaneous Theatre arts-theater events

## `multimedia` (type: `boolean`):

Multimedia arts-theater events

## `music` (type: `boolean`):

Music arts-theater events

## `opera` (type: `boolean`):

Opera arts-theater events

## `performance-art` (type: `boolean`):

Performance Art arts-theater events

## `puppetry_arts-theater` (type: `boolean`):

Puppetry arts-theater events

## `spectacular` (type: `boolean`):

Spectacular arts-theater events

## `theatre` (type: `boolean`):

Theatre arts-theater events

## `variety` (type: `boolean`):

Variety arts-theater events

## `puppetry_family` (type: `boolean`):

Puppetry family events

## `ice-shows` (type: `boolean`):

Ice Shows family events

## `magic-and-illusion_family` (type: `boolean`):

Magic/Illusion family events

## `circus-and-specialty-acts_family` (type: `boolean`):

Circus/Specialty Acts family events

## `childrens-theater` (type: `boolean`):

Children's Theater family events

## `rodeo_family` (type: `boolean`):

Rodeo family events

## `fairs-and-festivals` (type: `boolean`):

Fairs/Festivals family events

## `latin-childrens` (type: `boolean`):

Latin Children's family events

## `childrens-music_family` (type: `boolean`):

Children's Music family events

## `miscellaneous-and-family` (type: `boolean`):

Miscellaneous/Family family events

## `film-and-family` (type: `boolean`):

Film/Family family events

## `countryCode` (type: `string`):

Enter ISO Alpha-2 Country Code or leave blank and specify geoHash only.

## `geoHash` (type: `string`):

Add geoHash or leave blank if you don't want to specify the exact geographical point. You can look up the geoHash of your city or use various tools for conversion of longitude and latitude into geoHash (such as the one at this link: http://geohash.co). Use geoHash precision of at least 4 characters.

## `distance` (type: `integer`):

Distance radius from the given event location

## `thisWeekendDate` (type: `boolean`):

Filter only those events that take place during this weekend.

## `dateFrom` (type: `string`):

Filter only those events that take place from this date. Valid format is: YYYY-MM-DD.

## `dateTo` (type: `string`):

Filter only those events that take place before this date. Valid format is: YYYY-MM-DD.

## `includeTBA` (type: `string`):

Represents events with date to be anounced.

## `includeTBD` (type: `string`):

Represents events with date to be defined.

## Actor input object example

```json
{
  "concerts": true,
  "sortBy": "date",
  "maxItems": 200,
  "countryCode": "US",
  "geoHash": "dr5regw3pg6ft",
  "distance": 100,
  "includeTBA": "yes",
  "includeTBD": "yes"
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 200,
    "countryCode": "US",
    "geoHash": "dr5regw3pg6ft"
};

// Run the Actor and wait for it to finish
const run = await client.actor("lhotanova/ticketmaster-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxItems": 200,
    "countryCode": "US",
    "geoHash": "dr5regw3pg6ft",
}

# Run the Actor and wait for it to finish
run = client.actor("lhotanova/ticketmaster-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 200,
  "countryCode": "US",
  "geoHash": "dr5regw3pg6ft"
}' |
apify call lhotanova/ticketmaster-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lhotanova/ticketmaster-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/yEheXHKxKqqMerlLB/builds/1lAnFHqRMj9VWAgeF/openapi.json
