All posts
Calendar2026/10/07

ICS to CSV: Keep Timezones, All-Day Dates and Recurrence Rules Clear

Turn an iCalendar file into a readable event table with timezone labels and recurrence rules retained.

Open the converter ↗

An exported calendar is a collection of event objects, not a spreadsheet. Converting it is useful for reviewing appointments, handing a schedule to a colleague, or preparing an event table for another tool. It is important to keep the difference between a calendar event and each occurrence of a recurring series visible.

Prepare an actual calendar file

Export a calendar as .ics from your calendar application. If the download is a ZIP, extract it first and select the calendar file inside. Keep separate calendars in separate files when their ownership or timezones matter. A task-only calendar with VTODO entries does not contain the VEVENT appointments this converter reads.

Open the ICS to CSV converter. Download its synthetic example to see the accepted structure without using a real appointment. Then choose your file and inspect the preview. All file processing runs in the browser; the file is not uploaded to CSV2QBO.

Read the columns correctly

SUMMARY is the event title; DTSTART and DTEND are the start and end. LOCATION, DESCRIPTION and UID retain the basic event details. Long folded lines are reassembled before escaped commas and newlines are decoded, so a wrapped description is not mistaken for another appointment.

The output also includes DTSTART_TZID, DTEND_TZID, DURATION, RRULE, RECURRENCE-ID, EXDATE and STATUS. These columns preserve context that is easy to lose when reducing a calendar to six columns. An alarm nested inside an event must not replace the event's own description.

A weekly meeting is not fifty-two rows

A weekly meeting can be stored as one VEVENT with an RRULE. This tool exports that event once and retains the rule. It does not calculate every future occurrence. A separately edited occurrence can have its own VEVENT and recurrence identifier, so a series may legitimately create several output rows without being fully expanded.

Do not use the CSV row count as a total number of meetings attended. Expand the recurrence rules with a calendar-aware application first if your analysis needs occurrence counts or billable hours.

Timezones and all-day dates

A timestamp ending in Z remains marked as UTC. A named timezone remains in the corresponding TZID column. A floating timestamp stays floating. No automatic timezone conversion is performed, because dropping the zone or applying today's offset could change historical event times.

All-day end dates are exclusive. An event starting October 2 and ending October 3 describes one day, not two. A DURATION value is retained when the event does not specify a separate end time.

Verify before using the spreadsheet

Compare a timed event, an all-day event and a recurring series against the original calendar. Confirm titles, timezone labels and exceptions. Attendees, organizers, alarms and attachments are not exported. The interface asks you to acknowledge this scope before the download becomes available.

Formula-like text is prefixed with an apostrophe for spreadsheet safety. Keep the original ICS if a downstream system needs exact source values rather than a spreadsheet view. For format semantics, consult RFC 5545.

Convert an ICS file, or browse the other conversion tools.