StubHub Ticket Resale Scraper
Pricing
Pay per event
StubHub Ticket Resale Scraper
Scrape seller-level ticket resale listings from StubHub — concerts, sports and theater. Returns section, row, seat range, quantity, price, fees, face value and ticket class per listing, plus an event record with venue, date and lowest price.
Pricing
Pay per event
Rating
0.0
(0)
Developer
BowTiedRaccoon
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
3
Monthly active users
2 days ago
Last modified
Categories
Share
Scrapes seller-level ticket listings from StubHub — concerts, sports, theater. Returns section, row, seat range, quantity, price, fees, face value and ticket class for every listing on an event, plus an event record with venue, date and lowest price.
Not the ten listings the page shows you. All of them.
StubHub Ticket Resale Scraper Features
- Returns every listing on an event, not the curated handful the page renders. One Los Angeles Dodgers game came back with 552 listings across 58 pages.
- Extracts 30+ fields per listing — section, row, seat range, available quantity, raw price, fees, face value, ticket class, plus StubHub's own star rating, deal score and seat-quality score.
- Stable
listing_idper seller listing, so you can diff two runs and see exactly what moved. - Discovers events from any performer, team or venue page. Point it at
/new-york-yankees-ticketsand it finds the schedule itself. eventsOnlymode returns just the event rows with lowest price. Much cheaper when you only want to know what is on sale and roughly what it costs.- Works across every category. Concerts, MLB, NFL, theater — the extraction does not care what you point it at.
- Fails loudly on an empty result instead of billing you for a run that returned nothing.
What Can You Do With StubHub Listing Data?
- Ticket resellers — Watch an event's inventory and pricing across runs, and see which sections are thinning out before the price moves.
- Price monitors — Diff
listing_idbetween runs to catch new listings, price drops and sold-out sections without re-reading the whole market. - Market analysts — Compare face value against asking price by section to measure markup across venue, category or day of week.
- Event aggregators — Pull a performer's schedule and lowest price with
eventsOnly, then drill into the events that matter. - Venue and promoter analysts — Track secondary-market depth for your own events, which is the number nobody hands you.
Two jobs show up in how people actually use ticket scrapers, and this one is built for both. Some run a single event on a schedule and want every listing — that is monitoring, and it needs full inventory and a stable id to diff on. Others run once across many events and only want the headline price — that is research, and it needs eventsOnly and a small bill.
How StubHub Ticket Resale Scraper Works
StubHub does not put its inventory in the page source. The event HTML carries event metadata and a lowest price; the listings arrive separately once the page is running, behind AWS WAF and DataDome.
So the scraper runs a real browser, clears the challenge, then walks the listing grid page by page from inside that cleared session. Ten listings per page, however many pages the event has. It stops when the event runs out, not when the page stops scrolling.
Residential mobile egress, because that is what the site's bot protection lets through. If an exit gets refused it draws a fresh one and carries on.
Input
| Field | Type | Default | Description |
|---|---|---|---|
maxItems | integer | 50 | Maximum records to return, counting both event and listing rows. |
discoverUrl | string | — | Performer, team or venue page to pull events from. Example: https://www.stubhub.com/new-york-yankees-tickets |
eventUrls | array | — | Specific StubHub event URLs. Overrides discoverUrl when set. |
quantity | integer | 1 | Only return listings that can sell this many tickets together. |
eventsOnly | boolean | false | Return event rows without their listings. The cheap way to browse what is on sale. |
Supply either discoverUrl or eventUrls. Supplying neither is the one way to make it complain immediately.
StubHub Ticket Resale Scraper Output Fields
Every row carries record_type — event for an event summary, listing for a seller listing.
Event rows
| Field | Type | Description |
|---|---|---|
record_type | string | Always event on these rows |
event_id | string | StubHub event id |
event_url | string | Canonical event page URL |
event_title | string | Event name, e.g. Seattle Mariners at Los Angeles Dodgers |
event_date_utc | string | Start date and time, ISO 8601 |
venue_name | string | Venue name |
venue_city | string | Venue city |
venue_state | string | State or region |
venue_country | string | Country |
category | string | StubHub category for the event |
lowest_price | number | Lowest advertised price across the event |
price_currency | string | Currency of lowest_price |
availability | string | schema.org availability |
category_id | string | StubHub numeric category id |
Listing rows
| Field | Type | Description |
|---|---|---|
record_type | string | Always listing on these rows |
listing_id | string | Unique per seller listing. This is the one you diff on. |
section | string | Seating section label, e.g. 30RS |
section_id | integer | Numeric section id |
section_map_name | string | Section name as shown on the seat map |
row | string | Row within the section |
seat_from | string | First seat number |
seat_to | string | Last seat number |
available_tickets | integer | Tickets available in this listing |
available_quantities | string | Quantities the seller will split to, e.g. 1,2,4 |
max_quantity | integer | Largest purchasable quantity |
price | number | Raw per-ticket price |
formatted_price | string | Per-ticket price as displayed |
formatted_total_price | string | Total price as displayed |
formatted_fees | string | Fees, when broken out |
face_value | number | Face value, when the seller discloses it |
listing_currency | string | Currency the listing is priced in |
ticket_class | string | Ticket class, e.g. Infield Reserve |
ticket_type | string | Ticket type name |
listing_notes | string | Seller and site notes, e.g. Clear view |
star_rating | integer | StubHub star rating |
deal_score | string | StubHub deal score |
seat_quality_score | string | StubHub seat quality score |
is_seated_together | boolean | Whether the seats are together |
is_zone_ticket | boolean | Zone seating rather than specific seats |
is_cheapest | boolean | Flagged as the cheapest listing |
is_better_value | boolean | Flagged as better value |
is_sponsored | boolean | Promoted listing |
listing_url | string | Deep link to the listing |
scraped_at | string | ISO 8601 scrape timestamp |
Listing rows repeat event_id, event_title, event_date_utc, venue_name and venue_city, so a listing stands on its own without a join.
FAQ
How many listings does it actually return?
However many the event has. A single Los Angeles Dodgers game returned 552 unique listings across 58 pages. The event page itself shows ten, which is where most tools stop.
Can I track price changes over time?
Yes, and that is what listing_id is for. Run it on a schedule, keep the results, and diff on listing_id — new ids are new listings, missing ids have sold or been pulled, and a changed price on the same id is a repricing.
What is the difference between price and face_value?
price is what the seller is asking per ticket. face_value is what was originally printed on it, when the seller discloses it — often they do not. The gap between the two is the markup, which is usually the interesting part.
Why do some listings have no seat numbers?
Zone listings. When is_zone_ticket is true the seller is selling into a general area rather than specific seats, so seat_from and seat_to are empty and section is the granularity you get.
Can I scrape an event that has already happened?
No, and neither can anyone else. StubHub delists past events, so there is nothing on the page to scrape. The actor says so rather than handing back an empty dataset.
Do I need my own proxies?
No. Residential egress is handled for you, including drawing a fresh exit when one gets refused.
Need More Features?
Open a request at orbtop.com — extra filters, new discovery entry points, and scheduled delivery are all on the table. Specifics help more than "it should do more".
Why Use StubHub Ticket Resale Scraper?
- Full inventory, not a sample — 552 listings on an event whose page renders ten. If you are pricing against the market, you need the market.
- Seat-level detail — Section, row, seat range and quantity, plus face value and StubHub's own deal and seat-quality scores.
- Built for repeat runs — A stable
listing_idmakes diffing two runs trivial, which is what monitoring actually requires. - A cheap mode that is genuinely cheap —
eventsOnlyskips the listing walk entirely when you only need the schedule and the headline price. - Honest failures — A run that returns nothing raises an error explaining why, instead of handing you an empty dataset and a bill.