What an .ics file is, and how 'add to calendar' links work

Every calendar app speaks one common language โ€” the iCalendar format, saved as .ics โ€” and every "add to calendar" button on an event page either downloads one or builds a link that a specific calendar service understands. Knowing the format explains why events land at the wrong hour, why Google and Outlook need different buttons, and what the calendar link generator is producing.

The .ics format

iCalendar (RFC 5545, 2009, succeeding a 1998 original) is a plain-text format: a VCALENDAR container holding VEVENT, VTODO, VJOURNAL and VFREEBUSY components, each a list of PROPERTY:value lines. It is what Outlook exports, what Apple Calendar imports by double-click, what Google Calendar's "import" reads, and what email invitations carry as an attachment. The MIME type is text/calendar, and a file with one VEVENT is a complete, self-describing invitation.

Inside a VEVENT

BEGIN:VEVENT
UID:20260920T100000-abc@example.com
DTSTAMP:20260901T090000Z
DTSTART:20260920T090000Z
DTEND:20260920T100000Z
SUMMARY:Product launch webinar
LOCATION:https://meet.example.com/launch
DESCRIPTION:Agenda and dial-in details
END:VEVENT

UID identifies the event so updates replace it rather than duplicating it; DTSTAMP is when the file was made; DTSTART and DTEND are the times; SUMMARY is the title. Optional properties add recurrence (RRULE:FREQ=WEEKLY;COUNT=10), alarms (VALARM), attendees, and status. Text is escaped โ€” commas and semicolons get a backslash โ€” and long lines are folded at 75 characters. It is fussy but readable, and a hand-written file works if the fussiness is respected.

Time zones, UTC and the classic mistakes

A DTSTART ending in Z is UTC; each calendar converts it to the viewer's local time, which is what you want for a global audience. A DTSTART with a TZID parameter names a zone (TZID=Europe/London:20260920T100000) and needs the zone's rules included or known; a bare local time with no zone is "floating" and happens at 10:00 wherever the viewer is โ€” right for "New Year's Eve", wrong for a webinar. The classic mistakes: writing a local time as if it were UTC (events an hour or five off), forgetting daylight saving on the event's date, and copying a time from a different zone's calendar. Generators avoid this by taking your local time and writing UTC; Working across time zones covers the human side and the meeting planner finds an hour that works everywhere.

Web calendars also accept URLs that open a pre-filled event: Google (calendar.google.com/calendar/render?action=TEMPLATE&text=โ€ฆ&dates=start/end), Outlook.com and Office 365 (outlook.live.com or outlook.office.com/calendar/0/action/compose?subject=โ€ฆ&startdt=โ€ฆ), Yahoo (calendar.yahoo.com/?v=60&title=โ€ฆ). Each has its own parameter names and date formats, none of them accept the others', and Apple Calendar has no web URL at all โ€” it wants the .ics file. So a complete event page offers four links and a download, which is exactly what the generator produces from one form. The links open the recipient's calendar with the event filled in; the recipient still clicks save, and nothing is added silently.

Invites, RSVPs and updates

An emailed invitation is an .ics with METHOD:REQUEST and an ATTENDEE list; the reply is another .ics with METHOD:REPLY, which is how RSVPs flow between different calendar systems. Updates reuse the UID with a higher SEQUENCE number so calendars replace the old version. That machinery is what your mail client does when you click Accept; a link or a downloaded file is the simpler one-way version for public events, and the right choice for a newsletter, a website or a QR code on a poster โ€” the QR generator encodes the .ics download link or the Google link directly.

Sources and further reading

The claims in this guide rest on these references, which were checked when the guide was last updated. Spotted an error? The contact page says how to report it.

  1. RFC 5545: iCalendar
  2. iCalendar โ€” Wikipedia

Try the tool

Frequently asked questions

How do I open an .ics file?

Double-click it: Apple Calendar, Outlook and most desktop apps import it. In Google Calendar, use Settings โ†’ Import, or open the file on a phone and choose the calendar app.

Why did my event land at the wrong time?

A time-zone mistake in the file โ€” a local time written as UTC, or a floating time with no zone. Generators that write UTC from your local time avoid it.

Do I need separate links for Google and Outlook?

Yes โ€” each web calendar has its own URL format, and Apple Calendar needs an .ics file. Offer all of them on an event page.

Can an .ics file be a recurring event?

Yes โ€” an RRULE line defines the repeat (weekly, ten times, until a date). Simple generators write single events; add the recurrence after importing or edit the file.