KidsFoldr
Free tool ยท Runs in your browser Sources checked

ICS validator: check and fix an .ics file that won't import

Drop in the calendar file from the school, the team or the club. See every line that breaks the standard, which apps it trips, and download a repaired copy.

  • Nothing is uploaded. The file is read and fixed on this page.
  • Each problem names its line, the rule and the apps it breaks.
  • Safe repairs are made for you. Anything that needs your judgment is left to you.
No file handy?

Runs entirely in your browser. Your file is never uploaded, and we keep nothing.

Why an .ics file won't import

An .ics file is plain text in a format called iCalendar. Its rules are written down in one standard, RFC 5545, and every calendar app reads it.

But each app forgives different mistakes. A file that opens on one phone can fail on a computer, or import with every time off by hours. Here is what each app documents, and what users report.

Google Calendar

  • Import works on a computer only: Settings, then Import & export, then choose the file and a calendar (Google).
  • Google works with files of 1 MB or smaller. A bigger file usually brings "Google Calendar is temporarily unavailable". Export a shorter date range, or split the file (Google).
  • "Processed x of y events" usually means some events cannot be read. "Processed zero events" can mean a ZIP file that was not unpacked, or Import clicked twice. "The connection to the server was reset" usually means a badly formatted file (Google).
  • Guests are not imported with an event (Google).
  • A developer checked dozens of files that Google Calendar on Android refused with "Unable to launch event". Every one was missing DTSTAMP, and adding that one line fixed them (Terence Eden).
  • Users report a "you do not have sufficient access" error when a file's UID is already on the calendar. Changing or deleting the UID line fixed it (user reports).

Outlook and Exchange

Microsoft publishes how Exchange, the server behind Outlook in many workplaces, departs from the standard when it imports a file. It fails the whole import on any of these (Microsoft):

  • A time zone name (TZID) with no matching VTIMEZONE block.
  • An event with no UID, or with two.
  • An event with no start (DTSTART), or an end before its start.
  • A date it cannot read, or one before 1601 or after 4500.
  • A repeat rule it does not support.
  • More than one VCALENDAR in the file.

Exchange's documentation also says it needs a METHOD line. Adding METHOD:PUBLISH is a safe fix. In other ways Exchange is forgiving: it accepts any line ending and any line length, and fills in a missing DTSTAMP with the import time.

One habit is worth knowing. Exchange silently skips a line that breaks the format, so a lost line of a description just disappears (Microsoft).

In new Outlook for Windows, double-clicking an .ics file often does nothing. Users found the import dialog appears only after switching to the Calendar view (Microsoft Q&A). An imported file is a snapshot and never updates. A subscribed calendar refreshes, which Microsoft says can take more than 24 hours.

Apple Calendar

On a Mac, choose File, then Import, or drag the file onto Calendar, then pick the calendar (Apple). Apple's guide describes no error messages.

On iPhone, users on iOS 18 reported that opening an .ics file shows the event with no way to add it. The workaround posted there: save the file to Files, then drag it onto the Calendar app. Apple has not confirmed a cause. So a valid file can still fail to open, and the fix is in the app, not the file.

The faults with the best evidence

No source counts how often each fault happens. These are the ones with documentation or repeated reports behind them.

  1. No DTSTAMP. Google Calendar on Android refused the files. Exchange fills it in.
  2. A missing or shared UID. Exchange fails with no UID. Google refuses a UID already on the calendar.
  3. A time zone with no VTIMEZONE. When a TZID, even a Windows name like "Eastern Standard Time", has no matching VTIMEZONE, Exchange fails the import. Google and older Outlook imported at the wrong time. Include a VTIMEZONE, and use an IANA name such as America/New_York.
  4. A local time written with a Z. A Z means UTC. The file imports fine, but every event is off by your offset from UTC.
  5. An all-day end on the same day. The end date is the day after the last day. Older Outlook made zero-length items from the same-day version.
  6. An end before the start. Exchange fails the import.
  7. A file over 1 MB, for Google Calendar.
  8. METHOD:REQUEST with several events. Users report only the first event gets added from email. Switching to PUBLISH is the usual fix.
  9. A repeat rule an app does not support. Exchange fails the import.
  10. A broken line, like a raw line break inside a description. Exchange drops it.

Try it on a broken school calendar

Here is the kind of file this tool is for. The Brambleford Elementary PTA sends the Pell family its fall calendar: five events for Juniper in 3rd grade and Theo in 1st. The file will not import.

The sample .ics file from a made-up school PTA, with each broken line marked: a missing PRODID, a missing DTSTAMP, a shared UID, a Windows time zone, a same-day all-day end, an unescaped location, a repeat rule with COUNT and UNTIL, and an end time before the start.
A sample file from a made-up school. Tap the image to see it full size, or use "Try our sample" above to run it.

It looks fine at a glance. Every event has a name, a date and a place.

The faults are small: a missing line, a copied ID, one AM that should be PM. Any one of them can stop an import, or put an event at the wrong time.

What the tool found

The check takes under a second. It reports 12 problems in 5 events and fixes 11 of them:

  • The calendar has no PRODID line. Fixed: added.
  • Fall Festival has no DTSTAMP. Fixed: added, in UTC.
  • Its location, Hollis Park, Field 3; north lot, has a bare comma and semicolon. Fixed: Hollis Park\, Field 3\; north lot.
  • Line 12 of its description lost its leading space, so it reads as a broken line. Fixed: joined back as a new line of text, marked for you to check.
  • Picture Day is all day, with an end date equal to its start. Fixed: the end moves to the next day, so it is a one-day event.
  • The Book Fair shares Picture Day's UID, from a copy and paste. Fixed: a new UID.
  • The Book Fair uses the Windows time zone "Eastern Standard Time" with no VTIMEZONE. Fixed: renamed America/New_York, with a VTIMEZONE block added.
  • Theo's soccer practice repeats with both COUNT=10 and UNTIL. Both stop after the same 10 Tuesdays, so the fix keeps UNTIL, written as a local date and time like the start.
  • The file uses bare line feeds, and two lines run past 75 bytes. Fixed: CRLF line endings and folded lines.

Two notes need nothing. Three events use a local clock time with no time zone, which is valid and right for school events. And the file says PUBLISH with no ORGANIZER. We found no app that refuses one.

The one it leaves to you

Juniper's parent-teacher conference starts at 3:00 PM and ends at 3:30 AM the same day:

DTSTART:20261022T150000
DTEND:20261022T033000

That is almost certainly 3:30 PM. But the tool cannot know it, so it says so, suggests DTEND:20261022T153000 and leaves the line alone. Change it, then check the file again: the fixed copy then comes back with no problems.

About the .ics validator

The checker reads the file the way a strict app would. It unfolds the lines, pairs every BEGIN with its END, then checks each calendar, event and time zone against the standard's rules.

A rule the standard says MUST be followed is an error. One it says SHOULD be followed, or one a major app is documented to trip on, is a warning. Things that are valid but worth knowing are notes.

What it checks

  • BEGIN:VCALENDAR and END:VCALENDAR, and every BEGIN matched by its END.
  • VERSION:2.0 and PRODID, once each, and at least one event.
  • A UID and a UTC DTSTAMP on every event, and no two events sharing a UID.
  • DTSTART, and an end that is later than the start, with DTEND or DURATION but not both.
  • Dates and times written the standard way, with VALUE=DATE on dates, and no Z next to a TZID.
  • All-day ends that fall on the day after the last day.
  • A VTIMEZONE for every time zone a time names, and a complete one.
  • Repeat rules: FREQ first, never both COUNT and UNTIL, and UNTIL the same kind of value as the start.
  • Backslashes before commas, semicolons and backslashes in text.
  • CRLF line endings, lines folded at 75 bytes, no empty lines and no byte order mark.
  • METHOD, which Exchange needs, and the 1 MB limit Google sets.

What it repairs

Only what has one right answer. Every repair is listed in the results, so you can see what changed.

  • Line endings, line folding, a leading byte order mark and empty lines.
  • A missing VERSION or PRODID, and METHOD:PUBLISH when the file has no guests.
  • Missing DTSTAMPs, a DTSTAMP without a Z, and missing or shared UIDs.
  • An all-day end date on the same day, a timed end equal to the start, and DTEND with DURATION when the two agree.
  • Dates written with dashes, an offset like -0800, or a missing VALUE=DATE.
  • Backslashes, commas and semicolons in text, and a continuation line that lost its leading space (marked for you to check).
  • Repeat rules: FREQ moved first, UNTIL changed to match the start, and COUNT with UNTIL when both stop on the same date.
  • An unclosed BEGIN, when where it ends is clear.
  • Time zones: a Windows name renamed to its IANA name from the Unicode CLDR list, and a VTIMEZONE built from your browser's time zone data for any zone that lacks one.

What it leaves to you

Anything that needs the author's intent: an end before its start, a Z next to a TZID, an impossible date, COUNT and UNTIL that disagree, a stray END, a time zone name it cannot look up. Each one says what to change. Fix it by hand, then run the check again.

No file to fix at all

The calendar file is a middle step between the paper and your calendar. KidsFoldr skips it. Snap the flyer or the school calendar, and every date lands on your family calendar with no typing. Each event links back to its paper in the calendar entry's notes, one tap away.

The paper itself is filed under the right kid, grade and type, with no sorting. So it can go. Scan it for peace of mind, then toss it with no guilt.

What happens to your file

Nothing leaves your browser. The file is read, checked and repaired by this page, and the fixed copy is made on your device. We never see it, and we keep nothing.

Questions about this tool

Is my file uploaded?

No. The file is read, checked and repaired by this page, in your browser. Nothing is sent to a server, and nothing is saved.

Why does Google Calendar say "Processed x of y events"?

Google says it usually means some events in the file cannot be read. Run the file through the checker to find which ones, then import the fixed copy. "Processed zero events" can also mean a ZIP file that was not unpacked, or the Import button clicked twice.

Why are my imported events at the wrong time?

Usually a time zone problem. Either a time names a zone with no VTIMEZONE block, or a local time was written with a Z, which means UTC. The checker fixes the first. For the second, only you know which time was meant: check one event after import.

Why does my all-day event show as zero length or end a day early?

In an .ics file, the end date of an all-day event is the day after the last day. A one-day event on the 14th ends on the 15th. The checker moves an end date that equals the start to the next day.

Why does nothing happen when I open an .ics file in new Outlook?

Many users report it. The import dialog appears only after you switch to the Calendar view. Then pick a calendar and click Import. The file itself may be fine.

Will the fixed file import everywhere?

It removes every fault the checker marks as fixed, and those are the causes Google, Microsoft and user reports name. Anything marked "Needs you" is still in the file until you change it. A problem with the app itself, like new Outlook ignoring a double-click, is outside the file.

Does the repair change my events?

Only where the meaning is certain: missing IDs and time stamps, backslashes in text, line endings and folding, an all-day end date, a Windows time zone name and its VTIMEZONE block. It never guesses at a time, a date or which of two rules you meant.

Do I need an account?

No. There is no signup, no email and no popup.

What does the KidsFoldr app add?

No file to fix at all. Snap the school's paper, and every date lands on your family calendar with no typing, each event linked back to its paper. The paper itself is filed under the right kid, grade and type, so it can go.

Sources