Turns a calendar export into a spreadsheet — one row per event, with the fields you would expect. The usual reasons are billing a month of meetings, auditing where the week went, or moving a calendar between two systems that will not talk to each other.
Recurring events stay one row
RRULE:FREQ=WEEKLY;BYDAY=MO), not as fifty-two events. That rule is preserved verbatim in a Recurrence column and the occurrences are not expanded.
This is deliberate. Expanding requires deciding how far into the future to go — a rule with no end date is infinite — and it means resolving exceptions, moved instances and cancelled occurrences, each of which can be wrong in a way you would not notice in a spreadsheet of four hundred rows. Keeping the rule keeps the file honest about what it actually contains.
If you need one row per occurrence, the reliable route is to have the calendar application itself expand them: export a fixed date range from Google Calendar or Outlook, which writes out the individual instances.
Time zones, and the trap in them
DTSTART;TZID=Europe/Oslo:20260817T090000 gives you 2026-08-17T09:00:00 and Europe/Oslo in a separate column. A time ending in Z is UTC, and is marked as such.
The trap is that a spreadsheet has no concept of a time zone. If you sort or subtract these values, you are comparing wall-clock times from possibly different zones, which is not the same as comparing moments. For a calendar in one zone it makes no difference; for a travelling calendar it does.
All-day events have a date and no time, and are flagged in their own column — they are genuinely different from an event that happens to start at midnight.
What an .ics holds that a spreadsheet cannot
VALARM) are dropped — there is no column that means "notify me fifteen minutes before". To-do items (VTODO) and journal entries (VJOURNAL) are not events and are not converted; if your file contains them you are told how many. Attachments and free/busy blocks are skipped.
Everything dropped is counted and reported after the conversion, so you know what is not in the spreadsheet.
The import presets
Other names for this
Also searched as “ical to csv”, “calendar to spreadsheet”, “ics to excel”.
Questions
- Why is my weekly meeting only one row?
- Because that is how the calendar stores it — one event plus a repeat rule. Expanding it would mean choosing an arbitrary end date and resolving exceptions, both of which introduce errors. The rule is kept in full in the Recurrence column.
- How do I get one row per occurrence?
- Export a fixed date range from Google Calendar or Outlook instead of the whole calendar. Those exports contain the individual instances already expanded.
- Can I import the result back into Google Calendar?
- Yes — choose the Google Calendar preset, which produces the exact columns and date format its importer expects.
- Are reminders included?
- No. A spreadsheet has nowhere to put them. The tool reports how many were dropped.
- Is my file uploaded?
- No. Everything runs in this tab. That matters more here than almost anywhere else on the site — a calendar is your movements, an address book is other people’s personal data, and a GPS track is where you live and where you run. None of it is sent anywhere.
- Can I convert several files at once?
- Yes — drop as many as you like, or a whole folder. Each keeps its original name and you can download them individually or as a ZIP.