The API for ticket sales data.
Every sale we observe across the secondary ticket market, for 100,000+ live events and 1,300,000+ since 2021, in one JSON call. Sales, price history, listings, and event search, with bearer auth, cursor pagination, and a Python SDK.
- $10 credit on signup. No card needed to start.
- Pay-as-you-go from $0.04 per request
- Plans from $19/mo
curl "https://seatdata.io/api/v1/events/1341405/sales?limit=3" \
-H "Authorization: Bearer $SEATDATA_API_KEY"
from seatdata import SeatDataClient
client = SeatDataClient(api_key="YOUR_API_KEY")
page = client.get_event_sales(event_id=1341405, limit=3)
for sale in page["data"]:
print(sale["timestamp"], sale["section"], sale["price"])
import requests
r = requests.get(
"https://seatdata.io/api/v1/events/1341405/sales",
params={"limit": 3},
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
page = r.json()
const r = await fetch(
"https://seatdata.io/api/v1/events/1341405/sales?limit=3",
{ headers: { Authorization: "Bearer YOUR_API_KEY" } }
);
const page = await r.json();
{
"event_id": 1341405,
"seatdata_event_id": 1341405,
"sh_event_id": 160893638,
"vs_event_id": null,
"total_count": 2018,
"data": [
{
"timestamp": 1790371786,
"quantity": 1,
"price": 44.98,
"zone": "Upper",
"section": "2",
"row": "3",
"listing_id": 14191433645,
"source": "sh",
"all_in_price": null
},
{
"timestamp": 1790371748,
"quantity": 1,
"price": 35.43,
"zone": "Upper",
"section": "20",
"row": "GA",
"listing_id": 14198707936,
"source": "sh",
"all_in_price": null
},
{
"timestamp": 1790371538,
"quantity": 1,
"price": 80.27,
"zone": "Golden",
"section": "Standing Arena",
"row": "GA",
"listing_id": 13977760469,
"source": "sh",
"all_in_price": null
}
],
"has_more": true,
"next_cursor": …,
"sources": [ … ]
}
Live response Anna Vissi · Athens Olympic Stadium, Athens · 2026-09-26. Refreshed every 10 minutes.
- 100,000+Current events tracked
- 1,300,000+Events since 2021
- 80,000,000+Sales records
- 2,300,000,000+Listings tracked
- Last sale observed
One API for the whole market.
Search for events, then pull the sales, price history, and listings behind each one. Most calls are free. The ones that cost a pull say so.
| Method | Endpoint | Returns | Billing |
|---|---|---|---|
| GET | /v1/events/search | Find events by performer, venue, city, or date. Returns SeatData and marketplace ids. | Free |
| GET | /v1/events/{event_id}/sales | Every observed sale for an event, newest first. Cursor paginated. | 1 pull per eventPaging is free. Events with no sales are free. |
| POST | /v1/events/sales/batch | Sales for up to 100 events in one request. | 1 pull per eventOnly events that return sales are charged. |
| GET | /v1/events/{event_id}/stats | Price and inventory time series, broken out by zone. | 1 pull per eventFree when nothing new has been recorded. |
| GET | /v0.1.1/listings/get | Active listings for an event. | 1 pull per eventFree when listings have not refreshed. |
| GET | /v1/account | Your plans and the current rate-limit catalog. | Free |
| GET | /v1/usage | Requests this billing period, per endpoint. | Free |
Each endpoint links to its reference page, with request and response schemas and examples in five languages.
What a sale looks like.
Each row is one observed transaction. The fields mean exactly what they say, including the cases where the marketplace did not tell us.
{
"timestamp": 1790371786,
"quantity": 1,
"price": 44.98,
"zone": "Upper",
"section": "2",
"row": "3",
"listing_id": 14191433645,
"source": "sh",
"all_in_price": null
}- timestampinteger, unix seconds
- When the sale was observed, in UTC.
- quantityinteger
- Tickets sold. Inferred from observable listing changes.
0means it could not be reliably determined. - pricenumber
- The listing price per ticket at the time of observation, before fees.
- zone, section, rowstring
- Seat location as listed on the marketplace.
- listing_idinteger or string
- The listing the sale came from. An integer on
shrows, a string onvsrows. - source"sh" | "vs"
- Which marketplace observed the sale. Rows default to
sh. Ask for both with?source=all. - all_in_pricenumber or null
- The fee-inclusive price when the marketplace shows one. Always
nullonshrows.
Two sources, one shape. vs rows add norm_section and norm_zone, which hold the names those seats use on sh, so you can join the two sets on the same event.
The parts you only notice when they are missing.
The API behaves the way you expect an API to behave, so your integration does not need workarounds.
Bearer auth
Authorization: Bearer <key>Keys are issued in the dashboard, shown once, and rotate or revoke on demand. Multiple keys per account.
Cursor pagination
?starting_after=<next_cursor>Walk an event's full history page by page. Paging never costs a pull, and the first page carries the total count.
Batch requests
POST /v1/events/sales/batchUp to 100 events per request, keyed by whichever id you sent. Billed the same as single calls.
Structured errors
HTTP 429 Retry-After: 12Every error is a JSON envelope with a type and a message. Rate limits come with a Retry-After header.
Usage you can query
GET /v1/usagePer-endpoint counts for the current billing period. Free to call, so your monitoring can poll it.
Versioned and documented
v0.3 → v1, same key, same priceOlder endpoints stay supported. An OpenAPI spec, a dated changelog, and a Python SDK with sync and async clients.
Three steps to a first response.
No sales call, no approval queue. The credit is applied the moment the account exists.
Create an account
Sign up with an email address. A $10 credit is added to your balance on signup. No card needed to start.
Generate a key
Open API quickstart in the dashboard and generate a key. It is shown once. Rotate or revoke it any time.
Make the call
Install the SDK, or call the REST endpoints from any language.
$ pip install seatdata-sdk from seatdata import SeatDataClient client = SeatDataClient(api_key="YOUR_API_KEY") sales = client.get_event_sales(event_id=1341405)
Per-request pricing that falls as you grow.
Start on pay-as-you-go with no monthly fee, or pick a plan with requests included. Change plans any time.
| Plan | Monthly | Included requests | Per request |
|---|---|---|---|
| Lite | $19/mo | 750 | $0.0250 |
| Growth Popular | $149/mo | 8,000 | $0.0186 |
| Scale | $399/mo | 33,000 | $0.0121 |
| Business | $999/mo | 125,000 | $0.0080 |
| Enterprise | $2,799/mo | 500,000 | $0.0050 |
| Pay-as-you-go | $0/mo | Prepaid balance | $0.0400 |
| Volume | Contact us | 500,000+ | Negotiated |
Questions developers ask first.
What counts as a request?
Do I need a subscription?
Is there an SDK?
How fresh is the data?
What does a quantity of 0 mean?
Which marketplaces are covered?
Can I get an event you are not tracking yet?
Make your first call today.
$10 credit on signup. Pay-as-you-go from $0.04 per request. Plans from $19 a month.