Convert a CSV to ICS when the events already exist in a spreadsheet and you want them in a calendar without creating each one by hand. FindUtils CSV to ICS reads the rows in your browser, matches the columns by name, and writes an iCalendar file that Google Calendar, Apple Calendar and Outlook import. The tool does not upload or store the sheet.
This guide explains which column names the tool recognizes, how it reads dates and times, how it writes all-day events and time zones, what it does with a row it cannot use, and how to import the result.
Why Convert CSV to ICS?
A class timetable, a shift roster, a content calendar, a season of matches: each starts as rows in a sheet. The slow path is forty clicks through the calendar's event form. The fast path is one import.
Google Calendar can import some CSVs directly. Apple Calendar cannot, Outlook prefers not to, and any calendar you hand to another person wants an .ics. The .ics is the format every calendar reads, and it is the one to build when the target is not Google.
How to Convert CSV to ICS Online
Prepare the header, load the sheet, check the map, set the options, download, import.
Step 1: Name the Columns
Give the sheet a header row. The tool recognizes the Google Calendar and Outlook export names and a set of short aliases.
| Field | Recognized names |
|---|---|
| Title (required) | Subject, Title, Summary, Event, Name |
| Start date (required) | Start Date, Start, Date, Begin |
| Start time | Start Time, Time |
| End date | End Date, End, Until, To |
| End time | End Time |
| All day | All Day Event, All Day |
| Description | Description, Notes, Details, Body |
| Location | Location, Place, Where, Venue |
| Others | Private, UID, URL, Categories, Time Zone |
Matching ignores case, spaces and punctuation, so start_date and Start Date are the same column.
Step 2: Load the Sheet
Open FindUtils CSV to ICS. Upload the .csv or paste the rows. The separator is detected from the header: comma, semicolon or tab.
Step 3: Check the Column Map
Under the output the tool lists which header it used for each field. If it could not find a title or a start column, a column map appears with one select per field. Pick the columns and the file updates.
Step 4: Set the Options
- Calendar name is shown by the calendar app after import. Optional.
- Time zone stamps every timed event with a zone. Leave it empty for floating times.
- Date order decides how
03/04/2026is read. Auto is month-first. - Default length is used for a timed row that has no end. Sixty minutes unless you change it.
Step 5: Read the Counts and Download
The line under the output says how many events were written, how many are all-day, and how many rows were skipped and why. Download the .ics.
Step 6: Import
- 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.
How Dates and Times Are Read
The tool reads ISO dates such as 2026-09-03, slash dates such as 09/03/2026, dotted dates such as 04.09.2026, and month names such as 3 Sep 2026. Times can be 24-hour, 09:30, or 12-hour, 9:30 AM. A start cell that holds both, 2026-09-03 09:30, is split when there is no separate time column.
A slash date where both parts fit a month, 03/04/2026, is read month-first, the convention of Google and Outlook exports. The tool counts those dates and shows the count under the output. If your sheet is day-first, set the date order to DD/MM/YYYY.
All-Day Events
A row is all-day when its All Day column is true, yes or 1, or when the start has no time. 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.
Time Zones
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 parameter 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.
Google Calendar and Apple Calendar read a TZID name 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.
Rows That Are Skipped
Every row needs a title and a start date. A row missing either is skipped, and the notes name it by row number, counted with the header as row 1: Row 7: no start date; skipped. A start that cannot be read as a date is skipped the same way. Empty rows are counted separately and are not an error. Every other row is still in the file.
Practical Examples
Example 1: A Google Sheet with the Google Header
The sheet has Subject, Start Date, Start Time, End Date, End Time, All Day Event, Description, Location. Download it as CSV, load it, download the .ics. No configuration.
Example 2: A Roster with Short Names
The sheet has title, date, start, end, place. All five map by alias. Rows with a time in start are timed; rows with only a date are all-day.
Example 3: A Sheet with Custom Headers
The sheet has Course, Session, Room. The column map appears. Pick Course for Title, Session for Start date, and Room for Location.
Example 4: A Day-First Sheet
The dates are 04/09/2026 for 4 September. The count under the output says how many dates are ambiguous. Set the date order to DD/MM/YYYY and the count drops to zero.
Common Mistakes
Mistake 1: No Header Row
A sheet that starts with data has nothing to match. Add a header row with the names above.
Mistake 2: Trusting Auto for Day-First Dates
03/04/2026 is March 4 by default. Set the date order when the sheet is day-first.
Mistake 3: Expecting Repeats from a Word
weekly in a cell does not become a rule. One row is one event. Fill the rows down, or set the repeat in the calendar after import.
Mistake 4: Ignoring the Row Notes
A skipped row is not in the file. Read the notes, fix the cell, and paste again.
Mistake 5: Importing Twice and Expecting Duplicates
Each event gets a stable UID from its content and row number, so a second import updates the events instead of duplicating them. That is by design.
Tools Used in This Guide
- CSV to ICS — Rows into an importable calendar file.
- ICS to CSV — The reverse: an .ics into one row per event.
- CSV Viewer — Check the sheet before converting it.
- CSV to JSON — The same rows as JSON for a script.
FAQ
Q1: Is FindUtils CSV to ICS free to use? A: Yes. The tool is free and needs no account. It converts one sheet at a time in the browser.
Q2: Do I need an end time for every event? A: No. A timed row with no end gets the default length. An all-day row with no end date is a one-day event.
Q3: Is 03/04/2026 March 4 or April 3? A: March 4 by default. Set the date order to DD/MM/YYYY for a day-first sheet. The tool counts ambiguous dates so you know when it matters.
Q4: Can it create repeating events? A: No. One row is one event. Write one row per occurrence, or set the repeat in the calendar after import.
Q5: Will importing the same file twice create duplicates? A: Not in Google Calendar, Apple Calendar or Outlook, which honour the UID. The same row produces the same UID on every run.
Q6: Is my spreadsheet uploaded?
A: No. The rows are read in the browser and no request carries them. The same converter is on the FindUtils API as csv_to_ics for scripted use.
Next Steps
Convert a sheet with a few rows, import it into a test calendar, and check one timed and one all-day event before you import the whole roster.
- Build a file with CSV to ICS.
- Go the other way with ICS to CSV.
- Read the ICS to CSV guide for the export side.