FIRST CH TOOLS / Misc / 50 ICS GENERATOR

ICS Calendar Event Generator

Build the “add to calendar” file (.ics) that goes with a webinar or meeting invitation, right here. Pick a time zone and the daylight-saving rules travel inside the file, so the event opens at the same local time in Google Calendar, Apple Calendar and Outlook. All-day events, recurrence and reminders are covered, and ready-made add-to-calendar links are generated alongside the file.

1 — What the event says

2 — When and where in time

Start
End
Length

3 — Reminders and details

The ORGANIZER property is only written when an e-mail address is filled in. No invitation is sent — this file only carries the contents of the event.

4 — Output (.ics)

Starts
UTC offset
Length
Occurrences
iCalendar — event.ics

    

Attach the downloaded file to an e-mail, or host it and link to it. When the recipient opens it, their calendar app offers to import the event.

5 — Checks

    6 — Add-to-calendar links

    Google Calendar Open
    Outlook / Microsoft 365 Open

    Use these as the target of an “add to calendar” button in an e-mail or on a landing page. The link opens in whichever account the recipient is signed in to, so they can look the event over in the browser before saving it. Reminders do not travel in a link (the calendar’s own default is used), so hand out the .ics file when the notification timing matters.

    Nothing you type leaves the browser — the file is assembled entirely on this page. Initial values can be passed in the URL: /en/ics/?title=Kickoff&start=2026-10-01T14:00&end=2026-10-01T15:00&tz=Europe/London / /en/ics/?title=Standup&start=2026-10-05T10:00&repeat=weekly&count=12&alarm=15

    How to Use

    1. Describe the eventFill in the title, location and description, then set the start and pick a length. For something that runs all day, tick “all-day event” and the clock times disappear from the file.
    2. Check the time zoneIt defaults to the one your device is in. For a webinar with overseas attendees, choose the time zone the event is held in and leave the format on “TZID + VTIMEZONE”. Read the checks panel and fix anything it flags, such as an end before the start or a recurrence that never ends.
    3. Hand it outClick “Download .ics” and attach the file to the invitation, or host it and link to it. If you would rather people add the event in the browser, put the Google or Outlook link below behind a button.

    About This Tool

    An .ics file is one event written out as plain text. The format is iCalendar (RFC 5545): a run of lines from BEGIN:VCALENDAR to END:VCALENDAR. Calendar apps treat it as their common language, so a single file imports into Google Calendar, Apple Calendar on iPhone and Mac, Outlook and Thunderbird alike. Attach it to an e-mail or host it and link to it — both work.

    There are three ways to write the time, and the choice decides which mistakes you can make. UTC with a trailing Z, a local time tagged with TZID, or a date with no time at all (VALUE=DATE) for all-day events. UTC is dependable for a one-off, but a recurring event written in UTC drifts by an hour when daylight saving starts or ends. The default here, TZID plus VTIMEZONE, ships the time-zone definition — the rules for when daylight saving begins — inside the file, so the event lands on the right local time even if the recipient’s calendar carries outdated time-zone data.

    The UID is the name tag that says which event this is. Import a file with a UID that is already in the calendar and the existing event is updated rather than duplicated. That is useful for sending out a corrected time, and unhelpful when you want the same file to create separate events. “New UID” issues a fresh tag. (SEQUENCE stays at 0 here; to publish a revision that overwrites an earlier one, keep the original UID and raise that number.)

    Other tools that go with invitation e-mails and landing pages: QR Code Generator for a sign-up URL people scan at the venue, URL Parameters & UTM Builder for campaign tagging, and the OGP Meta Tag Wizard for how the page looks when it is shared.

    Common .ics pitfalls

    Writing the last day as the end of an all-day event

    DTSTART;VALUE=DATE:20261001
    DTEND;VALUE=DATE:20261002   <- a single day on 1 Oct (the end is exclusive)

    For all-day events iCalendar excludes the end date. An event on 1 October ends on 2 October. Put 1 October there and most calendars show a day less, or drop the event entirely. Ticking the all-day box here writes the following day for you.

    Writing a recurring event in UTC

    DTSTART:20261001T090000Z    <- meant to be 10:00 in London
    RRULE:FREQ=WEEKLY;BYDAY=TH  <- slips by an hour once the clocks change

    UTC pins an absolute instant, so in a region that observes daylight saving the local time moves by an hour on the changeover date. A weekly 10:00 meeting quietly becomes 11:00. Write recurring events with TZID and ship the VTIMEZONE definition with them; attendees in other regions then still see the correct converted time.

    Leaving the line breaks as LF

    BEGIN:VCALENDAR\r\n    <- the spec requires CRLF

    RFC 5545 defines the line separator as CRLF. Plenty of apps cope with LF alone, but some fail the import silently, which is a hard kind of bug to trace. Watch the line endings whenever you hand-edit a file or re-save it from an editor. Output from this tool is always CRLF.

    Leaving a long description on one line

    DESCRIPTION:The join link and the slides go out the day before the
     session (continuation lines start with a single space)

    A line may be 75 octets long at most; anything longer continues on the next line, which must start with one space. Octets, not characters — Japanese text is three bytes per character in UTF-8, so it wraps after roughly 25 characters. A fold must never land inside a character, or the text is corrupted. This tool folds on code-point boundaries.

    Writing commas and semicolons literally

    SUMMARY:Kickoff \(quote\, contract\)   <- , ; \ and newlines need a backslash

    In iCalendar, , and ; separate values, so text that contains them needs \, and \;. A newline is written \n. Forget to escape and the value is cut short mid-title, or the import fails outright.

    Assuming your reminder is the one that fires

    BEGIN:VALARM
    ACTION:DISPLAY
    TRIGGER:-PT1H    <- honoured by Apple Calendar and Outlook

    Google Calendar may replace reminders with the account default on import. If the invitation promises a notification an hour before, some recipients will not get it. When it really has to reach people, send a separate reminder e-mail the day before rather than relying on VALARM.

    Other Tools