ICS to CSV Converter

Flatten the events in an iCalendar (.ics) file into a clean CSV table — one row per event with summary, start, end, location and description, plus status, categories and UID when present. Paste the file contents; everything runs in your browser and nothing is uploaded.

Try:
CSV

About this tool

ICS to CSV turns an iCalendar file — the .ics format that Google Calendar, Apple Calendar, Outlook and event invites export — into a clean CSV table you can open in a spreadsheet or import anywhere. Paste the file contents and you get one row per event with these columns:

summary, start, end, location, description

plus status, categories and uid columns whenever your events carry them, so the CSV never has a column of blanks. Folded lines are unfolded, RFC 5545 text escapes (\n, \,, \;) are decoded back to real characters, alarm and timezone sub-blocks are skipped, and every field is RFC-4180 escaped so summaries or descriptions containing commas, quotes or newlines stay intact.

Everything runs locally in your browser — the calendar never leaves your device.

Worked example

Input (one event):

BEGIN:VCALENDAR
BEGIN:VEVENT
UID:[email protected]
SUMMARY:Team Standup
DTSTART:20240309T081530Z
DTEND:20240309T083000Z
LOCATION:Room 4
DESCRIPTION:Daily sync
END:VEVENT
END:VCALENDAR

Output (defaults — comma delimiter, header on, ISO dates):

summary,start,end,location,description,uid
Team Standup,2024-03-09T08:15:30Z,2024-03-09T08:30:00Z,Room 4,Daily sync,[email protected]

Options

Limits & edge cases

FAQ

What columns does the CSV have?

Always summary, start, and end, then location and description unless you turn those off. status, categories and uid columns are added automatically whenever at least one event includes them, so you never get a column that is entirely empty. An empty cell means that event didn't record that value.

Does it handle all-day events and different date formats?

Yes. Date-only values like DTSTART;VALUE=DATE:20240704 are recognized as all-day events and written as 2024-07-04. Timed values are normalized to ISO-8601, or you can switch the date format to raw to keep the original .ics text or unix for epoch seconds. Z-suffixed times are UTC; floating and TZID times are read as wall-clock UTC.

Why did some events not turn into rows?

Only calendar events (VEVENT blocks) are exported. To-dos (VTODO), journal entries (VJOURNAL) and free/busy blocks (VFREEBUSY) are skipped, and a repeating event appears once for its master start date — recurrences (RRULE) are not expanded into individual occurrences.

Is my calendar file uploaded anywhere?

No. The conversion runs entirely in your browser using WebAssembly — the .ics text you paste is processed on your own device and is never sent to a server.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool ics-to-csv "BEGIN:VCALENDAR
BEGIN:VEVENT
SUMMARY:Team Standup
DTSTART:20240309T081530Z
DTEND:20240309T083000Z
LOCATION:Room 4
END:VEVENT
END:VCALENDAR"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/ics-to-csv/?ics=BEGIN%3AVCALENDAR%0ABEGIN%3AVEVENT%0ASUMMARY%3ATeam%20Standup%0ADTSTART%3A20240309T081530Z%0ADTEND%3A20240309T083000Z%0ALOCATION%3ARoom%204%0AEND%3AVEVENT%0AEND%3AVCALENDAR&delimiter=comma&header=true&date_format=iso&include_location=true&include_description=true

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.