Skip to content

CSV to ICS Calendar Converter

CSV to ICS conversion turns spreadsheet rows into an iCalendar file that you can inspect before importing a schedule. Map your actual column names, choose how dates are written, and decide whether timed events use UTC or floating local time. The result is an events.ics download and a table of the interpreted events. This is useful for a class timetable, meeting list or personal event schedule; the file is built locally and is not added to a calendar account automatically.

CSV to ICS Calendar Converter

Convert spreadsheet event rows into a downloadable calendar. Map your column names and choose a date format instead of guessing ambiguous dates.

Maximum file size: 25 MB per file. You can also drag files here.

Supported scope and limitations

Timed events use UTC or floating local time. IANA time-zone generation is not included. All-day end dates are exclusive. Duplicate UIDs stop export. Test a small import in your calendar before importing a full schedule.

Examples contain invented demonstration data. Replace it before using any export.

Privacy: files are processed in your browser and are never uploaded.

Prepare a spreadsheet for CSV to ICS conversion

Export a comma-separated CSV with a header row. Each event needs a title and a start date; timed events also need a time. The default headers are title, start, end, all_day, uid, description, location and rrule. Optional columns may be omitted. If your spreadsheet uses different headers, enter their exact names in the matching column-name controls.

Keep values containing commas inside CSV quotation marks. A location such as Studio, Level 2 needs quoting so it remains one cell. Avoid mixing US month/day/year dates with UK day/month/year dates in one file. The selected date format applies to the conversion as a whole, so inconsistent rows should be corrected in the spreadsheet first.

How to convert and check the event preview

Use Try an example to load the fictional planning meeting and all-day event. For your schedule, set Input date format to iso, mdy or dmy and choose Timed event zone. Map any renamed headers before choosing your file. File selection begins processing. Alternatively, paste the CSV into the text field and press Process files.

Review the title, start, end, timezone and allDay values in the table. If an option changes after selection, process again before downloading events.ics. Incorrect dates, mismatched row widths and duplicate event identities stop conversion rather than quietly discarding rows. The CSV to ICS converter does not import into Google Calendar, Outlook or another account on your behalf.

Worked example: a timed meeting and one whole day

With iso dates and UTC selected, the meeting below runs from 09:00 to 10:00 UTC on January 5, 2026. The Day off row covers January 10 only. Its end is January 11 because iCalendar all-day end dates are exclusive: the end marks the first date no longer included. Entering January 10 as both start and end would not describe a one-day event.

title,start,end,all_day,location
Planning meeting,2026-01-05T09:00:00,2026-01-05T10:00:00,false,Studio
Day off,2026-01-10,2026-01-11,true,
CSV to ICS example result preview
Illustrative result from this CSV to ICS converter using a fictional test file.

Understand UTC, floating time and missing end dates

UTC means the clock values describe universal time. A calendar may display them differently after applying the viewer’s local timezone. Floating time means the same written wall-clock time is not tied to a timezone in the exported event. That can be appropriate for a personal local schedule, but it does not identify a particular city or handle travel between zones.

This interface does not generate named IANA timezone definitions or automatically apply daylight-saving rules for a city. Choose a different authoring workflow when an event must remain at 09:00 in a specific location throughout seasonal clock changes. If the end cell is blank, this CSV to ICS converter supplies one hour for a timed event or one day for an all-day event; enter an explicit end whenever that default is not your intention.

Event identities and repeated meetings

An optional UID column lets you carry deliberate event identities from a source system. Without one, this CSV to ICS converter generates a deterministic identity from the row values. Identical rows can therefore create an identity conflict. Correct accidental duplication rather than adding arbitrary characters to force it through. Changing row details can change a generated UID, which matters when reimporting a schedule into an existing calendar.

The optional rrule column accepts a recurrence rule string for supported parsing, but the converter does not provide a full recurrence-authoring interface. Use the RRULE generator to understand a simple pattern, then inspect the actual receiving calendar. Treat the download as a candidate import and test a few events before importing thousands.

A practical calendar checking workflow

For structural issues, run the output through the ICS validator. To compare a calendar export with spreadsheet records, use ICS to CSV. The ICS merger combines existing calendar files and reports conflicting event identities. CSV to ICS handles at most 20,000 event rows per conversion; the file area also displays the configured file-size limit. Keep your original spreadsheet and avoid repeated imports until you understand how your calendar handles existing UIDs.

Common CSV to ICS converter errors and how to fix them

When the CSV to ICS converter cannot use a file, it stops with one clear message instead of producing a half-finished download. These are the problems people run into most often, with the fix for each:

  • Use a valid date in the selected format, with an end after its start. A date does not match the chosen date format, a day does not exist (31 April), or an end time is not later than its start. The line number points to the row.
  • A required field or column is missing. A row has no event title, or the title column is missing from the header.
  • Keys must be present and unique. Review duplicate keys before exporting. Two rows produce the same event UID. Give repeated meetings distinct UIDs or leave the column empty so each row gets its own.
  • Row length differs from the header. A row has more or fewer cells than the header, usually because of an unquoted comma in a title or location.

Privacy: the CSV to ICS converter runs in your browser

CSV to ICS converter processing happens with JavaScript in a background worker on this page. Your file is not uploaded to a FileFix server, and the results you download are created in your browser’s memory. Calendars reveal meetings, names and locations, so local processing keeps that schedule private. When you finish on a shared computer, clear the selection or close the tab.

For the underlying format rules, see the RFC 4180 (CSV) and RFC 5545 (iCalendar). The CSV to ICS converter follows the subset described on this page rather than every optional feature in those documents.

Sources

Questions about this tool

Why does an all-day event end on the next date?

The iCalendar end is exclusive. An event lasting January 10 only starts on January 10 and ends on January 11.

Does this converter know whether 03/04 means March 4 or April 3?

You choose mdy or dmy explicitly. It does not guess differently for individual rows; ISO year-month-day dates avoid that ambiguity.

Can I choose Europe/London or America/New_York?

This version generates UTC or floating timed events. It does not generate named IANA timezone definitions.

What happens if I leave the end column empty?

A timed event gets a one-hour end and an all-day event gets a one-day end. Supply your own end value when either assumption is unsuitable.

Will importing the same download twice create duplicates?

That depends on the destination calendar’s import behavior. Generated UIDs are stable for identical rows, but this tool does not control the account’s update or duplicate handling.

Review the supported formats and limitations before using an output file. File processing happens in your browser.