CorrectICS

My .ics File Won’t Import — Quick Checklist for Developers

If your .ics file isn’t importing into Google Calendar, Outlook, or Apple Calendar, run through this quick checklist. In most real-world cases, the problem is one of these.

You can use this page as a debugging flowchart and as a design checklist when you build ICS export features.


✅ 1. Does the ICS file have the required wrapper?

You must have:

BEGIN:VCALENDAR
...
END:VCALENDAR

and at least one event:

BEGIN:VEVENT
...
END:VEVENT

Check:

  • BEGIN:VCALENDAR and END:VCALENDAR present
  • BEGIN:VEVENT and END:VEVENT present

✅ 2. Does each VEVENT have DTSTART (and usually DTEND)?

Most clients require a start time, and strongly prefer an end time or duration.

Check every VEVENT for:

  • DTSTART present
  • DTEND or DURATION present

Example:

DTSTART:20250310T140000Z
DTEND:20250310T150000Z

✅ 3. Are you using valid time zones?

TZID must be a valid IANA time zone:

Valid:

DTSTART;TZID=America/New_York:20250310T090000

Invalid:

DTSTART;TZID=EST:20250310T090000
DTSTART;TZID=GMT-5:20250310T090000

Check:

  • No TZID=EST, TZID=CST, TZID=GMT-5, etc.
  • All TZID values use Region/City format (e.g., Europe/Berlin)

If you don’t care about local time zones, stick to UTC with Z:

DTSTART:20250310T140000Z

✅ 4. Do you include VERSION and PRODID?

Some clients silently reject files missing these:

VERSION:2.0
PRODID:-//YourApp//EN

Check:

  • VERSION:2.0 exists inside VCALENDAR
  • PRODID: exists with some value

✅ 5. Does every event have a UID?

Each VEVENT needs a unique ID:

UID:event-1234@yourapp.com

Check:

  • Every VEVENT has a UID
  • UIDs are either stable (for the same logical event) or truly unique

✅ 6. Are your RRULEs valid?

Common mistakes:

  • Missing FREQ=
  • Invalid UNTIL date
  • Typo’d BYDAY/BYMONTH rules

Check:

  • Every RRULE has FREQ=...
  • UNTIL dates are real (no Feb 30)
  • No obviously infinite recurrences without UNTIL or COUNT (some clients dislike this)

Example:

RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR

✅ 7. Are line endings and folding correct?

ICS prefers:

  • CRLF (\r\n) line endings
  • Long lines folded with a leading space on continuation lines

Check:

  • Long values (especially DESCRIPTION) are folded, e.g.:
DESCRIPTION:This is a long description that must be folded
  onto the next line to be safe.

If in doubt, run the file through a normalizer.


✅ 8. Are you mixing local times and missing VTIMEZONE?

If you use local times with TZID and need Outlook/Exchange compatibility, consider adding a VTIMEZONE block for each zone you use.

If you don’t want to deal with this: prefer UTC with Z.


✅ 9. Sanity checks in multiple clients

Before shipping your ICS generator:

  • Import into Google Calendar (web)
  • Import into Outlook Web / Office 365
  • Import into Apple Calendar (macOS or iOS)
  • If needed, test in Outlook Desktop

If it works in all four, your file is in good shape.


✅ 10. Use an automated validator/autofix in your workflow

Manual inspection doesn’t scale. For recurring imports/exports:

  • Add a validation step in CI or your ingestion pipeline
  • Consider an autofix step before storing or sending ICS files

Example using CorrectICS:

curl -X POST https://api.correctics.com/v1/validate \
  -H "Content-Type: text/calendar" \
  --data-binary @event.ics