Viagogo Scraper - Events, Venues, Availability & Monitoring avatar

Viagogo Scraper - Events, Venues, Availability & Monitoring

Pricing

from $1.80 / 1,000 event records

Go to Apify Store
Viagogo Scraper - Events, Venues, Availability & Monitoring

Viagogo Scraper - Events, Venues, Availability & Monitoring

Scrape Viagogo events by artist, production, venue, city, category, or URL. Extract event names, dates, venues, locations, availability, and links. Track NEW, UPDATED, REAPPEARED, and EXPIRED events with incremental runs, resume, and MCP export.

Pricing

from $1.80 / 1,000 event records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

5

Total users

3

Monthly active users

2 days ago

Last modified

Categories

Share

Viagogo Scraper: Live Event Listings & Availability Monitoring

Viagogo Scraper turns Viagogo (viagogo.com), the global event ticket marketplace, into a clean event data feed, reading directly from the same service the site's own search page reads. Search any artist, production, venue, city or category and get the live events behind it: names, dates, times, venues, cities, countries, availability and canonical links, across tens of thousands of events in 70+ countries. Paste links instead of keywords, monitor events across runs (NEW, UPDATED, REAPPEARED, EXPIRED), resume an interrupted pull, and export to JSON, CSV or Excel, or read the results through the API.

Why This Scraper?

  • Real source-service data. Each search term returns the source's own served window of up to 20 events, with venue, city, country, date and time in one record, plus a curated raw snapshot so nothing upstream is dropped.
  • Keyword search across the whole catalogue. Artists, productions, venues, cities and categories all work as search terms.
  • Link mode. Paste production, venue, category, city or search links and the actor turns each into its search term and reads it the same way. Single-event links (/E-<id>) name no search term and are reported as skipped, never silently dropped.
  • Availability monitoring. Scheduled runs classify every event as NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED, with per-campaign state you can name or share.
  • Global coverage. Tens of thousands of events across 70+ countries.
  • MCP connector export. Send results into Notion and other connectors without changing the dataset.
  • Structured failures. A blocked or broken run fails loudly with a clear message instead of returning an empty dataset.

Use Cases

  • Ticket resale market research: track availability, event counts and listing status across artists, venues or cities to spot demand trends.
  • Event discovery integrations: feed a search or alerting app with live event names, dates, venues and links for the acts your users follow.
  • Fan and reseller alerting: schedule recurring runs with incremental mode to get notified only when events go on sale, change or sell out.
  • Venue and category monitoring: watch a venue, city or category page's event lineup over time without rechecking it by hand.

Data You Get

Sample shape: values are illustrative placeholders, not from a live listing.

FieldExample
kind"event" (also "match")
recordId"event-500001"
eventId"500001"
title"Sample Artist Live"
urlcanonical Viagogo link to the event
dayOfWeek"Sat"
formattedDate / formattedTime"Nov 07 2026" / "7:30 PM"
formattedDateWithDayOfWeek"Sat, Nov 07 2026"
startDateTimeUtc"2026-11-08T00:30:00+00:00"
isDateConfirmed / isTimeConfirmedtrue / true
isTbd / isMultidayEvent / isParkingEventfalse / false / false
venueTimeZoneOffsetHours-5.0
eventState / availabilityState1 / 1
hasListings / allowPublicPurchasetrue / true
isUnderHundredfalse
venueId / venueName90001 / "Sample Arena"
venueCity / venueLocation"Sample City" / "Sample City, ST, USA"
countryCode / countryName"US" / "United States"
searchKeyword"Sample Artist"
rawcurated upstream snapshot (session tokens and UI copy stripped)
changeType / changedFields"NEW" / [] (incremental mode)
firstSeenAt / lastSeenAtISO timestamps (incremental mode)

With Also return production and venue matches on, you also get the search page's top production, venue and category hits: kind=match records carrying objectId, title, subtitle, url, entityType, rank and imageUrl.

Ticket seat-level listings (sections, rows, seat prices) live behind the source's own protected event pages and are NOT part of this dataset; the actor reads the open search lane only, which carries no pricing fields.

How to Use

  1. Pick a mode: search (keywords) or url (links).
  2. Add your search terms (an artist, production, venue, city or category), or paste links.
  3. Turn on Also return production and venue matches if you also want those rows, and set Max items to control run size and cost.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Search for an artist:

{
"mode": "search",
"queries": ["Sample Artist"],
"maxItems": 20
}

A wide act split across narrower terms:

{
"mode": "search",
"queries": ["Sample Artist Atlanta", "Sample Artist Chicago", "Sample Artist Boston"],
"maxItems": 60
}

Paste a link (production, venue, category, city or search):

{
"mode": "url",
"urlInputs": [
"https://www.viagogo.com/Concert-Tickets/Sample-Category/Sample-Artist-Tickets"
],
"maxItems": 0
}

Recurring monitoring with expiry detection:

{
"mode": "search",
"queries": ["Sample Artist"],
"incrementalMode": true,
"stateKey": "sample-artist-daily",
"emitExpired": true
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/viagogo-events-scraper").call(run_input={"mode": "search", "queries": ["Sample Artist"], "maxItems": 20})
for event in client.dataset(run["defaultDatasetId"]).iterate_items():
print(event["title"], event["venueName"], event["formattedDate"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/viagogo-events-scraper').call({ mode: 'search', queries: ['Sample Artist'], maxItems: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Coverage and Max items

One search term or link returns the source's own served window of up to 20 events, best matches first, and the source ignores every page parameter, so there is no page-by-page walk to extend a single term. With several terms or links, Max items is shared proportionally across them so a multi-term run stays balanced. Cover a wide act or a big city with several narrower terms (add a city, a venue or a tour name) rather than raising Max items on one term.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips events already collected there, so you don't pay twice for them in that same pull.

    Known gap: Resume does not combine cleanly with Incremental mode. An interrupted incremental run saves no baseline, and the resumed run skips the events the interrupted run already collected without adding them to the baseline it saves. So on the very next run (without Resume) those events are classified again (NEW, or UPDATED if they had changed) and billed a second time. Resuming therefore saves nothing on an incremental campaign: rerun an interrupted incremental run without Resume instead, which re-collects those events once and leaves a complete baseline. A different stateKey for the resumed run does not help, because the scheduled campaign's own baseline still never records those events.

  • Incremental mode (incrementalMode) is for scheduled runs over the same scope. Each event is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), REAPPEARED, or EXPIRED (only after a run that read every term or link, was not stopped by the run-wide Max items total, was not resumed, and had no unreadable link). stateKey names or shares the stored state.

    Known gap: when Emit expired records is on, the actor pushes the whole batch of events that dropped out of your tracked baseline in one commit after a complete scan, and that batch is not limited by Max items (only the NEW, UPDATED, REAPPEARED and, if enabled, UNCHANGED rows collected during the scan are). If you track a large baseline and most of it is no longer found, a run with Max items set and Emit expired on can return, and bill, well over Max items. Size Max items with your tracked baseline in mind when Emit expired is on, not just your usual NEW/UPDATED volume.

    Known gap: with several terms or links, each one gets only its share of Max items (Max items divided by the number of terms). When one term's share stops it early but the run as a whole stays under Max items (for example another term had few changes, or Max items does not divide evenly), the run is not treated as capped. With Emit expired on, the tracked events of that term that sat after the cut are then marked EXPIRED and billed even though they are still listed, and come back as REAPPEARED (billed again) on the next run. For multi-term monitoring with Emit expired on, set Max items to 0 (no limit) so no term is cut short.

Send results into your apps (MCP connectors)

Optionally pipe results into the apps you already use through Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape, and it never changes the dataset.

  1. Authorize a connector once under Apify, Settings, API and Integrations (Notion, Linear, Airtable or Apify).
  2. Select it in the mcpConnectors field. If the picker is empty, you have not authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to the URL or id of the page under which item pages are created.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch (keyword search) or url (links).
queriesarray["Coldplay"]Search mode: one entry per term (artist, production, venue, city or category text).
urlInputsarrayone example linkLink mode: production, venue, category, city or search links. Single-event links (/E-<id>) are reported as skipped.
urlsarray(none)Alias for urlInputs, accepted under the name other Apify actors use for URL mode.
maxItemsinteger20Stop after this many records (0 = no limit). Shared proportionally across search terms or links.
includeMatchesbooleanfalseAlso emit the search page's top production, venue and category matches, marked kind=match.
resumeFromRunIdstring(none)Continue one interrupted run, skipping records already collected there.
incrementalModebooleanfalseRecurring monitoring with change detection.
stateKeystring(none)Name or share an incremental-mode monitoring campaign.
emitUnchangedbooleanfalseAlso return (and bill) UNCHANGED records.
emitExpiredbooleanfalseAlso return (and bill) EXPIRED records after a complete scan.
mcpConnectorsarray(none)Optional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which records are created.
maxNotifyListingsinteger50Cap on items written to each connector per run.
proxyConfigurationobjectApify ProxyConnection settings.

Output Example

Sample shape: values are illustrative placeholders, not from a live listing.

{
"kind": "event",
"recordId": "event-500001",
"eventId": "500001",
"url": "https://www.viagogo.com/Concert-Tickets/Sample-Category/Sample-Artist-Tickets/E-500001",
"title": "Sample Artist Live",
"dayOfWeek": "Sat",
"formattedDate": "Nov 07 2026",
"formattedTime": "7:30 PM",
"formattedDateWithDayOfWeek": "Sat, Nov 07 2026",
"startDateTimeUtc": "2026-11-08T00:30:00+00:00",
"isDateConfirmed": true,
"isTimeConfirmed": true,
"isTbd": false,
"isMultidayEvent": false,
"isParkingEvent": false,
"venueTimeZoneOffsetHours": -5.0,
"eventState": 1,
"availabilityState": 1,
"hasListings": true,
"allowPublicPurchase": true,
"isUnderHundred": false,
"venueId": 90001,
"venueName": "Sample Arena",
"venueCity": "Sample City",
"venueLocation": "Sample City, ST, USA",
"countryCode": "US",
"countryName": "United States",
"searchKeyword": "Sample Artist",
"raw": { "note": "curated upstream event object, session tokens and UI copy stripped" },
"changeType": "NEW",
"changedFields": [],
"firstSeenAt": "2026-01-01T00:00:00+00:00",
"lastSeenAt": "2026-01-01T00:00:00+00:00"
}

Plan Requirement

The actor uses Apify Proxy with automatic exit rotation, and switches on its own to a residential connection pool and then to a pooled alternate connection when the default pool is refused; run it on any plan that includes proxy access. Viagogo is a public ticket marketplace: the actor reads the same search service the site's own browser reads. Automated reading may sit outside the source's terms of use, so keep volumes reasonable and respect the source's terms.

FAQ

How much does it cost?

You pay per event record returned. The Pricing tab shows the current rates. Use Max items to cap the cost of any run.

This actor collects only publicly available event listing data from Viagogo's own search service. You are responsible for how you use it: follow Viagogo's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution.

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 and REAPPEARED events (plus EXPIRED ones if you turn on Emit expired), and unchanged ones are not billed unless you turn on Emit unchanged.

Why did a wide search term return fewer events than I expected?

The source serves one window of up to 20 events per search term or link and ignores page parameters, so there is no page-by-page walk to extend a single term's results. Split a wide act or a big city across several narrower terms (add a city, a venue or a tour name) instead of raising Max items on one term.

Why did a monitoring run with Max items set return far more rows than Max items?

Emit expired records pushes the whole batch of events that dropped out of your tracked baseline in one commit after a complete scan, and that batch is not limited by Max items (only the rows collected during the scan are). If you track a large baseline and most of it is no longer found, a run with Emit expired on can return, and bill, well over Max items. Set Max items with your baseline size in mind when Emit expired is on. With several terms, also set Max items to 0: a term cut short by its share of Max items can otherwise have still-listed events marked EXPIRED (see the Resume and recurring updates tips).

Why did my run fail instead of returning an empty dataset?

If the search service refuses every request on every available connection, including the automatic residential backup and the pooled alternate connection, the run stops with a clear message so "no events for this term" is never confused with "nothing could be read". Run it again in a few minutes. This site cannot be read without proxy access, so a paid Apify plan is required: if your plan does not include proxy access, the run stops within seconds and says so. If only some terms or links could be read, you still get what was found from the others. Runs that bring their own proxy connections keep exactly the connection they configured.

Can I get seat-level prices and sections?

No. Section, row and seat-level pricing lives behind the source's own protected event pages, which this actor does not read; it reads the open search results only, which carry no pricing fields.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

๐Ÿ”— More scrapers you might like

Pair this actor with these related scrapers from the same team:

๐Ÿงฉ Songkick Scraper
Scrape Songkick concert and event calendars: upcoming and past dates, venues, cities...
๐Ÿงฉ Ticketmaster Scraper
Discover and scrape Ticketmaster events across the US, UK, Australia and Canada. Search...
โšฝ Eventim Scraper
Scrape CTS Eventim Germany and EU event catalogue: concerts, festivals, comedy, sports...
๐Ÿ›’ SeatGeek Scraper
Scrape SeatGeek events with ticket price ranges (lowest, highest, average, median)...
โœˆ๏ธ Pollstar Scraper
Scrape Pollstar upcoming concerts and tour dates: play date, venue with full address and...
๐Ÿงฉ Bandsintown Scraper
Scrape Bandsintown concert and festival dates: artist tour calendars, venue profiles...

๐Ÿ‘‰ Browse all abotapi scrapers

๐Ÿ’ฌ 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.