People reach for an .ics file when an event has to cross from one calendar system to another: a meeting sent to a client on a different platform, a webinar sign-up page, a list of deadlines for a team. Below are the four ways to make one, then what is inside the file and the mistakes that make one import wrong.
1. Export one from Outlook
In classic Outlook for Windows, open the appointment, choose File → Save As, and pick iCalendar Format (*.ics) as the file type. To export a whole calendar instead, go to the calendar view and use File → Save Calendar, which lets you pick a date range and how much detail to include.
The new Outlook and Outlook on the web do not save single events as files. The closest equivalent is publishing a calendar from the calendar settings, which gives you an .ics link other people can subscribe to rather than a file to attach.
2. Export one from Google Calendar or Apple Calendar
Google Calendar exports whole calendars, not single events. Open Settings → Import & export → Export to download a zip holding one .ics file per calendar, or open one calendar’s own settings and choose Export calendar. There is no one-click download for a single event.
Apple Calendar on a Mac is the easiest of the three: drag an event out of the calendar onto the desktop and it becomes an .ics file. For a whole calendar, select it and use File → Export → Export….
3. Write one by hand
An .ics file is short enough to type. This is a complete, valid one-hour event:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Your Name//Your App//EN
METHOD:PUBLISH
BEGIN:VEVENT
UID:2027-project-review-01@example.com
DTSTAMP:20270301T120000Z
DTSTART:20270315T140000Z
DTEND:20270315T150000Z
SUMMARY:Project review
LOCATION:Room 4\, second floor
DESCRIPTION:Agenda: budget\, timeline\, next steps.
END:VEVENT
END:VCALENDARSave it with an .ics extension. What each line is doing:
| Line | Purpose |
|---|---|
BEGIN/END:VCALENDAR | The wrapper. One file can hold many events. |
VERSION:2.0 | Required, and always 2.0. |
PRODID | Required. Names whatever made the file; any unique text works. |
METHOD:PUBLISH | Marks it as an event to add, not an invitation to reply to. Without it Outlook may show accept and decline buttons for an event nobody sent. |
UID | Required. A permanent, globally unique ID for the event. Reuse it to update the same event later; change it and you get a duplicate. |
DTSTAMP | Required. When the file was made, in UTC. |
DTSTART / DTEND | Start and end. The trailing Z means UTC. |
SUMMARY | The event title. |
4. Generate one
Hand-writing is fine for one event and error-prone for anything else, because of the details in the next section. The .ics file generator takes a title, a date, a time and a time zone, and writes the file with the conversions, escaping and line lengths already handled — in your browser, with nothing uploaded. For a series of dates, the recurring dates generator writes one file containing every occurrence.
The details that make an .ics file import wrong
All-day events end the day after
For an all-day event the end date is exclusive. A one-day event on 15 March is written like this:
DTSTART;VALUE=DATE:20270315
DTEND;VALUE=DATE:20270316Write 20270315 as the end and some applications show a zero-length event or drop it; a three-day conference written with its last day as the end shows up a day short. This is the single most common .ics bug.
Time zones: three ways to write a time
- UTC —
20270315T140000Z. Exact, and every application shows it in the viewer’s own zone. The safe choice for a one-off event. - With a zone —
DTSTART;TZID=Europe/London:20270315T140000. Keeps its local time through daylight saving changes, which matters for repeating events, but is only valid if the file also contains aVTIMEZONEblock defining that zone’s rules. Leave it out and importers either reject the event or guess. - Floating —
20270315T140000, noZand no zone. 14:00 wherever the reader happens to be. Right for “take medication at 8 a.m.”; wrong for a meeting between two cities.
Commas, semicolons and new lines need escaping
In text fields — the title, description and location — a comma, semicolon or backslash must be preceded by a backslash, and a line break is written as \n. An unescaped comma in a location is a classic reason for an address to be cut off at the first comma.
Long lines must be folded at 75 bytes
No line may be longer than 75 bytes. A longer one is split, and each continuation line starts with a single space. The limit is bytes, not characters, so a description with accented letters or emoji reaches it sooner — and splitting in the middle of a multi-byte character corrupts it. The file should also use Windows-style line endings (CRLF); most applications tolerate plain line feeds, but not all.
Repeating events
A repeating event is one VEVENT with an RRULE line such as RRULE:FREQ=WEEKLY;BYDAY=MO. The rule has its own vocabulary and a few surprises — see RRULE in plain English.
Opening and sharing the file
Double-clicking an .ics file opens it in the computer’s default calendar. In Google Calendar, use Settings → Import & export → Import and choose which calendar to add it to. An imported file is a copy: if the event changes later, people need a new file with the same UID.
To publish events that stay up to date — a club fixture list, a release schedule — host the .ics at a URL and have people subscribe to it instead. Serve it with the content type text/calendar. Be aware that subscribed calendars refresh on the calendar app’s schedule, not yours, and some check only a few times a day.
To make a single event without touching any of the syntax above, use the .ics file generator. It also gives you a Google Calendar link for people who would rather click than download.