Skip to content

Convert

CSV to ICS

CSV to ICS

Beta

Turn a spreadsheet of events into an .ics file that Google Calendar, Apple Calendar and Outlook import. Columns are matched by name, each row needs a title and a start, and nothing is uploaded.

Use via API
  • Free, no sign-up
  • REST + MCP
  • Updated
  • Reviewed by Olgun Ozoktas
min

Stamped on every timed event. Leave it empty for floating times, which the importing calendar reads in its own zone. UTC writes a Z suffix.

CSV Input
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ICS Output

The calendar file will appear here..

Why Use Our CSV to ICS Converter?

The events already exist in a spreadsheet: a class schedule, a shift roster, a content calendar, a season of matches. The slow path is to create them one by one in the calendar app, clicking through a form forty times for forty rows. The fast path is one import. Google Calendar can read some CSVs directly, but Apple Calendar wants an .ics, Outlook wants an .ics, and any calendar you hand to somebody else wants an .ics. This page builds that file from the rows in your browser, matching the columns by name so a Google or Outlook export maps with no configuration, and listing every row it could not use instead of dropping it in silence.

An .ics file is a VCALENDAR with one VEVENT per event, and each event needs a UID, a DTSTAMP, a DTSTART and a SUMMARY. This converter reads a CSV with a header row, matches the columns by name, and writes one VEVENT per row. It accepts the Google Calendar and Outlook export headers, Subject, Start Date, Start Time, End Date, End Time, All Day Event, Description, Location and Private, and short aliases such as title, start, end, notes and place. When the automatic match cannot find a title or a start column, a column map appears so you can point each field at the right column.

Times are written as stated. If you give a time zone, every timed event is stamped with it as a TZID parameter; UTC writes a Z suffix; no zone writes floating times, which the importing calendar reads in its own zone. A Time Zone column in the sheet overrides the setting per row. All-day rows are written with VALUE=DATE and the exclusive end the format requires. Text is escaped and long lines are folded at 75 characters, so the file passes strict importers.

Each event gets a stable UID derived from its title, times and location plus its row number, so importing the same CSV twice updates the events instead of duplicating them. Recurrence is not inferred from text: a row is one event, and a weekly meeting needs one row per week or a rule added in the calendar afterwards. Everything runs in the browser, and the spreadsheet is never uploaded.

How it compares

Google Calendar can import a CSV with its own header directly, and that is the right path when the target is Google. Apple Calendar, Outlook, shared subscriptions and any handoff to another person need an .ics, which this page produces from the same sheet. Server-side converters upload the roster; this one keeps it in the tab and tells you, row by row, what it could not use.

CSV to Calendar Tips

  • Every row needs a title and a start date. A row missing either is skipped and named by its row number under the output, so you can fix the sheet and paste it again.
  • A row with no time, or All Day Event set to true, becomes an all-day event. The end date in the sheet is the last day; the file stores the day after, as the format requires.
  • Dates like 03/04/2026 are read month-first, which is what Google and Outlook exports use. If your sheet is day-first, pick DD/MM/YYYY; the tool counts the ambiguous dates so you know when it matters. ISO dates such as 2026-09-03 are never ambiguous.
  • A timed row with no end gets the default length, 60 minutes unless you change it. A start cell such as 2026-09-03 09:30 is split into date and time when there is no separate time column.
  • The time zone is stamped as a TZID that Google Calendar and Apple Calendar read directly. Older Outlook desktop versions may treat a TZID with no embedded zone definition as local time; if that matters, use UTC or floating times.

Frequently Asked Questions

Which column names does the tool recognize?

Title: Subject, Title, Summary, Event or Name. Start: Start Date, Start, Date or Begin. Start time: Start Time or Time. End: End Date, End, Until or To. End time: End Time. All day: All Day Event or All Day. Description: Description, Notes, Details or Body. Location: Location, Place, Where or Venue. Also Private, UID, URL, Categories and Time Zone. Matching ignores case, spaces and punctuation. If the header uses other names, the column map lets you pick each column.

Do I need an end time for every event?

No. A timed row with no end gets the default length, 60 minutes unless you change it. An all-day row with no end date is a one-day event. If the end is before the start, the tool writes a note for that row and uses the default length instead of an impossible event.

How are all-day events handled?

A row is all-day when its All Day Event column is true, yes or 1, or when the start has no time at all. It is written with DTSTART;VALUE=DATE and an end of the day after the last day, which is how the format stores an all-day span. In the sheet you write the last day; the tool adds the day.

Is 03/04/2026 March 4 or April 3?

March 4 by default, because Google Calendar and Outlook exports are month-first. If your sheet is day-first, set the date order to DD/MM/YYYY. The tool counts every date that could be read either way and shows the count under the output, so you know whether the choice matters for your file. Dates such as 2026-09-03, 3 Sep 2026 or 04.09.2026 are never ambiguous.

What does the time zone setting do?

With no zone, times are floating: a 09:30 event shows at 09:30 in whatever zone the importing calendar uses, which is what most people want for a local schedule. With a zone such as Europe/Istanbul, every timed event is stamped with it as a TZID and shows at 09:30 Istanbul time everywhere. UTC writes a Z suffix. A Time Zone column in the sheet overrides the setting for that row.

Can I import the file into Google Calendar, Apple Calendar and Outlook?

Yes. Google Calendar: Settings > Import & export > Import, choose the file and the target calendar. Apple Calendar: File > Import, or double-click the file. Outlook desktop: File > Open & Export > Import/Export > Import an iCalendar file. Outlook on the web: Add calendar > Upload from file. Google Calendar can also import a CSV with its own header directly, which the ICS to CSV tool writes in its Google / Outlook layout.

Will importing the same CSV twice create duplicates?

Not in calendars that honour the UID, which Google Calendar, Apple Calendar and Outlook do. Each event's UID is derived from its title, times and location plus its row number, so the same row produces the same UID on every run and the calendar updates the event instead of adding a copy. If your sheet has a UID column, that value is used instead.

Can it create repeating events?

No. One row is one event, and the tool does not guess a recurrence rule from words like weekly in a cell. For a repeating event, write one row per occurrence, which a spreadsheet fills down in a second, or import a single event and set the repeat in the calendar app. The ICS to CSV tool carries existing rules through as text.

Is my spreadsheet uploaded anywhere?

No. The CSV is parsed and the .ics is built in your browser, and no request carries the rows. A roster is a list of people and where they will be, and it stays on your machine. The same converter is on the FindUtils API as csv_to_ics for scripted use.

Why was a row skipped?

The notes under the output name each skipped row by its row number, counted with the header as row 1, and say why: no title, no start date, or a start that could not be read as a date. Empty rows are counted separately and are not an error. Fix the cell in the sheet and paste again; every other row is still in the file.

The .ics I built is too large for my calendar to import. What now?

Importers differ in how much they accept in one file. Run the file through the Split ICS tool, pick a chunk size, and import the parts one by one; each part is a complete calendar with the time zones its events need. Going the other way, the Merge ICS tool combines several exports into one file before an import or an archive.

Rate This Tool

0/1000

Get Weekly Tools

Suggest a Tool