Skip to content
ALL DEVELOPER TOOLS56
JSON FormatterTXT → JSONJSON to CSVJSON → CSVCSV to JSONCSV → JSONSQL FormatterSQL → SQLMarkdown to HTMLMD → HTMLHTML to MarkdownHTML → MDXML FormatterXML → XMLBase64 Encode/DecodeTXT → B64URL Encode/DecodeTXT → URLJWT DecoderJWT → JSONHTML Entity Encode/DecodeTXT → HTMLUUID Generator— → UUIDPassword Generator— → TXTHash GeneratorTXT → HASHLorem Ipsum Generator— → TXTQR Code GeneratorTXT → PNGColor Picker & Converter— → HEXCSS Gradient Generator— → CSSBox Shadow Generator— → CSSRegex TesterTXT → MATCHCron Expression GeneratorTXT → CRONTimestamp ConverterNUM → DATEText DiffTXT → DIFFText Case ConverterTXT → TXTWord CounterTXT → STATSSubtitle ConverterSUBS → SRT · VTT · ASSYAML to JSONYAML → JSONJSON to YAMLJSON → YAMLYAML FormatterYAML → YAMLJSON MinifyJSON → JSONSort & Dedupe LinesTXT → TXTLine Ending ConverterTXT → CRLF · LF · CRXLSX to CSVXLSX → CSVCharset ConverterTEXT → UTF-8HAR ViewerHAR → TABLE · HARJWT EncoderJSON → JWTHMAC GeneratorTXT → MACFile ChecksumFILE → VERDICTWi-Fi QR Code Generator— → QRChmod CalculatorOCTAL → RWXHTTP Status CodesCODE → MEANINGByte ConverterSIZE → UNITSTime Zone ConverterTIME → ZONESAspect Ratio CalculatorSIZE → RATIOURL ParserURL → PARTSExtract ArchiveARCHIVE → FILES · ZIPCreate ZIPFILES → ZIPUnzip FilesZIP → FILESDOCX to MarkdownDOCX → MDSVG OptimizerSVG → SVGBarcode Generator— → BARCODEQR Code ReaderIMG → TEXTVCF to CSVVCF → CSVICS to CSVICS → CSVCSV to Markdown TableCSV → MDBcrypt Generator— → HASH
ENGINE NATIVE JSACCEPTS ICS ICAL IFB

ICS to CSV

NATIVE JSTOOL 183 OF 190

ICS to CSV — Convert a Calendar Export to a Spreadsheet

Reads an iCalendar file and writes a CSV you can open in any spreadsheet. Your calendar stays in this tab.

ENGINENATIVE JS
ACCEPTSICS ICAL IFB
MAX SIZENONE
UPLOADNEVER
01Drop an .ics calendar export onto the page, or click the drop zone to pick one.
02Check the times — they are written as the calendar stores them, with the zone beside them.
03Press Download to save the CSV, or Copy to put it on the clipboard.

About ICS to CSV

An .ics export is a diary, and it says as much about a person as their contacts do — who they meet, where they go, and when they are not at home. So this reads it in your browser and uploads nothing, which is worth saying plainly for a file of this kind. Two decisions in the conversion are worth knowing about, because both are places where a more confident tool would quietly be wrong. The first is time zones. An iCalendar time can be UTC, it can be floating with no zone at all, or it can name a zone whose rules live in a VTIMEZONE block elsewhere in the same file. Converting all three into one zone means guessing which one you wanted, and when the guess is wrong every appointment moves by hours with nothing on screen to say so. This writes the wall-clock time exactly as the file stores it and puts the zone in a column of its own, where you can see it. A visible extra column is better than an invisible wrong time. The second is repetition. A weekly meeting is stored once, with a rule describing how it repeats — it is not stored as fifty-two events. Expanding that rule would turn one row into hundreds and would require resolving counts, end dates, exceptions and the calendar's own zone, each one a chance to invent an appointment that does not exist in the file. So a repeating event stays one row and its rule is written into a column. If you want the occurrences, a calendar application is the right thing to ask. Beyond that: reminders are kept out of the event's own columns, organisers and attendees are shown by name rather than as mailto: addresses, all-day events are marked, and any property with no column is named on the page instead of being dropped in silence.

Questions

Is my calendar uploaded?

No. The file is read in this tab and nothing leaves it. A calendar export is a diary — who you meet, where you go, and by implication when you are not at home — so it is worth being explicit that no part of it is sent anywhere at any point.

Why are the times not converted to my time zone?

Because converting them means guessing, and a wrong guess is invisible. An iCalendar time can be UTC, it can be floating with no zone at all, or it can name a zone whose rules are defined elsewhere in the same file. Rewriting all three into one zone would move some appointments by hours with nothing on screen to say it had happened. So the wall-clock time is written exactly as your calendar stores it and the zone goes in its own column, where you can see which is which and convert deliberately if you need to.

A weekly meeting only appears once. Is that a bug?

No, that is what the file says. A repeating event is stored once with a rule describing how it repeats — it is not stored as fifty-two events — and the rule is written into the Repeats column. Expanding it here would turn one row into hundreds and would mean resolving counts, end dates, cancelled occurrences and the calendar's own time zone, each of which is a chance to put an appointment in your spreadsheet that does not exist in your calendar. If you want the individual occurrences, a calendar application is the right thing to ask.

What about reminders, to-dos and free/busy blocks?

Only events become rows. A reminder is stored inside its event, and its own summary is deliberately kept out of the event's columns — otherwise the text of an alert ends up where the meeting title should be. To-dos and journal entries are different block types and are not listed, so a calendar containing only those will come back empty and say so. Anything present on an event with no column of its own is named on the page rather than dropped quietly.

Is my file uploaded to a server?

No. Transmute processes everything locally in your browser using JavaScript and WebAssembly. Your files never leave your device — there is no server, no upload, no cloud processing.

Related