ICS / iCal Validator

Validate .ics files for RFC 5545 compliance and list parse errors

Free ICS validator — paste an iCalendar file and check it against RFC 5545. It verifies BEGIN/END nesting, required properties on VEVENT/VTODO/VTIMEZONE, and date-time formats, then lists every error and warning. Runs entirely in your browser. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

What does the validator check?

It verifies that BEGIN and END tags are balanced and correctly nested, that the file begins with VCALENDAR and declares VERSION and PRODID, and that each VEVENT, VTODO, and VTIMEZONE has the properties RFC 5545 requires, such as UID and DTSTAMP.

An ICS validator checks that an iCalendar file follows RFC 5545 before you rely on it. A malformed .ics may import silently wrong, drop events, or be rejected outright by strict apps. This free tool parses the file structure and the required properties of each component, then lists exactly what is missing or malformed — all in your browser.

How it works

The validator unfolds the file (joining continuation lines that begin with a space or tab), then walks it line by line:

  1. Structure. It maintains a stack of BEGIN: components and matches each END:. Mismatched or unclosed components are errors, and the outermost component must be VCALENDAR.
  2. Calendar properties. VERSION and PRODID are required directly inside VCALENDAR.
  3. Component requirements. A VEVENT needs UID and DTSTAMP; a VTODO needs the same; a VTIMEZONE needs TZID and at least one STANDARD or DAYLIGHT sub-component.
  4. Value checks. Date and date-time values are tested against the allowed patterns, and lines without a property name before the colon are flagged.

Each issue is reported with the line number and component so you can jump straight to it. Warnings cover non-fatal style issues like bare-newline line endings.

Required properties by component

Understanding what each component must contain helps you fix errors quickly:

VCALENDAR (the wrapper)

  • VERSION:2.0 — required, must be exactly 2.0 for RFC 5545
  • PRODID — required, identifies the software that created the file (for example -//Google Inc//Google Calendar 70.9054//EN)

VEVENT

  • UID — required; a globally unique identifier for this event. Missing UID is the most common error and causes calendar apps to duplicate the event on every import.
  • DTSTAMP — required; the UTC timestamp of when this event record was created.
  • DTSTART — required for most event types; the start date or date-time.
  • SUMMARY — not required by RFC 5545 but expected by virtually all calendar apps for display.

VTODO

  • UID — required
  • DTSTAMP — required

VTIMEZONE

  • TZID — required; the time zone identifier matching any TZID= references in the file
  • At least one STANDARD or DAYLIGHT sub-component defining the UTC offset rules

Common errors and how to fix them

ErrorCauseFix
Missing UIDExporter omitted itAdd a globally unique string, for example a UUID
Unbalanced BEGIN/ENDNested component not closedFind the mismatched END and add the missing one
Invalid DTSTART formatDate uses slashes or spacesUse YYYYMMDD or YYYYMMDDTHHmmssZ format
Missing VERSIONWrapper has no versionAdd VERSION:2.0 inside BEGIN:VCALENDAR
Line-ending warningExporter used LF not CRLFMost apps accept it; only fix if the destination is strict

What the validator does not check

  • Whether dates and times describe the event you intended (it only checks the format is valid)
  • Recurrence rule correctness — RRULE is validated as a property but its logic is not simulated
  • Whether referenced TZIDs have matching VTIMEZONE definitions (a warning may appear but is not a hard error)

Tips

  • A file can be structurally valid yet still import incorrectly — validate form here, then verify the event appears as expected after import.
  • The missing UID error is the most important to fix; without it, re-importing the file will create duplicate events.
  • Pair this with the ICS merger to combine and then validate the merged result.
  • All processing is local. Calendar content including attendee details and private event notes never leave your browser.