Music School Software: Makeup Credits, Rooms and Recurring Tuition Without the Spreadsheet
If you are one location under roughly 250 students, buy My Music Staff or Opus1 and stop reading. If you are past 500 active students or past two locations and your makeup credits, room grid and teacher pay all live in spreadsheets, build. Expect $60,000 to $130,000 and 12 to 16 weeks for a focused first release covering the lesson ledger, tuition and teacher pay, and $150,000 to $400,000 phased over 6 to 12 months for a full platform with AI intake, retention scoring, group classes and rentals. Those are Digital Heroes delivery bands from more than 2,000 projects, not a market survey.
Why lesson scheduling software makes or breaks a multi-location music school
A music school is a scheduling engine that happens to teach music. Every dollar you bill is a 30 or 45 minute slot matched to one teacher, in one room, with one instrument, at one time, repeating weekly for 40 weeks. Break the slot and you have not lost an appointment. You have lost the revenue, the teacher's pay, the room, and eventually the family.
Most schools past 400 students run some version of the same stack: My Music Staff or Opus1 or Jackrabbit Class or Teachworks for the lesson calendar, Stripe or a card-on-file gateway for autopay, a Google Sheet for room assignments because the platform's room field is just a text label, QuickBooks Online for the books, a second sheet for teacher pay reconciliation, Mailchimp for the newsletter, and a front desk text thread for everything the software cannot express. The subscription is cheap. The stack is not.
Here is what it actually costs. Monday, 4:10pm. A guitar teacher texts the Northside location that she has strep and is out all week. She teaches 26 students across Monday through Wednesday. Your front desk lead opens the calendar, exports her week, and begins a manual reconstruction: which families already banked a makeup credit and are at the two-credit cap, which of the 26 can move to the Thursday sub who does not read tab, which rooms free up and can be offered to the drum teacher's waitlist, which parents get a text and which get a call because they never read texts. That is roughly four hours of a $27 an hour manager, plus 40 minutes of the director's evening. It happens six or seven times a term, per location. Across the schools we have worked with, this single pattern burns $30,000 to $60,000 a year in front desk labor at three locations, before you count the families who quietly leave because their third makeup never got scheduled.
Problem 1: tuition and makeup credits are one system, and off-the-shelf treats them as two
The Chen family has two children: Maya on 45-minute piano weekly, Ben on 30-minute violin every other week. One monthly tuition of $268 on the 1st, sibling discount of 10% on the second child. In March, Maya's teacher cancels once, Maya is sick once with 26 hours notice, and Ben no-shows. Under your policy the teacher cancellation is a guaranteed makeup, the 26-hour notice earns a credit, and the no-show forfeits. So March still bills $268, one credit is redeemable through June, one through May, one is void. Somebody has to hold all of that.
My Music Staff, Teachworks and Jackrabbit all bill and all track attendance. But they bill on a schedule and track attendance in a log, and the rule that connects the two lives in your staff handbook, not in the software. The human becomes the integration layer. When a parent emails "I'm pretty sure we have two makeups left," someone opens the attendance history, counts, argues, and usually grants the credit to avoid the fight. In reconciliations we have run, 6 to 9% of billed lessons were being given away as unbudgeted goodwill credits because nobody could prove the ledger.
A custom build makes credits first-class ledger entries instead of notes. Every lesson runs a state machine: scheduled, delivered, cancelled by teacher, cancelled by student inside notice, cancelled outside notice, no-show, made up. Each transition writes a credit row with an issue date, an expiry, a source lesson id and a redeeming lesson id. Tuition is then computed from the ledger rather than a static plan, so proration, mid-term instrument changes, sibling rules and withdrawal notice periods all fall out of one calculation instead of four spreadsheets. The parent portal renders the same ledger the front desk sees, which ends the argument. Self-serve makeup booking only offers slots that are legal under the policy: right instrument, right teacher tier, credit unexpired, room free.
Problem 2: your rooms are not interchangeable, and your calendar thinks they are
Room 4 has the Yamaha grand and cannot be given to the drum student. Room 7 is the only isolated room, so it holds drums and it holds loud brass. Room 2 shares a wall with the front desk and cannot hold anything amplified during enrollment season. Room 9 has the digital piano the theory group class needs, and that class owns Tuesdays. None of that fits in a text field labelled Resource.
So rooms get scheduled on a paper grid on the wall or a sheet with a tab per location, and the booking system stays deliberately ignorant. Double bookings get discovered by a teacher standing in a doorway at 4:31pm with a student behind him. Worse, you cannot answer the only question that matters for growth: between 4:30 and 7:30 on Tuesday, which is where most of your revenue sits, how much capacity is left and for which instrument?
Off-the-shelf cannot fix this because room constraints are not a feature, they are a data model. You need rooms with typed attributes: instruments present, isolation rating, capacity, amplification allowed, adjacency conflicts, priority holders. A build turns assignment into a solver, not a dropdown. When you enroll a student, the system proposes valid teacher, room and time triples ranked by how little they fragment prime time, so you stop the classic mistake of dropping a 4:30 lesson into the middle of an empty block and stranding two unsellable half hours around it. On the schools we have done this for, defragmenting prime time recovers the equivalent of two to four sellable weekly slots per location. At $140 a month per weekly student that is real money on inventory you already own.
Problem 3: teacher pay is a reconstruction project every payroll run
Thirty-four teachers across three locations. Fourteen W2 hourly, twenty on 1099. Pay is not one rate: the piano lead is on a 60/40 split of collected tuition, four teachers are at $28 per taught 30-minute lesson rising to $32 after 100 lessons, group instructors get a flat $65 per section, everyone gets a $50 recital stipend. Then the rules: a teacher-cancelled lesson pays nothing, a student no-show pays half, a delivered makeup pays full but must not double-pay against the original, and same-day travel between locations pays 30 minutes.
No tool in your stack owns that. So on the 12th and the 27th your operations manager exports attendance, pastes it into a workbook with 34 tabs, applies the rules by hand, pushes W2 hours into Gusto and 1099 payouts through Bill.com, then fields three "my pay looks wrong" messages by Thursday. That is 10 to 14 hours per pay period in the schools we have measured, with an error rate high enough that most directors keep a quiet correction reserve. Pay disputes are also the fastest way to lose a good teacher, and in our experience a teacher leaving takes 15 to 25 students with them.
A build attaches a compensation rules engine to the same lesson state machine that drives tuition. Each teacher gets a compensation profile versioned with an effective date, so an October raise does not silently rewrite September. Every lesson transition emits a pay event the moment it happens, so payroll stops being a reconstruction and becomes a read. The teacher app shows a running period total, which kills the dispute before it starts. Exports go clean to Gusto for W2 and to your 1099 rails, with period locking so nobody edits an April attendance record after April closed. This is usually the highest-ROI piece of the whole build and the one directors most often leave out of phase one.
Problem 4: the 9:40pm inquiry that turns into nothing
A mother finishes bedtime, searches guitar lessons, lands on your site and fills in the form: "9 year old, total beginner, guitar, we can do Tuesday or Thursday after 5." Nobody is at the desk. She gets an autoresponder. At 10:15 the next morning your front desk calls and gets voicemail. By Wednesday she has enrolled at the school two miles away that let her pick a trial slot at 9:41pm. Every intake audit we run at multi-location schools finds the same shape: most inquiries land after 7pm, and the ones answered within ten minutes convert to a booked trial at a multiple of the ones answered next morning.
Calendly or Acuity will hand her a slot, but they do not know that a 9 year old beginner guitarist needs a teacher tagged for beginner kids, in a room that is not next to the drum kit, in a 30-minute format, and that the trial should reserve the slot she would actually keep on enrollment. Booking her into a demo hole that evaporates when she enrolls is worse than not booking her at all.
This is the one place a language model changes the revenue line concretely. An assistant on your site and your SMS line reads the inquiry in plain language, extracts instrument, age, level and availability windows, checks them against the live teacher-room-time solver, and offers the two or three real slots that survive conversion into a recurring enrollment. It answers what parents actually ask at 9:40pm: cost, makeup policy, instrument rental, recitals. Anything it is not confident about escalates to a human queue with the extraction already done. The same model handles reactivation: it drafts follow-ups to the 43 families whose trials lapsed last term, personalized with the real instrument and teacher, for a human to approve in a batch. We build these with one hard rule: the AI proposes, the ledger and the solver decide. It never invents a slot or a price.
Problem 5: churn is visible in the schedule six weeks before it hits Stripe
A family does not decide to quit on the 1st when they cancel autopay. They decide over six weeks: two short-notice cancellations, an unredeemed credit, a practice log that goes quiet, a switch to a substitute they did not choose, a skipped recital. By the time the card comes off, the decision was made in week two.
My Music Staff and Jackrabbit will show you attendance, and Stripe will show you a failed charge. What none of them will do is tell you on Tuesday morning that 11 named families across three locations are trending out, why, and which one the director can save with a phone call before the teacher change becomes permanent. Nor will they forecast next term's teacher hours by instrument so you hire the second cello teacher in July instead of scrambling in September.
A build makes this a daily job. Score every active enrollment on signals you already generate, surface a ranked retention queue in the front desk dashboard with the reason and the recommended action attached, and feed the same data into a capacity forecast: given current enrollment, historical summer attrition by instrument and location, and teacher availability, here is next term's hours-by-instrument shape. Add card-failure prediction and treat a decline as a retention event rather than an accounting event. At 900 students, involuntary churn from dead cards is a full-time teacher's income walking out with nobody having decided anything.
What this costs and how long it takes
These are Digital Heroes delivery bands from more than 2,000 projects, not a market survey. A focused first release for a music school typically lands at $60,000 to $130,000 and ships in 12 to 16 weeks. For this category the first release is almost always the same three things: the lesson state machine with the makeup credit ledger, tuition billing sitting on top of it, and teacher pay calculation, plus a parent portal and a teacher app. Typed rooms belong in phase one too, because retrofitting the room model later means rewriting the scheduler.
A full platform, meaning all of the above plus AI intake, retention scoring, group classes and ensembles, recital management, instrument rental inventory, multi-location reporting and QuickBooks plus payroll integrations, runs $150,000 to $400,000 phased across 6 to 12 months. Phased, never big bang. The school is open Tuesday at 4:30 either way.
What drives price up in this category specifically:
- Migration from My Music Staff, Jackrabbit or Opus1. The contact list is trivial. Three years of lesson history and open credit balances that were maintained by hand are not: somebody has to make a judgement call on every ambiguous balance. Budget 3 to 6 weeks and a reconciliation session with your front desk lead.
- Payment rails. Card on file plus ACH plus a legacy Authorize.net vault means PCI scope. We keep card data out of your systems entirely with a tokenizing gateway, which is both cheaper and non-negotiable.
- Minors. Student accounts under 13 pull COPPA into scope. Recorded practice submissions and recital video pull in parental consent, retention limits and media releases. If teachers message students, you need chaperoned threads with the parent included by default. That is safeguarding, and it is not a later.
- Locations that share resources. Two locations sharing nothing are one system built twice. Two locations sharing a cello teacher and one room policy are a genuinely harder scheduling problem.
- Group classes alongside private lessons. Term-based cohort billing behaves nothing like weekly recurring, and schools running both need both models against one family account.
Build versus buy, and where I land
Buy, genuinely. One location, under roughly 250 active students, a policy that fits on one page, no group program: My Music Staff, Opus1 or Teachworks is correct and building is a vanity project. The subscription is a rounding error, the overhead is one person's afternoon, and you will not out-engineer a mature tool for the price of a used car. Put the money into teachers.
Build, and the signals are specific. You are past 500 active students or past two locations. Somebody at your school has a full-time job that is really "operate the spreadsheet the software cannot." Your makeup policy has exceptions you cannot enforce, so you hand out credits rather than argue. Teacher pay eats more than a day per period. You cannot answer "how much prime-time capacity is left at Northside on Tuesday" without a human counting. Your competitor books trials at 10pm and you do not. Or the honest one: you tried to move the school onto the platform's model and the school refused, because the school's model is right and the software's is wrong.
Two things settle it outright. If your scheduling or billing behaviour is a real differentiator, a makeup swap marketplace between families or a guaranteed-slot promise, then it is your product and you cannot rent it. And if you intend to franchise or license your operating model to other schools, you are a software company whether you planned it or not, and this platform is the thing you will be selling.
How to choose a developer for music school software
- Make them model the domain on a whiteboard before they quote. Ask them to draw the lesson lifecycle including teacher cancellation, student cancellation inside and outside notice, no-show, credit issuance, credit expiry, and how each transition touches both tuition and teacher pay. If they draw a calendar table and a payments table, they will build you a scheduler and you will be back in a spreadsheet by year two. The right answer involves an immutable ledger and a state machine, and a team that has built this says so unprompted.
- Interrogate the migration, not the import. The question is not "can you take a CSV." It is: how do you reconcile 1,400 open makeup credits buried in three years of My Music Staff attendance notes, and what do you put in front of my front desk lead so she can approve the ambiguous ones? Anyone who has migrated a live recurring-billing business will offer a dual run: both systems live for one full billing cycle, compared line by line, cut over on a period boundary.
- Check integration depth, not logo count. Ask specifically: Stripe or Adyen subscriptions with proration and dunning, a tokenized vault so PCI scope stays out of your database, QuickBooks Online journal entries at a grain your bookkeeper does not re-key, Gusto for W2 plus a real 1099 payout path, Twilio for the SMS that drives makeup fill rates. Then ask what happens when Stripe delivers the same webhook twice, because it will. If they have not thought about idempotency, they have not run a billing system in production.
- Confirm compliance and safeguarding are in the design, not the QA pass. You handle minors' data every day. Ask how they scope COPPA accounts, how parent-chaperoned messaging works between teacher and student, how recital media consent is captured and revoked, how teacher background check records and their expiry dates are tracked, and how role-based access stops a part-time Northside teacher from reading the Eastside family list. "We will add permissions later" tells you everything about the rest of the engagement.
One more thing to settle before the first invoice: the repository, the cloud accounts and the gateway keys are in your name from the first commit, and the contract says so. Ask for the handover artifacts in scope, an infrastructure diagram and a runbook, and ask what it would cost for your own in-house developer to take the codebase over in year three. A partner who is confident in the work is relaxed about that conversation.
The evidence behind this guide
Independent findings on why this investment pays off. Every link goes to the primary source.
- SMS reminders that stated the specific cost of the appointment to the health system reduced missed appointments in Trial One, with the DNA (did-not-attend) rate falling from 11.1% (control) to 8.4% (specific-costs message) - an odds ratio of 0.74 (95% CI 0.61-0.89), i.e. roughly a 24-26% relative reduction - at no additional cost. (Trial Two replicated this at an 8.2% DNA rate.). Source: PLOS ONE (Hallsworth et al.) (2015) →
- In an RCT, text-message reminders (11.7% missed) were non-inferior to telephone reminders (10.2% missed; difference not significant, within the 2% non-inferiority margin) but far cheaper - total cost EUR 230 for SMS versus EUR 8,910 for telephone over 6 months - making SMS more cost-effective. Source: BMC Health Services Research / PubMed Central (Junod Perron et al.) (2013) →
- EMARKETER reports that over 54% of mobile commerce transactions now happen within shopping apps rather than mobile browsers, underscoring the app channel's growing dominance of m-commerce. Source: EMARKETER (2025) →
- OECD research finds that digitalisation offers SMEs opportunities to improve performance, spur innovation, enhance productivity and compete more evenly with larger firms; it reports that increased use of online platforms produced significant multi-factor productivity gains in SME-heavy sectors such as hospitality and retail, while smaller firms lag in adoption due to skills, resource and financing gaps. Source: OECD (2021) →
Rohan advises mid-market and enterprise teams on ERP, CRM and custom software, and has led delivery on dozens of business-software builds.
Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.