ICS CALENDAR CHECK · RUNS IN YOUR BROWSER · NOTHING UPLOADED

Why won't this calendar file import?

Paste or drop an .ics (iCalendar) file and get every problem with its line number before Google Calendar, Outlook or Apple Calendar rejects it or puts events in the wrong place: missing UID or DTSTAMP, events that end before they start, all-day events with zero length, broken recurrence rules, time zones with no definition, duplicate UIDs and unfolded long lines. Then download a copy with every provable fix applied.

The file is read in this browser tab and never leaves your device. This checks the file against the iCalendar standard, not against any one app. Independent of every calendar product named.

1. Your calendar file

An .ics export from any calendar, a booking system, an events plugin or a script.

Choose a file or paste the text, then click Check calendar.

The rules, and what they leave out

Common questions

Why does my .ics file fail to import into Google Calendar or Outlook?

The usual causes are a missing UID, DTSTAMP, VERSION or PRODID, an event that ends before it starts, a recurrence rule with both COUNT and UNTIL, a time zone named without its VTIMEZONE definition, or a file whose lines were broken without the leading space that marks a continuation. This tool reports each one with its line number.

What does a TZID without a VTIMEZONE do?

The file says the time is in, for example, America/New_York but does not define that zone. Some apps know the name already; others, Outlook in particular, are commonly reported to show the event at the wrong hour. Writing times in UTC (ending in Z) or including the VTIMEZONE block avoids the question. The tool warns about it but does not invent transition rules.

Why is my all-day event not showing or one day short?

For all-day events (VALUE=DATE) the end date is exclusive: a one-day event on 10 February has DTEND of 11 February. A DTEND equal to DTSTART means zero length. The tool moves it forward one day when you apply the fixes.

What does the fixed file change?

Only things it can prove: adds VERSION and PRODID when missing, adds a stable UID and a DTSTAMP to events that lack them, moves a zero-length all-day DTEND forward a day, refolds lines to 75 octets and writes CRLF line endings. Everything else is left exactly as it was and listed as a finding.

Is my calendar uploaded anywhere?

No. The page reads the file in your browser and a test in the code asserts there are no network calls.

What does this not check?

Whether a particular app will accept the file, free/busy and scheduling methods (iTIP), attachments, alarms in detail, or the correctness of VTIMEZONE rules. It reads the standard calendar and event properties.