MessNoMore Data Tools

MessNoMore Data Tools › School Term Dates API: UK, Australia, Malaysia (JSON)

Is there an API for school term dates and school holidays?

Updated · By Wong Xian Qi

There is no single national JSON API for UK school term dates: each council publishes its own dates in its own format, and the Australian state education departments and Malaysia's Ministry of Education (KPM) do the same. The School Holidays & Term Dates API reads those official calendars for 10 UK councils plus Northern Ireland, five Australian states and every Malaysian state, and returns terms, half terms and holidays as consistent JSON with a source link on every record.

Where do school term dates come from?

In the UK, term dates come from each council's own website. They appear as an HTML table (for example East Sussex) or as a calendar feed (Falkirk publishes an iCalendar file), and data.gov.uk has some council datasets as CSV or XML. Northern Ireland publishes school holidays but not term dates. GOV.UK does publish one JSON file, bank holidays, but that is not the same as school terms.

In Australia each state publishes its own calendar: NSW (Eastern and Western divisions, with later years on a separate page), Victoria, Queensland, Western Australia and Tasmania. In Malaysia, KPM publishes a yearly academic calendar PDF with separate tables for Kumpulan A and Kumpulan B, listed on its academic calendar page.

Which Malaysian states follow Kumpulan A and Kumpulan B?

CalendarStates and territories, as the API maps them
Kumpulan AKelantan, Terengganu, and Kedah (own variation)
Kumpulan BJohor, Melaka, Negeri Sembilan, Pahang, Pulau Pinang, Perak, Perlis, Selangor, Sabah, Kuala Lumpur, Labuan, Putrajaya, and Sarawak (own variation)

Kedah and Sarawak have their own calendars because the Ministry gives them some different festive holidays. Malaysian holiday records include the extra festive school holidays announced by KPM. Ask for a state by name or code (Selangor or MY-10) and you get its calendar.

How do I get school term dates as JSON?

Choose a country (GB, AU or MY), the councils or states, the school years and the record types: term, half_term, holiday or public_holiday. A year means the year a school year starts, so in the UK 2026 is 2026/27, and in Australia and Malaysia it is the 2026 school year. This request returns NSW terms and holidays for 2026 and 2027:

curl -X POST "https://api.apify.com/v2/acts/messnomore~school-holidays-api/run-sync-get-dataset-items" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"country": "AU", "regions": ["NSW"], "years": [2026, 2027], "types": ["term", "holiday"]}'

The first two of its 16 records, from a real run:

[
  {
    "country": "AU",
    "region": "New South Wales",
    "regionCode": "AU-NSW",
    "scope": "Government (state) schools. Catholic and independent schools may differ.",
    "schoolYear": "2026",
    "type": "term",
    "name": "Term 1",
    "start": "2026-02-02",
    "end": "2026-04-02",
    "days": 60,
    "derived": false,
    "notes": "School development days Tuesday 27 January to Friday 30 January; students start Monday 2 February",
    "sourceName": "NSW Department of Education",
    "sourceUrl": "https://education.nsw.gov.au/schooling/calendars/2026",
    "licence": "CC BY 4.0",
    "lastVerified": "2026-10-12"
  },
  {
    "country": "AU",
    "region": "New South Wales",
    "regionCode": "AU-NSW",
    "scope": "Government (state) schools. Catholic and independent schools may differ.",
    "schoolYear": "2026",
    "type": "holiday",
    "name": "Autumn holidays",
    "start": "2026-04-07",
    "end": "2026-04-17",
    "days": 11,
    "derived": false,
    "notes": null,
    "sourceName": "NSW Department of Education",
    "sourceUrl": "https://education.nsw.gov.au/schooling/calendars/2026",
    "licence": "CC BY 4.0",
    "lastVerified": "2026-10-12"
  }
]

The same fields come back for every publisher, even when the calendars are built differently. Falkirk has four terms a year, and some publishers, Victoria among them, list mainly term dates, so the holidays between terms are worked out and marked derived: true:

regionCodeschoolYeartypenamestartenddaysderived
GB-BKM2026/27half_termOctober half term2026-10-262026-10-305false
GB-FAL2026/27termAutumn term2026-08-122026-10-0959false
GB-FAL2026/27termWinter term2026-10-262026-12-2258false
AU-VIC2026holidayTerm 1 holidays2026-04-032026-04-1715true

Every record also carries sourceUrl, licence and lastVerified, the last day the source was fetched and still matched. Each source is checked weekly, its dates are extracted twice and compared, and every change is reviewed before it is published. New school years appear once the publisher releases them.

How much does it cost?

Pay-per-event pricing: $0.005 per record returned, plus $0.00005 per run start, with no charge for compute time. One UK council for two school years is about 18 records, or about $0.09. The 16 NSW records above cost about $0.08. All six Australian regions for one school year are roughly 45 to 55 records (about $0.25), and all 16 Malaysian states and territories for one year are roughly 160 to 190 records (about $0.80 to $0.95). Apify Bronze, Silver and Gold subscribers get lower prices.

Which regions are covered, and what is not?

Is there a free sample dataset?

Yes. The free school term dates sample dataset on GitHub has 52 records as JSON and CSV: 2026 for New South Wales, Victoria and Queensland (CC BY 4.0), and 2026/27 for Buckinghamshire, Staffordshire and Falkirk (Open Government Licence v3.0). It is a snapshot; the API covers more regions and future years and is re-checked weekly.

FAQ

Is there a free API for UK school term dates?

There is no single national JSON API for UK school term dates. Each council publishes its own dates in different formats, and data.gov.uk has some council datasets as CSV or XML. The School Holidays & Term Dates API puts 10 councils plus Northern Ireland into one JSON format.

What are Kumpulan A and Kumpulan B school holidays in Malaysia?

The Ministry of Education (KPM) academic calendar has separate tables for Kumpulan A and Kumpulan B. The API maps Kelantan, Terengganu and Kedah to Kumpulan A and the other states and federal territories to Kumpulan B, with separate variations for Kedah and Sarawak, so you can request a state by name or code.

Where can I find NSW school term dates and holidays as JSON?

The NSW Department of Education publishes term and holiday dates on its website, with Eastern and Western division dates. The API returns them as JSON: AU-NSW holds the Eastern dates and AU-NSW-W the Western division, each record with a sourceUrl and a lastVerified date.

How often do the school term dates data change?

Every source is checked weekly, and lastVerified on each record is the last day its source was fetched and still matched the dates. New school years appear once the publisher releases them.

Can I use school term dates data commercially?

The UK data is published under the Open Government Licence v3.0 and the Australian data under CC BY 4.0, both of which allow commercial use with attribution. Keep sourceName, sourceUrl and licence with the data. The Malaysian dates are factual dates from KPM's academic calendar, so credit KPM as the source.

Do the dates apply to every school?

They apply to the schools named in the scope field. In England that means community and voluntary-controlled schools, so academies, free and foundation schools may set their own dates, and INSET days are not included. Australian and Malaysian records cover government schools.