Ticketing: purchase multiple items at once + inventory management

I’ve come up empty-handed on one of these topics, and with sub-optimal solutions on the other after digging through tutorials and community threads.

The 1st problem: I have a ticketing app. My customer would like to purchase 5 tickets - 2 adult, and 3 child tickets. Currently, it seems like you have to tap the “buy” button 5 individual times to add 5 of them to the cart, and you’d have to navigate to entirely different products to differentiate between “adult” and “child” ticket options.

Possible solution: It would be much easier for them to choose ticket quantity or ticket type (adult, child, fastpass, “backstage pass”, etc) using a number picker and a general selection picker. These selections would also need to be passed along the purchase + processing flows to the backend for logging. Maybe a “Product” type Component would help focus the options? I could see a general “picker” being useful in ton of other product scenarios, as well. - Size options for clothes, as just one example.

The 2nd problem: I only have x capacity and therefore x available tickets to sell per night. Even basic inventory management is proving overly complex. Subtracting one ticket from my total upon purchase, or even upon adding it to the cart would help me avoid over-selling tickets.

Possible solution: Allow me to set inventory, and easily access the “App:Sales” tab within Glide to subtract purchases from that inventory.

In case more context is needed: I build a yearly Haunted House for my community, and I’m looking for fun and useful ways to leverage a companion app that my patrons will enjoy. It’s normally 100% free and visitors simply queue up, but this year, they need to reserve a time slot and purchase PPE to safely enter + “infiltrate the mad scientist’s lab” :ghost:

A rough, unfinished 1-day effort on the ticketing portion: https://prismhaunt.glideapp.io/

1 Like

Solution: (Presuming people are not buying like more than a few tickets at a time. less than 10)
You’re going to need 2 sheets to pull this off.

  1. A sheet that list all your tickets individually
    Note. If you have 200 tickets you have to create 200 separate line items since all tickets is unique and will have a unique IDKEY
    Just Shift + Drag copy glide will automatically apply a unique key to each ticket even tho they have the same name.

  2. A sheet that Contains all your Sales,

On your sales sheet.
Columns: Ticket 1 Name: Ticket 1 Price - Ticket 2 Name: Ticket 2 Price: Ticket 3 Name: Ticket 3 Price and so fourth to as many as you think people will buy at one time. Use the auto-component to automatically drop in price of the ticket just like the date and user-email
Last column should concatenate all the tickets Id separated by comma this will be used in glide as a filter for future drop down ticket purchases.
NOte: Drop-down has the ability to filter drop-down items based on if contains specific data. So you say, show drop-down list except those contained in concatenated column of purchases.

Each time a ticket id show up in the purchase sheet glide removes them from the available list of dropdowns.

use the spreadsheet to vlookup the cost of each ticket and multiply it by the amount. So you will have a 3rd column beside each pair for calculated price for each ticket and quantity.

You then create a Subtotal column a tax column and a Final Cost column that will respectively calculate the needed amount.

That’s the rough basic gist of how I would do it just out of my head. Should work in theory. I currently use this system in one of my paid apps. Airkitchen.us People have to order many different menu items from chefs and I use a similar system to filter what they can pick.
Instead of using subtraction I just used glide’s filter to eliminate what has already been purchased.

1 Like

I don’t have a good solution to your first problem, but this might help for your second problem.

You can create access to the app: sales sheet in glide by duplicating it with a formula under a different sheet name. The only problem is it will eat up rows if you are only using a free account. Then you can create a relation to it by date and a rollup column to count the number of tickets sold. Using math columns, you can calculate how many tickets are left. When sold out, hide the buy button. There will be some lag between the sheet and glide due to the duplicated sheet having to update and sync to glide.

Another alternative is to just perform a countif within the sheet against the app: sales sheet and have the value within your night/timeslot sheets. Maybe you are doing this already.

1 Like

Great idea and work-around. I may give this a go even though it seems daunting (and possibly laggy) with thousands of slots/tickets available, and attendees frequently coming in large groups, over the suggested 10.

That said, my feature request stands. The work-around feels overly complex, and prone to scalability issues. Right now, there are better options out there - Ticketing plugins for a mobile-optimized website CMS are likely cost-competitive (or cheaper), easier to setup, and much easier to manage than the current options through Glide.

I prefer to use Glide, particularly so that I can layer in other fun interactive features for my guests, which is why I bring it up as a feature request.

Yes, I considered duplicating the sheet to one Glide can see, but like you mentioned, it’s prone to lag - not ideal in a limited-item checkout flow.

I’m still getting up to speed on the countif function, but my understanding is you need to look for an exact match before you can count. None of the columns that Stripe spits back to me can be relied upon for exact matches (customer name, SKU, etc, etc, are all different in every purchase instance).

1 Like

A year late here but… i’m working on a platform to allow purchasing of a very limited-item product (1-2 products bought before sell out) and am wondering about the lag as well. Most of the opportunities to buy will be very competitive and so think there would be a lot of issues relying on a solution that lags.

If you see this or have a moment to respond @David_Fefferman or @Jeff_Hager , would love to see if y’all had any other solutions to this as of now. Appreciate any advice.