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.
Add-to-calendar links per platform
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.