Skip to main content
Add-to-calendar links in HubSpot event emails: Google, Outlook and ICS

Add-to-calendar links in HubSpot event emails: Google, Outlook and ICS

A cursor clicking a green plus button

A decent share of webinar no-shows have a mundane explanation: the event was never in the person's calendar. HubSpot has no built-in add-to-calendar button for marketing emails: you build a Google Calendar link, an Outlook link or a hosted ICS file yourself and link them in the email.

It surprises people, because calendar invites feel like the sort of thing an email platform would just do. HubSpot's own instructions confirm it, politely: create the event somewhere else, then paste a link to it.

Building the links by hand takes about 20 minutes once you know the formats. The maintenance is the harder part, and it grows with the number of events you run.

What HubSpot actually gives you

An envelope with a little calendar popping out

The knowledge base article covers two routes. For Google Calendar, you create the event in your own calendar, make it public, and paste its share link into the email. For Outlook and Apple Calendar, you export the event as an .ics file, upload it to HubSpot's files tool, and hyperlink the file URL.

Both work. The Google route needs the event to be public, which is fine for a webinar, though it does mean keeping a public event sitting in a working calendar. The file route works on Marketing Hub Starter and above. And HubSpot notes that the exported Outlook invite behaves properly only in classic Outlook for Windows, which is the kind of caveat you want to read before the event rather than after.

There's a better version of the Google route, though, and it doesn't need a calendar event to exist anywhere. Google, Outlook.com and Office 365 all accept a specially formatted URL that opens the recipient's calendar with the event details pre-filled. Nothing needs publishing, and your own calendar stays out of it. You just have to build the URL.

THE THREE LINK TYPES

One event, three calendar links

Google Calendar

A template URL, no real event needed. Opens in the browser with the details pre-filled.

Covers Gmail users

Outlook web

The same idea, two domains: outlook.live.com for personal, outlook.office.com for work.

Covers Microsoft 365

ICS file

A 14-line text file, hosted in the files tool. Opens in any calendar app ever written.

Covers Apple + desktop Outlook

The Google Calendar link

The format has been stable for years:

https://calendar.google.com/calendar/render?action=TEMPLATE
  &text=Autumn+product+roadmap+webinar
  &dates=20261015T130000Z/20261015T140000Z
  &details=Your+join+link+is+in+your+confirmation+email
  &location=Online

All on one line in practice, and URL-encoded, so spaces become + or %20.

The part that catches people is dates. The two timestamps are start and end, and the trailing Z means UTC. A 2pm London webinar in October is 13:00 UTC while British Summer Time is on, and 14:00 UTC once the clocks go back at the end of the month. Build the link in September for a November event and it's easy to end up an hour out without noticing, because the link looks perfectly plausible either way.

MIND THE CLOCK CHANGE

A 2pm London webinar has two UTC times

British Summer Time

2pm = 13:00 UTC

late March to late October

GMT

2pm = 14:00 UTC

late October to late March

The way round the sum

&ctz=Europe/London

and supply local times with no Z suffix.

If you'd rather not do the arithmetic, drop the Z and add &ctz=Europe/London, and Google treats the times as local to that timezone. For a UK audience I'd do exactly that.

The Outlook links

A paper plane towing a little calendar

Outlook takes the same idea with different parameters, and one annoyance on top: personal Outlook and work Outlook use different domains.

https://outlook.live.com/calendar/0/deeplink/compose?subject=Autumn+product+roadmap+webinar
  &startdt=2026-10-15T13:00:00Z
  &enddt=2026-10-15T14:00:00Z
  &body=Your+join+link+is+in+your+confirmation+email
  &location=Online

That's the personal one. For Microsoft 365 work accounts, swap the domain to outlook.office.com and keep everything else. The timestamps are ISO 8601, again in UTC.

You don't know which flavour a recipient uses, so either include both links or accept that the ICS file covers desktop Outlook anyway and offer one web link. For a B2B list I'd offer the office.com one and let the ICS file catch the rest.

Creating the ICS file

A cheerful little ICS file with a folded corner

The ICS file is the one that covers everything else: Apple Calendar, desktop Outlook, and any calendar app that's ever been written, because the format dates back to the 1990s and every vendor supports it.

It's a plain text file. This is a complete, working one:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Your Company//Events//EN
BEGIN:VEVENT
UID:autumn-roadmap-2026@yourcompany.com
DTSTAMP:20260901T090000Z
DTSTART:20261015T130000Z
DTEND:20261015T140000Z
SUMMARY:Autumn product roadmap webinar
DESCRIPTION:Your join link is in your confirmation email
LOCATION:Online
END:VEVENT
END:VCALENDAR

Save it with an .ics extension, upload it to HubSpot's files tool, and link the file URL in your email. When someone clicks it, their calendar app opens the event and asks to add it.

Anatomy of a minimal ICS file, with the UID, UTC timestamps and summary annotated THE ICS FILE 14 lines, four that matter BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Your Company//Events//EN BEGIN:VEVENT UID:autumn-roadmap@yourco.com DTSTAMP:20260901T090000Z DTSTART:20261015T130000Z DTEND:20261015T140000Z SUMMARY:Autumn roadmap webinar DESCRIPTION:Join link in your email LOCATION:Online END:VEVENT END:VCALENDAR UID unique to the event, and kept stable if you ever regenerate the file Start and end UTC timestamps. The trailing Z is doing real work. Summary the words that appear in the recipient's diary

A few things worth knowing before you write your own. The times use the same UTC format as the Google link, Z included. The UID should be unique to this event and stay the same if you ever regenerate the file, because calendar apps use it to recognise the event. DTSTAMP is just when you made the file. And if a free ICS generator feels easier than a text editor, plenty exist and the output is the same 14 lines; there's no wrong way to make one, as long as the times are right.

Keep one as a template and change 5 lines per event; it takes less time than reading this section did.

Putting the links in the email

The pattern that works is a single line under the event details in the confirmation email:

IN THE EMAIL

One line under the event details

Thursday 15 October, 2:00pm (UK time)

Add to calendar: Google Outlook Apple (.ics)

The same line goes on the thank-you page, where even non-subscribers see it.

Three hyperlinks in the rich text editor, nothing clever. Put the same line on the thank-you page, because that page is the one moment you have someone's full attention, and for anyone who didn't opt in to your emails it may be the only place they ever see the event details.

The other habit worth keeping: date, time and timezone in the first line of the email itself, before any links. People scan for it, and the confirmation email has one job.

What happens when the event changes

One limitation runs through every method on this page, and it tends to surface late. Each of these links hands the recipient a copy of the event, and once it's in their calendar, you can't touch it.

A proper calendar invite update, the kind that moves the entry in everyone's diary when the meeting moves, works by sending a new invite with the same UID through the mail system itself. Mail servers can do that. A marketing email platform can't, and HubSpot's is no exception.

A calendar with one date square floating away

So if your event moves, the sequence is: update the links and the ICS file, email everyone, and accept that a share of your registrants will keep the old entry and turn up wrong anyway, at the original time, sometimes with a confused email to your events inbox. The nearest thing to a fix is getting the date right the first time, plus a very clear correction email for when you don't.

When the event date changes, the copies already in recipients' calendars stay on the old date AFTER THE CLICK Every diary holds an independent copy Your event record 22 Oct · 2pm moved by a week, updated once Google Calendar still 15 Oct · 2pm Outlook still 15 Oct · 2pm Apple Calendar still 15 Oct · 2pm Marketing email can't push updates into a diary. The correction email is the only route back in.

The other cost is quieter. Three links, hand-built with UTC arithmetic, for the confirmation email, and again wherever else you want them, for every single event. At an event a quarter, that's nothing worth solving. Run one a fortnight and it turns into the sort of repeated 20 minutes that makes running events in HubSpot harder the more you do, and it's exactly the kind of job that gets forgotten in the week an event actually moves.

That per-event assembly is one of the jobs EventEngine takes on. The app generates the ICS file from the event record, so the add-to-calendar link on the confirmation page and in the event emails is always built from whatever the event record currently says, and a date change is one edit in one place. It runs on HubSpot Professional and Enterprise, $249 a month, 30 day free trial.

A tilted clock with its hand hopping an hour

If you're running a handful of events a year, the manual approach above is fine. Keep the ICS template, keep a note about the clock change, and it will serve you for a long while.

Questions that come up

Does HubSpot have a native add-to-calendar button for marketing emails?
No. HubSpot's documented approach is to link to a calendar event you've created elsewhere: a public Google Calendar event, or an .ics file exported from your calendar, uploaded to the files tool and hyperlinked. Template URLs for Google and Outlook do the same job without needing a real calendar event.

How do I create an ICS file for a HubSpot event email?
Write a plain text file with VCALENDAR and VEVENT blocks containing DTSTART, DTEND, SUMMARY, LOCATION and a unique UID, with times in UTC. Save it with an .ics extension, upload it to HubSpot's files tool, and hyperlink the file URL in your email.

What's the format of an add-to-Google-Calendar link?
The base URL is calendar.google.com/calendar/render with action=TEMPLATE, plus text for the title, dates as two UTC timestamps separated by a slash, and optional details and location parameters. Add a ctz parameter with a timezone name to supply local times instead of UTC.

Do add-to-calendar links update if the event date changes?
No. Every add-to-calendar method gives the recipient an independent copy of the event, and marketing email platforms can't push updates to it afterwards. If the date moves, you update the links, send a correction email, and expect some registrants to keep the old entry.

Which calendar link works for Outlook recipients?
Two web links exist: outlook.live.com for personal accounts and outlook.office.com for Microsoft 365 work accounts, with the same parameters. Desktop Outlook also opens ICS files, so a hosted .ics link covers Outlook users without you knowing which account type they have.

Phill Burrows
Phill Burrows
Aug 18, 2026, 8:26:36 PM
Phill Burrows runs Hub Masters and Burrows Consultancy, both built around the HubSpot ecosystem. He came into HubSpot through agency work, and ended up spending most of his time inside the platform: implementing it, extending it, working around whatever it wouldn't do out of the box. Burrows Consultancy grew out of that, handling CRM architecture and integrations for UK and European clients. EventEngine came from the same pattern. Phill kept solving the same event problems for different clients, so eventually he built the product instead of rebuilding the solution each time. He's based in the UK and still does implementation work, which keeps him close to the problems his products solve.