8 min read
How to track ticket prices on StubHub and SeatGeek
Lowest prices with fees for any game or concert on StubHub, SeatGeek, Vivid Seats and TickPick, as JSON, on a schedule.
| Site | Game | Before fees | With fees |
|---|---|---|---|
| TickPick | Pistons at Knicks | $170 | $170 |
| Vivid Seats | Pistons at Knicks | $130.65 | $177 |
| SeatGeek | Pistons at Knicks | $153 | $178 |
| StubHub | Pistons at Knicks | $166.19 | $191.35 |
| TickPick | Nets at Knicks | $172 | $172 |
| Vivid Seats | Nets at Knicks | $128.70 | $174 |
| SeatGeek | Nets at Knicks | $150 | $183 |
| StubHub | Nets at Knicks | $150 | $188 |
The String Web Access API is the best way to track ticket prices. It returns any event page on StubHub, SeatGeek, Vivid Seats or TickPick, or just the event, date, venue and lowest price with fees as JSON. In our September 2026 benchmark it fetched Ticketmaster, StubHub, SeatGeek and AXS on all 20 attempts, one of only 2 of 16 providers to do so, and returned 97% of requests across 100 bot-protected sites, the most of any provider.
Quickstart
Add the hosted MCP server to Claude, Cursor, ChatGPT or any MCP client. Then give your agent an event URL from StubHub, SeatGeek, Vivid Seats or TickPick. It calls the web_access_fetch tool and reads the lowest price.
https://mcp.usestring.ai/v1/mcp
One call returns a SeatGeek event's name, date, venue and lowest price with fees as JSON. If the page has no price, you get "extracted": false back instead of a guess.
curl https://request.usestring.ai/v1/fetch \
-H "Authorization: Bearer $STRING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://seatgeek.com/new-york-knicks-tickets/11-2-2026-new-york-new-york-madison-square-garden/nba/18494850",
"countryCode": "US",
"jsonSchema": {
"type": "object",
"properties": {
"event": { "type": "string" },
"starts": { "type": "string" },
"venue": { "type": "string" },
"lowest_price_with_fees": { "type": "number" }
},
"required": ["event", "starts", "lowest_price_with_fees"]
}
}'Response
{
"event": "Brooklyn Nets at New York Knicks",
"lowest_price_with_fees": 177,
"starts": "2026-11-02T19:30:00",
"venue": "Madison Square Garden, New York, NY"
}Why track ticket prices?
Resale ticket prices change all day, and the same game sells for different prices on each marketplace. A tracker checks each event's page on a schedule, stores the lowest price with fees, and tells you when it moves. It answers questions like these:
- Where is the cheapest seat right now? On October 26, 2026, the cheapest seat for the Pistons at the Knicks on October 27 cost $170 on TickPick and $191.35 on StubHub, fees included.
- Is now the time to buy? SeatGeek's lowest price for the Nets at the Knicks read $183, then $177, then $183 again across three fetches in six minutes.
- How much demand is there? Listing counts show how many sellers there are, and tracked over time they show how fast an event is selling. SeatGeek showed 4,095 listings for that Nets game.
What you can collect
Lowest prices, with and without fees
The cheapest listing per event on each marketplace, as the buyer pays it and before fees.
Listing counts and price ranges
How many listings an event has, and its highest and average asking price where the site shows them.
Event schedules
Every upcoming game or show for a team, artist or venue, with date, venue and event URL.
Price history
Your own timestamped snapshots of each event, so you can chart prices and alert on drops.
Why does ticket price tracking break?
- Ticket sites block scrapers harder than most. In our September 2026 benchmark, only String and Firecrawl fetched Ticketmaster, StubHub, SeatGeek and AXS on every attempt. On stubhub.com, 10 of the 15 other APIs missed at least once and 8 got nothing back, including ScrapingBee, Zyte and Browserbase. Browserbase returned 9 of 20 ticketing requests. The full table is in the best API to scrape ticketing sites.
- Listed prices aren't comparable. Some pages show prices before fees and some after. Vivid Seats listed the Pistons game at $130.65 before fees and $177 with them.
- Event lists include things that aren't seats. StubHub's NBA page listed a "PARKING PASSES ONLY" event beside each Knicks game, plus G League Westchester Knicks games.
- Blocked pages can look real. A challenge page loads with no price on it, and the tracker saves the gap as a price drop.
Why do teams choose String?
- It fetches the sites others can't. String returned all 20 ticketing requests in our September 2026 benchmark, and 97% of requests across 100 bot-protected sites, the most of 16 providers.
- One call picks the route each site needs. On October 26, Vivid Seats came back on a standard request, SeatGeek and TickPick on a premium proxy, and StubHub event pages in a browser. The
x-billed-request-typeheader names the route. - You pay only for pages that come back. Blocks and errors are free.
- Blank pages don't become data. Mark the price as required in your schema, and a page that comes back without one is flagged instead of saved.
How do I build a ticket price tracker?
List the events and match them across sites
Fetch each team, artist or league page once to get its upcoming events and their URLs. Match the same event across sites by date, venue and performers, not by title. Drop parking passes, packages and same-name teams from other leagues.
With String: One fetch of StubHub's NBA page returned 2,000 events with their URLs and lowest prices before fees.
Read prices from the page's own data
Ticket pages carry their prices in embedded JSON. SeatGeek and Vivid Seats put them in
__NEXT_DATA__, TickPick in schema.org JSON-LD and StubHub in anindex-datascript. The embedded data is more reliable than the visible text and says which price includes fees.With String: Pass a
jsonSchemaand get the fields back as JSON, or usecaptureXHRto return the JSON a page loads after it renders.Compare prices with fees included
Store the all-in price for one ticket. SeatGeek's
lowest_priceand Vivid Seats'minAipPriceinclude fees, and TickPick charges no buyer fees. StubHub's event page gives an all-in price when you add?quantity=1to the URL.Treat a blank page as a failure
A page with no price was probably blocked or sold out. Flag it and keep the last good price, so the gap never shows up as a drop to $0.
Save each check and alert on drops
Store the time, site, event, lowest price with fees and listing count. Alert when the lowest price falls below your target or drops by a set share since the last check.
Check more often as the event gets close
Daily is enough weeks out. In the last few days, check every few hours, and send alerts to Slack or email so they arrive while there is still time to buy.
Get a free sample price feed
Tell us which events or teams you follow. We'll run String on their pages and email you a sample feed of the lowest prices on each site, free.
| Site | Game | Before fees | With fees |
|---|---|---|---|
| TickPick | Pistons at Knicks | $170 | $170 |
| Vivid Seats | Pistons at Knicks | $130.65 | $177 |
| SeatGeek | Pistons at Knicks | $153 | $178 |
| StubHub | Pistons at Knicks | $166.19 | $191.35 |
| TickPick | Nets at Knicks | $172 | $172 |
| Vivid Seats | Nets at Knicks | $128.70 | $174 |
| SeatGeek | Nets at Knicks | $150 | $183 |
| StubHub | Nets at Knicks | $150 | $188 |
Frequently asked questions
What's the best way to track ticket prices?
The best way to track ticket prices is to fetch each event's page on every marketplace on a schedule and store the lowest price with fees. The hard part is getting the pages, because ticket sites block most scrapers. In our September 2026 benchmark, the String Web Access API fetched Ticketmaster, StubHub, SeatGeek and AXS on all 20 attempts, and only Firecrawl matched it. Across all 100 bot-protected sites, String returned 97% of requests, the most of 16 providers.
How do I track StubHub prices automatically?
To track StubHub prices, fetch each event page with ?quantity=1 added to the URL and read the lowest price from the page's index-data script, where estimatedFees: true marks an all-in price. On October 26, 2026, String returned those pages through a browser on a premium proxy. StubHub's league and team pages list many events in one fetch, with prices before fees.
How much does it cost to track ticket prices?
Tracking ticket prices with String costs between $0.30 and $6.00 per 1,000 checks, depending on the route each site needs. On the Starter plan ($20 a month), a standard fetch is $0.30 per 1,000, a premium fetch $3.00 and a browser fetch on a premium proxy $6.00. On October 26, 2026, Vivid Seats billed standard, SeatGeek and TickPick premium, and StubHub event pages browser premium. Checking 50 events on those four sites every 3 hours is 48,000 requests a month, about $147.60 in usage. Failed requests aren't billed. See pricing.
Can I track Ticketmaster prices?
Yes, String fetched ticketmaster.com on all 5 attempts in our September 2026 benchmark. For event, venue and date data, Ticketmaster's free Discovery API is the simpler source. Ticketmaster's event pages load prices from a separate API call, so render the page and use captureXHR to return the JSON it requests. More detail is in the best API to scrape ticketing sites.
Why is the same ticket a different price on each site?
Resale ticket prices differ by site because sellers list on each marketplace separately and each one adds its own fees. On October 26, 2026, the lowest price for the same Knicks game ran from $170 on TickPick, which charges no buyer fees, to $191.35 on StubHub. Compare prices with fees included.
Is it legal to scrape ticket prices?
Reading public ticket prices is a different act from buying tickets with a bot. The US BOTS Act targets getting around the controls that enforce ticket purchase limits, not reading listing pages. Site terms you accept can still bind you. Stay on public pages and check with your counsel. We cover the law in the best API to scrape ticketing sites and is web scraping legal?
Can I see how many tickets are left?
Exact remaining inventory isn't on public ticket pages, but listing counts are. SeatGeek's event page showed 4,095 listings and 11,337 listed tickets for the Nets at the Knicks on October 26, 2026. Track those counts over time to see how fast an event is selling.
Does String work on the ticket sites I need?
Send us the event URLs and we'll run them and show you what comes back before you commit. Ask for a free sample price feed, or test them yourself with your first 5,000 free requests.