Add to Apple Calendar link
Apple never shipped a web URL for adding an event to Apple Calendar, the way Google and Microsoft did. The only route is an iCalendar file. Done properly it is actually the smoothest of the lot: iOS shows a native add-event sheet and no sign-in is involved.
Rather not build the URL by hand? The generator does all of this, including the encoding.
Generate a linkWhat the file looks like
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//MakeCalendarLink//EN
BEGIN:VEVENT
UID:9f2c1a@makecalendarlink
DTSTAMP:20260601T090000Z
SUMMARY:Q4 product webinar
DTSTART;TZID=Europe/Brussels:20260910T140000
DTEND;TZID=Europe/Brussels:20260910T150000
DESCRIPTION:A 45 minute session with live Q&A
LOCATION:https://meet.example.com/abc
END:VEVENT
END:VCALENDAR
Three details matter more than they look. Lines end with CRLF, not LF. Lines longer than 75 octets must be folded onto a continuation line starting with a space. And commas, semicolons and backslashes inside text values have to be escaped with a backslash.
Local time or UTC
Use DTSTART;TZID=Europe/Brussels:20260910T140000 rather than converting to UTC. With a TZID the event stays anchored to 14:00 in Brussels, which is what you actually promised people. Convert to UTC instead and the event is still correct today, but if the timezone rules change before the event happens, it moves.
For an all-day event use a date value, with the exclusive end again:
DTSTART;VALUE=DATE:20260910
DTEND;VALUE=DATE:20260913Serving the file so iOS opens it natively
The headers decide whether iOS shows an add-event sheet or dumps text on the screen:
Content-Type: text/calendar; charset=utf-8
Content-Disposition: attachment; filename="webinar.ics"
Two things to avoid. A data: URI, because iOS Mail and several Android clients refuse to open them, which is why this tool serves the file from a URL instead. And Content-Type: text/plain, which turns the file into a wall of text in the browser.
Reminders
Apple Calendar honours a VALARM block, so you can ship the event with a reminder already set:
BEGIN:VALARM
TRIGGER:-PT30M
ACTION:DISPLAY
DESCRIPTION:Q4 product webinar
END:VALARM
Keep it modest. A reminder the attendee did not ask for is the fastest way to have your event deleted.
One file, many calendars
The same .ics covers Apple Calendar, Outlook desktop, Thunderbird, Proton Calendar, Fastmail and anything else that speaks iCalendar. That makes it the best single fallback if you only have room for one button: label it "Apple Calendar / .ics" and you have covered most of what is not Google.