ICS File Viewer
Open an .ics calendar file right in your browser - every event with dates, locations, and attendees - and export the lot to CSV. Your calendar never leaves your machine.
Your stuff stays yours. Your file is opened with JavaScript inside this page. It is never transmitted, and the tool keeps working with the network unplugged.
An .ics file lands in your inbox - a meeting invite, a conference schedule, a whole exported calendar - and opening it means letting some app import it, or handing it to a website. Both are wrong for a file that is, plainly, a map of your time: who you meet, where, and when. This page reads the iCalendar format directly in your tab: events are unfolded, escaped text is restored, time zones are labeled instead of mangled, and repeating events show their rule in plain words. Nothing is imported anywhere and nothing is uploaded.
The CSV export turns a calendar into a spreadsheet - useful for timesheets, event planning, billing reconstructions, or archiving a calendar you're about to close. It sits alongside our MSG / EML viewer in the same family: files people receive, need to read once, and shouldn't have to trust a server with.
How to use the ICS file viewer
- Click Choose an .ics calendar file, or drag the file onto the drop area. An invite saved from an email works the same as a full calendar export.
- Read the status line for the event count and, if the file names one, the calendar's name.
- Scroll the event cards. They are sorted by start time. Each shows the title, start and end, the repeat rule, location, organizer, attendees, and the first 400 characters of the description. Up to 500 cards are shown.
- Click Download CSV for a spreadsheet with the columns Start, End, Title, Location, Organizer, Attendees, Repeats, and Status. It includes every event. The description is not part of the CSV.
How an iCalendar file is put together
An .ics file is plain text made of content lines in the form NAME;PARAMETERS:VALUE. Lines longer than 75 octets are folded: the line breaks and the next line starts with a space. The viewer unfolds them first. Commas, semicolons, and newlines inside values are escaped as \,, \;, and \n, and the viewer restores them.
Events live in VEVENT blocks inside a VCALENDAR. A time can be written three ways, and the difference matters:
- UTC, ending in
Z:20261201T170000Z. The viewer converts it to your computer's time zone and labels it "(your time)". - Local time with a zone:
DTSTART;TZID=America/New_York:20261006T140000. The viewer shows the time as written, with the zone name in brackets. - Floating, with no Z and no TZID. This means the same clock time in any zone, and the viewer shows it with no label.
All-day events use a date value such as DTSTART;VALUE=DATE:20261112. The end date is exclusive, so an event from 20261112 to 20261114 covers November 12 and 13. The viewer prints both dates as written.
Repeating events carry an RRULE. The viewer turns FREQ, INTERVAL, BYDAY, COUNT, and UNTIL into words. It does not read EXDATE (skipped dates) or other BY parts such as BYMONTHDAY.
Worked example
BEGIN:VEVENT
SUMMARY:Sprint review
DTSTART;TZID=America/New_York:20261006T140000
DTEND;TZID=America/New_York:20261006T150000
RRULE:FREQ=WEEKLY;INTERVAL=2;BYDAY=TU;UNTIL=20261222T190000Z
LOCATION:Room 4B\, 2nd floor
ORGANIZER;CN=Priya Shah:mailto:priya@example.com
ATTENDEE;CN=Leo Park;RSVP=TRUE:mailto:leo@example.com
ATTENDEE;CN=Ana Lima:mailto:ana@example.com
END:VEVENT
The card reads "2026-10-06 14:00 (America/New_York)" to "2026-10-06 15:00 (America/New_York)", repeats every 2 weeks on Tue, until 2026-12-22. The CSV row is:
2026-10-06 14:00 (America/New_York),2026-10-06 15:00 (America/New_York),Sprint review,"Room 4B, 2nd floor",Priya Shah,Leo Park; Ana Lima,"every 2 weeks on Tue, until 2026-12-22",
The row ends with a comma because this event has no STATUS line.
Common problems and fixes
- The description just says "Reminder". Cause: an alarm (
VALARM) nested inside the event has its own DESCRIPTION line, and the viewer keeps the last one it reads. Fix: open the file in a text editor and read the DESCRIPTION line that comes beforeBEGIN:VALARM. - An event shows a start but no end. Cause: the event uses
DURATION(for examplePT1H) instead of DTEND, and the viewer only reads DTEND. Fix: add the duration to the start time yourself. - "Monthly on Mon" when the meeting is the first Monday. Cause: the number in
BYDAY=1MOis dropped when the rule is put into words. Fix: check the raw RRULE line.1MOmeans first Monday and-1FRmeans last Friday. - The same meeting appears twice. Cause: a changed occurrence of a series is stored as its own VEVENT with a
RECURRENCE-ID, and the viewer lists it separately. Fix: treat the one-off card as the override for that date. - An attendee shows an email address instead of a name. Cause: the name is in quotes, as in
CN="Ana Lima", which the attendee reader skips. A quoted organizer name keeps its quote marks. Fix: remove the quotes in the CSV if you need names.
Related tools
Invites often arrive inside a saved email: open it in the MSG / EML viewer and download the .ics attachment. To check a raw epoch time from another calendar export, use the Unix timestamp converter.
Questions this tool gets asked
How do I open an .ics file without a calendar app?
Drop it on this page. The iCalendar format is parsed in your browser and every event is listed - title, start and end, location, organizer, attendees, description - with no import into any calendar and no upload to any server. Read it, export it, done.
Is my calendar uploaded to view it?
No. A calendar file is a map of your life - meetings, names, places - which is why this viewer runs entirely as JavaScript in your tab. There is no upload endpoint on this site. Load the page, go offline, and it still opens your files.
Can I convert the events to CSV or Excel?
Yes - the CSV button exports every event with start, end, title, location, organizer, attendees, and repeat rule as columns. The file opens directly in Excel or Google Sheets.
How are time zones handled?
UTC times (ending in Z) are converted to your local time and labeled. Events with a TZID are shown in that named zone as written, and all-day events are shown as dates. The viewer shows what the file says rather than silently re-interpreting it.
What about repeating events?
A repeating event is shown once with its repeat rule spelled out (for example: weekly on Mon, Wed until Jun 2027). The viewer does not expand every occurrence - that is what calendar apps are for; this page is for reading the file honestly.
Can I check an invite before accepting it into my calendar?
That is this page's best trick. Accepting an .ics invite writes it into your calendar and often notifies the organizer; opening it here does neither. You see the time, the attendee list, and the repeat rule - including whether that innocent-looking invite is actually a weekly series - before anything touches your calendar.
Related tools
- msg / eml → readable emailOpen Outlook emails - body, headers, attachments - without Outlook.
- qbo / qfx / ofx / qif → csvQuickBooks and Quicken bank files out as clean spreadsheets.
- epoch ⇄ dateEpoch seconds or millis to real dates, and back.
- csv → jsonCSV rows in, JSON array of objects out. Quoted fields handled.