Skip to main content
How to create an ICS file, step by step

How to create an ICS file, step by step

An ICS file is how you hand someone a calendar event without sending a meeting invite. You can create an ICS file in any text editor: type the event's details in iCalendar format and save the file with an .ics extension. Google Calendar, Outlook and Apple Calendar will all open it, and so will every other calendar app you're likely to meet.

If you just want the file, our free ICS file generator will build one in under a minute, timezone handled, nothing to install or sign up for.

Doing it by hand once is still worth it, though. An ICS file is plain text, and after you've typed one you can read anyone else's, or fix a broken one without hunting for a tool. It's a 10 minute skill and it doesn't expire.

Type the file, line by line

Open a text editor. Notepad on Windows, TextEdit on a Mac (with one setting changed, covered below), or any code editor if you have one.

Type this, changing the details to your own event:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Your Company//Events//EN
BEGIN:VEVENT
UID:planning-day-nov-2026@yourcompany.com
DTSTAMP:20260901T090000Z
DTSTART:20261112T100000Z
DTEND:20261112T160000Z
SUMMARY:Team planning day
DESCRIPTION:Agenda to follow by email
LOCATION:Birmingham office
END:VEVENT
END:VCALENDAR

What each part does, briefly.

BEGIN:VCALENDAR and END:VCALENDAR wrap the whole file, and BEGIN:VEVENT and END:VEVENT wrap the event. Miss one of the END lines and most calendar apps will refuse the file without telling you why.

VERSION is always 2.0. PRODID says what made the file, and the convention is that dashed format, but nothing checks it against reality. Put your company name in the middle and move on.

UID is the event's identity. Make it unique, anything@yourdomain works, and keep it the same if you ever edit and re-send the file, because calendar apps use it to recognise an event they've already got.

DTSTAMP is when you made the file. The two lines that matter most are DTSTART and DTEND: year, month, day, the letter T, then hours, minutes and seconds. The Z on the end means the time is UTC, so a 10am event in London during November is 100000Z, but the same event in July would be 090000Z, because British Summer Time sits an hour ahead of UTC. Get this wrong and the file works perfectly and puts the event in everyone's calendar an hour out, which is the failure you won't spot by testing it in the same country you built it in.

SUMMARY is the title people see. DESCRIPTION and LOCATION are optional, and worth filling in.

That's the whole file. The standard has plenty more fields, recurrence rules and alarms and timezone blocks among them, and the point at which you want those is roughly the point at which typing files by hand stops being sensible. The where .ics files go wrong section on the generator page covers the traps in the deeper fields.

Saving it so a calendar app accepts it

The file's name must end in .ics, and it must be plain text. Both of the standard editors will fight you a little on this.

On Windows, Notepad's save dialog wants to add .txt. Change "Save as type" to "All files", name the file something like planning-day.ics, and keep the encoding as UTF-8. Then check what you actually got: Windows hides file extensions by default, so a file quietly saved as planning-day.ics.txt displays as planning-day.ics and refuses to work. Turning on "File name extensions" in Explorer's View menu settles the question.

On a Mac, TextEdit starts new documents as rich text, and a rich text file full of formatting codes is no use to a calendar app however correct the lines look. Go to Format, then Make Plain Text, before you save, then save with the .ics name. You can set plain text as the default in TextEdit's settings if you'll be doing this again.

Strictly, the iCalendar standard also wants each line to end with a Windows-style line break. In practice every mainstream calendar app accepts ordinary line endings, so this only matters if some stricter system refuses your file. Worth knowing about, though you're unlikely to ever need it.

Test it on yourself first

Before the file goes anywhere near other people, put the event in your own calendar.

On a Mac, double-click the file and Apple Calendar offers to add it. On Windows, double-clicking opens whatever calendar app is associated with .ics files, usually Outlook. Google Calendar is the fussy one: it won't take a double-click or a drag, so you go to Settings, then Import and export, and upload the file there. The generator page has fuller import instructions for all 3.

Check the event landed on the right day at the right time. Time is the one to look at hardest, for the UTC reason above.

If nothing happens at all, or the app says the file can't be read, it's nearly always one of 2 things: the file isn't really called .ics (the hidden extension trap), or a line inside is malformed, usually a date with a digit missing or an END line that never got typed. Open it back up in the text editor and read it slowly. The file is short enough that the fault is usually visible.

When to stop doing this by hand

For the occasional event, keep the file you just made as a template and change 5 lines each time. It takes a couple of minutes and there's nothing to sign up for.

The by-hand approach runs out of road when the events do more. Reminders, recurring events and proper timezone handling (where the event moves with the clock change instead of being pinned to UTC) all mean extra fields that are easy to get subtly wrong, and if you're making files regularly the UTC arithmetic will catch you out eventually. That's what the free ICS file generator is for: same file, with the timezone thinking done for you.

And if the events live in HubSpot, the calendar file is only one of the links each event email needs. Add-to-calendar links in HubSpot event emails covers that end to end. EventEngine generates the .ics from the HubSpot event record itself, so the file always matches whatever the event currently says.

Questions that come up

Can I create an ICS file in Notepad?
Yes. Notepad, TextEdit in plain text mode, or any code editor. Type the iCalendar lines, save the file with an .ics extension and UTF-8 encoding, and any calendar app will open it. On Windows, check the file didn't save as .ics.txt with the extension hidden.

Why won't my ICS file open?
Check 3 things in order: the file really ends in .ics rather than .ics.txt, every BEGIN line has a matching END line, and the dates follow the 20261112T100000Z pattern exactly. Between them those cover nearly every failure in a hand-typed file.

How do I create an ICS file from Excel?
Excel has no .ics export. For a handful of events, make each file by hand or with a free generator. For a whole spreadsheet of them, you would script it, or use a system that generates calendar files from event records directly.

Can I edit an ICS file after I've made it?
Yes, in the same text editor, keeping the UID line the same so calendar apps recognise it as the same event. But anyone who already imported the old file keeps their copy; the edit only reaches people who import the new one.

Does an ICS file update when the event changes?
No. An imported .ics file is a copy, and nothing connects it back to you. Only real meeting invites sent through a mail system, with the same UID and METHOD:REQUEST, can move an event in other people's calendars. If your event changes, send the corrected file and say so plainly in the email.

Phill Burrows
Phill Burrows
Sep 3, 2026, 10:26:56 AM
Phill Burrows runs The Blue Cube 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.