New: see the walk between your classes on the timetable

Build with the data

Data freshness

Where the data comes from, how current it is, and what it leaves out.

What is covered#

  • 4,383 modules, every code offered since AY2014 Semester 1.
  • Class indexes for every semester since then. The latest isAY2026 Semester 2 (2026_2), with 1,089 modules and 4,307 indexes.
  • Exams for each semester once NTU publishes the timetable. The latest is 2026_1, with 387 exams.

Where it comes from#

Everything is taken from NTU's public course content, class schedule and exam timetable pages. NTUMods is not affiliated with NTU, and the data is not official. When it disagrees with STARS, STARS is right.

How often it changes#

The data is refreshed by hand, not on a timer. It usually changes a few times a semester: when NTU publishes the next semester's courses and class schedule, again when the exam timetable comes out, and when NTU corrects something. There is no fixed schedule and no daily update.

Two things follow. A new semester can have classes before it has exams, so an exam file can be empty. And NTU can change a class after it is published, which the data only picks up at the next refresh.

How it reaches you#

SourceWhere the data comes fromCaching
Data files, /data/api/*Rebuilt with the site when the data is refreshed.Browsers and the edge keep a copy for a day, and may serve an older one for up to a week while it refreshes.
Module API, /api/modules/{code}Read from the database, which is updated with the files.Browsers keep it for an hour. The edge keeps it for up to a week, and the copy is cleared after each refresh.
MCP serverSearch, exams and the latest class indexes read the files. Module records and older class indexes read the database.The two can disagree for a few minutes after a refresh. Every answer names its semester.

Check how fresh your copy is#

  • Every row in modules.json has latestYear, latestSemester and isCurrentSemester. A module record has the same facts under latestOffering.
  • The semester is in every file name, so you know which one you hold. Store it next to your copy and show it to your users.
  • Over MCP, list_semesters says which semester is current.

What is not in the data#

  • Seat vacancies, bidding results and waitlists. Those live in STARS.
  • Exam venues and seats.
  • Grades, past papers and student reviews.
  • Anything personal. The API and the MCP server never see your timetable.

Check STARS before you register, bid or drop anything. For caching, rate limits and error codes, see status and limits.

Found something wrong?

NTUMods is built and maintained by one person, so a short note goes a long way. Pick what fits, add the details, and I will look at it.

I'll use this to follow up with you.

Attaches your saved timetables and settings to help debug the issue. On by default, turn off to exclude it.

Developer? Open an issue or PR.