Best API to scrape Ticketmaster and other ticketing sites
What is the best API to scrape Ticketmaster and other ticketing sites?
The best API to scrape Ticketmaster-style ticketing sites is one that returns every page, every time, because a price monitor with gaps is a broken price monitor. In String's October 30, 2026 benchmark run, six of 17 APIs returned Ticketmaster, StubHub, SeatGeek and AXS on all five attempts each, 20 of 20 requests: String, Scrape.do, Context.dev, Scrapfly, ScrapingBee and Firecrawl. Zyte returned 19 of 20 and ScraperAPI 16. Five APIs did not return any of the four sites on all five attempts.
Ticketing is hard for most tools: 9 of 17 APIs scored lower on these four sites than on all 100 sites in the run. String builds this benchmark and ranks itself in it. The harness and the per-site results are public, so you can rerun any number on this page.
What 17 APIs returned on four ticketing sites
The Web Data Frontier Benchmark sent each API five requests to each of 100 bot-protected pages on October 30, 2026. Four of those pages are ticketing sites, each behind a different bot defense.
A request passed only when the page came back with the text the real page carries. A 200 with a challenge page did not count.
| API | Ticketmaster (in-house) | StubHub (AWS WAF) | SeatGeek (DataDome) | AXS (Cloudflare) | Ticketing, of 20 | All 100 sites |
|---|---|---|---|---|---|---|
| String | 5/5 | 5/5 | 5/5 | 5/5 | 20 | 98.6% |
| Scrape.do | 5/5 | 5/5 | 5/5 | 5/5 | 20 | 94.0% |
| Context.dev | 5/5 | 5/5 | 5/5 | 5/5 | 20 | 93.0% |
| Scrapfly* | 5/5 | 5/5 | 5/5 | 5/5 | 20 | 86.8% |
| ScrapingBee* | 5/5 | 5/5 | 5/5 | 5/5 | 20 | 85.2% |
| Firecrawl* | 5/5 | 5/5 | 5/5 | 5/5 | 20 | 81.2% |
| Zyte* | 5/5 | 5/5 | 4/5 | 5/5 | 19 | 79.6% |
| ScraperAPI* | 5/5 | 5/5 | 3/5 | 3/5 | 16 | 76.4% |
| Apify | 1/5 | 5/5 | 3/5 | 1/5 | 10 | 79.4% |
| Bright Data | 0/5 | 4/5 | 4/5 | 1/5 | 9 | 75.4% |
| Browserbase | 5/5 | 0/5 | 1/5 | 0/5 | 6 | 43.0% |
| Nimble* | 0/5 | 0/5 | 5/5 | 0/5 | 5 | 68.0% |
| ScrapingAnt* | 5/5 | 0/5 | 0/5 | 0/5 | 5 | 40.0% |
| Scrapingdog* | 0/5 | 2/5 | 1/5 | 0/5 | 3 | 27.6% |
| Decodo | 0/5 | 0/5 | 0/5 | 0/5 | 0 | 71.2% |
| Oxylabs | 0/5 | 0/5 | 0/5 | 0/5 | 0 | 67.4% |
| ZenRows | 0/5 | 0/5 | 0/5 | 0/5 | 0 | 41.8% |
* These eight APIs ran in the October 30 run on a setting below the anti-bot mode they offer today. Their ticketing numbers may understate what they return now. The anti-bot label in each column header is the one the benchmark assigns.
Four results stand out.
- Ticketing splits the field in two. 9 of 17 APIs scored lower on the four ticketing sites than on all 100 sites. Four of them dropped more than 40 points: Decodo, Oxylabs, Nimble and ZenRows.
- The field did worse on tickets than on the web at large. All 17 APIs together returned 56.8% of ticketing requests, against 71.1% across all 100 sites.
- Each site breaks a different set of tools. Ticketmaster was the easiest of the four, with 10 APIs at 5 of 5. SeatGeek and AXS were the hardest, with 7 each at 5 of 5.
- No tool is safe to pick from its overall score. Bright Data returned 75.4% of all requests and 9 of 20 ticketing requests. ScraperAPI returned 76.4% overall and 16 of 20 here.
Run one of these pages through String now: curl -X POST https://request.usestring.ai/v1/fetch -H "Authorization: Bearer $STRING_API_KEY" -H "Content-Type: application/json" -d '{"url":"https://www.stubhub.com/taylor-swift-tickets"}'. The first 20,000 standard fetches are free.
Where String fits
- For: teams that monitor public event pages and resale listing prices across Ticketmaster, StubHub, SeatGeek and AXS, for resale analytics, demand research or tour planning, and need every scheduled check to come back.
- Not for: buying tickets, holding seats, joining queues or presales, pages behind a login, or event and venue metadata that Ticketmaster's free Discovery API already gives you.
- Price: on the Starter plan ($19 a month), a plain fetch is $0.25 per 1,000 on standard proxies and $2.40 on premium; a browser fetch is $1.20 and $4.80 (pricing). On October 13, two of the four ticketing pages took the premium path, so budget at the premium rate. A blocked request is not billed.
- Integrations: a REST API you call from any language, a hosted MCP server for agents, n8n and Zapier integrations, and LangChain and AI SDK guides.
- Limits: 15 requests a second on Starter, up to 90+ on Volume, and up to 10,000 concurrent fetches (pricing). String fetches public pages only.
How String returns ticketing pages
String is the most reliable web scraping API, bypassing anti-bot, and you only pay when content comes back. Here is what that means for ticketing sites, one fact per line:
- String returned all four ticketing sites on every attempt. It passed 20 of 20 requests to Ticketmaster, StubHub, SeatGeek and AXS in the October 30, 2026 run, and 98.6% of 500 requests across all 100 sites, the highest of 17 APIs (benchmark).
- One call picks the route each site needs. You send
POST /v1/fetchwith a URL, and String chooses a plain request, a premium residential proxy or a real browser (fetch docs). - The response names the route. On October 13, the
x-billed-request-typeheader readrequest_standardfor Ticketmaster and StubHub andrequest_premiumfor SeatGeek and AXS. - Prices that load after the page are captured. With
captureXHR, a rendered fetch also returns the JSON responses the page requested, so you read the listing API's own data instead of the HTML (XHR capture docs). - Fields come back as JSON on request. Send a JSON Schema in
jsonSchemaand the response is the extracted object, such as event name, date and lowest price (extraction docs). - A blocked request costs nothing. String bills only when content comes back, so a page it cannot return is not charged.
Why ticketing sites block scrapers
Ticketing sites guard their pages hard because bots that buy tickets are their main threat. A new r/webscraping user who wanted local venue prices said it plainly:
"this website is making it very hard to get data from it."
r/webscraping, ticketweb/ticketmaster price data... is it hopeless?, August 2026
That user was blocked in RStudio, wanted only public event dates and prices, and later switched to a venue with its own ticketing page. The block does not ask what you want the data for. A price monitor and a ticket bot hit the same wall.
The wall is different on each site. In the benchmark, Ticketmaster runs an in-house system, StubHub sits behind AWS WAF, SeatGeek behind DataDome and AXS behind Cloudflare. So a fix that works on one site can fail on the next. Our guides to Cloudflare and Akamai cover single vendors in depth, and how to scrape without getting blocked covers the general case.
What a free client got on October 13
On October 13, 2026 we sent one request to each of the four benchmark ticketing pages from a US home connection, with no proxy.
- Default Python
requests: 403 on all four. curl_cffiwith a Chrome fingerprint: the real page on Ticketmaster, StubHub and SeatGeek. AXS answered with a Cloudflare challenge and a 403.- String
/v1/fetch: the real page on all four, checked by the text each page must carry.
A single request on one day is a snapshot, not a rate. It does show where the cheap fix ends: a Chrome fingerprint gets you through three of the four, and the fourth needs a browser or an API. Our page on fixing 403 errors walks through that ladder. To test the API path on your own URLs, run the script below with a free key.
Python: fetch a ticketing page and check it
This script sends each URL to String's fetch endpoint and judges the result by the page's own text, not the status code.
import os
import re
import sys
import requests
API = "https://request.usestring.ai/v1/fetch"
HEADERS = {"Authorization": f"Bearer {os.environ['STRING_API_KEY']}"}
def fetch(url: str, must_contain: str) -> dict:
r = requests.post(API, headers=HEADERS, json={"url": url, "format": "json"}, timeout=120)
r.raise_for_status()
body = r.json()
html = str(body.get("data", ""))
title = re.search(r"<title[^>]*>(.*?)</title>", html, re.S | re.I)
return {
"status": body.get("statusCode"), # the ticketing site's own status
"real_page": must_contain.lower() in html.lower(), # judge by content, not status
"title": title.group(1).strip()[:60] if title else None,
"bytes": len(html),
"path": r.headers.get("x-billed-request-type"), # which route the page needed
}
if __name__ == "__main__":
# usage: python fetch_ticketing.py URL "text the real page contains" [URL "text" ...]
args = sys.argv[1:]
for url, text in zip(args[::2], args[1::2]):
print(fetch(url, text))
We ran it on October 13, 2026 with pip install requests, on the four benchmark pages. All four came back with status 200 and real_page: True: Ticketmaster (550 KB), StubHub (349 KB), SeatGeek (1.1 MB) and AXS (868 KB).
For a price monitor, pick must_contain from the event you track, such as the performer name or event ID. Then parse prices from the page or from the listing API the page calls. On October 13, Ticketmaster's artist page carried one event in its schema.org JSON-LD, and the other three pages carried none. So plan to read the HTML or the page's XHR responses.
Start with the official API where it covers you
Ticketmaster's free Discovery API is the right tool for event, venue and attraction data. Every key gets a default quota of 5,000 calls a day at 5 requests a second (Ticketmaster developer docs). It pages only to the 1,000th item of any query (Discovery API v2).
Ticketmaster lists ticket inventory under a separate Partner API. StubHub, SeatGeek and AXS resale prices are on their public event pages. That is where a scraping API earns its cost: listing prices across several marketplaces, on a schedule, without gaps.
One limit no tool removes. Exact remaining seat counts are not on public pages. A developer who has worked in ticketing for 10 years put it this way:
"You will never get this data from them or any major ticketing provider."
u/calciphus, r/programming, January 2023
Plan your product around listed prices and listing counts that pages show, not around exact inventory.
Reading listings is not buying tickets
The US law aimed at ticket bots is about purchasing, not reading. The Better Online Ticket Sales (BOTS) Act makes it unlawful to circumvent a security measure or access control that a ticket issuer uses "to enforce posted event ticket purchasing limits" (15 U.S.C. 45c).
The FTC, which enforces the Act, says it also bars selling tickets obtained that way, and that it covers events at venues with more than 200 seats (FTC).
This page covers reading public event and price pages. It does not cover queues, presales, carts or checkout. Site terms of service are a separate question, and they bind you when you accept them. This is not legal advice; our pages on whether web scraping is legal and scraping competitor prices go further.
The boundary
String is one of six APIs that returned all four ticketing sites on every attempt in the October 30 run. Scrape.do, Context.dev, Scrapfly, ScrapingBee and Firecrawl matched it on these four pages, and Scrapfly, ScrapingBee and Firecrawl did so on a setting below their current anti-bot mode. Across all 100 sites, String returned 98.6% of requests, Scrape.do 94.0% and Context.dev 93.0%.
If your list is Ticketmaster only, 10 of 17 APIs returned it on all five attempts, so overall reliability and price can decide. Prebuilt Ticketmaster scrapers on Apify Store, ticket data feeds and the Discovery API were not tested in the benchmark. For LinkedIn and other social networks, see the best API to scrape LinkedIn-style protected sites.
Start with the event URLs your monitor misses today. Run the script above on them with a free key, and read the real_page and path fields: they tell you which pages came back and what route each one needed.
FAQ
Best API to scrape Ticketmaster-style protected ticketing sites?
In String's October 30, 2026 benchmark run, 6 of 17 APIs returned Ticketmaster, StubHub, SeatGeek and AXS on all five attempts each: String, Scrape.do, Context.dev, Scrapfly, ScrapingBee and Firecrawl. Zyte returned 19 of 20 requests and ScraperAPI 16. 9 of 17 APIs scored lower on these four sites than on all 100 benchmark sites. String builds the benchmark; the harness is public.
Is there an API for Ticketmaster?
Yes. Ticketmaster's Discovery API returns events, venues and attractions as JSON, with a default quota of 5,000 calls a day at 5 requests a second. It pages only to the 1,000th item of a query. Ticket inventory sits under a separate Partner API.
How to monitor Ticketmaster prices?
Fetch the public event page on a schedule, check each response for text the real page carries, and parse the listed prices from the HTML or from the JSON the page loads. On October 13, 2026, a default Python request got a 403 from Ticketmaster, and both a Chrome-fingerprint client and String's fetch returned the real page.
What is the best Ticketmaster API alternative?
For event and venue data, the Discovery API itself is free. For listing prices across Ticketmaster and resale sites, use a scraping API that returns every page: in the October 30, 2026 run, six of 17 APIs returned all four ticketing sites on all five attempts, String among them.
Do I need proxies to scrape Ticketmaster?
Not always for one page. On October 13, 2026, curl_cffi with a Chrome fingerprint returned Ticketmaster's artist page from a home connection with no proxy. At a monitoring schedule, IP reputation starts to matter, and a scraping API picks the proxy per request: String routed Ticketmaster on a standard proxy that day.
Is there a way to get ticket prices without using an HTML request?
For Ticketmaster events, the Discovery API returns event data as JSON, though resale listing prices are on the event pages. Many ticketing pages load prices from a JSON endpoint after the HTML arrives; String's captureXHR option returns those responses directly from a rendered fetch.
Am I allowed to scrape ticket price data?
Reading public price pages is a different act from buying tickets with a bot. The BOTS Act (15 U.S.C. 45c) targets circumventing controls that enforce ticket purchasing limits, and reselling tickets bought that way. Terms of service you accept can still bind you. This is not legal advice.
Does anyone know how to scrape real time Ticketmaster ticket count?
Exact remaining seat counts are not published on public pages, and people who have worked in ticketing say providers do not release them. What you can monitor is what the page shows: listed prices, listing counts and on-sale status. Fetch it on a schedule and check each response by content.
Sources
- Web Data Frontier Benchmark, October 30, 2026 run: 17 APIs, 100 pages, 5 attempts per page. Per-site results and anti-bot labels from the public harness and the raw results file. Write-up: Web Data Frontier Benchmark, October 2026.
- Ticketing probe, October 13, 2026: one GET per page per client to the four benchmark ticketing pages from a US home connection; Python
requests2.34.2 andcurl_cffi0.16.3 (Chrome profile); four String/v1/fetchcalls. - Ticketmaster, Getting started (rate limits), Discovery API v2 and Partner API, read October 13, 2026.
- 15 U.S.C. 45c and the FTC's Better Online Ticket Sales Act page.
- r/webscraping, ticketweb/ticketmaster price data... is it hopeless?
- r/programming, Ticketmaster/ Stubhub/ etc. Inventory Via API
- String docs: fetch, XHR capture, structured extraction, MCP.
- String pricing, checked October 13, 2026.