NewLaunching String Web Access APIRead the manifesto →
← Answers

Best API to scrape Ticketmaster and other ticketing sites

String team · Updated October 13, 2026

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 September 16, 2026 benchmark run, two of 16 APIs returned Ticketmaster, StubHub, SeatGeek and AXS on all five attempts each: String and Firecrawl, 20 of 20 requests. Scrapfly returned 19 of 20 and ScraperAPI 18. Five APIs did not return any of the four sites on all five attempts.

Ticketing is hard for most tools: 8 of 16 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 16 APIs returned on four ticketing sites

The Web Data Frontier Benchmark sent each API five requests to each of 100 bot-protected pages on September 16, 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 97.0%
Firecrawl* 5/5 5/5 5/5 5/5 20 80.2%
Scrapfly* 5/5 5/5 5/5 4/5 19 86.2%
ScraperAPI* 5/5 5/5 5/5 3/5 18 84.0%
Context.dev 5/5 5/5 1/5 5/5 16 72.0%
ScrapingBee* 5/5 0/5 5/5 5/5 15 73.0%
Apify 0/5 5/5 5/5 1/5 11 77.4%
Zyte* 5/5 0/5 4/5 1/5 10 68.0%
Scrapingdog* 2/5 4/5 3/5 1/5 10 45.6%
Browserbase 5/5 0/5 4/5 0/5 9 41.4%
Nimble* 5/5 0/5 3/5 0/5 8 68.6%
Bright Data 0/5 1/5 0/5 4/5 5 74.6%
ScrapingAnt* 5/5 0/5 0/5 0/5 5 36.4%
Oxylabs 0/5 0/5 0/5 0/5 0 69.0%
Decodo 0/5 0/5 0/5 0/5 0 50.6%
ZenRows 0/5 0/5 0/5 0/5 0 41.2%

* These eight APIs ran in the September 16 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. 8 of 16 APIs scored lower on the four ticketing sites than on all 100 sites. Four of them dropped more than 40 points: Oxylabs, Decodo, Bright Data and ZenRows.
  • The field did worse on tickets than on the web at large. All 16 APIs together returned 51.9% of ticketing requests, against 66.6% 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. AXS was the hardest, with 4 at 5 of 5.
  • No tool is safe to pick from its overall score. Bright Data returned 74.6% of all requests and 5 of 20 ticketing requests. Browserbase returned 41.4% overall and 9 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 5,000 standard requests 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 ($20 a month), a plain fetch is $0.30 per 1,000 on standard proxies and $3.00 on premium; a browser fetch is $1.50 and $6.00 (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: 60 requests a second per account with a 3,600-request burst, no cap on concurrency. 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 September 16, 2026 run, and 97.0% of 500 requests across all 100 sites, the highest of 16 APIs (benchmark).
  • One call picks the route each site needs. You send POST /v1/fetch with 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-type header read request_standard for Ticketmaster and StubHub and request_premium for 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 jsonSchema and 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_cffi with 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 two APIs that returned all four ticketing sites on every attempt in the September 16 run. Firecrawl matched it on these four pages, and it did so on a setting below its current anti-bot mode.

If your list is Ticketmaster only, 10 of 16 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.

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 September 16, 2026 benchmark run, String and Firecrawl were the only 2 of 16 APIs to return Ticketmaster, StubHub, SeatGeek and AXS on all five attempts each. Scrapfly returned 19 of 20 requests and ScraperAPI 18. 8 of 16 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 September 16, 2026 run, String and Firecrawl returned all four ticketing sites on all five attempts.

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

Get your API key →Explore the Web Access API
© 2026 StringEU and UK GDPR Article 27 representative — appointment verified by EuverifyBuilt in New York City 🗽 🍎