Skip to main content
FormatDrop
How-To Guide

How to Convert ICS to CSV (Calendar to Spreadsheet)

ICS (iCalendar, RFC 5545) is the universal calendar file format — Google Calendar, Apple Calendar, Outlook, every modern calendar app reads and writes it natively. CSV is the universal data format that Excel, Google Sheets, every database, and every BI tool consumes. Converting ICS to CSV is the right move whenever you need to analyze your meeting history (how many hours per week in 1:1s? how much time per attendee?), bulk-edit events for migration to another system, or feed calendar data into a custom report or dashboard. The conversion is mostly straightforward but recurring events, time zones, and attendees need careful handling — this guide covers all three.

Quick answer

Online: drop your .ics into formatdrop.com/document-converter, choose CSV, download. Python: `pip install icalendar` then a 15-line script that walks events and writes CSV rows. For very large calendars, expand recurring events into individual instances using the recurrence rule before writing.

Method 1: Convert ICS to CSV online (free, in your browser)

  1. 1

    Open the FormatDrop document converter

    Open formatdrop.com/document-converter in your browser. Conversion runs locally — your calendar data stays on your device. Critical for sensitive personal calendars.

    Go to converter
  2. 2

    Drop your ICS file

    Drag your .ics file. Get one by exporting from your calendar: Google Calendar → Settings → Import & Export → Export; Apple Calendar → File → Export → Export Calendar; Outlook → File → Save Calendar.

  3. 3

    Choose CSV format and recurring-event behavior

    Select CSV. Choose how to handle recurring events: 'Expand' creates one row per occurrence in a date range (best for analysis); 'Keep RRULE' keeps recurring events as a single row with the rule preserved (best for re-import to another calendar).

  4. 4

    Download and analyze in Excel or Sheets

    Each event is a row; columns are Subject, Start, End, Location, Description, Organizer, Attendees. Pivot tables work great for meeting-hours-per-day or time-per-attendee reports.

Method 2Python (icalendar)

Method 2: Convert ICS to CSV with Python (best for analysis)

Python with the icalendar library is the most flexible option for ICS-to-CSV conversion. Supports recurring event expansion, time zone normalization, and custom field mapping.

  1. Install: `pip install icalendar pytz`.
  2. Basic conversion: `from icalendar import Calendar; import csv; cal = Calendar.from_ical(open('input.ics').read()); rows = []; for ev in cal.walk('vevent'): rows.append({'summary': str(ev.get('summary')), 'start': str(ev.get('dtstart').dt), 'end': str(ev.get('dtend').dt), 'location': str(ev.get('location') or ''), 'description': str(ev.get('description') or '')}); writer = csv.DictWriter(open('out.csv','w', newline=''), fieldnames=['summary','start','end','location','description']); writer.writeheader(); writer.writerows(rows)`.
  3. Expand recurring events using the dateutil library: `from dateutil.rrule import rrulestr; rule = rrulestr(str(ev.get('rrule')), dtstart=ev.get('dtstart').dt); for occurrence in rule.between(start_date, end_date): ...`.
  4. Normalize to UTC: `import pytz; utc_start = ev.get('dtstart').dt.astimezone(pytz.UTC)`.
  5. Extract attendees: `attendees = [str(a) for a in ev.get('attendee') or []]; rows[-1]['attendees'] = '; '.join(attendees)`.

Note: Python is the right tool for analytical workflows (meeting hour reports, attendee frequency analysis, time zone audits). For one-off conversions, the browser tool is faster.

Method 3Google Calendar (round-trip)

Method 3: Round-trip via Google Calendar (no install)

Import your ICS to Google Calendar, then export the calendar to CSV. Easy but contacts pass through your Google account briefly.

  1. calendar.google.com → Settings → Import & Export → Import → choose your .ics → select target calendar → Import.
  2. Once imported (a few seconds), use a third-party tool to export from Google Calendar to CSV — Google doesn't directly export CSV, but tools like 'Google Calendar to CSV' (calendar.google.com extensions) or scripts using the Google Calendar API do.
  3. Easier: use the Apps Script approach — paste a script into script.google.com, run, get CSV.
  4. Or: just import directly to a tool that handles ICS → CSV like Excel via a Power Query connector.

Note: Google's roundabout path is fine for small calendars but Python is faster for >100 events.

Method 4Excel Power Query

Method 4: Import ICS directly to Excel via Power Query

Excel's Power Query feature can parse ICS files into a table directly, no conversion needed.

  1. Excel → Data → Get Data → From File → From Text/CSV → select your .ics file. Excel detects it as text.
  2. Use the M language editor to parse VEVENT blocks: split by 'BEGIN:VEVENT' and 'END:VEVENT', extract fields like SUMMARY:, DTSTART:, DTEND:.
  3. This requires custom M code — search 'Excel Power Query parse ICS' for templates. Easier for non-technical users to use Method 1 or Method 2.

Note: Power Query is powerful but the ICS parsing is manual. For occasional use, the browser tool or Python is easier.

When you need to convert ICS to CSV

  • 1

    Calculating total meeting hours per week or month

    Export your last 90 days of calendar to ICS, convert to CSV, open in Sheets, sum the (End - Start) column. Discover you're in 28 hours of meetings per week — actionable data for time management.

  • 2

    Building a meeting-attendee frequency report

    Pivot table on the attendees column → discover you spend 30% of your meeting time with one specific person. Useful for re-evaluating standing meetings.

  • 3

    Migrating events between systems that don't share ICS

    Some old systems import only CSV (legacy CRMs, custom calendaring tools). Convert your ICS to CSV, map columns to the destination's import schema, bulk import.

  • 4

    Time zone auditing for distributed teams

    Convert your team's combined ICS to CSV → analyze meeting times in each attendee's local time zone → identify scheduling patterns that disadvantage certain time zones (e.g., always 8 AM Pacific = midnight in Tokyo).

  • 5

    Compliance and legal record-keeping

    Some industries require meeting records for compliance. CSV is the standard format for legal hold systems. Convert and archive periodically.

Troubleshooting common ICS to CSV problems

Recurring events show as a single row instead of expanded

Use a converter that expands recurring events into individual instances. Python with dateutil's rrulestr is the most flexible. Or in your CSV tool's converter, look for 'Expand recurring' or 'Materialize occurrences' option.

Time zones are confusing or wrong in the CSV

ICS uses TZID references like 'America/New_York'. CSV is plain text and doesn't enforce time zone interpretation. Best practice: convert all times to UTC during ICS-to-CSV conversion (`pytz.UTC` in Python) to eliminate ambiguity. Add a 'time zone' column if you need to preserve original.

Multi-line descriptions break CSV parsing

Event descriptions in ICS can contain newlines. CSV parsers may treat these as row separators if quoting is wrong. Solution: ensure your converter uses quoting (RFC 4180 compliant CSV) — Python's csv.writer with `quoting=csv.QUOTE_ALL` handles this correctly.

Attendees come out garbled or missing

ICS attendees are 'mailto:' URIs with parameters (CN=Name, ROLE=REQ-PARTICIPANT, etc.). Most converters extract just the email. To preserve names: parse the CN parameter. Python: `attendee.params.get('CN')` for the name, `attendee` (the value) for the email.

Why convert ICS to CSV?

ICS is the format calendar systems speak; CSV is the format data tools speak. Converting unlocks bulk operations on your meeting history that would be tedious one event at a time. The most common use case is meeting analytics — how many hours per week, with whom, in which time zones — but bulk migration, compliance archiving, and time-zone audits are equally valuable.

The conversion is mostly mechanical for one-time events. Recurring events, time zones, and multi-line descriptions need care. Python with icalendar handles all three correctly; the browser tool handles common cases; Google Calendar's roundabout path works when you can't install anything.

For analytical work, normalize times to UTC and expand recurring events. For migration, preserve RRULE and original time zones. The right strategy depends entirely on what you're going to do with the CSV downstream.

Your files never leave your device

FormatDrop runs the conversion engine entirely inside your browser using WebAssembly. No file upload. No server. Nothing stored. You can verify this by opening DevTools → Network tab and watching: zero upload requests.

Frequently asked questions

Is converting ICS to CSV free?
Yes. The FormatDrop browser tool, Python with icalendar, and Google Calendar import-export are all free.
How are recurring events handled?
Two strategies. 'Expand' creates one CSV row per occurrence — best for analysis (counting hours, frequency reports). 'Preserve RRULE' keeps recurring events as a single row with the recurrence rule in a column — best for re-importing to another calendar system.
Will time zones convert correctly?
Depends on the tool. The safe path is normalizing all times to UTC during conversion. Then in your spreadsheet, add formulas to convert UTC back to your local zone for display. Mixed time zones in raw CSV cause confusion.
Best free tool for ICS to CSV?
FormatDrop browser tool for one-off conversion (no install, no upload). Python with icalendar for analytical workflows or large calendars (faster, more flexible).
Can I convert just one event from a multi-event ICS?
Filter during conversion. Python: `if 'budget review' in str(ev.get('summary')).lower():` to filter by summary. Or convert all and filter the CSV in Excel.
Will the CSV import back to my calendar?
Most calendar systems don't natively import CSV — they prefer ICS. To round-trip: convert CSV back to ICS using a tool like csv2ics, or write Python to generate ICS from your modified CSV. Google Calendar accepts CSV import via Apps Script but not via the standard UI.
Convert ICS to CSV Now — Free

No account. No upload. Works in any browser.