📅CSV→ICS

ICS File Creator — Make an .ics Calendar File Online

This ICS file creator is a form: title, date, optional times, location, description. Fill it in and download a standards-compliant .ics you can import into Google Calendar, Outlook or Apple Calendar. Use it when you need to create an ICS file for a handful of events and a spreadsheet would be overkill. 100% in your browser — nothing is uploaded.

📅
Written by Casey Marlin · Last updated
This update: generateICS output covered by scripts/test-ics.mjs
📝 ICS file creator
100% in your browser — your file never leaves your device
Event 1
Repeats

Give every event a title and a date to preview the generated file.

Import the file into Google, Outlook or Apple Calendar — nothing is uploaded anywhere.

When you'd create an ICS file from scratch

Most calendar files start life as an export from Google, Outlook or Apple. Sometimes there is nothing to export: you just need a file with one or two dates in it, written correctly, that anyone can import. That is what this form is for.

  • Share one event by email without a calendar invite system. Attach the .ics. The recipient double-clicks it and the event lands on their calendar — no shared workspace, no “send invite” round-trip, no account required on your side.
  • Publish a small schedule as a file anyone can import. Club fixtures, class dates, office closed days, a conference's three keynotes. One download beats a table of dates that every reader has to type in by hand.
  • Attach dates to a newsletter. A .ics in the email (or a link to one) is the format mail clients already know how to offer as “Add to calendar.” HTML in the body is not.
  • Test a calendar app's import behavior. When you are debugging an importer, a feed or a script, you want a known-good file with one all-day event, one timed event and a timezone — not a 400-event export. Fill the form, download, feed it to the thing you are testing.

None of those jobs need a Google, Microsoft or Apple account on the sending side. The file is the invite. Whoever opens it uses whatever calendar they already have.

What the creator writes into the file

The download is a complete RFC 5545 VCALENDAR, not a fragment. The same generator that powers the CSV converter builds it — this form just supplies the events by hand instead of from a spreadsheet. Line endings are CRLF; lines longer than 75 octets are folded the way the spec requires, so a long description does not blow up a strict parser. Commas, semicolons, backslashes and newlines in titles or notes are escaped (\,, \;, \\, \n). Each event gets a fresh UID; DTSTAMP is written in UTC at download time.

  • Wrapper: BEGIN:VCALENDAR, VERSION:2.0, PRODID, CALSCALE:GREGORIAN, METHOD:PUBLISH.
  • One VEVENT per form row with DTSTART, DTEND, UID, DTSTAMP and SUMMARY. LOCATION and DESCRIPTION are written when you fill those fields; they are omitted when empty.
  • All-day events use VALUE=DATE. DTEND is exclusive, so a one-day event on Aug 3 is written with DTEND of Aug 4; a multi-day End date is treated as inclusive and the extra day is added for you.
  • Repeating events add one RRULEline after DTEND, built from the Repeats section (frequency, interval, weekdays, end). Events left on “Does not repeat” get no RRULE line.
  • Timed events carry a TZID and a matching VTIMEZONEblock for the zone you picked, with that zone's daylight-saving transitions. Choose UTC and the times are written as Z-suffixed timestamps with no VTIMEZONE.

Form vs spreadsheet — which tool?

Use this form when you can see every event on one screen: a handful of dates, typed once, downloaded once. Past that, a spreadsheet is faster to edit, sort and share, and the CSV converter is built for it.

  • A handful of events — this form. No headers to get right, no date-format surprises, a live preview of the generated text.
  • Dozens or more — put them in a spreadsheet (Subject, Start Date, Start Time) and use the CSV to ICS converter. Column mapping, a validation report and timezone handling are the same generator; the input is a table instead of cards.
  • Editing an existing file — the ICS editor. Drop the .ics, change titles, dates, times and locations, mark events to drop, and download a corrected file. It does not add blank events from scratch; that is this page's job.

Whichever route you take, you can double-check the result with the ICS validator, and if your spreadsheet needs to end up as an iCal file for Apple Calendar, the CSV to iCal converter is the same engine with the naming question answered.

If you would rather type the file yourself — required fields, VALUE=DATE, RRULE, the exclusive-DTEND trap — the how to create an ICS file guide is the hand-written path. The form now handles the common repeat patterns (daily, weekly with weekday checkboxes, monthly, yearly) via its Repeats section; the recurring event generator is the same form opened with Weekly preselected.

ICS file creator — frequently asked questions

How do I create an ICS file without Outlook or Google Calendar?

Fill in the form on this page: title, date, optional times, location and description. Add as many events as you need, pick a timezone, and download events.ics. You never open Outlook or Google Calendar to produce the file — those apps only come in when you (or someone else) import it.

Is the generated file compatible with all calendar apps?

Yes. The creator writes RFC 5545 iCalendar: a VCALENDAR wrapper, VERSION:2.0, one VEVENT per form row, CRLF line endings and 75-octet folding. Google Calendar, Outlook and Apple Calendar all import that. Timed events include a real VTIMEZONE block so 9:00 AM stays 9:00 AM across DST.

Can I create recurring events?

Yes. Each event card has a Repeats section: Daily, Weekly, Monthly or Yearly, an interval, weekday checkboxes for weekly, and an end of never, after N occurrences, or on a date. The creator writes one RRULE line per repeating event using the same recurrence library as the CSV converter.

Does my event data get uploaded?

No. The form never posts anywhere. The file is built in your browser tab and the download is saved locally. After the page has loaded you can go offline and still create the file. Nothing is stored on a server.

Can I create an all-day or multi-day event?

Yes. All-day is the default: leave the checkbox on and you get a VALUE=DATE event, which calendars render as a banner rather than a midnight-to-midnight block. For a multi-day event, fill End date — the creator treats that date as inclusive (the way humans mean Aug 10–12) and writes the exclusive DTEND plus one day that the spec requires. Uncheck All-day to add start and end times.

How do I check the file is valid?

Drop the downloaded .ics into the ICS validator on this site. It runs our ICS lint — structure, dates, UIDs, timezones, folding and RRULE basics — in the same browser tab, with no upload.

Keep reading