Guide

Building software that depends on school term dates

Updated

Term dates look like reference data and behave like user-generated content: thousands of independent publishers, no schema, no change notifications, and a real cost when a record is wrong.

Enumerate before you aggregate

The Department for Education's Get Information about Schools register is machine readable, comprehensive for England, and downloadable in bulk. It holds establishment records rather than calendars.

That gives you the denominator and, crucially, each school's governance type, which under section 32 determines whether its dates come from the council or from its own governing body or trust. Doing this first turns a vague scraping problem into a bounded one.

Design for staleness explicitly

Every date you hold should carry where it came from and when it was last confirmed. Without those two fields you cannot distinguish a date verified this morning from one scraped two years ago, and neither can your users.

Surface both. A date shown with its source and its age is honest; a date shown bare implies a confidence nobody can support.

Decide what wrong looks like

For a marketing calendar, a wrong half term is an annoyance. For anything scheduling childcare, transport or staffing around a school day, a wrong inset day fails a family on the morning.

That difference should drive the design. A high-stakes feature needs a confirmation step against the school's own page, or it needs to not exist.

Four nations, four models

England, Wales, Scotland and Northern Ireland publish differently, and gov.uk's tool covers England and Wales only.

Decide the scope early. Retrofitting Scotland and Northern Ireland into a model built around English councils is a rewrite rather than an extension, because the structures and the terminology differ.

Say what your coverage is

Nobody in this market publishes a verifiable coverage figure, and the reason is that the denominator is every school in the UK and the register of those is a separate dataset.

If you build something, state your coverage against that register and state your freshness policy. It is a low bar and almost nothing on the market currently clears it, which is the actual gap here.

See every source, and what each one costs you

Six sources on coverage, authority and machine readability, with the statutory reason no seventh exists.

See the comparison