CSV to iCal Converter
Convert CSV files to iCalendar ICS format online. Map columns, configure date formats, preview events, and download RFC 5545 compliant calendar files.
About
Calendar data trapped in spreadsheets is operationally inert. Most scheduling systems (Google Calendar, Outlook, Apple Calendar) reject raw CSV. They require iCalendar format defined by RFC 5545, a structured text protocol using VCALENDAR and VEVENT components. This converter parses your CSV with a state-machine tokenizer that correctly handles quoted fields, embedded commas, and multiline descriptions. It then generates standards-compliant .ics files with proper UID generation, line folding at 75 octets, and special-character escaping. Getting the date parsing wrong means silent event misplacement - meetings at 3 AM instead of 3 PM, or dates swapped between month and day. The tool supports configurable date format strings and validates every timestamp before conversion.
This tool assumes well-formed CSV input where each row represents one event. Column order is configurable via drag-and-drop mapping. All-day events are detected when time components are absent. The converter does not handle recurrence rules (RRULE) or timezone definitions (VTIMEZONE) - events are exported as floating time. For timezone-aware calendars, append a TZID parameter manually or use your calendar application's import normalization. Pro tip: always test your .ics file with a single event before batch-importing hundreds.
Formulas
The CSV parser operates as a finite state machine with three states: Sunquoted, Squoted, and Sescape. For each character c in the input stream, the transition function determines whether to append to the current field, close the field, or advance to the next row.
Date conversion from parsed string to iCalendar timestamp follows a normalization pipeline:
UID generation uses a combination of timestamp and entropy to guarantee uniqueness across events:
Where YYYY = four-digit year, MM = zero-padded month (01 - 12), DD = zero-padded day, HH = hours (00 - 23), mm = minutes, ss = seconds. fmt is the user-selected date format string that controls parsing order. The transition function handles the 3 parser states: when c matches the delimiter in Sunquoted, the current field is finalized; when c = " in Squoted, the parser enters Sescape to check for escaped quotes ("").
Reference Data
| iCal Property | Required | CSV Column | Format / Notes | RFC 5545 Ref |
|---|---|---|---|---|
| SUMMARY | Yes | Subject | Plain text, max 255 chars recommended | ยง3.8.1.12 |
| DTSTART | Yes | Start Date | YYYYMMDD or YYYYMMDDTHHMMSS | ยง3.8.2.4 |
| DTEND | No | End Date | Same as DTSTART; omit for all-day | ยง3.8.2.2 |
| DESCRIPTION | No | Description | Escaped text; commas, semicolons, backslashes | ยง3.8.1.5 |
| LOCATION | No | Location | Plain text address or URL | ยง3.8.1.7 |
| UID | Yes | Auto-generated | Unique per event: timestamp + random | ยง3.8.4.7 |
| DTSTAMP | Yes | Auto-generated | UTC timestamp of file creation | ยง3.8.7.2 |
| PRODID | Yes | Auto-generated | Producer identifier string | ยง3.7.3 |
| VERSION | Yes | Fixed: 2.0 | iCalendar version | ยง3.7.4 |
| CALSCALE | No | Fixed: GREGORIAN | Calendar scale | ยง3.7.1 |
| Common Date Format Strings | ||||
| ISO 8601 | YYYY-MM-DD HH:mm | 2025-01-15 09:00 | ||
| US Format | MM/DD/YYYY HH:mm | 01/15/2025 09:00 | ||
| EU Format | DD/MM/YYYY HH:mm | 15/01/2025 09:00 | ||
| US Date Only | MM/DD/YYYY | 01/15/2025 (all-day) | ||
| EU Date Only | DD.MM.YYYY | 15.01.2025 (all-day) | ||
| Compact | YYYYMMDD | 20250115 (all-day) | ||
| 12-hour clock | YYYY-MM-DD hh:mm A | 2025-01-15 09:00 AM | ||
| Slash datetime | DD/MM/YYYY HH:mm:ss | 15/01/2025 09:00:00 | ||
| Line Folding & Escaping Rules | ||||
| Line length | Max 75 octets; fold with CRLF + SPACE | |||
| Backslash | \ โ \\ | |||
| Semicolon | ; โ \; | |||
| Comma | , โ \, | |||
| Newline | LF โ \n | |||