All use cases

Use case - classes & workshops

How to run recurring classes and workshops on Shopify

By Founder of UpsellShark and a working Shopify merchantUpdated

Short answer

A repeating class works on Shopify once each date can sell out on its own. In Easy Tickets & Events you set the class time once and pick a repeat rule: daily, weekly on chosen weekdays, monthly, or a list of dates you pick by hand. It generates every session as a separate bookable date with its own capacity, attendee list and waitlist. Students pick a date in the storefront popup, pay through your normal checkout, and arrive with a QR code you scan at the door. The app is free right now, capped at 500 tickets a month.

Can you take class bookings on Shopify without a booking app?

You can take the money. Make the class a product, price it, set inventory to the number of spaces in the room, and leave the "Continue selling when out of stock" box on the product page unticked so it stops at capacity. For one workshop on one Saturday, that is all you need.

It comes apart on the second date. Shopify counts inventory per variant, so a single "Drop-in" variant holds one number covering every Tuesday and Thursday you teach. Ten spaces sell and the class closes, including the week nobody has booked yet. A variant per date fixes the counting and hands you a standing job: a new variant every week, forever.

You also have no attendee list. The confirmation is a receipt with the buyer name on it, so the door is you and a phone, with no code to scan.

How do you set up a class that repeats every week?

Create the event, set it to recurring, give it a time. The repeat rule is where the timetable lives, and Easy Tickets & Events takes daily, weekly with a weekday picker, monthly, or a list of dates you pick by hand for a term that skips half term.

  • Frequency: daily, weekly on the weekdays you choose, or monthly
  • Time of day: applied to every session in the series
  • Start date and series end date: the app generates every session between them
  • Hand-picked dates: skip the pattern and select each date yourself
A repeat rule card on the left listing frequency weekly, weekdays Tuesday and Thursday, time 18:00 for every session, and a run from 6 January to 31 March. An arrow labelled generates points to a grid of individual class dates on the right, each one a separate bookable session carrying its own capacity, attendee list and waitlist.
The series stops at the end date you set, so push that date back and generate the rest when you are a few weeks out.

If I edit the class, what happens to sessions people already booked?

Edits split in two. Description, location, ticket template, attendee fields and the email and PDF templates cascade, so rewriting the "what to bring" line once lands it on every future Tuesday. Price and capacity go the other way, where the class value is a default and a per-session override wins, which is how the guest-teacher week costs more and the small-room week holds six.

One habit to keep: the series stops at the end date you set. Push that date back and generate the rest when you are a few weeks out. The recurring events docs have it field by field.

Should each class date be its own product, or one product with a date picker?

The choice decides what your catalog looks like. In date-picker mode the class stays one product and the popup shows a calendar: bookable dates selectable, full ones greyed, and picking a date drops that session in the cart.

In separate mode every date becomes its own Shopify product with its own page and its own Shopify inventory. A weekly class run for a year is 52 products in your catalog. Worth it when the sessions genuinely differ, a visiting instructor or a themed workshop you want to advertise and rank on a page of its own.

Teaching the same class every week? Take the date picker.

How do you stop one class being overbooked?

Capacity sits on the session, so Tuesday selling out has no effect on Thursday. Remaining spaces update as bookings land, and a full date greys out in the picker instead of quietly taking an eleventh booking.

There are two ways to count. Per-ticket-type inventory gives each rate its own stock, so 8 drop-in places plus 4 member places means up to 12 in the room. Shared inventory pools them into one number, which is what you want when the limit is physical: 10 mats, 8 wheels, sold in whatever mix people buy.

One booking can cover more than one person. A ticket type with a group size of four counts four places against capacity and admits four on a single QR code.

Two ways to count places in one class. On the left, per-ticket-type inventory: 8 drop-in places plus 4 member places equals up to 12 people in the room. On the right, shared inventory: a single pool of 10 places that both drop-in and member bookings draw from, sold in whatever mix people buy.
Capacity belongs to the session rather than the class, so a Tuesday that fills up has no effect on the Thursday.

Can you sell a 10-class pass or a monthly membership?

No, and this is the real gap for studios. Easy Tickets & Events sells a place in a specific session. There is no credit balance a student draws down over the next two months, no punch card, no auto-renewing membership.

Three features sit close enough to be mistaken for one. Group size puts several admissions on one booking for one session. A bundle sells one purchase that generates claim links, so a company buys ten places for a workshop and sends each colleague a link to fill in their own name. Ticket expiry stops a ticket working after a set number of days, and it still buys one session.

If passes or memberships are how the business earns, plan for that now. Shopify itself supports repeat and prepaid purchases, which is what the subscription apps on the App Store are built on, so running one of those alongside Easy Tickets - the subscription app takes the money on a schedule, Easy Tickets runs the timetable and the door - is a workable setup. We would rather say it now than have you find it in month two.

What happens when a class fills up?

The Add to cart button on that date turns into Join waitlist, and the popup collects a name, an email and optionally a phone number. The waitlist belongs to the session, so a person waiting on Wednesday 18:00 is not sitting on a list for the whole term.

When a place frees up because an order was cancelled or refunded, the app emails waitlisted people automatically, oldest signup first, capped to the number of places that opened. Nothing is reserved. First to click through and check out gets it, so keep the batches small when two places opened and forty people are waiting.

You can also notify people yourself from the waitlist tab, the whole list or one person, which is what you want when you squeeze in an extra mat. A Shopify Flow trigger fires on every signup, so the list can feed Klaviyo too. More in the waitlist docs.

A student cancels: transfer, refund, or move them to another date?

Transfer costs you nothing. The student opens their ticket page or confirmation email, clicks transfer, fills in the replacement name and email, and the app kills the old QR code and issues a fresh one. You are never involved, and the transfer history stays on the record for when the name at the door does not match.

Refund the order in Shopify admin and the app picks it up on its own: the attendee is cancelled, the QR code stops working, and the place goes back on sale, which sets off the waitlist email. The app can also cancel a ticket without refunding, for the late cancellation your terms say you keep.

Moving a booking from Tuesday to Thursday is the thing the app does not do. Transfer changes who holds the ticket and never changes which session it belongs to, and no admin action reassigns a booking to another date. The workaround is a refund plus a fresh booking, which at least hands the place to the waitlist. Worth knowing before you publish a reschedule policy.

Cancelling a whole session does work: open that date, cancel the instance, and sales close while everyone booked sees it on their ticket page.

How do you cut down no-shows in a class?

One reminder email goes out per session, on by default at 24 hours before the start, timed from a fixed list of 1, 2, 6, 12, 24, 48, 72 or 168 hours. Two hours ahead is a nudge and nothing more. Forty-eight gives someone room to cancel, which puts the place back on sale while there is still a weekend to sell it into.

The template is fully editable, so the reminder carries the studio address, the parking situation and your cancellation terms instead of a bare "your event is soon". Branding the ticket and the emails covers the editors for both. Switch on phone capture in the popup if you want to text as well.

What the app has no version of is a no-show report, a deposit-forfeit rule or a strike system. The attendee export carries a Check-ins column and everyone who never scanned is a zero, so the list of people who booked and stayed home is a spreadsheet filter rather than a screen in the admin.

How does the instructor take attendance at the door?

Each session has its own check-in page on a /checkin/ URL that you add to the home screen of whatever phone or old tablet lives at the desk. It caches on first load and keeps scanning with no signal, which matters in a basement studio with one bar of reception. Recurring classes get a date selector that jumps to the nearest session, and you can PIN-protect the page before handing the link to a cover teacher.

Point the camera at the QR code on the ticket, on a phone or a printed PDF, and the student is checked in against a running count of who is expected. Lost the email? Type the ticket code. Scan the wrong person and there is an undo.

One limit to plan around: the page is a scanner plus a log of who has been scanned, with no browsable list of everyone expected that a teacher ticks off by name. If your instructor wants paper, export the attendee list before class, which covers the whole series with the session on each row. The Shopify POS tile does search by name if you already run POS.

FAQ

Common questions

Do students need a customer account to book a class?
No. The popup collects the student name and email before add to cart, and checkout runs as normal Shopify guest checkout. Shopify customer accounts are optional and mainly save regulars from retyping.
Can I collect injury notes or dietary requirements when someone books?
Yes. Add custom fields as text, dropdown, checkbox or date, and mark the ones you need as required so the popup blocks add to cart until they are answered. Answers sit on the student attendee record, and they can edit later from their ticket page.
Can one class date cost more than another?
Yes. Price is a per-session override, so a guest-teacher week or a bank holiday session is priced on its own. Scheduled price tiers are the other route, where an early-bird price flips to full price at a set time.
Can I charge separately for mat hire or materials?
Yes. Add-ons are option groups on the class, each option with its own price and its own stock, so six aprons sell out on their own while the class still has places. Pick per attendee, where everyone chooses a shirt size, or per order, where one parking space covers the car that brought three people. Setup is in the add-ons docs.
What does it cost, and what counts as a ticket?
It is free. Easy Tickets & Events is currently listed as a free app with every feature included and a cap of 500 tickets a month. One booked place is one ticket, add-ons like mat hire count as zero, and refunded bookings come off the count.

Put your class timetable on Shopify

Set the schedule once, let students pick their date, and scan them in from the phone at the desk. Easy Tickets & Events is free right now, with a cap of 500 tickets a month.

See Easy Tickets & Events