# Viagogo Live Event Inventory (`soldout/viagogo-live-inventory`) Actor

Every viagogo event with tickets actually on sale, swept venue by venue across whole markets.

- **URL**: https://apify.com/soldout/viagogo-live-inventory.md
- **Developed by:** [Soldout](https://apify.com/soldout) (community)
- **Categories:** E-commerce, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 event on sales

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Viagogo Live Event Inventory

Every viagogo scraper starts from a list of event URLs you already have. This one **produces the list**: give it markets, it walks every venue in them and returns the events that have tickets on sale right now.

No browser, no rendering, no headless detection games — one JSON request per venue, about 26 KB each.

### What you get

One record per event, pushed as viagogo returns it:

```json
{
  "eventId": "161357013",
  "name": "Muse",
  "url": "https://www.viagogo.fr/Billets-de-concert/Alternatif/Muse-Billets/E-161357013",
  "startsAtLocal": "2026-11-27T19:00:00.0000000Z",
  "dayOfWeek": "ven.",
  "venueId": "28086",
  "venueName": "Plenitude Arena (formerly Paris La Defense Arena)",
  "venueUrl": "https://www.viagogo.fr/Paris/Plenitude-Arena-(formerly-Paris-La-Defense-Arena)-Billets/_V-28086",
  "market": "Paris",
  "cityLabel": "NANTERRE, Ile-de-France",
  "city": "NANTERRE",
  "categoryId": 4211,
  "imageUrl": "https://media.stubhubstatic.com/stubhub-v2-catalog/.../categories/4211/6583897",
  "scrapedAt": "2026-08-14T09:41:07.220Z"
}
```

Measured on 2026-08-14: the 14 default French markets hold **1 045 venues** and about **1 900 events on sale**. Paris alone — 572 venues — returned 789 events in 53 seconds at the default concurrency, with 2 venues failing.

### Why this is the interesting half of viagogo data

**Every record has real supply behind it.** The filtering is viagogo's own, not ours: the endpoint this Actor reads is the one the venue page uses for its "tickets available" list, and it only returns upcoming events with live listings. Nothing here is a dead event page kept alive for SEO.

**The absences are the signal.** Viagogo's public sitemap lists every event page it has, on sale or not. Diff this Actor's output against that sitemap and you get the complement: the events with no supply left. Diff two runs a day apart and you get today's new listings on one side, and everything that sold out or was delisted on the other. Neither is available anywhere as a field — it only exists as a difference, and this dataset is the side that is hard to obtain.

**It is a census, not a sample.** You do not need to know an event exists to find it. Ask for `Lyon` and you get the LDLC Arena stadium show and the 40-seat comedy club in the same pass.

**It is cheap enough to run often.** Pure HTTP, ~300 ms and ~26 KB per venue — 240 venues in 13 seconds. The venue list is cached for six hours in a named key-value store that survives between runs, so repeat runs skip the 58 MB of sitemap XML entirely. Freshness is a scheduling decision, not a budget decision.

Pair it with **Viagogo Resale Prices & Market Depth** to price what you find here: this Actor answers *what is on sale*, that one answers *at what price and how deep*.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `markets` | array | 14 French markets | Viagogo market names, exactly as they appear in a venue URL's first path segment. |
| `maxVenues` | integer | all | Stops the sweep after N venues. Use it to bound a trial run. |
| `concurrency` | integer | `4` | Venues queried in parallel. |
| `proxyConfiguration` | object | Apify datacenter | Rotates the exit IP. Residential is supported but unnecessary here. |

A **market** is viagogo's own bucket, not administrative geography: sometimes a country (`Autriche`), sometimes a US state (`Texas`), most often a city (`Paris`, `Sao-Paulo`). There is no `France` market — the default list is the 14 markets whose venues are actually in France, verified against each venue's own city field, which is what keeps `Valence` (Valencia, Spain), `Fribourg` (Freiburg, Germany) and `Genève` out. Add `Monaco` if you want Monte-Carlo. Any market in the world works: put `Berlin` in and you get Berlin.

**Market names are French**, because the source is viagogo's French sitemap: it is `Londres`, not `London`, and `Edimbourg`, not `Edinburgh`. The **United Kingdom** is covered by 15 markets holding **2 604 venues**, measured on 2026-09-08:

```json
["Londres", "Manchester", "Glasgow", "Liverpool", "Birmingham", "Leeds", "Edimbourg",
 "Nottingham", "Bristol", "Newcastle", "Brighton", "Sheffield", "Belfast", "Cardiff",
 "Southampton"]
```

Londres alone is 1 183 venues. The venue endpoint is not geolocated — the same London venues return the same events from a French exit IP as from a British one — so sweeping the UK needs no UK proxy and costs no more than sweeping France.

### What you pay for

One charge per event returned, `event-listed`. Venues holding no tickets on sale are swept but never billed, and a run blocked before it returns anything costs you nothing.

Delivery stops as soon as your **max cost per run** is reached, so the dataset never holds more than you paid for.

Every run writes a `coverage` record to its key-value store — venues listed, swept, failed, and events returned — so a partial sweep is visible instead of being billed as a complete one.

### Use it for

- **Building an event universe** — the seed list every other viagogo or resale scraper needs
- **Sold-out and new-listing detection** — by diffing consecutive runs, or against the sitemap
- **Venue and city coverage analysis** — which halls actually carry secondary-market supply
- **Calendar and demand mapping** — what is on sale, where, and when

### Limitations

- **No prices.** This Actor answers availability and identity only. Prices come from the per-event Actor.
- **`startsAtLocal` ends in `Z` but is not UTC** — it is the venue's local wall-clock time, as viagogo publishes it. Treat it as a naive local timestamp; converting it as UTC will shift real events by one or two hours.
- **`dayOfWeek` is French** (`ven.`, `jeu.`), because the source is `viagogo.fr`.
- **A venue with zero events is not an error.** It means nothing at that venue currently has tickets on sale — for most of the 1 045 French venues, that is the normal state.
- **French cities with no viagogo market — Rennes, Dijon, Grenoble, Toulon, Rouen — have no venues in this sitemap at all.** Viagogo does not publish them there, so no input will surface them.
- **A venue or two fails per run**, and it is usually structural rather than throttling — a handful of venue URLs redirect in a loop on viagogo's side. Each venue is retried three times with exponential backoff, and whatever still fails is listed by URL and reason in the run log. Measured on 2026-08-14: 240 venues at concurrency 6 produced exactly one failure, and none of them was a rejection.
- **Sweeping the whole world is possible but not advisable** — viagogo's venue sitemap holds 162 063 venues across 464 markets. Name the markets you want.

# Actor input Schema

## `markets` (type: `array`):

Viagogo markets to sweep, spelled exactly as the first path segment of a venue URL: https://www.viagogo.fr/Paris/Accor-Arena-(AccorHotels-Arena)-Billets/\_V-1023 is in the market Paris. A market is sometimes a country (Autriche), sometimes a region (Texas), most often a city. The default is the 14 markets whose venues sit in France — there is no France market. Add Monaco for Monte-Carlo. Market names come from the French sitemap, so they are spelled in French: the UK is covered by Londres, Manchester, Glasgow, Liverpool, Birmingham, Leeds, Edimbourg, Nottingham, Bristol, Newcastle, Brighton, Sheffield, Belfast, Cardiff and Southampton (2 604 venues, measured 2026-09-08) — not London or Edinburgh. Same for the rest of the world: Autriche, Brésil, Suède.

## `maxVenues` (type: `integer`):

Stop after this many venues, in sitemap order. Use it to bound a trial run — the 14 default markets hold 1 045 venues. Leave empty to sweep them all.

## `concurrency` (type: `integer`):

How many venues are queried in parallel. Viagogo sits behind CloudFront, which throttles hard: measured over the 1 045 French venues, 8 in parallel got 16% of requests rejected, 3 in parallel only 2.3%. Rejected venues are retried with backoff, so pushing this up mostly buys retries, not speed. Do not go above 8.

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

Apify datacenter proxies by default: they rotate the exit IP at no per-gigabyte cost. Residential works too but is billed by traffic, and this Actor does not need it — the venue endpoint is plain JSON with no bot protection.

## Actor input object example

```json
{
  "markets": [
    "Paris",
    "Lyon",
    "Bordeaux",
    "Toulouse",
    "Lille",
    "Nantes",
    "Strasbourg",
    "Marseille",
    "Montpellier",
    "Nice",
    "Saint-Etienne",
    "Nimes",
    "Lens",
    "Amneville"
  ],
  "concurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `events` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("soldout/viagogo-live-inventory").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("soldout/viagogo-live-inventory").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 '{}' |
apify call soldout/viagogo-live-inventory --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,soldout/viagogo-live-inventory"
        }
    }
}

```

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/aydvNNTZKe0GV0n6G/builds/owjv6VaYq2re3vxub/openapi.json
