Vivid Seats Events & Ticket Listings Scraper avatar

Vivid Seats Events & Ticket Listings Scraper

Pricing

Pay per event

Go to Apify Store
Vivid Seats Events & Ticket Listings Scraper

Vivid Seats Events & Ticket Listings Scraper

🎟️ Extract public Vivid Seats event schedules and live ticket inventory with venue details, prices, sections, rows, quantities, deal scores, perks, and snapshot timestamps.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Extract public Vivid Seats event schedules and live resale-ticket inventory into clean, typed datasets.

Use performer pages, search/category pages, event URLs, or production IDs to collect:

  • 🎟️ event names, dates, categories, and performers
  • πŸ“ venue names, addresses, coordinates, time zones, and capacities
  • πŸ“Š listing counts, ticket counts, and price summaries
  • πŸ’Ί sections, rows, available quantities, and listing IDs
  • πŸ’΅ base, all-in, and localized ticket prices
  • ⭐ deal scores, badges, perks, and delivery notes

The Actor uses an anonymous browser session to clear Vivid Seats' JavaScript challenge, then queries the public data calls used by the website. No Vivid Seats login or API key is required.

What does this Vivid Seats scraper do?

The scraper turns current Vivid Seats event and ticket inventory into structured JSON.

It supports two related workflows:

  1. Discover events attached to a performer, team, tournament, search, or category page.
  2. Snapshot the live ticket listings attached to selected production IDs.

Events and listings are saved separately, so analysts can join them by productionId without mixing different record shapes.

Who is it for?

Ticket brokers

Monitor price, quantity, section, and row changes for selected events.

Resale-pricing teams

Build time-series snapshots of minimum prices, deal scores, and inventory depth.

Event discovery products

Import upcoming dates, venues, performers, and source URLs into calendars or catalogs.

Market analysts

Compare supply and price distributions across events, venues, categories, and dates.

Data engineers

Schedule a stable extraction job and send the named datasets to a warehouse or dashboard.

Why use this Actor?

  • βœ… No Vivid Seats account or private API credential
  • βœ… Event discovery and listing extraction in one run
  • βœ… Stable normalized numeric fields instead of opaque website keys
  • βœ… Separate Events and Ticket Listings datasets
  • βœ… Direct production-ID mode for repeated snapshots
  • βœ… Optional currencies and Apify Proxy sessions
  • βœ… Configurable limits for predictable run size
  • βœ… Fail-closed validation for unsupported URLs and empty extraction

Supported Vivid Seats inputs

Use one or more of these inputs:

  • Performer URL, such as a team, artist, or tournament page
  • Event URL containing /production/<id>
  • Search or category URL that displays links to event productions
  • Numeric production ID copied from a Vivid Seats event URL

All URLs must use the vividseats.com domain.

At least one URL or production ID is required.

Quick start

  1. Open the Actor input page.
  2. Paste a Vivid Seats performer or event URL.
  3. Keep includeListings enabled for ticket-level output.
  4. Choose low event and listing limits for the first run.
  5. Select a currency.
  6. Click Start.
  7. Open the Events and Ticket Listings datasets.

Example event-discovery input:

{
"startUrls": [
{
"url": "https://www.vividseats.com/big-12-mens-basketball-tournament-tickets--sports-ncaa-basketball/performer/81"
}
],
"includeListings": false,
"maxEvents": 10,
"currency": "USD"
}

Input reference

FieldTypeDefaultDescription
startUrlsarraysample performerVivid Seats performer, search/category, or production URLs
productionIdsarray[]Direct production IDs for inventory snapshots
includeListingsbooleantrueSave listing-level ticket records
maxEventsinteger10Maximum event records across inputs
maxListingsPerEventinteger20Maximum ticket listings for each event
currencystringUSDUSD, CAD, EUR, GBP, or AUD
navigationTimeoutSecsinteger45Browser navigation timeout
proxyConfigurationobjectnoneOptional Apify Proxy settings

Keep limits low when validating a new target or proxy configuration.

Output datasets

The Actor declares two named datasets.

Events

One row per Vivid Seats production.

Ticket Listings

One row per current ticket listing.

This design makes CSV exports and database imports easier than a mixed dataset with a recordType discriminator.

Both datasets can be joined with productionId.

Event data fields

FieldMeaning
productionIdStable Vivid Seats event/production ID
nameEvent name
localDateEvent date in venue time zone
utcDateEvent date in UTC
categoryMain event category
subcategoryMore specific category
venueVenue identity, location, coordinates, time zone, and capacity
minPriceLowest current base price
maxPriceHighest current base price
averagePriceAverage current base price
medianPriceMedian current base price
minAllInPriceLowest all-in price when supplied
maxAllInPriceHighest all-in price when supplied
listingCountNumber of active listings
ticketCountTotal ticket inventory
lastPricingRefreshSource pricing-refresh timestamp
performersPerformer IDs and names
sourceUrlCanonical Vivid Seats event URL
scrapedAtSnapshot timestamp

Ticket listing data fields

FieldMeaning
productionIdParent event ID
productionNameParent event name
listingIdStable listing identifier
sectionVenue section
rowSeat row when disclosed
quantityAvailable ticket quantity
pricePerTicketBase price per ticket
allInPricePerTicketAll-in price returned by Vivid Seats
localizedPriceLocalized price when supplied
dealScoreVivid Seats deal score
deliveryMethodDelivery type
notesListing or entry notes
badgesPrice or quality badges
perksListing perks, such as seated together
instantDeliveryWhether instant delivery is indicated
sourceUrlParent event URL
scrapedAtSnapshot timestamp

Example output

{
"productionId": 7216792,
"productionName": "Big 12 Mens Basketball Tournament - All Sessions",
"listingId": "VB16083850183",
"section": "Upper Level 201",
"row": "16",
"quantity": 2,
"allInPricePerTicket": 417.48,
"dealScore": 8.7,
"perks": ["Seated Together"],
"instantDelivery": false,
"sourceUrl": "https://www.vividseats.com/.../production/7216792",
"scrapedAt": "2026-07-21T03:13:46.771Z"
}

Inventory and prices change continuously. Example values are illustrative snapshots, not availability guarantees.

How much does it cost to scrape Vivid Seats tickets?

The Actor uses pay-per-event pricing:

  • A small one-time Actor start fee covers browser session startup.
  • Each event or ticket-listing record saved is one charged item.
  • Apify subscription tiers receive decreasing per-record prices.

Your final cost depends on the number of events and listings returned.

Use event-only mode when you need discovery without listing details.

Use maxListingsPerEvent to put a clear ceiling on listing output.

The Apify Console displays the current prices before each run.

Recurring ticket price monitoring

For a stable monitoring workflow:

  1. Save the production IDs you care about.
  2. Run the Actor on a schedule.
  3. Enable listings and choose a representative listing limit.
  4. Export both datasets to your warehouse.
  5. Add scrapedAt to your time-series key.
  6. Compare price, inventory, and listing-level changes between snapshots.

Refreshing production IDs is recommended because completed events and expired inventory stop returning records.

Tips for reliable runs

  • Start with one performer or production ID.
  • Prefer direct production IDs for repeated inventory monitoring.
  • Keep browser concurrency conservative by using one Actor run per target batch.
  • Use an Apify residential proxy if your current network receives a Vivid Seats challenge.
  • Avoid very large listing caps until you confirm normal inventory depth.
  • Schedule snapshots at a cadence appropriate for the event, not every minute by default.

Proxy and anti-bot behavior

Vivid Seats uses an Akamai JavaScript challenge.

The Actor launches Chromium, blocks heavy static resources, clears the anonymous challenge, and reuses that browser session for public Hermes JSON calls.

A proxy is optional when anonymous access works from the Actor's network.

If a challenge remains uncleared, configure Apify Proxy with a residential group and retry using a fresh run.

The Actor fails instead of returning an empty success when total extraction fails.

Apify API with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/vivid-seats-events-tickets-scraper').call({
productionIds: ['7216792'],
includeListings: true,
maxEvents: 1,
maxListingsPerEvent: 50,
currency: 'USD'
});
console.log(run.status, run.id);

Apify API with Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/vivid-seats-events-tickets-scraper').call(run_input={
'productionIds': ['7216792'],
'includeListings': True,
'maxEvents': 1,
'maxListingsPerEvent': 50,
'currency': 'USD',
})
print(run['status'], run['id'])

Apify API with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~vivid-seats-events-tickets-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"productionIds": ["7216792"],
"includeListings": true,
"maxEvents": 1,
"maxListingsPerEvent": 50,
"currency": "USD"
}'

MCP integration

Connect the Actor to AI assistants through Apify MCP.

Claude Code setup

$claude mcp add --transport http apify "https://mcp.apify.com/?tools=automation-lab/vivid-seats-events-tickets-scraper"

Claude Desktop setup

Add the server to Claude Desktop's MCP configuration.

Cursor setup

Use the same HTTP server URL in Cursor's MCP settings.

VS Code setup

Add the server to your VS Code MCP configuration or compatible extension.

Claude Desktop, Cursor, and VS Code can use this configuration shape:

{
"mcpServers": {
"apify-vivid-seats": {
"url": "https://mcp.apify.com/?tools=automation-lab/vivid-seats-events-tickets-scraper"
}
}
}

Example prompts:

  • β€œExtract the next 10 events for this Vivid Seats performer URL.”
  • β€œSnapshot up to 100 ticket listings for production 7216792.”
  • β€œCompare sections and all-in prices from today's listing dataset.”

Use MCP outputs as current marketplace observations, not promises of future ticket availability.

Integrations

Google Sheets

Send scheduled event and listing snapshots to separate worksheets and join on productionId.

Slack

Trigger an alert when minimum price drops below a threshold or ticket count changes sharply.

Webhooks

Notify an internal pricing service after each scheduled run completes.

Data warehouses

Load named datasets into BigQuery, Snowflake, PostgreSQL, or a lakehouse for historical analysis.

Make and Zapier

Use a completed Actor run as the trigger for inventory reports, alerts, or CRM enrichment.

Data quality notes

  • Prices are numeric values in the requested currency when the source supplies conversion.
  • Vivid Seats may not expose every optional field for every listing.
  • Row and delivery details depend on seller disclosure.
  • Event counts and inventory can change between requests.
  • Completed, hidden, or unavailable productions may return no active listings.
  • The source can refresh prices after the Actor's snapshot.

This Actor extracts publicly accessible marketplace data without logging in.

You are responsible for using the data in compliance with applicable laws, Vivid Seats terms, and your contracts.

Do not use the Actor to overload the website, evade access controls, resell restricted personal data, or misrepresent ticket availability.

Keep schedules and limits proportionate to a legitimate business need.

Troubleshooting

Why did the run report an uncleared challenge?

Enable an Apify residential proxy configuration and run again. Network reputation and geography can affect challenge behavior.

Why are there no listings for a production ID?

The production may be completed, hidden, sold out, or have expired inventory. Refresh the ID from a current event page.

Why is a localized price missing?

Vivid Seats does not return localized values for every currency, country, or listing. Base and all-in fields remain available when supplied.

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

The Actor deliberately fails closed when no event data can be extracted. This prevents scheduled monitors from treating a challenge page as a valid zero-inventory snapshot.

FAQ

Does this require a Vivid Seats account?

No. The Actor uses the public anonymous website surfaces.

Can it scrape concerts, sports, and theater?

Yes, when those events are listed on public Vivid Seats performer, search, category, or production pages.

Can I scrape only events?

Yes. Set includeListings to false.

Can I monitor several events together?

Yes. Supply multiple production IDs and choose maxEvents large enough for the batch.

Does the Actor buy tickets?

No. It extracts public event and listing data only.

Are prices guaranteed at checkout?

No. Resale inventory and fees can change. Treat each output as a timestamped snapshot.

Explore other data tools from automation-lab for marketplace monitoring, event discovery, and structured web extraction.

Use this Actor specifically when the source of truth must be Vivid Seats event and live listing data.

Support

If an input fails, include:

  • the Vivid Seats URL or production ID
  • whether listings were enabled
  • selected currency and limits
  • run ID and error message
  • whether a proxy was configured

Do not include account credentials or private payment information.