Skip to main content

Calendar feeds

Every calendar on this site is available as an iCalendar (.ics) feed you can subscribe to. There are 1,062 permanent feeds: 36 country feeds, 68 region feeds, 19 university feeds and 349 individual school feeds — plus 590 per-type feeds that carry one kind of break at a time (summer, winter, spring, public holidays, term dates).

Subscribe or import? They are not the same thing

A feed URL can be used in two ways, and only one of them keeps working next year. This is the single most common source of "the calendar is wrong" reports, so it is worth reading before you pick a URL.

Subscribe (recommended)

Your calendar app keeps a link to the URL and re-reads it on its own schedule. When we publish a new school year, or correct a date, the events in your calendar change — no action from you. This is the mode these URLs are designed for.

  • Apple Calendar: File → New Calendar Subscription… → paste the URL.
  • Google Calendar: Other calendars → + → From URL → paste the URL.
  • Outlook: Add calendar → Subscribe from web → paste the URL.
  • Anywhere else: use the webcal:// form of the URL — the same address with the scheme changed.

Import (a one-time copy)

Importing reads the file once and copies the events in as ordinary entries. There is no link back to us, so a correction never reaches you, and next year's dates do not appear — you have to find the new file and import it again.

Import is the right choice for a fixed historical window (a report, an archival record, a screenshot) and the wrong choice for anything you plan trips around.

Both modes read the same file. What differs is whether your calendar keeps checking it — and every feed here is built on the assumption that it does: event identifiers never change meaning, so a subscription updates in place instead of leaving duplicates behind. The comparison tool has its own feed at /feeds/compare.ics, generated on request from the schools you selected.

Update frequency and stability

Property What we promise
Refresh hint Every feed asks clients to re-check daily (REFRESH-INTERVAL:P1D). Calendars honour this at their own discretion — Apple and Outlook typically do, Google re-reads external feeds on a slower schedule of its own.
URL permanence These URLs do not change and are never retired. A new school year is added to the feed you already subscribed to; it does not get a new address. A type feed is published once the region has published a break of that kind and keeps its URL from then on, including years when the rolling window happens to hold none.
Event identifiers (UIDs) A UID identifies a holiday, not a date range: it deliberately excludes the dates. If a break moves, the same UID is re-published with corrected dates and a higher SEQUENCE, so your calendar updates the entry instead of leaving the old one beside it.
Rolling window Feeds carry the school years from last year onward, so a calendar does not accumulate decades of history. Years still in the window are never dropped.
Provenance Each feed's description names the authority the dates came from and the date we last verified them against it.
Type feeds duplicate nothing A type feed is a filter over the full calendar and carries the same UIDs, so subscribing to both /feeds/usa/ohio.ics and /feeds/usa/ohio/summer.ics shows each break once, not twice.

What each type feed contains

Every calendar is split into the same 6 buckets. The rules below are the published form of the code that builds them, so the table and the feeds cannot disagree.

Feed Contains Assignment rule
Summer break
summer.ics
School holidays whose name denotes the summer break (Sommerferien, Zomervakantie, Vacances d'Été, 暑假, 夏休み).
  • canonical key “Summer”
  • canonical key “Summer Break”
  • canonical key “Summer Holiday”
  • canonical key “Summer Holidays”
  • canonical key “Summer School Holidays”
  • canonical key “Summer Vacation”
  • canonical key “Summer Recess”
  • name matches /\bsummer\s+(?:teaching\s+)?(?:break|holiday|holidays|vacation|recess)\b/i
  • name matches /sommerferien/i
  • name matches /zomervakantie/i
  • name matches /f[eé]rias de ver[aã]o/i
  • name matches /\bd'?[eé]t[eé]\b/i
  • name matches /\bverano\b/i
  • name matches /\bver[aã]o\b/i
  • name matches /暑假/
  • name matches /夏休み/
Winter break
winter.ics
School holidays whose name denotes the winter or Christmas break (Winterferien, Kerstvakantie, Christmas Break, 寒假, 冬休み).
  • canonical key “Winter”
  • canonical key “Winter Break”
  • canonical key “Winter Holiday”
  • canonical key “Winter Holidays”
  • canonical key “Winter School Holidays”
  • canonical key “Winter Vacation”
  • canonical key “Winter Recess”
  • canonical key “Winter Closure”
  • canonical key “Christmas”
  • canonical key “Christmas Break”
  • canonical key “Christmas Holiday”
  • canonical key “Christmas Holidays”
  • canonical key “Christmas Vacation”
  • name matches /\bwinter\s+(?:teaching\s+)?(?:break|holiday|holidays|vacation|recess|closure)\b/i
  • name matches /\bchristmas\s+(?:break|holiday|holidays|vacation|recess)\b/i
  • name matches /\bnadal\b/i
  • name matches /weihnachtsferien/i
  • name matches /kerstvakantie/i
  • name matches /\binvierno\b/i
  • name matches /寒假/
  • name matches /冬休み/
Spring break
spring.ics
School holidays whose name denotes the spring or Easter break (Osterferien, Voorjaarsvakantie, Easter Break, 春休み).
  • canonical key “Spring”
  • canonical key “Spring Break”
  • canonical key “Spring Holiday”
  • canonical key “Spring Holidays”
  • canonical key “Spring School Holidays”
  • canonical key “Spring Vacation”
  • canonical key “Spring Recess”
  • canonical key “Easter”
  • canonical key “Easter Break”
  • canonical key “Easter Holidays”
  • canonical key “Easter Holiday”
  • canonical key “Easter Vacation”
  • canonical key “Easter Weekend”
  • name matches /\bspring\s+(?:teaching\s+)?(?:break|holiday|holidays|vacation|recess)\b/i
  • name matches /\beaster\s+(?:break|holiday|holidays|vacation|weekend|recess)\b/i
  • name matches /osterferien/i
  • name matches /voorjaarsvakantie/i
  • name matches /\bp[aâ]ques\b/i
  • name matches /\bprimavera\b/i
  • name matches /復活節/
  • name matches /春休み/
  • name matches /春假/
Public holidays
public-holidays.ics
Every statutory public holiday in the calendar — the `publicHolidays` array, regardless of name.
  • the `publicHolidays` array (kind, not name)
Term dates
term-dates.ics
Term, semester and quarter start/end dates — the `terms` array. Answers "when does school start and end".
  • the `terms` array (kind, not name)
Other school holidays
other-holidays.ics
Breaks that carry no season keyword: autumn/herbst, Pentecost, May, carnival, half terms, mid-terms and single-day closures. The residual bucket, not a season.
  • every school holiday that matches none of the rules above

A type feed exists for every kind of break the region has ever published — its URL is handed out once and stays valid even if the rolling window currently holds no event of that kind. A kind the region has never published gets no feed at all: an empty calendar file would be indistinguishable from a broken one. Names that match no season rule land in other-holidays.ics rather than being forced into a season they do not belong to — the current list is in the methodology and in the manifest below.

Country feeds (36)

One feed per country. For 11 countries the feed is an aggregate of every region we publish — the union of those calendars, with breaks that are identical across regions (same name, same dates) merged into one entry that lists the regions it applies to. Breaks whose dates differ between regions stay separate and are labelled with the region.

Country Feed Events Type feeds
Argentina aggregate of 1 regions /feeds/argentina.ics 11
—
Australia aggregate of 7 regions /feeds/australia.ics 193
—
Austria /feeds/austria.ics 19
Brazil aggregate of 1 regions /feeds/brazil.ics 13
—
Canada aggregate of 3 regions /feeds/canada.ics 45
—
Chile (Central Region) /feeds/chile.ics 11
China aggregate of 2 regions /feeds/china.ics 16
—
Colombia (Bogotá Calendar A) /feeds/colombia.ics 13
Ecuador aggregate of 1 regions /feeds/ecuador.ics 14
—
England /feeds/uk.ics 41
France aggregate of 3 regions /feeds/france.ics 62
—
Germany aggregate of 16 regions /feeds/germany.ics 180
—
Hong Kong /feeds/hong-kong.ics 22
India /feeds/india.ics 14
Indonesia /feeds/indonesia.ics 13
Ireland /feeds/ireland.ics 34
Italy aggregate of 7 regions /feeds/italy.ics 25
—
Japan (Tokyo — Nerima Ward) /feeds/japan.ics 22
Jordan /feeds/jordan.ics 10
Malaysia /feeds/malaysia.ics 21
Mauritius /feeds/mauritius.ics 16
Morocco /feeds/morocco.ics 12
Netherlands aggregate of 3 regions /feeds/netherlands.ics 48
—
New Zealand /feeds/new-zealand.ics 39
Peru /feeds/peru.ics 17
Philippines /feeds/philippines.ics 19
Singapore /feeds/singapore.ics 51
South Africa /feeds/south-africa.ics 44
South Korea /feeds/south-korea.ics 15
Spain aggregate of 1 regions /feeds/spain.ics 16
—
Turkey (Türkiye) /feeds/turkey.ics 14
Uganda /feeds/uganda.ics 15
United Arab Emirates /feeds/uae.ics 15
Uruguay (ANEP Public Schools) /feeds/uruguay.ics 10
USA /feeds/usa.ics 19
Vietnam /feeds/vietnam.ics 14

Region feeds (68)

State, province and zone-level calendars. The Types column lists the per-type feeds that exist for that region with their event counts — a dash means the region publishes no break of that kind.

Region Full calendar Events Type feeds (by name)
NSW
Australia
/feeds/australia/nsw.ics 62
QLD
Australia
/feeds/australia/qld.ics 62
VIC
Australia
/feeds/australia/vic.ics 42
SA
Australia
/feeds/australia/sa.ics 36
WA
Australia
/feeds/australia/wa.ics 68
TAS
Australia
/feeds/australia/tas.ics 38
ACT
Australia
/feeds/australia/act.ics 38
Scotland
United Kingdom
/feeds/uk/scotland.ics 41
Wales
United Kingdom
/feeds/uk/wales.ics 37
Northern Ireland
United Kingdom
/feeds/uk/northern-ireland.ics 20
NYC
United States
/feeds/usa/new-york-city.ics 24
CA
United States
/feeds/usa/california.ics 16
CPS
United States
/feeds/usa/chicago.ics 22
Miami-Dade
United States
/feeds/usa/miami-dade.ics 22
Texas
United States
/feeds/usa/texas.ics 19
Florida
United States
/feeds/usa/florida.ics 19
New York
United States
/feeds/usa/new-york.ics 19
Illinois
United States
/feeds/usa/illinois.ics 19
Pennsylvania
United States
/feeds/usa/pennsylvania.ics 19
Georgia
United States
/feeds/usa/georgia.ics 19
Ohio
United States
/feeds/usa/ohio.ics 19
North Carolina
United States
/feeds/usa/north-carolina.ics 19
Michigan
United States
/feeds/usa/michigan.ics 19
Virginia
United States
/feeds/usa/virginia.ics 19
Washington
United States
/feeds/usa/washington.ics 19
Arizona
United States
/feeds/usa/arizona.ics 19
Massachusetts
United States
/feeds/usa/massachusetts.ics 19
Colorado
United States
/feeds/usa/colorado.ics 19
Indiana
United States
/feeds/usa/indiana.ics 19
Tennessee
United States
/feeds/usa/tennessee.ics 19
ON
Canada
/feeds/canada/ontario.ics 19
BC
Canada
/feeds/canada/bc.ics 32
AB
Canada
/feeds/canada/alberta.ics 16
Baden-Württemberg
Germany
/feeds/germany/baden-wurttemberg.ics 41
Bavaria
Germany
/feeds/germany/bayern.ics 40
Berlin
Germany
/feeds/germany/berlin.ics 38
Brandenburg
Germany
/feeds/germany/brandenburg.ics 35
Bremen
Germany
/feeds/germany/bremen.ics 36
Hamburg
Germany
/feeds/germany/hamburg.ics 34
Hesse
Germany
/feeds/germany/hessen.ics 32
Mecklenburg-Western Pomerania
Germany
/feeds/germany/mecklenburg-vorpommern.ics 41
Lower Saxony
Germany
/feeds/germany/niedersachsen.ics 38
North Rhine-Westphalia
Germany
/feeds/germany/nordrhein-westfalen.ics 35
Rhineland-Palatinate
Germany
/feeds/germany/rheinland-pfalz.ics 34
Saarland
Germany
/feeds/germany/saarland.ics 36
Saxony
Germany
/feeds/germany/sachsen.ics 39
Saxony-Anhalt
Germany
/feeds/germany/sachsen-anhalt.ics 36
Schleswig-Holstein
Germany
/feeds/germany/schleswig-holstein.ics 32
Thuringia
Germany
/feeds/germany/thuringen.ics 38
Netherlands (Noord)
Netherlands
/feeds/netherlands/noord.ics 32
Netherlands (Centraal)
Netherlands
/feeds/netherlands/centraal.ics 32
Netherlands (Zuid)
Netherlands
/feeds/netherlands/zuid.ics 32
Zone A
France
/feeds/france/zone-a.ics 41
Zone B
France
/feeds/france/zone-b.ics 41
Zone C
France
/feeds/france/zone-c.ics 41
Beijing
China
/feeds/china/beijing.ics 12
Shanghai
China
/feeds/china/shanghai.ics 12
Buenos Aires Province
Argentina
/feeds/argentina/buenos-aires.ics 11
Ecuador (Sierra–Amazonía)
Ecuador
/feeds/ecuador/sierra-amazonia.ics 14
Brazil (São Paulo State)
Brazil
/feeds/brazil/sao-paulo.ics 13
Piedmont (Piemonte)
Italy
/feeds/italy/piemonte.ics 16
Lazio (Roma)
Italy
/feeds/italy/lazio.ics 14
Lombardia (Milano)
Italy
/feeds/italy/lombardia.ics 14
Toscana (Firenze)
Italy
/feeds/italy/toscana.ics 14
Veneto (Venezia)
Italy
/feeds/italy/veneto.ics 15
Campania (Napoli)
Italy
/feeds/italy/campania.ics 14
Emilia-Romagna (Bologna)
Italy
/feeds/italy/emilia-romagna.ics 14
Catalonia (Catalunya)
Spain
/feeds/spain/catalonia.ics 16

University feeds (19)

University Full calendar Events Type feeds (by name)
MIT /feeds/universities/mit.ics 11
Stanford /feeds/universities/stanford.ics 10
Harvard /feeds/universities/harvard.ics 9
Yale /feeds/universities/yale.ics 10
Princeton /feeds/universities/princeton.ics 10
Columbia /feeds/universities/columbia.ics 9
Oxford /feeds/universities/oxford.ics 26
Cambridge /feeds/universities/cambridge.ics 12
Imperial /feeds/universities/imperial.ics 12
UCL /feeds/universities/ucl.ics 13
LSE /feeds/universities/lse.ics 13
Edinburgh /feeds/universities/edinburgh.ics 23
Manchester /feeds/universities/manchester.ics 12
King's College London /feeds/universities/kcl.ics 12
NUS /feeds/universities/nus.ics 11
UTokyo /feeds/universities/utokyo.ics 12
PKU /feeds/universities/pku.ics 11
HKU /feeds/universities/hku.ics 14
UCT /feeds/universities/uct.ics 14

School feeds (349)

One feed per school, carrying that school's closures: holidays, staff training days and public holidays. Schools do not have per-type feeds — a single school's calendar is small enough to subscribe to whole. Individual calendars are also on the school directory.

Bangkok (24)

Dubai (223)

Hong Kong (25)

Kuala Lumpur (9)

Shanghai (10)

Shenzhen (10)

Singapore (38)

Tokyo (10)

Per-language feeds (520)

Country and region feeds are also published in Spanish, German, French, Chinese and Japanese at /{locale}/feeds/{slug}.ics — the same events, with the calendar name, the region prefix and the holiday names in that language. The URL follows the language of the page you were reading when you subscribed.

School and university feeds are English only, because those pages are. Event names fall back to the source language where no translation exists yet — the dates are identical either way.

Where the data comes from

Every feed is generated from the same dataset the pages are. If you want the underlying data rather than a calendar, these are the machine-readable exits:

  • /data/schools-compact.json — the 349 school calendars as JSON (closures, term boundaries and staff days), the same payload the comparison tool reads.
  • /methodology/ — how dates are sourced, verified and corrected, and what each verification status means.
  • /changelog/ — what changed, and when.
  • /sitemap.xml — every permanent feed is listed there alongside the pages, so a crawler or an automated consumer can discover them without scraping this page.

The source each calendar is taken from is named in the feed description itself, and on the page for that region, university or school. Nothing here is generated from rules or interpolated from a previous year — see the methodology.

Base URL for every feed: https://globalschoolcalendar.com/feeds/. The machine-readable index of this page is embedded as JSON (#feed-manifest) for automated consumers.

---