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
API v1
curl "https://seatdata.io/api/v1/events/1341405/sales?limit=3" \
  -H "Authorization: Bearer $SEATDATA_API_KEY"
200 OK application/json 3 of 2,018 rows
{
  "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.

MethodEndpointReturnsBilling
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. 0 means 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 sh rows, a string on vs rows.
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 null on sh rows.

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/batch

    Up to 100 events per request, keyed by whichever id you sent. Billed the same as single calls.

  • Structured errors

    HTTP 429 Retry-After: 12

    Every 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/usage

    Per-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 price

    Older 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.

  1. Create an account

    Sign up with an email address. A $10 credit is added to your balance on signup. No card needed to start.

  2. Generate a key

    Open API quickstart in the dashboard and generate a key. It is shown once. Rotate or revoke it any time.

  3. 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.

PlanMonthlyIncluded requestsPer 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
New accounts start with a $10 credit. Requests beyond a plan's allowance bill at that plan's per-request rate. Full pricing details

Questions developers ask first.

What counts as a request?
A call to the sales, listings, or stats endpoint that returns data. A sales call that returns zero sales is free, paging through a result set is free, and search, account, and usage are always free.
Do I need a subscription?
No. Pay-as-you-go bills $0.04 per request from a prepaid balance, and new accounts start with a $10 credit. Monthly plans lower the per-request rate and include a block of requests.
Is there an SDK?
Yes. pip install seatdata-sdk gives you sync and async clients that handle auth and pagination. Other languages call the REST API directly.
How fresh is the data?
Events you request through the API are prioritized and rescanned at least every 30 minutes. Stats and listings calls are free when nothing has changed since your last pull.
What does a quantity of 0 mean?
Quantity is inferred from observable marketplace changes. When it cannot be reliably determined, the row reports 0 rather than a guess.
Which marketplaces are covered?
Sales are observed on major secondary marketplaces. Every row carries a source code, and ?source=all merges the sources for an event.
Can I get an event you are not tracking yet?
Yes. Submit it with the event-request endpoint and poll the job status. Once added, it is scanned like any other event.

Make your first call today.

$10 credit on signup. Pay-as-you-go from $0.04 per request. Plans from $19 a month.