CSV to ICS
BetaTurn a spreadsheet of events into an .ics that Google, Apple and Outlook calendars import. Columns are matched by name, each row needs a title and a start, and this page converts in your browser.
- Free, no sign-up
- REST + MCP
- Updated
- Reviewed by Olgun Ozoktas
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.
The calendar file will appear here..
How to Convert CSV to ICS Online
-
Put the events in a sheet with a header row
Subject, Start Date, Start Time, End Date, End Time, All Day Event, Description and Location, or the short names title, start, end and location. Export or copy it as CSV. -
Upload the .csv or paste the text
The columns are matched by name; the detected map is shown above the output, and a column map appears if a title or a start column was not found. -
Set the time zone if the times are in a fixed zone, or leave it empty so the calendar reads them in its own zone. Check the date order if your dates are day-first
-
Read the counts and the notes under the output, then download the .ics and import it
Google Calendar Settings > Import & export, Apple Calendar File > Import, Outlook File > Open & Export > Import/Export.
Common Use Cases
A class timetable or exam schedule from the school's spreadsheet into every student's calendar
A shift roster into each worker's phone, one .ics per person after filtering the sheet
A content or launch calendar into the marketing team's shared calendar
A season of matches, rehearsals or club meetings published as one subscribable file
A migration between calendar services through a CSV you can review and correct first
Why Use Our CSV to ICS Converter?
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. On this page, everything runs in the browser and the spreadsheet is not uploaded. The REST API and the MCP tool are a separate path: a call sends the CSV you include to FindUtils, which converts it without storing it.
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.