Viagogo Resale Prices by Zone
Under maintenancePricing
Pay per usage
Viagogo Resale Prices by Zone
Under maintenanceLowest resale price per seating zone for any viagogo event page.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
clarily
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Viagogo Resale Prices & Market Depth
Most viagogo scrapers give you a "from €X" headline. This one gives you the state of the resale market: how long each listing has been sitting unsold, the full price distribution, the price buyers actually pay once fees are added, and demand signals — per seating zone.
All of it comes from a single page load. No extra requests, no extra cost.
What you get
{"url": "https://www.viagogo.fr/Concert-Billets/Pop-Rock/Katseye-Billets/E-161141960","eventId": "161141960","scrapedAt": "2026-08-14T09:14:22.481Z","price": 153,"currency": "EUR","listings": 63,"availableTickets": 403,"daysToEvent": 26,"viewsLastHour": 51,"venue": { "name": "Accor Arena", "city": "Paris", "countryCode": "FR" },"histogram": [{ "startPrice": 153, "endPrice": 238.5, "count": 4 },{ "startPrice": 239.5,"endPrice": 325, "count": 8 },{ "startPrice": 326, "endPrice": 411.5, "count": 13 },{ "startPrice": 412.5,"endPrice": 498, "count": 3 }],"cheapestListings": [{ "section": "Placement Libre", "row": null, "price": 260, "totalPrice": 520,"faceValue": 89.5, "quantity": 2, "activeSince": "il y a 13 heures" },{ "section": "Lower Tier N", "row": "8", "price": 549, "totalPrice": 1098,"faceValue": 140, "quantity": 8, "activeSince": "il y a 9 jours" },{ "section": "Lower Tier U", "row": "9", "price": 645, "totalPrice": 1290,"faceValue": 111, "quantity": 2, "activeSince": "il y a 54 jours" }],"zones": [{ "ticketClassId": 265, "label": "Gradins inférieurs", "price": 162, "faceValue": 100,"listings": 16, "isSoldOut": false, "isSellingFast": false, "isSellingOutSoon": false },{ "ticketClassId": 267, "label": "Gradin Supérieur", "price": 153, "faceValue": 80,"listings": 9, "isSoldOut": false, "isSellingFast": false, "isSellingOutSoon": false },{ "ticketClassId": 24628,"label": "Cat Or", "price": 767, "faceValue": 139,"listings": 1, "isSoldOut": false, "isSellingFast": false, "isSellingOutSoon": false }]}
Why this beats a headline price
activeSince tells you what is actually moving. A €645 seat listed for 54 days is not a market price — it is a seller's wish. A €260 seat posted 13 hours ago is. This is the field to come here for: no other ticket dataset publishes how long a listing has been sitting unsold, and the usual workaround is to diff listing IDs across two runs and rebuild the history yourself.
totalPrice is what the buyer actually pays. A €260 listing bills at €520 once fees are applied. Comparing marketplaces on displayed price means comparing the wrong number.
histogram gives you depth, not a floor. Knowing the cheapest ticket is €153 tells you nothing about whether you can buy three of them. The distribution tells you how many listings sit under any threshold you care about.
faceValue per listing and per zone makes the markup computable directly: here the floor resells at 2.9× its face value while a Cat Or seat sits at 5.5×.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
startUrls | array | — | Viagogo event page URLs, containing E-<id>. Search and performer pages are rejected. |
includeZones | boolean | true | Adds the per-zone price breakdown. Costs one page load per zone. |
maxZones | integer | 12 | Caps zones priced per event. |
currency | string | EUR | Currency for every price in the output. |
proxyConfiguration | object | none | Optional. Direct connection by default. |
Turning includeZones off still returns the histogram, the cheapest listings, the demand signals and the zone list with its sold-out flags — everything except the per-zone floor prices.
currency matters more than it looks. Viagogo converts prices to the currency of whichever IP asks, so the same event returns €153 from France and $175 from a US datacenter. This Actor pins the currency instead, which is what makes two runs comparable regardless of where they execute. Set it to the currency you report in — USD for US inventory, GBP for UK.
Use it for
- Pricing decisions — where to list, based on how many listings sit below your price
- Fee-aware comparison — the only field set that exposes the real checkout price
- Liquidity screening — listing age separates a moving market from a stagnant one
- Markup and demand analysis — resale versus face value, views per hour, days to event
What you pay for
Two billed events, so you only pay for the work you ask for:
| Billed event | When | What it costs to produce |
|---|---|---|
event-scraped | once per event URL | one page load — the snapshot, histogram, listings and signals |
zone-priced | once per zone actually priced | one extra page load each |
Zones are billed separately because they are five times the work: a six-zone arena means seven page loads instead of one. Zones that come back empty — no inventory, or a lookup that failed — are not billed. Run with includeZones off and you pay the base rate only.
Tips
Batch your events into one run. The browser stays warm between events, so its cache is reused: the first page of a run transfers ~3.2 MB, every page after that ~330 KB. A hundred URLs in one run costs roughly a tenth of a hundred single-URL runs.
Zone prices are the only expensive part. They need one page load per zone — about 27 seconds for a six-zone arena. Everything else is one page load, full stop.
Limitations
- Works on any viagogo national domain —
viagogo.fr,viagogo.com,viagogo.de,viagogo.co.uk— and on events anywhere in the world, not only European ones. cheapestListingscovers the ten listings viagogo renders on the page;listingsand the histogram cover the full inventory.activeSinceis returned as viagogo phrases it ("il y a 9 jours"), not as a timestamp.faceValueis reported only when published in the same currency as the resale price — otherwisenull, since a face value in another currency is not comparable. Expect nulls when pricing US inventory in euros, and setcurrencyaccordingly.- Zones with no listings at all are returned with a
nullprice rather than omitted. - If a page has no listings, the record carries an
errorfield and the run continues.