SeatGeek Scraper - Events, Venues & Ticket Listings avatar

SeatGeek Scraper - Events, Venues & Ticket Listings

Pricing

from $2.20 / 1,000 result written to datasets

Go to Apify Store
SeatGeek Scraper - Events, Venues & Ticket Listings

SeatGeek Scraper - Events, Venues & Ticket Listings

Extract SeatGeek events, performers, venues and individual ticket listings across the US and Canada. Get dates, seat locations, prices and deal scores, billed per delivered row plus a start fee.

Pricing

from $2.20 / 1,000 result written to datasets

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

50

Total users

27

Monthly active users

9.2 hours

Issues response

6 hours ago

Last modified

Security

Limited permissions

Share

SeatGeek Scraper

Extract SeatGeek events, performers, venues and ticket listings across the US and Canada as rows you can export.

  • Event dates, venue details, price ranges and ticket counts.
  • Individual ticket listings with seat locations, prices and deal scores.
  • Keyword search and discovery of performers, venues and categories.
  • Pay for delivered rows: $3.00 per 1,000 rows on the Free plan, plus a start fee.

What does SeatGeek Scraper do?

SeatGeek Scraper collects information from seatgeek.com for event research and ticket-price comparisons. Each dataset row represents one entity or ticket listing, not a whole inventory hidden inside one row.

  • Browse events: choose city, performer, venue, category or sports.
  • Select an event: use event with an event URL or ID.
  • Search: use search for matching events, performers and venues.
  • Discover: use discover for a selected entity type.
  • Ticket listings: includeListings is off by default. Each listing is a separately billed row; event details are copied onto it.
  • Optional detail: includeSeatMap adds available map information; includeRaw retains original entity data. Both are off by default.

What data can you extract from SeatGeek?

Event and discovery rows

These rows use rowType: "event", including discovered entities. Check type to distinguish an event, performer, venue, taxonomy or performer section. Fields depend on the selected entity.

FieldDescriptionExample
idEvent or entity identifier17123456
titleEvent title or entity nameNew York Knicks vs. Boston Celtics
typeEvent category or entity typenba, performer
datetimeLocalStart time at the venue2026-11-20T19:30:00
datetimeUtcStart time in UTC2026-11-21T00:30:00Z
venueNameVenue nameMadison Square Garden
venueCityVenue cityNew York
venueCountryVenue countryUS
lowestPriceLowest reported event price85
listingCountReported listings, not delivered rows342
performerNamesPerforming acts or teams["New York Knicks"]
urlSeatGeek pagehttps://seatgeek.com/events/17123456
slugDiscovery identifier for later inputnew-york-yankees
numUpcomingEventsUpcoming count, when available12
scoreSeatGeek popularity score0.82

Ticket-listing rows

These rows use rowType: "listing". Event dates, venue details and the event URL accompany each listing.

FieldDescriptionExample
listingIdTicket listing identifier; also idexample-listing-001
eventIdParent event identifier17123456
sectionSeating section101
rowSeat row label12
seatsSeat numbers, if supplied["1", "2"]
quantityTickets available in this listing2
splitQuantitiesAllowed purchase quantities[2]
pricePrice excluding fees180
priceWithFeesPrice including fees214.25
dealScoreSeatGeek listing value score82.4
deliveryMethodTicket delivery methodmobile_transfer
inventoryCurrencyCurrency information from the sourceUSD
inventoryCompleteWhether the collected inventory was completetrue
inventoryUnfilteredTotalInventory count before filters342
seatGeometryStatusSeat-to-map join: matched, partial, unmatched, no_seat_numbersmatched
seatGeometrySourceWhich join path matched: primary, spatial_key or suffixspatial_key
rawFieldsOriginal fields for this listing{"id":"example-listing-001"}

An inventory total is not a promise that every listing is in your dataset: filters and maxResults still apply.

How to scrape SeatGeek

  1. Open SeatGeek Scraper in Apify Console.
  2. Fill one target field and leave mode on auto.
  3. Set maxResults to 3 for a small first run.
  4. Click Start and wait for completion.
  5. Open the dataset and download the rows.

Empty input starts an example run using city: "nyc" and at most 3 rows. Normal pricing applies; this is not a free preview. One filled target selects its matching mode automatically. Use explicit mode for sports or discover.

City

Enter a city slug such as nyc, chicago or toronto. Optionally select a cityTab.

Performer

Enter performerSlug to list a team's or act's events.

Venue

Enter venueSlug to list events at that venue.

Event

Paste eventUrl or enter numeric eventId. Turn on includeListings for individual ticket rows instead of event metadata.

Category

Enter categorySlug, such as mlb-tickets, to browse that category.

Sports

Set mode: "sports". With no category, the Actor uses the sports listing.

Enter query for mixed event, performer and venue matches. With includeListings, only matching events are used to collect ticket rows.

Discover

Set mode: "discover" and choose discoverType. query is optional. Use returned IDs or slugs as inputs for later runs.

With discoverType: "events", city scopes the event list to that city and dateFrom/dateTo bound the date window — all three filter server-side via SeatGeek's public API.

What to fill in

FieldWhat to enterDefault
modeauto or a mode described aboveauto
cityCity slugExample: nyc
performerSlugAct or team slugEmpty
venueSlugVenue slugEmpty
eventUrlSeatGeek event URL ending in an event numberEmpty
eventIdNumeric event ID, at least 5 digitsEmpty
startUrlsList of SeatGeek page URLsEmpty
detailUrlsList of event URLsEmpty
listingIdsList of event IDs, not ticket listing IDsEmpty
categorySlugCategory slugEmpty
querySearch keyword or discovery filterEmpty
discoverTypeperformers, venues, taxonomies, events, recommendations, performerSectionsperformers
dateFromEarliest event date for discoverType: "events", YYYY-MM-DDEmpty
dateToLatest event date for discoverType: "events", YYYY-MM-DDEmpty
performerIdNumeric ID for performerSectionsEmpty
maxResultsRows per input, from 1 to 50070; form example 3
maxPagesCatalog pages to inspect, from 1 to 501
includeListingsReturn individual ticket listingsfalse
cityTabconcerts, sports, theater, festivals, comedy, family, nightlifeEmpty
minDealScoreMinimum listing score, from 0 to 100Empty
listingFiltersPrice, quantity, section, marketplace, delivery or sorting filtersEmpty
includeSeatMapInclude seating-map info; seats join mapkeys via spatial section keys toofalse
enrichDetailsVenue address and organization details; no extra phone lookuptrue
includeRawRetain original event/entity datafalse
trackChangesComplete-inventory comparisons; skipped for ticket-listing rowsfalse
alertWebhookUrlAlert destination when a complete tracking comparison existsEmpty
eventHintsOld event IDs mapped to title, venueId, datetimeUtcEmpty

Examples, one per mode. Replace the illustrative event ID with a current one.

City

{"city":"nyc","cityTab":"concerts","maxResults":3}

Performer

{"performerSlug":"new-york-yankees","maxResults":3}

Venue

{"venueSlug":"madison-square-garden","maxResults":3}

Event

{"eventId":"17123456","includeListings":true,"maxResults":3}

Category

{"categorySlug":"mlb-tickets","maxResults":3}

Sports

{"mode":"sports","maxResults":3}

Search

{"query":"boston celtics","maxResults":3}

Discover

{"mode":"discover","discoverType":"venues","query":"madison square garden","maxResults":3}

maxItems and limit are aliases for the per-input row limit, maxResults. keyword maps to query; urls maps to startUrls. Close misspellings are corrected; other unknown fields are ignored with a note. The INPUT_REPORT record in the default key-value store records inferred, corrected, filled and ignored fields.

Invalid target input stops before any row charge with INVALID_INPUT: <field> — <how to fix>. Invalid filters may instead be ignored, so check INPUT_REPORT. Use one target family per run to avoid competing mode choices.

listingFilters accepts minPrice, maxPrice including fees, quantity, sections, markets, deliveryMethods, and sort set to price, priceDesc or dealScore. Quantity must match an available purchase split.

Output example

Illustrative ticket-listing row, not a current offer:

{
"rowType": "listing",
"id": "example-listing-001",
"listingId": "example-listing-001",
"eventId": "17123456",
"title": "New York Knicks vs. Boston Celtics",
"datetimeUtc": "2026-11-21T00:30:00Z",
"venueName": "Madison Square Garden",
"section": "101",
"row": "12",
"quantity": 2,
"price": 180,
"priceWithFees": 214.25,
"dealScore": 82.4,
"url": "https://seatgeek.com/events/17123456"
}

Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. Large row details may be stored in the run's key-value store: inventoryStorage lists the attachment records and decoding instructions.

Why use this SeatGeek scraper?

  • Row-based billing: failed pages do not become charged result rows; the start fee is separate.
  • Partial delivery: available partial results can be delivered after a collection stops or times out. Rows already in the dataset remain accessible; an abrupt run stop can prevent undelivered rows from reaching it.
  • Visible problems: input errors identify what to fix; run records retain warnings.
  • Source values: missing seat details and contacts are not invented.
  • Several inputs: submit multiple URLs or event IDs in one run.
  • No proxy setup: you do not need to set up proxies.

How much does it cost to scrape SeatGeek?

The Actor uses pay-per-event pricing. Platform usage is included in these prices. The start event costs $0.005 per GB of allocated memory, with a minimum of one event. At the default 1024 MB, the start fee is $0.005.

Apify planStart fee at 1024 MBPrice per rowPrice per 1,000 rows
Free$0.005$0.003$3.00
Starter$0.005$0.003$3.00
Scale$0.005$0.0026$2.60
Business$0.005$0.0022$2.20
Platinum$0.005$0.002$2.00
Diamond$0.005$0.0016$1.60

maxResults applies to each listed URL or event ID; a single city, performer, venue, category, search or discovery target counts as one input. The default is 70; larger requests are collected in parts of 70. Event/entity and listing rows count toward the same input limit.

Free Apify plan runs are capped at 200 rows, with a developer-set allowance of 10 runs of this Actor. The whole run stops at Maximum cost per run (maxTotalChargeUsd in the API). Limits do not guarantee enough matching data exists.

Example: three event IDs with maxResults: 5 deliver 15 listing rows. On the Free plan at 1024 MB, the cost is 15 × $0.003 + $0.005 = $0.050. Zero delivered rows incur no row charges, but the start fee still applies.

What happens when the run timeout is too short

If collection needs longer than your chosen timeout, the Actor can pause with the status message "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." The run temporarily shows ABORTED.

When results are ready, the same run resumes, reports "Resumed: delivering N rows.", writes to the same dataset and finishes as SUCCEEDED if delivery succeeds. Already delivered rows are skipped rather than delivered or charged again. No manual restart is needed for this pause.

  • Automatic pausing is limited to at most 3 times per run. Keep the default timeout of 3600 seconds to reduce interruptions.
  • Synchronous endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and can return an empty dataset while the run is paused. For longer work, start asynchronously and read the dataset after SUCCEEDED, or use a succeeded-event webhook.

Use with AI agents and the API

Apify MCP server

In Claude, ChatGPT, Cursor, VS Code or another client supporting remote MCP servers, add:

https://mcp.apify.com?tools=lentic_clockss/seatgeek-scraper

Sign in with Apify using OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool returns run and dataset IDs; the agent reads rows using get-dataset-items.

For clients without remote support, run npx @apify/actors-mcp-server --tools lentic_clockss/seatgeek-scraper with APIFY_TOKEN set.

Example prompt: "Find three upcoming events in New York using city nyc. Return titles, dates, venues and lowest prices."

Apify API

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/seatgeek-scraper").call(
run_input={"city": "nyc", "maxResults": 3}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/seatgeek-scraper')
.call({ city: 'nyc', maxResults: 3 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

For asynchronous HTTP calls, send the input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~seatgeek-scraper/runs, with your token in the Authorization: Bearer header. Read completed results using GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.

Integrations

Use the Integrations tab for Google Sheets, Make, Zapier, n8n, Slack, Airtable or webhooks. Apify Schedules can start recurring runs.

FAQ

This Actor collects public data. You are responsible for checking SeatGeek's terms and applicable data-protection law. Processing personal data requires a lawful basis; public visibility alone does not establish one.

Why did my run end as ABORTED?

Read the status message. The automatic pause described above can temporarily show ABORTED; not every aborted run is waiting to resume. A manual abort or other failure needs separate investigation.

How many results can I get?

maxResults accepts 1–500 per input. Available matches, maxPages, the Free-plan allowance and your spending cap can reduce delivery. Start with 3 rows before increasing the limit.

Why are some fields empty?

Availability varies by event and entity. Venue phones and emails are returned as empty arrays; no named box-office contact is supplied. Missing seats are not guessed.

Do I need a SeatGeek API key?

No SeatGeek API key is required as input. Calling the Actor through the Apify API requires your Apify token.

How do I track price changes?

Schedule runs and compare listingId and priceWithFees yourself. Built-in trackChanges is skipped for listing-row runs; alertWebhookUrl does not enable tracking of partial inventories. A missing listing is not proof of a sale.

What if there are no matching events?

A confirmed empty result can finish successfully with zero rows. Collection failures are different and are reported as errors. Neither case creates billable placeholder rows.

Does it support Canadian events?

Use Canadian city slugs such as toronto, montreal or vancouver. Read the returned currency information rather than assuming every amount is in US dollars.

Limitations

  • Coverage is for SeatGeek's US and Canadian catalog, not every ticket marketplace or country.
  • Inventory, prices and event availability can change between runs; completeness does not imply a guaranteed purchase price.
  • Discovery surfaces, maps and seat geometry depend on source availability. General-admission tickets may have no individual seat geometry; listings without seat numbers report seatGeometryStatus: "no_seat_numbers".
  • eventHints may identify a replacement for an unavailable event, but matching is probabilistic. Ambiguous candidates are not substituted; check eventResolution.
  • Normal output uses separate ticket rows, not nested full inventories or per-section summary arrays.

More event and ticketing scrapers from the same publisher:

Browse all of our scrapers at apify.com/lentic_clockss.

Support

Found a problem or need another field? Open an issue in the Issues tab of this Actor's page and include the run ID and the input you used.