Multilevel Pricing

About multiple price points per seating category, and the difference between ticket types and categories

Ben Verbeken avatar
Written by Ben Verbeken
Updated over a week ago

Once you start selling reserved seating tickets, you’ll realise that ticket categorisation suddenly becomes somewhat more complex.  In this article, we’ll first explain why this is the case, and then we’ll show you how Seats can help you solve this.

The Problem

Ticket prices can be determined by many factors, like the physical location of the seat (e.g. ground floor, balcony), ticket buyer properties (e.g. age, VIP status, … ), the moment of purchase (e.g. early bird tickets) and many more.

Most ticketing platforms allow their users to define ticket types. In other words, they allow ticket sellers to determine price levels on just one of these dimensions. And rightfully so: you’ll want to make it as easy as possible to both sell and buy a ticket.

However, once assigned seating comes into the picture, it’s important to realise that pricing could become a matrix, as opposed to a simple one-dimensional list. That's because the ticket buyer will need to take two decisions at the same time:

  1. what age category do I belong to?

  2. Do I want ground floor or balcony tickets?

Let's take an example. 

Suppose we’re selling tickets for a concert in a theatre at the following prices:

  • normal tickets: 45 €

  • students: 20 €

Now if we want to use assigned seating for our event, we’ll want to adapt our pricing to a two-dimensional matrix, like so:

The point is this: any way you look at it, your ticket buyer will have to make two decisions: whether he’s a student or not, and whether he wants a seat on the ground floor, level 1 or level 2.

Categories vs Ticket Types

We make a clear and clean distinction between those two dimensions. 

The dimension that is directly linked to the physical location on the chart are what we call seat categories.
In the example above: ground floor, balcony level 1 and balcony level 2. Those are defined when drawing the chart, so from within the Seats Designer.

The other dimension, in the above example student vs normal tickets, are what we call ticket types.
They are passed in as a parameter when rendering a chart for an event, and so are not stored in the Seats database. The same is true for the actual ticket prices.

Categories

Since they are directly linked to the physical location of the seats on the chart, seat categories are defined when drawing the chart. You can add, remove and edit categories directly from within the Seats Designer: 

It’s important to note that Seats only stores a key, name and colour for a category. Or more explicitly: we don’t store pricing information at all, but you can pass in prices as an argument when rendering the a chart for a specific event.

Ticket Types

The exact prices per seat category and per ticket type can vary per event. Therefore, you can pass those in as a pricing parameter when rendering a seating chart for an event, like so:

<div id="chart"></div>
<script src="https://cdn.seatsio.net/chart.js"></script><script>
    new seatsio.SeatingChart({
        divId: "chart",
        publicKey: "publicDemoKey",
        event: "smallTheatreEvent2",
        pricing: xxx   //     <-- the pricing parameter
    }).render();
</script>

If you want to price your tickets just based on seat categories, you can pass in a simple array of objects, defining the prices:

pricing: [
    {'category': 1, 'price': 30},
    {'category': 2, 'price': 40},
    {'category': 3, 'price': 50}
]

If you want ticket buyers to select a ticket type as wel as a seat, you can pass in a more complicated structure as well, for example:

pricing: [
  {
    'category': 1,
    'ticketTypes': [
      {
        'ticketType': 'student',
        'label': 'For students',
        'price': 10
      },
      {
        'ticketType': 'normal',
        'label': 'Normal price',
        'price': 20
      }
    ]
  },
  {
    'category': 2,
    'ticketTypes': [
      {
        'ticketType': 'student',
        'label': 'For students',  
        'price': 20
      },
      {
        'ticketType': 'normal',
        'label': 'Normal price',
        'price': 30
      }
    ]
  }
]

If you do so, a popup will be rendered when a ticket buyer clicks on a seat, allowing them to select the appropriate ticket type:

Finally, it’s worth noting you can mix and match these two styles:

pricing: [
    {'category': 1, 'ticketTypes': [
        {'ticketType': 'adult', 'price': 30},
        {'ticketType': 'child', 'price': 20}
    ]},
    {'category': 2, 'ticketTypes': [
        {'ticketType': 'adult', 'price': 40},
        {'ticketType': 'child', 'price': 30},
        {'ticketType': '65+', 'price': 25}
    ]},
    {'category': 3, 'price': 50}
]


Conclusion

When you use assigned seating, it’s important to understand you can categorise tickets by the physical location on the seating chart - these are called seat categories-, and by other dimensions such as ticket buyer age - called ticket types.

Seat categories are defined when drawing the seating chart, whereas ticket types are different for every event and as such can be passed in when rendering a chart for an event. The same is true for the actual prices, whether they are defined per seat category only, or as a two-dimensional seat category/ticket type matrix.

Did this answer your question?