# See Tickets Scraper (`mrdoe/see-tickets-scraper`) Actor

- **URL**: https://apify.com/mrdoe/see-tickets-scraper.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 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

Scrape UK festivals, concerts, and live events from **See Tickets** - search by keyword and pull full event details including venue, dates, lineup, and ticket availability.

### What it does

This Actor turns See Tickets into structured, exportable data. Give it a search keyword and it returns every matching event with its date, venue, and headline performer. Give it a specific event URL and it returns the full picture: complete venue address, lineup, description, ticket price range, and current on-sale status.

Two operations, one Actor:

- **Search** - find events by keyword (artist, festival name, genre, city, venue). Paginates automatically up to your requested limit.
- **Get event details** - fetch the complete record for one or more specific event pages, including fields the search results don't carry (full venue address, price range, availability, lineup).

### Why use it

- Build a UK festival and live-music calendar for a site, app, or newsletter
- Track ticket availability and pricing for events you care about
- Monitor a festival's lineup announcements and venue changes over time
- Feed structured event data into a research, marketing, or aggregation pipeline

### What makes this different

See Tickets is one of the UK's largest independent ticketing platforms, with festival and concert coverage that doesn't fully overlap with the bigger arena/stadium-focused platforms. This Actor is purpose-built around that: a `search` operation tuned for keyword and genre discovery across the UK festival calendar, and a `productDetails` operation that pulls the venue, lineup, and availability fields that matter most for planning around a specific event - not just a listing snippet.

### Data returned

| Category | Fields                                                                                      |
| -------- | ------------------------------------------------------------------------------------------- |
| Event    | Name, type, status (scheduled/cancelled/postponed/rescheduled), start/end date, description |
| Venue    | Name, street address, city, region, postal code, country                                    |
| Lineup   | Performer / artist names                                                                    |
| Tickets  | Minimum/maximum price, currency, availability status                                        |
| Media    | Cover image                                                                                 |
| Metadata | Event ID, direct URL, category, breadcrumbs, scrape timestamp                               |

### How to use

1. [Sign up](https://apify.com/sign-up) for a free Apify account.
2. Open this Actor and click **Try for free** (or **Start**).
3. Choose an **Operation**:
   - **Search events** - enter a **Search keyword** (e.g. `festival`, `Glastonbury`, `comedy`) or a batch of keywords.
   - **Get event details** - enter one or more **Event URLs** copied from See Tickets or from this Actor's own search results.
4. Set **Max events per search** if you want fewer than the default 20 (search only - event details always returns one row per URL).
5. Click **Start** and export results as JSON, CSV, Excel, or via the API once the run finishes.

### Input

| Field                | Type    | Required | Default                   | Description                                                                                                                  |
| -------------------- | ------- | -------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `operation`          | string  | Yes      | `search`                  | `search` or `productDetails`.                                                                                                |
| `query`              | string  | No       | `festival`                | Search keyword, used by the `search` operation.                                                                              |
| `queries`            | array   | No       | -                         | Multiple search keywords in one run. Overrides `query` when provided.                                                        |
| `eventUrl`           | string  | No       | -                         | A single See Tickets event page URL, used by the `productDetails` operation.                                                 |
| `eventUrls`          | array   | No       | -                         | Multiple event page URLs in one run. Overrides `eventUrl` when provided.                                                     |
| `maxItems`           | integer | No       | `20`                      | Maximum events per search keyword. `0` = unlimited. Not applied to `productDetails` - every requested URL is always fetched. |
| `proxyConfiguration` | object  | Yes      | Apify Proxy (Residential) | See Tickets runs bot-detection that a Residential proxy clears far more reliably than datacenter IPs.                        |

### Output

Every dataset item shares the same shape, whichever operation produced it (`_operation` tells them apart). Fields that don't apply to a given operation, or that a specific event page doesn't publish, are returned as `null` rather than guessed.

| Field                                                                                      | Description                                                                            |
| ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- |
| `_operation`                                                                               | `"search"` or `"productDetails"`                                                       |
| `status`                                                                                   | `"success"` or `"error"` for this row                                                  |
| `errorMessage`                                                                             | Set only when `status` is `"error"`                                                    |
| `eventId`                                                                                  | See Tickets' own numeric event ID                                                      |
| `name`                                                                                     | Event name                                                                             |
| `eventType`                                                                                | Event classification (e.g. `Event`, `Festival`, `MusicEvent`)                          |
| `eventStatus`                                                                              | `scheduled`, `cancelled`, `postponed`, or `rescheduled`                                |
| `url`                                                                                      | Direct link to the event page                                                          |
| `startDate`, `endDate`                                                                     | Event date range                                                                       |
| `performers`                                                                               | Array of performer/artist names                                                        |
| `venueName`, `venueAddress`, `venueCity`, `venueRegion`, `venuePostalCode`, `venueCountry` | Venue details - street-level fields are only populated by `productDetails`             |
| `description`                                                                              | Event description (`productDetails` only)                                              |
| `image`, `images`                                                                          | Cover image URL(s)                                                                     |
| `priceMin`, `priceMax`                                                                     | Ticket price range, when published                                                     |
| `currency`                                                                                 | Currency of the price fields                                                           |
| `ticketAvailability`                                                                       | `available`, `limited`, `sold_out`, `presale`, `unavailable`, or `null` when not shown |
| `category`                                                                                 | Event category (`productDetails` only)                                                 |
| `breadcrumbs`                                                                              | Site navigation trail for the event (`productDetails` only)                            |
| `query`                                                                                    | The search keyword that returned this row (`search` only)                              |
| `source`                                                                                   | Always `"See Tickets"`                                                                 |
| `scrapedAt`                                                                                | ISO timestamp of when the item was scraped                                             |

#### Example item (search)

```json
{
    "_operation": "search",
    "status": "success",
    "errorMessage": null,
    "eventId": "3521899",
    "name": "Festival Of Food And Drink",
    "eventType": "Event",
    "eventStatus": "scheduled",
    "url": "https://www.seetickets.com/event/festival-of-food-and-drink/thoresby-park/3521899",
    "startDate": "2026-09-20",
    "endDate": "2026-09-20",
    "performers": [],
    "venueName": "Thoresby Park",
    "venueAddress": null,
    "venueCity": "Nottinghamshire",
    "venueRegion": null,
    "venuePostalCode": null,
    "venueCountry": null,
    "description": null,
    "image": null,
    "images": [],
    "priceMin": null,
    "priceMax": null,
    "currency": null,
    "ticketAvailability": null,
    "category": null,
    "breadcrumbs": null,
    "query": "festival",
    "source": "See Tickets",
    "scrapedAt": "2026-09-14T16:32:25.021Z"
}
```

#### Example item (event details)

```json
{
    "_operation": "productDetails",
    "status": "success",
    "errorMessage": null,
    "eventId": "3702243",
    "name": "Breakthrough Festival",
    "eventType": "MusicEvent",
    "eventStatus": "scheduled",
    "url": "https://www.seetickets.com/event/breakthrough-festival/future-yard/3702243",
    "startDate": "2027-06-12",
    "endDate": "2027-06-13",
    "performers": ["The Support Act"],
    "venueName": "Future Yard",
    "venueAddress": "15 Bridge St",
    "venueCity": "Birkenhead",
    "venueRegion": "Merseyside",
    "venuePostalCode": "CH41 1AR",
    "venueCountry": "GB",
    "description": "Two days of new UK bands at Future Yard.",
    "image": "https://c.ststat.net/content/entimg/tour/breakthrough.jpg",
    "images": ["https://c.ststat.net/content/entimg/tour/breakthrough.jpg"],
    "priceMin": 25,
    "priceMax": 45,
    "currency": "GBP",
    "ticketAvailability": "available",
    "category": "Breakthrough Festival",
    "breadcrumbs": ["Home", "Music", "Breakthrough Festival"],
    "query": null,
    "source": "See Tickets",
    "scrapedAt": "2026-09-14T16:40:00.000Z"
}
```

### Usage examples

**Build a festival calendar:** run `search` with `queries: ["festival", "music festival", "comedy festival"]` and a generous `maxItems`, then de-duplicate by `eventId`.

**Track one event's ticket status:** run `productDetails` on the same `eventUrl` on a schedule and watch `ticketAvailability` and `priceMin`/`priceMax` for changes.

**Enrich search results:** run `search` first, then feed the returned `url` values into a `productDetails` run to get full venue and pricing detail for the events you care about.

### Known limitations

- Search results carry venue and headline-performer information; full street address, price range, and availability come from `productDetails`.
- Not every event page publishes every field (price, full lineup, or postal address) - when See Tickets itself doesn't show a field, this Actor returns `null` rather than guessing.
- The site's bot-detection is strict enough that occasional retries happen automatically; a Residential proxy (the default) is what makes runs reliable at scale.
- Covers seetickets.com (UK/Europe). seetickets.us now redirects to a different ticketing platform under the same ownership and is out of scope for this Actor.

### FAQ

**Is this legal?** This Actor only collects publicly available event listing and event-page data. It is not affiliated with or endorsed by See Tickets. Please respect the site's Terms of Service and applicable data protection laws.

**Why does it need a residential proxy?** See Tickets runs bot-detection that blocks most non-residential traffic outright. A residential proxy (enabled by default) is required for reliable results.

**Can I search by city or venue instead of keyword?** Yes - the search keyword matches artist, festival, venue, and city names, so `"Manchester"` or `"O2 Academy"` works the same way as an artist name.

**Will every event have pricing?** No. `priceMin`/`priceMax`/`ticketAvailability` reflect exactly what the event page publishes; some events (especially free or TBA-priced ones) won't have this filled in.

### Legal

Only publicly available data is collected - no login, paywall, or access-control circumvention is used. This Actor is not affiliated with, endorsed by, or connected to See Tickets. Users are responsible for ensuring their use of the collected data complies with See Tickets' Terms of Service and applicable law.

Found a bug or have a feature request? Use the Issues tab on this Actor's Apify Store page.

# Actor input Schema

## `operation` (type: `string`):

"search" finds events matching a keyword (artist, festival, show, or venue). "productDetails" fetches full details for specific event URLs.

## `query` (type: `string`):

Artist, festival, show, or venue to search for (used when operation is "search"). Example: "festival", "Glastonbury", "comedy".

## `queries` (type: `array`):

Optional list of search keywords to run in the same operation. Overrides "Search keyword" when provided.

## `eventUrl` (type: `string`):

A single seetickets.com event page URL to fetch full details for (used when operation is "productDetails"). Copy this from the See Tickets site or from this Actor's own search results.

## `eventUrls` (type: `array`):

Many seetickets.com event page URLs in one run. Overrides "Event URL" when provided.

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

Maximum number of events to return per search keyword. Set to 0 for unlimited. Not applied to "Get event details" - every requested URL is always fetched.

## `proxyConfiguration` (type: `object`):

Proxy settings for the run. See Tickets runs bot-detection that a Residential proxy clears far more reliably than datacenter IPs, so Residential is used by default.

## Actor input object example

```json
{
  "operation": "search",
  "query": "festival",
  "queries": [],
  "eventUrl": "https://www.seetickets.com/event/festival-of-food-and-drink/thoresby-park/3521899",
  "eventUrls": [],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "operation": "search",
    "query": "festival",
    "eventUrl": "https://www.seetickets.com/event/festival-of-food-and-drink/thoresby-park/3521899",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/see-tickets-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 = {
    "operation": "search",
    "query": "festival",
    "eventUrl": "https://www.seetickets.com/event/festival-of-food-and-drink/thoresby-park/3521899",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/see-tickets-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 '{
  "operation": "search",
  "query": "festival",
  "eventUrl": "https://www.seetickets.com/event/festival-of-food-and-drink/thoresby-park/3521899",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call mrdoe/see-tickets-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdoe/see-tickets-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/BUOqBdwkeQpCK1PfB/builds/TNDyX0P5E3h8eG1WE/openapi.json
