Free tool

School timetable generator

Rooms, teachers, classes and the lessons each class needs per week — paste them in and get a weekly timetable with no double bookings, teacher unavailability respected, labs and gyms matched to the right lessons, double periods kept together and as few gaps as possible. Solved in your browser; nothing is uploaded.

Step 1

Your school

One line per record, comma-, semicolon- or tab-separated (paste straight from Excel). Lines starting with # are ignored. Everything stays in your browser and is remembered locally.

Rooms

Teachers

Classes

Lessons

What it handles

The constraints that make timetabling hard

Hard rules, always respected

A class, a teacher and a room are never in two places at once. Teachers are only scheduled when available. Every lesson gets a room of the right type with enough seats.

Double periods & spreading

Give a lesson a block length (2 = double period) and it stays together on one day. The same subject is spread across days instead of piling up.

Fewer gaps

The optimizer minimizes idle periods for classes first, then teachers, keeps daily loads balanced and respects a max-lessons-per-day per teacher.

Explains impossibilities

Before solving it checks the obvious: a class bigger than every lab, a teacher with more hours than available slots, more gym hours than the gym has. You get told what to fix.

Views & exports

Per class, per teacher, per room. Export the whole schedule as CSV for Excel or your school system; print any view; save your inputs as JSON.

How it solves

Most-constrained-first construction, then simulated annealing for a few seconds — the same family of methods behind our OptimizeFlow route optimizer. Longer solve time = better result.

Questions

What is the input format?

Plain lines, comma/semicolon/tab separated — paste directly from Excel. Rooms: name, capacity, type. Teachers: name, unavailable, max/day where unavailable looks like Mon 1-2; Wed; Fri 7-8 (Dutch/French day names work too). Classes: name, size. Lessons: class, subject, teacher, hours/week, room type, block. Load the sample to see a complete school.

Some lessons stay unplaced — why?

Either a genuine impossibility (check the messages above the results) or the search ran out of time. Try 8–20 seconds, add a room of the scarce type, relax a teacher’s unavailability, or split a double period.

Can I pin a lesson to a fixed slot, or set lunch breaks?

Not in this version. Workaround for breaks: give teachers the break period as unavailable, or use fewer periods per day. Pinning, split classes and shared teachers across schools are typical “full version” features.

How big a school can it handle?

Comfortably a few dozen classes and teachers (a few hundred lessons) in a few seconds; larger schools work but benefit from the 20-second setting. Everything runs on your machine, so it depends on your device.

Is it optimal?

It is a heuristic: it always returns a valid (conflict-free) timetable for what it managed to place, and improves gaps and balance for as long as you let it run. Run it twice and keep the better one.

Need more: exam scheduling, university-scale, integrations?

Multi-site, teacher preferences, room booking systems, exam timetabling, integration with your student information system — talk to us. Scheduling under constraints is what OptimizeFlow does for field services.

Scheduling problems bigger than one school?

Technicians, vehicles, exams, shifts — we build optimizers for constraints that spreadsheets can't handle.