ICS file validator: check a calendar file for errors
Short answer: choose an .ics file or paste its text, and this page lists what is wrong with it, with line numbers, and shows the events it found. It runs in your browser: the file is not uploaded.
No account. Nothing uploaded. Free.
2. The result
What it checks
- The file starts with BEGIN:VCALENDAR and every BEGIN has a matching END.
- VERSION:2.0 and PRODID are present.
- Each event has a DTSTART, a UID and a DTSTAMP.
- Dates and times are valid, and an event does not end before it starts.
- An event does not have both DTEND and DURATION.
- The start and end are the same type (both dates, or both date-times).
- Two events do not share a UID.
- Time zones used in TZID have a VTIMEZONE block, with a note when they do not.
- Lines end with CRLF and are folded at 75 bytes, as the standard asks.
Problems are marked as errors (the file is wrong), warnings (it usually works but strict readers may reject it) or notes (good to know).
Common errors and how to fix them
| Message | What to do |
|---|---|
| BEGIN:VEVENT is never closed | Add the missing END:VEVENT line before END:VCALENDAR. |
| DTSTART is not a valid date | Write dates as 20261117 or 20261117T090000Z, with no dashes or colons. |
| An event ends before it starts | Swap or correct DTSTART and DTEND. |
| No UID | Add a UID line with a unique value, for example a random id plus a domain name. |
| No DTSTAMP | Add DTSTAMP with the time the file was made, such as DTSTAMP:20261110T090000Z. |
| Lines end with LF instead of CRLF | Most apps still accept it. For strict readers save the file with Windows (CRLF) line endings. |
| The file does not start with BEGIN:VCALENDAR | Remove anything before it, such as a byte-order mark or an email header. |
The structure of an ICS file
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Yotei//Free ICS maker//EN
BEGIN:VEVENT
UID:5b1d2c0e-7a3f-4c2b-9d51-0f6e8a1b2c3d@yotei.win
DTSTAMP:20261110T090000Z
DTSTART:20261117T090000Z
DTEND:20261117T100000Z
SUMMARY:Meeting
LOCATION:Café Noord\, Kerkstraat 12
END:VEVENT
END:VCALENDAR
- BEGIN:VCALENDAR and END:VCALENDAR wrap the whole file. VERSION:2.0 is the format version every calendar app expects.
- BEGIN:VEVENT and END:VEVENT wrap one event. A file can hold as many events as you like.
- UID is a unique id. Calendar apps use it to recognise the same event later.
- DTSTART and DTEND are the start and end. A time ending in Z is in UTC, so the app shows it correctly in your own time zone.
- SUMMARY is the title and LOCATION is the place. A comma inside text is written with a backslash.
Why a calendar app refuses a file
Google Calendar and Outlook are forgiving in different ways. A file that opens in one can fail in the other, most often because of a missing UID, a date with the wrong format, an event that ends before it starts, or text with an unescaped comma or semicolon. Run the file through this page first, fix the errors it lists, and try the import again. If you need a clean file from scratch, make one with the ICS file generator.
Privacy
The file is read by a script in this page. It is not uploaded and not stored. The only request the page makes is an anonymous visit counter.
FAQ
How do I validate an ICS file?
Choose the file or paste its text. The result shows errors, warnings and notes with line numbers, and a table with the events in the file.
Why will my ICS file not import?
The usual causes are a missing UID or DTSTART, a date in the wrong format, an event that ends before it starts, and a block that is not closed. The validator lists these.
Does it check the full iCalendar standard?
It checks the rules that most often break an import: structure, required fields, date formats and ordering. It does not check every optional property of RFC 5545.
Is my calendar file private?
Yes. It stays in your browser and is not uploaded.
What does a floating time mean?
A time with no Z and no time zone. It shows the same clock time wherever you open the file, which is fine for a local event and wrong for a call across time zones.
Can it fix the file for me?
Not automatically. It tells you what is wrong. To make a correct file, use the ICS file generator or Text to ICS.
Yotei