---
url: https://findutils.com/guides/csv-to-ics
title: "Convert a CSV of Events to an ICS File for Google, Apple or Outlook"
description: "Turn a spreadsheet of events into an .ics calendar file in your browser. Learn which column names are recognized, how dates and times are read, how all-day events and time zones are written, and how to import the file."
category: converters
content_type: guide
guide_type: subtopic
cluster: calendar
locale: en
read_time: 8
status: published
author: "olgunozoktas"
published_at: 2026-09-03T18:00:00Z
excerpt: "Forty events in a sheet become one import. Name the columns, check the date order, set a zone if you need one, and read the row notes before you import."
tag_ids: ["calendar", "ics", "csv", "data-conversion", "productivity"]
tags: ["Calendar", "ICS", "CSV", "Data Conversion", "Productivity"]
primary_keyword: "csv to ics"
secondary_keywords: ["csv to ical", "convert csv to ics", "spreadsheet to calendar", "excel to ics", "bulk create calendar events", "import events from csv"]
tool_tag: "csv-to-ics"
related_tool: "csv-to-ics"
related_tools: ["csv-to-ics", "ics-to-csv", "csv-viewer", "csv-to-json"]
og_image: "/images/content/guides/csv-to-ics-cover-20260908.webp"
image_alt: "Appointment blocks move from a table of rows into a sculptural calendar."
updated_at: "2026-09-08T09:18:14Z"
---

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](/convert/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](/convert/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/2026` is 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](/convert/csv-to-ics/)** — Rows into an importable calendar file.
- **[ICS to CSV](/convert/ics-to-csv/)** — The reverse: an .ics into one row per event.
- **[CSV Viewer](/convert/csv-viewer/)** — Check the sheet before converting it.
- **[CSV to JSON](/convert/json-to-csv/)** — The same rows as JSON for a script.

## FAQ

**Q: 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.

**Q: 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.

**Q: 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.

**Q: 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.

**Q: 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.

**Q: 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](/convert/csv-to-ics/).
- Go the other way with [ICS to CSV](/convert/ics-to-csv/).
- Read the [ICS to CSV guide](/guides/ics-to-csv/) for the export side.
