How to Sell Class Passes for Spin Studios and CrossFit Boxes
Spin studios and CrossFit boxes have a ticketing problem that most event platforms simply weren’t built for. You’re not selling one big event — you’re selling the same 6 a.m. class forty-eight times a month, plus drop-ins, plus 10-class punch passes, plus that one member who swears they’ll come “at least three times a week.” General-purpose ticketing sites charge you a fee on every booking, don’t understand recurring schedules, and definitely don’t know what to do with a punch card. Meanwhile, dedicated gym-management software often costs more per month than a small studio’s coffee budget.
If you already run (or can run) a WordPress site, there’s a third option: sell class spots as WooCommerce products, with a real schedule, per-class capacity, and QR check-in at the door. This guide walks through how to set that up for a spin studio, CrossFit box, or any class-based gym — including the two things owners ask about most: punch passes and stopping people from double-dipping on one pass.
Why class-based gyms outgrow generic ticketing fast
A concert happens once. A WOD happens every day at 6, 12 and 18. That difference breaks most ticketing tools in three ways:
Fees compound brutally. A per-ticket fee that feels tolerable on a $60 concert ticket is painful on a $15 drop-in — and you sell hundreds of those a month. On a self-hosted setup with Venuera, the core plugin is free and adds no per-ticket fee; you pay only your normal payment-processing costs.
Capacity is per class, not per event. A spin room has 20 bikes. Every single session needs its own cap of 20, and “Tuesday 6 p.m. is full” must never block sales for Thursday.
Attendance is repeat by design. Your best customers come three times a week. You need passes that cover multiple visits, and a door check-in that knows how many visits a pass has left.
Step 1: Model your schedule as recurring events
Don’t create a separate event for every class — you’ll be doing data entry forever. Set each class type up once as an event (e.g. “Spin 45”, “CrossFit WOD”, “Beginner Foundations”) and let a recurrence rule generate the dates.
With the Recurring Events add-on, you define the repeating schedule in the event editor with a live preview of the generated dates, and upcoming occurrences are created from the rule automatically. Two behaviors matter for gyms:
Each date tracks its own capacity
Every occurrence tracks its own ticket sales, so your 20-bike cap applies date by date. A sold-out Monday never blocks Wednesday, and you can’t oversell a single session.
Members pick their session before paying
A front-end date and time picker on the event page lets the customer choose the exact session — “Thu 18:00” — before the ticket goes into the WooCommerce cart. Checkout stays the standard WooCommerce flow you already use, with the same payment gateways, taxes and coupons. If you’re new to that side of things, the WooCommerce documentation covers store setup well, and we’ve written a broader walkthrough in our guide to setting up recurring events for classes and workshops.
Step 2: Build your ticket-type lineup
Because Venuera tickets are real WooCommerce products, your “pricing plans” are just ticket types with different prices and rules. A lineup that works for most studios and boxes:
Drop-in — full price, single entry. This is your default ticket type, and single entry is literally the default check-in rule, so there’s nothing extra to configure.
Intro / first-timer offer — a discounted single entry. You can also implement “first class free or cheap” with a standard WooCommerce coupon restricted to new customers, rather than a separate product.
Punch pass (e.g. 10 classes) — one purchase, multiple entries. This is where check-in rules come in, covered in the next section.
Unlimited monthly pass — unlimited entries within a date window, usually capped at one class per day.
Every buyer gets a ticket with its own unique QR code, and each completed order lands in your own WooCommerce order list — your customer data stays in your database, not on a third-party marketplace.
Step 3: Turn check-in rules into punch passes
Here’s the part that surprises people: you don’t need a separate “membership” system to sell multi-visit passes. Venuera’s check-in engine has three rule dimensions, and combining them models nearly every gym pass:
Max entries — how many total times a ticket can be scanned in. Set it to 1 for a drop-in, 10 for a 10-class punch pass, or unlimited for a monthly.
Availability window — when scanning is allowed at all. A pass can be open-ended, valid within a fixed date range (perfect for “valid through March 31”), valid for a set time after purchase (e.g. a punch pass that expires 90 days after the order), or tied to a window around the event time.
Per-period limit — how many entries are allowed per hour, day, week or month. This is the anti-abuse rule: an “unlimited” monthly capped at 1 entry per calendar day can’t be shared by two friends attending morning and evening sessions on the same pass. You can choose rolling periods (last 24 hours) or calendar periods (per calendar day/week/month).
So a 10-class pass valid for 90 days, max one class a day, is simply: max entries 10, availability 90 days after purchase, limit 1 per day. Rules are resolved in layers — global defaults, then per-event overrides, then per-ticket-type overrides — so you set your studio-wide policy once and only override the exceptions.
Step 4: Run the door with QR scanning
At class time, coaches scan the QR on the member’s phone with the Check-in add-on. The scan enforces every rule above automatically: a used-up punch pass is rejected, a second same-day scan on a daily-limited pass is rejected, and a valid pass shows how many entries it has used. No spreadsheet at the front desk, no arguing about how many classes are left — the ticket itself knows.
If you also sell at the front desk — walk-ins, water bottles, a last-minute drop-in — the Point of Sale add-on lets you take those in person against the same inventory, so a walk-in can’t take the last bike a member just booked online.
Step 5: Get your classes found on Google
Every Venuera event outputs Schema.org Event structured data automatically, which is what Google reads to show events in rich results. That matters more than most gym owners realize: “spin class near me” and “crossfit drop in [city]” are high-intent local searches, and structured data is how your Tuesday 6 p.m. session becomes eligible to appear for them. Google’s own event structured-data guidelines explain what gets shown. Since it’s generated for you, your job is simply to keep titles, times and locations accurate.
Round it out with the basics: a class-schedule page that links each class to its booking page, Google Business Profile posts for special events (competitions, bring-a-friend days), and an email list of past attendees — every buyer is already a WooCommerce customer, so you own that list.
Pricing tactics that fill classes
A few patterns that consistently work for studios and boxes: price the punch pass so the per-class cost sits about 15–25% below drop-in — enough to reward commitment without cannibalizing monthlies. Use WooCommerce coupons for bring-a-friend promotions instead of creating new products. And treat your quietest slot as marketing inventory: a cheaper “off-peak” ticket type for the 2 p.m. class costs you nothing and introduces new people to the studio. For deeper dives, see our guides on selling tickets for fitness and yoga classes and selling class passes for martial-arts gyms — the mechanics carry over directly.
Ready to sell class spots on your own site? Venuera’s core plugin is free, tickets are WooCommerce products, and there’s no per-ticket fee — you keep what your members pay. Add Recurring Events and Check-in when you need them.
Frequently asked questions
Can I sell a 10-class punch pass with Venuera?
Yes. Create a ticket type and set its check-in rule to a maximum of 10 entries. You can also add an expiry (for example, valid for 90 days after purchase) and a per-day limit so one pass admits one visit per day. The QR scan tracks how many entries have been used.
How do I stop two people from sharing one unlimited pass?
Use a per-period check-in limit. Capping a pass at one entry per calendar day means a second scan the same day is rejected, so a shared pass can’t admit two people at different sessions. Limits can be per hour, day, week or month, on a rolling or calendar basis.
Does a full class block bookings for other dates?
No. With the Recurring Events add-on, each occurrence tracks its own ticket sales, so capacity is enforced per date. A sold-out Monday session has no effect on Wednesday’s availability.
Do I pay a fee on every class booking?
No. Venuera’s core plugin is free and charges no per-ticket fee. You pay only your payment processor’s normal transaction costs and, optionally, for add-ons like Recurring Events, Point of Sale or Check-in.