Audience: Riding school owners, independent instructors and organisation admins
Overview
A lesson package is a block of lessons sold at a set price: a 10-lesson private block, a 5-lesson group block, a school-holiday clinic pack. The client pays once, and Horsify tracks the lessons they have left and the date the block runs out. When they book, they can pay with a credit from the block instead of paying again.
A package can be sold in more than one block size. "Beginner Child Lesson" is one package offered as a single lesson, a block of four and a block of eight, each with its own price and validity, not three packages that happen to share a name. Set the sizes up once and a price rise is one edit rather than three.
Packages are the difference between chasing payment lesson by lesson and taking a term's money up front, and they give clients a reason to commit to a run of lessons rather than booking one at a time.
Go to: Programs & Packages under your riding school heading in the organiser menu (down the left of every organiser page), then the Packages tab along the top.
Requires: A Riding School, Instructor or Club Site Premium subscription. Creating, editing, withdrawing or selling packages needs an admin, or staff with Programs and packages at Manage (see Who can do what below).
How a package moves through Horsify
There are three separate steps, in three different places. Most confusion about packages comes from expecting one of them to happen automatically.
| Step | Where | What happens |
|---|---|---|
| 1. Define it | Riding School → Programs & Packages → Packages | You create the product: name, lesson type, how many lessons, total price, how long it stays valid, and whether clients can buy it online. Nothing is sold yet. |
| 2. Sell it | Your public riding school page, or Riding School → Clients → [client] → Lesson packages → Record sale | Online, the client pays you through Horsify and the credits appear once the payment lands. At the front desk you record how they paid and the credits appear immediately. |
| 3. Spend it | The booking form, or the client's own online booking page | Choosing the package pays for the lesson and uses one credit. If the venue charges a facility fee, that fee is still paid (see Facility fees on package lessons). |
Two ways a package gets sold
-
Online (self-service). Tick Sell this size online against a block size and the package is listed in two places: your public riding school page at
/riding-school/{your-slug}, and the Packages row on your Book Now page at/book-now, beside lessons, horse rides and facility hire. Clients add it to their cart and pay you through Horsify, on your own Stripe account, exactly like a lesson booking. The credits are granted when the payment lands, not when they hit checkout, so an abandoned or failed payment never hands out free lessons. - Front desk. Leave the tick off for sizes you only sell in person. Record sale grants the credits immediately and asks how the client paid (cash, bank transfer, EFTPOS, card, club credit). Horsify does not take that money (you collect it), but recording the tender means the sale shows up in your reporting and the client gets a receipt.
Step 1: Create a package
Go to: Riding School → Programs & Packages → Packages tab → New Package. If you administer more than one organisation, choose the right one under Switch in the organiser menu first.
| Field | Notes |
|---|---|
| Package name | What the client sees on their balance and on the sale dropdown. Name the lesson, not the quantity: "Beginner Child Lesson" rather than "4-Lesson Beginner Pack", since one package now carries every size you sell it in. Required. |
| Description | Optional detail: what's included, who it suits. |
| Lesson type | Group Lesson, Private Lesson or Clinic. A package covers exactly one type. See Lesson type is a hard rule below. Required. |
| Restrict to specific lesson types | Optional. Leave every box unticked and the package covers any lesson of the type above, so a credit from a 30-minute block will pay for a 60-minute lesson. Tick specific lesson types to pin the package to exactly those, so a block is only worth what it was sold as. |
| Block sizes | One row per quantity you sell: lessons, price, validity, and whether that size is on sale online. Add a size for each extra quantity. Every package has at least one. |
| Display order | Controls the order of the cards on this page. Lower numbers first. |
Each block size carries its own validity, because a bigger block usually needs longer to work through: four lessons in 120 days, eight in 180. Each row also has its own Sell this size online tick, so you can publish the 4- and 8-lesson blocks and keep the single a front-desk sale.
Every row shows its per-lesson figure as you type, such as "$50.00 / lesson". Horsify calculates that from the price and the lesson count; you can't set it separately, so the advertised per-lesson rate can never drift away from what the block actually costs.
Removing a size is safe. Blocks already sold keep the lessons, price and expiry they were bought on. Withdrawing the 8-lesson size stops new sales of it and changes nothing for the clients who already hold one.
Press Create Package. The new package appears on the page straight away, marked Active, and becomes available in the Sell a package dropdown on every client, once per block size it is sold in.
Choosing a validity period
Validity is what stops a package becoming an open-ended liability. Some rules of thumb:
- 90 days suits a weekly 10-lesson block with room for a couple of missed weeks.
- 180 days suits fortnightly riders or adults who ride around work.
- 60 days or less suits a school-holiday clinic pack that is meant to be used in one break.
The expiry is fixed at the moment of sale, so a client who buys a 90-day block today has until 90 days from today, not 90 days from their first lesson. For an online purchase the clock starts when the payment lands, not when the client added the package to their cart.
Restricting a package to specific lesson types
By default a package covers its whole category, so a "10 Private Lessons" block can be spent on any private lesson you offer, whatever it costs. That is fine when your private lessons are all much of a muchness, and a problem when they are not: a client can buy ten at your 30-minute rate and spend them on 60-minute lessons.
Ticking specific lesson types closes that. A block restricted to 45 Minute Private can only ever be spent on a 45-minute private lesson; anything else is refused at booking with a message naming what the package does cover. Existing packages are unrestricted and stay that way, so nothing changes for blocks you have already sold.
The form warns you if a package works out dearer per lesson than the dearest lesson it covers, which usually means a slip in the lesson count or the price.
Step 2a: Let clients buy online
Tick Sell this size online against at least one block size and the package appears in two places. Only the ticked sizes are offered to buyers; the rest stay front-desk stock.
Your riding school page (/riding-school/{your-slug}), under your lesson price list, with its price, lesson count, what it covers and how long it lasts. The client presses Buy this package, which puts it in their cart.
Your Book Now page (/book-now), as a Packages row alongside Lessons, Programs & events, Trail & horse rides and Facility hire, counting how many packages are on sale. Opening it lists them with their price and what each one covers; choosing one opens the package itself, where the client can read the lesson count, the price per lesson, the type of lesson it may be spent on and how long the credits last before adding it to their cart. This is the route a client takes when they arrive to book rather than to browse. A package you have not ticked for online sale never appears here, and its page cannot be reached by guessing the address.
Either way they pay at checkout on your own Stripe account, the same route, fees and payouts as a lesson booking. Their credits appear under My Lessons → Packages once the payment lands, along with a receipt by email.
A few things worth knowing:
- Credits are not granted until the money is in. A client who reaches checkout and abandons it, or whose card fails, gets nothing.
- You need online payments set up. If your riding school hasn't connected Stripe, or doesn't accept online payment, the buy button will tell the client to contact you instead.
- Withdrawing a package (untick the toggle, or deactivate it) removes it from the page at once. A client who already has it in their cart is refused at checkout rather than being sold something you have stopped offering.
Step 2b: Sell a package at the front desk
Go to: Riding School → Clients, switch to card view, and press Lesson packages on the client's card.
- Under Sell a package, choose the block from the dropdown. A package sold in several sizes has one row per size, each showing the lessons, price and validity, so you sell the four or the eight by picking it rather than by picking a different package. Sizes kept off your public page are sellable here.
- Choose how the client paid (cash, bank transfer, EFTPOS, card, club credit or other) and add a receipt or bank reference if you have one.
- Press Record sale.
The credits appear immediately under Purchased packages, with the purchase date, the expiry date and a green "3 of 3 left" badge.
Recording a sale does not charge the client. Horsify has no card step here. It records that the block was sold and grants the credits. Take payment however the client is paying (card terminal, cash, bank transfer) and then record the sale. The tender you choose is stored against the sale and on the client's tax invoice, so the money shows up in your reporting even though it moved outside Horsify. If you want the client to pay through Horsify instead, tick Sell this size online against that block and send them to your riding school page.
What the balance list tells you
Each row under Purchased packages shows:
- The package name. This is the one place a balance follows the live package rather than the sale, so renaming a package renames it on every balance already sold.
- Bought date, and Expires (or Expired) date.
- A badge reading "x of y left", green while the block is still usable, grey once it is spent, expired or withdrawn.
Scanning this list is how you spot the client who is one lesson from the end of their block, which is the moment to offer them the next one.
Correcting the lessons left
If a balance is wrong (for example a block carried over from another system was typed in as 3 left when it should have been 1), press the pencil beside the block, enter the right number under Lessons left and press Save. It can't be more than the block's size, less any lessons already in the diary that were paid from it; cancel one of those lessons to give its credit back first. A term program's block can't be corrected this way. Correcting needs an admin, or staff with Programs and packages at Manage.
Moving a block to another client
Sold a block to the wrong client (one sister instead of the other)? Press the arrows beside the block, search for the right client, choose them and press Move package. The block keeps its price, its expiry and its receipt; only whose it is changes, and nobody is emailed. A block can move only while no lesson in the diary is paid from it: cancel those lessons first, or leave the block where it is. A term program's block can't be moved. Moving needs an admin, or staff with Programs and packages at Manage.
One block for the whole family
A block bought by a parent pays for their children's lessons too. Sell the block to the parent, and when you book a lesson for one of their children the parent's block is offered beside any the child holds, named as the parent's, for example Small Family's Group Block 8, with 6 of 8 left. One credit comes off the parent's block for each child's lesson, so two sisters can share an 8-lesson block 4 and 4, or any other way.
A child counts as the parent's when they're linked here: added with Add child on the parent's card, linked with Link to a parent, or on the parent's own family in Horsify. Names alone don't link anyone, and one child's block never pays for a brother's or sister's lessons. A child's Lesson packages dialog lists the family blocks they can use under Family packages they can use, to read only: change the block from the parent's card.
The lesson is still the child's, so any facility fee on it is invoiced to the child (sent to the parent when the child has no email of their own). Cancelling the lesson gives the credit back to the parent's block.
Step 3: Spend a credit on a lesson
When you book for the client
On Riding School → Bookings, press New booking and choose the client first. If they (or a parent who books for them) hold usable credits for the lesson you're booking, a Lesson package section appears. When exactly one of the client's own blocks pays for that lesson, the form chooses it for you: Use credits this client already has is already selected, with that block under Which package, for one lesson. A parent's block is never chosen for you. Otherwise choose Use credits this client already has (or Use credits this client or their family has; it is listed first), then pick the block under Which package; each one shows how many lessons are left and when it expires, and a parent's block is named as theirs. The form never chooses Sell a package with this booking for you.
One credit comes off the block and the lesson is paid, with no deposit. If the lesson is at a venue that charges a facility fee, the booking is priced at that fee and the form tells you it is still owed. Otherwise there is no balance owing.
Choose "Don't use a package" to book and charge normally.
Book a block's lessons one at a time
A block sold at the desk is often booked a lesson at a time, on whatever days suit the client, rather than on one weekly time. While the lesson is paid from credits the client already has, the form offers Save and book another beside Create Booking:
- Choose the time of the first lesson and press Save and book another.
- The lesson is booked and the form stays open, with the same client, package, lesson type, instructor, venue and horse. Only the date and time (and the notes) are cleared, and a message says how many credits are left (5 of 8, for example).
- Choose the next time and press Save and book another again, as often as you need.
- When the last credit is booked the form says so, and Done is the only button left. Once a lesson is booked, Cancel reads Done too: press it at any point to close the form, and the diary shows every lesson you booked.
The client is sent a waiver request at most once while you do this, however many lessons you book.
Going back to the client. When you press Book a lesson on a client's Lessons (from their card on the Clients page), leaving the booking form takes you back to the Clients page with that client's lessons open again, so you can see what you have just booked.
Sell the block and book its lessons in one go
The Lesson package section on the booking form has three settings:
| Setting | What it does |
|---|---|
| Don't use a package | Books and charges normally. |
| Use credits this client already has | Spends a block they've already bought. Nothing to collect. |
| Sell a package with this booking | Records the sale and schedules the lessons, in one submission. |
Choosing Sell a package with this booking shows the same controls as the client's package tab (which package, how the client paid, and an optional receipt reference) and then offers Book several lessons now. Leave that ticked and the form lists one lesson per credit: the first at the time you chose above, each later one a week after the one before, all with the same instructor and horse. Change any lesson's date, start time, instructor or horse on its own row; a lesson you haven't touched keeps following the first one as you change it. Each row shows the times free that day (tap one to use it) and whether the lesson can be booked as it is:
- Free: nothing is in its way.
- A warning (amber): the instructor isn't working then, or is already teaching, or the arena or group is full. You can still book it: the form asks you to confirm when you save.
- Can't be booked (red): the school horse is already in another rider's lesson, the client is in two of these lessons at once, or the lesson is in the past. Move it or remove it; nothing books over these.
Remove a lesson with the cross on its row, or Add a lesson (up to the credits the block holds). One Create Booking books every lesson listed, or none of them if one has become unavailable in the meantime: the rows then say which. The same Book several lessons now tick appears when you use credits the client already has and the block has more than one lesson left. When the form chose the client's block for you, the tick starts off, so choosing the client books one lesson; tick it to place the rest of the block.
The client is emailed once ("Booking received", listing every lesson), unless you have told the form not to tell them.
The client is charged the block price, once. A $450 ten-lesson pack collects $450, not ten lessons at $55 each, and not $450 plus per-lesson charges on top. Every lesson listed is created already paid, so there is no payment link, no deposit and no balance owing on any of them. The tax invoice raised is the one for the block. At a venue that charges a facility fee, the first lesson's fee is invoiced with the booking and each later one's when it is paid, as for a repeating series.
Two things the form settles for you:
- The list can never be longer than the block. It holds one row per credit at most, and Horsify refuses a list longer than the credits left rather than creating lessons nobody paid for. Untick Book several lessons now to book only one lesson now and the rest later.
- Each lesson takes one credit, and only lessons that go in the diary do. If the block's credits were spent elsewhere while you were filling the list in, the lessons it no longer covers (the latest first) are left out and keep no credit.
A package only appears in either dropdown if it can pay for the lesson you're booking, so a block restricted to 30-minute privates is simply not offered against a 60-minute lesson.
When the client books online
A signed-in client booking through your school's own booking page sees Pay with your lesson package on the details step, listing the packages they can use here.
Choosing one prices the lesson at $0 in their cart, shown as paid by that package, and the lesson is confirmed at checkout without a card. At a venue that charges a facility fee, the cart line shows the fee instead (for example "Lesson paid with 10-lesson block · Facility fee $15.00") and the client pays that fee at checkout.
They can also book a recurring series with their package: each lesson in it uses one credit (plus the facility fee for each lesson, where the venue charges one), and the series can be no longer than the lessons left on the block. A block with only one lesson left can't pay for a recurring booking. The credit is taken at checkout, not when the lesson goes into the cart, so a client who changes their mind and empties their cart keeps their lesson.
Facility fees on package lessons
A package credit pays for the lesson. It does not pay a venue's facility fee. If the lesson is held at a venue whose rate card has Add this rate to lessons held here ticked, that fee is still charged on every package lesson, so a coach who passes the venue's fee on does not end up paying it themselves. A venue with no ticked rate card charges nothing extra, and the lesson costs $0 as before.
- Online: the lesson page shows the fee (for example "$15.00 facility fee") instead of $0.00, the price summary reads "lesson from your package + facility fee", and the client pays the fee at checkout. Each lesson in a recurring series owes its own fee.
- At the office: when you pay from a package or sell a block on the booking form, the booking is priced at the fee and invoiced as a facility fee, and the form tells you the fee is still owed.
- Use package credit on an existing booking: the lesson is re-priced at today's facility fee, the old invoice is cancelled and a new invoice is raised for the fee. A lesson already recorded as paid outside Horsify is treated as having had its fee paid there too.
- My Lessons: the client can pay a package lesson's facility fee online from their lessons list.
- Cancelling gives the credit back. A fee already paid stays paid, for you to refund if you choose, as with any paid lesson.
Where clients see what they own
My Lessons → Packages lists every block a client holds, across every riding school they ride with: how many credits are left, when the block expires, what it covers, and which lessons each credit has paid for. Spent and expired blocks stay on the list as history, and a block that is running low links back to the school's page to buy another, when that school sells online. A usable block has a Book a lesson with this package button, which opens the school's booking page with that package already chosen.
Lesson type is a hard rule
Every package covers exactly one lesson type, and Horsify will not let a credit be spent on a different one. A group block cannot pay for a private lesson, even though both are lessons. That is the whole point, since group lessons are cheaper per lesson than private ones.
If you have also restricted the package to specific lesson types, that restriction is enforced the same way: a block sold as 45 Minute Private is refused on any other private lesson, and the message names the lesson types the block does cover.
Whether a lesson is a group or a private lesson comes from its lesson type: a lesson type that takes group bookings is booked as a group lesson wherever it is booked, so a group block pays for it and a private block does not.
- The client's own online booking page offers, under How would you like to pay?, every package they hold that covers the lesson they picked: group blocks for a group lesson type, private blocks for a private one. Their own credit comes first; buying another block is offered underneath it. (Until October 2026 the page booked every lesson as private, so a group block never appeared and the page offered to sell the client the same block again.)
- The booking form you use lists only the packages the client holds that cover the lesson you're booking. Change the lesson type after choosing one and a package that no longer covers it drops out of the list; if a mismatch reaches the save anyway, it is refused with a message naming the type the package covers, so nothing is booked and no credit is spent.
- Add rider on a group lesson in the appointment book offers Use a package credit once you have picked the rider, already chosen when they hold exactly one block that covers the lesson.
Paying for a lesson already booked
A lesson booked before the client bought their block, or added without choosing a credit, shows its price owing. Open the booking and press Use package credit under Payment: one lesson comes off the block you choose and the lesson is marked paid, exactly as if the credit had been used when it was booked, and cancelling it gives the credit back. Any invoice the lesson raised while it was owing is cancelled, since the block's own invoice is the client's receipt. If the venue charges a facility fee, a new invoice is raised for that fee (see Facility fees on package lessons).
The button appears only when nothing has been paid towards the lesson through Horsify and the client holds a usable block that covers it. A lesson marked Paid elsewhere (paid in your old booking system during a changeover) also offers it, and the credit replaces that mark: this is how a block carried over from your old system is matched to lessons already booked against it. A part-paid lesson is settled the way it was started: record the rest as a payment, or refund what was paid first.
If clients need to use a block across more than one lesson type, either leave the package unrestricted (so it covers everything in its category) or tick the several lesson types it should cover. Across categories (a block spanning group and private lessons), sell two blocks.
Cancellations and refunds
Cancelling a package-paid lesson returns the credit. The lesson goes back onto the block within seconds of the cancellation, whoever cancels it and whatever reason is given, so a client who calls off Thursday's lesson is not charged for a lesson they never had.
The credit comes back once and only once: cancelling an already-cancelled booking doesn't mint a second one.
If a package-paid lesson was cancelled by mistake, Reinstate lesson puts it back in the diary and takes the credit off the block again. If the block has no lessons left by then, the lesson comes back owing its price, to be paid from another package credit or recorded as a payment.
What Horsify does not do is refund money for an unused package. If a client wants their money back on a block they've stopped using, that is a conversation and a refund through whatever you took payment with; there is no "refund package" button, and the balance stays on their record until it expires.
Changing or withdrawing a package
Edit on a package card reopens the same form. Changing a block's price or lesson count updates the per-lesson figure straight away for future sales. Adding or removing a block size takes effect the same way: new sizes go on sale immediately, withdrawn ones stop being offered.
Editing a package never changes a block someone has already bought. A sale takes a snapshot: the lessons, the price paid and the expiry date are copied onto the client's balance at the moment of sale. Put your prices up, shorten the block, or change the validity, and every client who already bought the old one keeps exactly what they paid for. (The name is the one exception: it is read live, so a rename shows on old balances too.)
Deactivate takes a package off sale. It disappears from the Sell a package dropdown, but:
- it stays visible on the Lesson Packages page, marked Inactive, so you can see what it was; and
- every block already sold keeps working. Clients can still spend the credits they bought, right up to their own expiry date.
Changed your mind? Press Put back on sale on the inactive package's card.
Delete removes a package for good, and asks first: the dialog lists exactly what would go. It is refused while any client still holds unused lessons on it that haven't expired, while an upcoming lesson was paid from it, or while a term program is sold through it. Deactivate it instead. Once it can go, its used-up and expired purchases go with it; receipts, tax invoices and the lessons they paid for stay.
Who can do what
| Action | Admin | Staff | Client |
|---|---|---|---|
| See the package catalogue | Yes | Yes | Only those sold online |
| Create, edit or withdraw a package | Yes | With Programs and packages: Manage | No |
| Record a sale to a client | Yes | With Programs and packages: Manage | No |
| Buy a package online | n/a | n/a | Yes (if sold online) |
| See a client's balances | Yes | With Programs and packages: View | Their own only |
| Correct or move a client's block | Yes | With Programs and packages: Manage | No |
| Spend a credit on a booking | Yes (booking for them) | With Bookings: Manage | Yes (online) |
Staff access is set on Riding School → Staff Roster → Staff tab. See Staff Access.
Packages are scoped to your organisation. Another club's admins cannot see your catalogue, your clients' balances, or sell on your behalf, and a block only ever pays for lessons of the client it was sold to or of someone that client books for at your school.
Troubleshooting
"No packages are set up yet" in the client's dialog Nothing has been created yet, or everything you created has been deactivated. Create one under Riding School → Programs & Packages → Packages.
The package doesn't appear in the Sell a package dropdown Only Active packages can be sold. Check the card on the Lesson Packages page: if it says Inactive, it has been withdrawn. Press Put back on sale to sell it again.
The client has credits but no package option appears (the Lesson package section on your booking form, or Pay with your lesson package online) Work through these in order:
- Is the block still usable? Expired blocks, and blocks with no lessons left, are not offered. Check the badge in their Lesson packages dialog. A block bought online whose payment hasn't landed shows as Awaiting payment and cannot be spent yet.
- Does the lesson type match? A group block only pays for a group lesson type and a private block for a private one. If the block is restricted to specific lesson types, it only appears for those lessons.
- Is the client booking a recurring series online? A series can be paid from a block online, one credit a lesson, but only a block with at least two lessons left, and the series can't be longer than what's left. On your own booking form, tick Book several lessons now (see above).
- Are you editing an existing booking? The option only appears when creating one.
- Is the block a parent's? A parent's block is offered for a child only when the child is linked to that parent here (see One block for the whole family). A block held by the child's brother or sister is never offered.
The package isn't showing on my public riding school page Check three things: the package is Active, at least one block size has Sell this size online ticked, and your riding school landing page is switched on. The public list is cached for about ten minutes, so a change can take a few minutes to appear.
There's no Packages row on my Book Now page The row only appears when at least one package is Active with a block size on sale online ticked. It does not depend on your riding school landing page being switched on. Same ten-minute cache as above.
A client paid online but has no credits Credits are granted when the payment lands, not at checkout, so a card that failed or a checkout that was abandoned leaves nothing behind. Their block will show as Awaiting payment under My Lessons → Packages if the purchase was started but never paid. They can safely buy again.
"Your lesson package has 3 lessons left, so it can't pay for 4" This comes from a recurring booking made online with a package. Each lesson in the series uses one credit, so the series can be no longer than the lessons left on the block. The client can book that many lessons or fewer, or pay for the series another way.
"Your lesson package no longer has a lesson available for this booking" The last credit was spent somewhere else between the lesson going into the cart and checking out. Nothing was booked or charged. Remove the lesson from the cart and either book it again against another block or pay for it normally.
A client says they paid for a block but has no credits Recording the sale is a separate step from taking the money. Open their Lesson packages dialog: if there's no balance, the sale was never recorded. Record it now; the purchase and expiry dates run from today, so if the payment was taken a while ago, consider a longer-validity package or make a note.
Related
- Riding School Management: the whole riding school toolkit.
- Client Management: client profiles, waivers and alerts.
- Riding School Setup Guide (End to End): where packages fit in first-time setup.
-
Gift Vouchers are covered in Riding School Management; unlike packages, vouchers are a dollar value rather than a number of lessons, and are redeemed by hand.\n\n---\n\nSource:
wiki/features/LESSON_PACKAGES.md\nLast synced: 2026-10-21 13:19:03 UTC