Add to Calendar links in email marketing
Drop a working "Add to Calendar" link into any email campaign — no JavaScript, no attachments, no backend required.
Why calendar links in emails?
Calendar links in marketing emails significantly boost event attendance. When recipients can add an event to their calendar in one click, they're far more likely to show up. getcal.link makes this trivial because the links are just URLs — they work in every email client, including Gmail, Outlook, Apple Mail, and mobile apps.
The simplest approach
For static events (same date/time for all recipients), build a URL once and paste it:
<a href="https://api.getcal.link/event.ics?title=Product+Launch+Webinar&start=2026-03-15T14:00:00Z&end=2026-03-15T15:00:00Z&location=Zoom&reminder=15">
Add to Calendar
</a> When clicked, this downloads an .ics file that opens in the recipient's default calendar app.
Dynamic events with template variables
Mailchimp (merge tags)
<a href="https://api.getcal.link/event.ics?title=*|EVENT_TITLE|*&start=*|EVENT_START|*&end=*|EVENT_END|*&location=*|EVENT_LOCATION|*">
Add to Calendar
</a> Set up EVENT_TITLE, EVENT_START, etc. as merge fields in your audience, or use campaign-level merge tags.
Braze / Liquid
<a href="https://api.getcal.link/event.ics?title={{ event_name | url_encode }}&start={{ event_start }}&end={{ event_end }}&location={{ event_location | url_encode }}&description={{ event_description | url_encode }}">
Add to Calendar
</a> Use url_encode for any fields that may contain spaces or special characters.
SendGrid dynamic templates
<a href="https://api.getcal.link/event.ics?title={{event_title}}&start={{event_start}}&end={{event_end}}&location={{event_location}}">
Add to Calendar
</a> Offering multiple calendar options
Instead of a single ICS link, you can offer buttons for each calendar provider. Use the /links endpoint from your backend to get pre-built URLs:
// Server-side (Node.js example)
const res = await fetch(
'https://api.getcal.link/links?title=Webinar&start=2026-03-15T14:00:00Z&end=2026-03-15T15:00:00Z'
);
const links = await res.json();
// Use in your template:
// links.google_url — "Add to Google Calendar"
// links.outlook_url — "Add to Outlook"
// links.ics_url — "Download .ics file"
// links.yahoo_url — "Add to Yahoo Calendar" Best practices
- Always include a reminder — add
&reminder=15(or whatever interval suits your event) so the event shows a notification. - Use UTC times — getcal.link normalises all datetimes to UTC. This ensures the event appears at the correct time regardless of the recipient's timezone.
- Add a description — include join links, agenda, or other context in the
descriptionparameter. - Test with real clients — send test emails and verify the .ics download works in Gmail (web and mobile), Outlook, and Apple Mail.
- Style it as a button — calendar links get better engagement when styled as prominent buttons rather than plain text links.
Date format reference
Both ISO 8601 and compact formats work. Make sure your template variables output one of these:
2026-03-15T14:00:00Z— ISO 8601 with Z suffix20260315T140000Z— compact ICS format