How do I schedule online tutoring lessons and let parents book their own slots?

Scheduling online tutoring lessons means giving each student (or their parent) a way to book a slot in your calendar, confirming it in both timezones, holding it as a recurring commitment for as long as the family wants to keep it, and enforcing your cancellation policy without you chasing anything. Most indie tutors start out by DMing lesson times back and forth, which works up to about 5 students and stops working shortly after. The three real options past that point are a generic bolt-on scheduler (Calendly, Acuity, SetMore, TidyCal, YouCanBook.me — cheap, works, doesn't know anything about your virtual classroom), scheduling built into the virtual classroom itself (one login, one calendar, one lesson link that also opens the room), or a full LMS (over-featured for solo tutoring, standard for schools). This page walks through what a scheduling workflow needs to do, where each option fits, the timezone and cancellation-policy gotchas that ruin the format when they're not thought through, and how Koala Go's built-in Scheduling actually works.

What scheduling actually has to do (six moving parts)

"Scheduling" sounds like one thing; it's actually six workflows that have to hang together over months of weekly lessons:

  • Availability. You publish which weekly slots you'll teach — Tuesday 4-6pm, Thursday 4-6pm, Saturday 9-11am — in your own timezone. Availability is the source of truth; every other step reads from it.
  • Bookings. Parents (or older students) pick a slot from your published availability and book it for a specific date. The system has to check that the slot is still open, that the student isn't already booked somewhere else at that time, and that the requested date sits inside whatever booking window you're accepting.
  • Timezones. The tutor and the student are usually in different ones. Availability lives in the tutor's timezone (which does not shift with the student's daylight saving); every other view — parent booking screen, calendar invite, reminder email — displays in the viewer's timezone. Getting this half-wrong is the single most common cause of missed lessons.
  • Recurrence. A working tutoring business runs on recurring weekly slots — the same 4pm Tuesday for as many weeks as the family stays. One-off bookings are the exception (trial lessons, make-ups, occasional exam prep), not the shape.
  • Cancellation policy. Minimum booking notice ("must book at least 12 hours ahead"), minimum cancellation notice ("cancel at least 24 hours before or the lesson is billed"), and maximum booking advance ("open the next 8 weeks; not the next 8 months"). Policy without enforcement is a suggestion; the platform has to enforce it or you'll be arguing about it in DMs.
  • Notifications. Booking confirmations, 24-hour reminders, 1-hour reminders, cancellation notices, and — if the family is on a monthly package — a warning when the package is running out. Missed reminders are the second-most common source of no-shows after timezone confusion.

Any tool you use has to cover all six. The tools that don't cover all six create the exact "stack juggling" they promise to remove — you end up with a scheduler that doesn't send reminders, a calendar tool that doesn't handle timezones, and a lesson link that lives in a different tab than either. The scheduling half of your tutoring business is either a solved problem or it's constantly on fire.

The three real options past 5 students

Solo tutors converge on one of three shapes:

  • Manual (email/DM/spreadsheet). Free, familiar, works fine for 1-5 recurring students. Fails at ~10 students because the spreadsheet + inbox stops matching reality after the first parent asks to reschedule and the second parent asks about a make-up in the same week. Every hour past that point is a hidden tax on your teaching time.
  • Generic bolt-on scheduler. A standalone scheduling tool — the category is well-populated (Calendly, Acuity Scheduling, SetMore, TidyCal, YouCanBook.me, and Google Calendar's booking pages, among others). You publish availability, parents book, calendar invites go out, reminders go out. Handles the six-workflow list above competently for one-off bookings. Tradeoffs: it does not know anything about your virtual classroom — the lesson link is a static URL you paste into the confirmation email, so if your room URL changes or you want per-student rooms, that's another manual step. Recurring bookings are supported on most tools but often via a workaround. And you'll pay $10-$25/month for the tier that has recurring + reminders + calendar sync.
  • Scheduling built into the virtual classroom. One login handles availability, bookings, cancellations, and the lesson link. When a parent books, they receive a link that opens the actual classroom room the tutor uses — not a separate scheduler URL that then hands off to a video URL. Cancellation policy is enforced by the same tool that runs the lesson. Tradeoffs: you're tied to that classroom's scheduling shape (if the classroom's scheduling doesn't do exactly what you want, you can't swap in a better scheduler and keep the classroom), and the scheduling feature usually sits behind the paid tier of the classroom itself.
  • Full LMS (Google Classroom, Moodle, Canvas, learning-management systems). Includes scheduling as a small feature of a much larger product. Overkill for solo tutoring — as discussed on whether Google Classroom fits private tutoring, an LMS is built around graded assignments and 25-student classes, not around 1-on-1 recurring lesson bookings. Standard for schools and tutoring organizations with formal cohorts.

The choice is usually between the middle two (bolt-on scheduler vs classroom-integrated scheduling). Manual is the pre-decision state; a full LMS is a different business.

Where each option is the right pick

A short decision rule that holds up in practice:

  • Manual is fine when you have ≤5 recurring students, all in the same timezone, all on the same weekly slot for months at a time. If you've never had to reschedule two families in the same week, don't over-build.
  • A bolt-on scheduler is right when your classroom tool doesn't ship a scheduler you're happy with, when you want a public-facing booking page (a URL you drop into your Instagram bio or a Reddit comment), or when you have a mix of student types and want to run different booking flows per type. It's also the safe default if you plan to switch classroom platforms in the next year — a scheduler you own is portable.
  • Classroom-integrated scheduling is right when you're settled on your virtual classroom and you want to stop maintaining two calendars. The single-login, single-link workflow is the win — every "which link is today's lesson?" question your parents ask is a cost you can eliminate. It's also the right pick for tutors whose parents are on WhatsApp/WeChat rather than email — the scheduler URL that parents actually book on becomes their whole relationship with your tutoring business, not a technicality behind an email.

Timezones — the hidden hard part

More lessons are missed to timezone confusion than to anything else in indie tutoring. The failure mode is always the same: the tutor sets Tuesday 4pm in their own timezone, the parent hears "Tuesday 4pm" in their timezone, both sides write it down, and one week later — usually the week daylight saving flips somewhere — the lesson gets missed. The fix is a small set of rules the scheduling tool has to follow whether or not the tutor thinks about them:

  • The tutor's timezone is the fixed point. Your Tuesday-4pm slot is 4pm where you live, not 4pm in some abstract UTC space. When you're in Los Angeles and daylight saving ends, your Tuesday-4pm is still your Tuesday-4pm — a student in Beijing sees the exact time on their side shift by an hour, and that's correct. If the scheduling tool is doing the opposite (storing slots in the student's timezone and shifting yours), you'll teach at 3am one week per year.
  • Store times as wall-clock time in the tutor's zone, not as a fixed UTC instant. Wall-clock storage is what makes DST behave sanely — "every Tuesday at 4pm my time" survives DST correctly; "every Tuesday at 23:00 UTC" doesn't. Any decent scheduler handles this; a naive spreadsheet does not.
  • Display in the viewer's timezone, always with the zone name visible. A parent booking should see "Tuesday, 8:00 AM (Asia/Shanghai)" — not just "8:00 AM". The IANA zone name is what disambiguates the +12 different offsets that all say "8am".
  • Send reminders that state both timezones. The lesson reminder to the parent should show the parent's time AND the tutor's time, so the parent can sanity-check across the trip they took last weekend. Two-timezone reminders halve the miss rate at almost no cost.
  • Be explicit with the parent at first booking. "You booked Tuesday 8am in Shanghai time, which is Monday 5pm in my time — please confirm." One extra confirmation email at the moment of the first booking prevents the ambiguity from surfacing three weeks later.

If any of this sounds obvious, it is. It is also, in our experience, exactly what indie tutors get wrong when they hand-roll scheduling on top of Google Calendar and a spreadsheet. The tools that get it right are boring about it; the setups that get it wrong lose one lesson per student per year to it.

Recurring vs one-off bookings

Recurring is the shape that makes the business work; one-off bookings are useful only around the edges.

  • Recurring bookings — the same slot every week, every fortnight, or every month, held open for as long as the family stays — are the calendar equivalent of a monthly package (see how to structure lesson packages). They lock the calendar (the parent doesn't re-decide every week whether to book), smooth cash flow, and cut the scheduling admin per student to near zero. Every mature indie tutor's calendar is 80%+ recurring slots.
  • One-off bookings are for trial lessons (before the family commits to a slot), make-ups (a family missed their recurring slot and wants an alternate this week), occasional exam-prep pushes (three extra sessions in the two weeks before the test), and drop-in students who don't fit any weekly pattern. Keep them as the exception, not the default.
  • Bookings that convert from one-off to recurring are the trial-to-paid workflow. A parent books a single trial lesson; after the trial, if it went well, you offer them a recurring slot at your normal package rate. The scheduling tool should make it one click to promote the trial slot into a weekly repeat, not force the parent to re-enter everything.

Whatever tool you use, check that recurring bookings survive edits — if you shift your Tuesday-4pm slot to Tuesday-5pm mid-term, the recurring bookings for the next month should update in the same operation, not require you to cancel and re-book each week manually.

Cancellation and no-show policy — enforcement, not intention

The policy itself (typical shapes: 24 hours' cancellation notice, no refund for no-shows, one make-up allowance per month) is covered in more detail on how to handle student no-shows and last-minute cancellations. The scheduling side of it is enforcement: is the policy something the parent has to click past when they try to cancel late, or is it a paragraph in your onboarding email that you have to argue about in DMs?

The mechanical controls that make policy enforceable — and that the scheduling tool has to expose — are usually three toggles:

  • Minimum booking notice. "Parents can't book a slot less than X hours ahead." Prevents 30-minutes-before-the-lesson bookings that force you to prep in a rush. A typical setting is 12 or 24 hours for regular slots; 0 hours (i.e., "instant lessons") if you're using drop-in office hours for existing students.
  • Minimum cancellation notice. "Parents can't cancel a slot less than Y hours ahead without it being billed." This is the mechanic that enforces your 24-hour cancellation rule. If the tool doesn't have this, your rule is a paragraph in an email; if it does, the tool refuses the late cancellation and the conversation ends there.
  • Maximum booking advance. "Parents can only book within the next Z days." Prevents a family from booking every Tuesday for the next 12 months, which would lock your calendar in ways you can't recover from cleanly. A typical setting is 60-90 days; families on a monthly package usually re-book each month around the invoice, which is the pattern the max-advance window supports.

Two more that are situational: an instant-lessons toggle for tutors who want to accept last-minute drop-ins (useful for existing-student office hours, generally bad for new-student trials), and a booking-window blackout for holidays and travel weeks (per-date overrides on top of the weekly recurring availability).

How Koala Go's Scheduling works specifically

If you're evaluating Koala Go (the virtual classroom we build) for the scheduling half of your tutoring workflow, here's the shape:

  • Where it lives. Scheduling is a separate SvelteKit app at classroom.teachwithkoala.com/portal that shares authentication with the main classroom — one login covers both. You open it from the classroom menu (the "Scheduling" item in the top-right menu). The whole teacher scheduling section is gated behind Koala Pro; teachers on the Free tier see the menu item as locked and can either upgrade or run manual scheduling until they're ready.
  • Availability calendar. You set weekly recurring availability slots — Tuesday 4-6pm, Thursday 4-6pm, Saturday 9-11am — in your own timezone. Times are stored as wall-clock time in that timezone (so daylight saving handles cleanly without you touching anything). You can also add per-date overrides for holidays, travel days, or special one-off hours ("closed on July 4; open Sunday 10-12 that week only"). Each override has a start time, end time, and an optional reason.
  • Invite-code onboarding for parents. Parents don't create their own account first — you generate an invite link from your teacher dashboard, share it with the family (email, WhatsApp, WeChat, whatever they use), and when the parent opens it they land on a unified page that accepts the invite, auto-creates their profile if they don't have one, connects them to your teacher account, and lets them immediately book a slot. It's one link to send and one link for the parent to open — the invite-and-book flow is one page, not a signup form followed by a scheduling flow.
  • Timezones handled correctly. The parent's booking view displays your availability in the parent's timezone (using Luxon); their booking confirmation renders in their timezone too, while your own dashboard renders in yours. If a parent moves — say, from a US-based family to a summer in Spain — the availability re-projects into the new timezone automatically. You never have to translate 4pm to another zone in your head or in a spreadsheet.
  • Recurring bookings up to 52 weeks. When a parent books, they pick one-off or a recurring weekly commitment — the recurrence options are 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 26, or 52 weeks. A parent who wants "every Tuesday at 4pm for the next 8 weeks" makes one booking and the system creates all 8 lessons. If you set a maximum-advance policy (see the next bullet), the recurrence options are trimmed accordingly.
  • Booking policy controls (Platinum). Minimum booking notice, minimum cancellation notice, maximum booking advance days, and an instant-lessons toggle are all in the teacher profile, gated behind Koala Platinum ($49.99/mo monthly, $39.99/mo annual). On Koala Pro these fields exist in the data model but the UI shows an upgrade prompt — teachers can see them but not edit them. If enforced policy matters to your business (and past ~10 students it almost always does), that's the reason Platinum is priced where it is.
  • Custom lesson lengths (Platinum). On Koala Pro, lessons are fixed at 30 minutes. On Koala Platinum you can choose 15, 20, 25, 30, 40, 45, 50, 55, 60, 75, 90, or 120 minutes, plus an optional break between back-to-back lessons (0, 5, 10, or 15 minutes). The break setting is what prevents a full afternoon of back-to-back 60-minute slots turning into a bathroom-and-water crisis on your side.
  • Cross-teacher double-booking prevention. If a student is already booked with a different teacher on Koala Go at a given time, the booking is refused. Rare for solo tutors; matters for families whose kids are on multiple tutors' schedules and for tutoring companies running teams (Koala for Business).
  • Cancellation with an audit trail. When a teacher or parent cancels a lesson, the lesson row is marked cancelled with a timestamp and the id of whoever cancelled — useful if a family's story about the cancellation and yours diverge a month later.
  • Parent UI in 8 languages. The parent booking flow supports English, Spanish, French, Japanese, Korean, Russian, Vietnamese, and Chinese (browser-detected, no configuration needed). If your students' families are primarily non-English speakers, they book in their own language without you translating anything.
  • The lesson link opens the actual classroom room. The booking's lesson link opens directly into your Koala Go classroom — not a separate scheduler URL that then hands off to a video URL. One click to join, same room the teacher's already in, no bounce between tools.

Honest gaps worth flagging up front. We don't send automated lesson reminders — the booking and the recurring schedule live in your dashboard and the parent's portal view, but the day-before "don't forget tomorrow's lesson" message is one you send yourself on the family's channel (it takes ten seconds and doubles as the place to mention anything the family should have ready). We don't (yet) ship native 2-way Google Calendar sync — lesson bookings live in the portal dashboard, but they don't push into your Google Calendar as native events with 2-way updates; if your other clients live in Google Calendar and you need one unified view, most tutors bridge it with a calendar-forwarding tool for now, and native sync is on our list. And, as flagged on structure lesson packages, we don't auto-charge a parent's saved card on a monthly cycle — you invoice each month (one click; parent pays one link) and the recurring schedule books the lessons on top of the invoicing, but the parent is not silently billed by a background process. Same rules apply for all three: we'd rather be honest about a shipped-vs-not gap than sell you on a feature you'd find out about the wrong way.

Common failure modes to avoid

  • Not setting a policy at all. "I'll be reasonable about cancellations" is a policy that costs you money on the third late cancellation. Set the numbers before your first student and let the tool enforce them.
  • Manual scheduling at 15+ students. The tax on your teaching time from "let me check my spreadsheet" is real. Move to a scheduling tool before you resent your own students — usually somewhere between 5 and 15 students, depending on how many timezones and how much rescheduling.
  • Not confirming the timezone in writing. First-booking confirmations should say "Tuesday 4:00 PM Los Angeles time, which is Wednesday 8:00 AM Beijing time — reply YES to confirm." One extra step at booking prevents the missed lesson later.
  • Sending calendar links from multiple tools. If your scheduler emails a Google Calendar invite AND your classroom emails a lesson link AND you paste the lesson link into WhatsApp for the parent, one of the three will drift out of sync when a room URL changes. Send one link — the one the parent should click on lesson day — and treat everything else as a reminder that points back to it.
  • Booking too far in advance. Some families will happily book the next 12 months on a Sunday afternoon. That locks your calendar in ways you can't unwind cleanly when you decide to change your rates, take a term off, or move a slot. Set a maximum advance of 60-90 days and re-open the next window each month.
  • Ignoring the data-protection side for EU/UK families. If any of your students are in the EU or the UK, you are storing personal data of both the parent and the child (names, timezones, lesson history), which brings the standard consumer-privacy considerations along with it. This is a "check your local rules and, if you're growing past a few families in that region, talk to a lawyer" situation — the specifics vary by country and are not something a page like this can conclude for you.
  • Rebuilding scheduling from scratch every year. Whatever tool you land on, plan to stay there for at least 12 months. Every switch loses history, retrains parents on new links, and eats a week of admin. Pick once, deliberately, and stay.

How to decide, in one paragraph

If you have ≤5 recurring students all in one timezone, stay manual. If your virtual classroom already ships an integrated scheduler you're comfortable with, use it — the single-login, single-lesson-link win is the biggest scheduling upgrade solo tutors ever make, and it removes the constant "which link is today's?" question. If it doesn't, and you're already committed to that classroom, add a generic bolt-on scheduler (any of Calendly, Acuity, SetMore, TidyCal, or YouCanBook.me will do the job — the pricing and feature differences between them are small at solo-tutor scale). Whichever you pick, set your minimum-notice and cancellation-window numbers before your first booking, make the tool enforce them, and put the tutor's timezone in every confirmation email.

If you're considering Koala Go specifically for the scheduling half of your workflow, the built-in Scheduling is included with Koala Pro ($25.99/mo monthly, $21.99/mo annual) — you can turn it on, generate one invite link, share it with a real family, and see the full teacher-plus-parent flow inside an hour. If you need enforced booking policy or lesson lengths other than 30 minutes, that lives on Koala Platinum ($49.99/mo monthly, $39.99/mo annual). Questions about your specific timezone mix, subject, or business shape — write to koala@teachwithkoala.com and we'll give you an honest read.

Related answers

More answers on this topic