User Rating 0.0 โ˜…โ˜…โ˜…โ˜…โ˜…
Total Usage 0 times
Upload Configure Download
Drop your CSV file here or click to browse Supports .csv and .txt files up to 10 MB
or paste CSV text
Column Mapping
Assign each CSV column to an iCal event field.
CSV Preview (first 3 rows)
ICS Output

    
Is this tool helpful?

Your feedback helps us improve.

โ˜… โ˜… โ˜… โ˜… โ˜…

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.

csv to ics csv to ical calendar converter ics generator icalendar csv converter event import google calendar import

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.

Snext = transition(Scurrent, c, delimiter)

Date conversion from parsed string to iCalendar timestamp follows a normalization pipeline:

input โ†’ parseDate(str, fmt) โ†’ Date object โ†’ formatIcal(d)
formatIcal(d) = YYYYMMDDTHHmmss

UID generation uses a combination of timestamp and entropy to guarantee uniqueness across events:

UID = timestamp() โ‹… random(36)8 @ csv2ical

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 PropertyRequiredCSV ColumnFormat / NotesRFC 5545 Ref
SUMMARYYesSubjectPlain text, max 255 chars recommendedยง3.8.1.12
DTSTARTYesStart DateYYYYMMDD or YYYYMMDDTHHMMSSยง3.8.2.4
DTENDNoEnd DateSame as DTSTART; omit for all-dayยง3.8.2.2
DESCRIPTIONNoDescriptionEscaped text; commas, semicolons, backslashesยง3.8.1.5
LOCATIONNoLocationPlain text address or URLยง3.8.1.7
UIDYesAuto-generatedUnique per event: timestamp + randomยง3.8.4.7
DTSTAMPYesAuto-generatedUTC timestamp of file creationยง3.8.7.2
PRODIDYesAuto-generatedProducer identifier stringยง3.7.3
VERSIONYesFixed: 2.0iCalendar versionยง3.7.4
CALSCALENoFixed: GREGORIANCalendar scaleยง3.7.1
Common Date Format Strings
ISO 8601YYYY-MM-DD HH:mm2025-01-15 09:00
US FormatMM/DD/YYYY HH:mm01/15/2025 09:00
EU FormatDD/MM/YYYY HH:mm15/01/2025 09:00
US Date OnlyMM/DD/YYYY01/15/2025 (all-day)
EU Date OnlyDD.MM.YYYY15.01.2025 (all-day)
CompactYYYYMMDD20250115 (all-day)
12-hour clockYYYY-MM-DD hh:mm A2025-01-15 09:00 AM
Slash datetimeDD/MM/YYYY HH:mm:ss15/01/2025 09:00:00
Line Folding & Escaping Rules
Line lengthMax 75 octets; fold with CRLF + SPACE
Backslash\ โ†’ \\
Semicolon; โ†’ \;
Comma, โ†’ \,
NewlineLF โ†’ \n

Frequently Asked Questions

The parser uses a finite state machine with three states. When it encounters an opening double-quote, it enters the quoted state where commas and newlines are treated as literal field content, not as delimiters or row separators. A double-quote inside a quoted field must be escaped as two consecutive double-quotes (""). The parser correctly handles this by transitioning to an escape state that checks whether the next character is another quote (literal quote) or a delimiter/newline (end of field). This is compliant with RFC 4180.
Ambiguous dates like 01/02/2025 are the most common source of calendar import errors. By default the tool uses ISO 8601 (YYYY-MM-DD) parsing. If your CSV uses a different format, you must select the correct date format from the dropdown before conversion. The parser applies the selected format string to determine which component is day, month, and year. A preview table shows the parsed dates so you can verify correctness before downloading. If a date fails to parse, the row is flagged with an error indicator.
No. The converter generates floating-time events without VTIMEZONE components or TZID parameters. Floating time means the event occurs at the specified local time regardless of timezone. When you import the ICS file into Google Calendar or Outlook, the calendar application applies your account's default timezone. If you need explicit timezone support, you would need to manually add TZID=America/New_York (or your timezone) to the DTSTART and DTEND properties in the generated file, along with a corresponding VTIMEZONE block.
The converter runs entirely in your browser using the File API. Practical limits depend on your device's available memory. Files up to approximately 10 MB (roughly 50,000 to 100,000 events) process reliably on modern devices. For files exceeding 5,000 rows, the converter uses chunked processing with a progress indicator to prevent the browser tab from becoming unresponsive. The generated ICS file is created as a Blob in memory, so extremely large files (over 100,000 rows) may cause memory pressure on devices with less than 4 GB RAM.
Yes. The output conforms to RFC 5545 (iCalendar specification) with VERSION:2.0, proper PRODID, UID per event, DTSTAMP in UTC, and correct line folding at 75 octets. Google Calendar (via Settings โ†’ Import), Microsoft Outlook (File โ†’ Open & Export โ†’ Import), and Apple Calendar (File โ†’ Import) all accept this format. Note that Google Calendar limits batch imports to 2,500 events per file. If your CSV exceeds this, split the file into batches.
If the Start Date field contains only a date component with no time (e.g., 2025-01-15 without hours and minutes), the converter formats DTSTART as a DATE value type: DTSTART;VALUE=DATE:20250115 instead of the datetime format DTSTART:20250115T090000. This tells calendar applications to render the event as an all-day banner. If End Date is also date-only, it receives the same treatment. Per RFC 5545, an all-day event's DTEND should be the day after the last day of the event (exclusive). The converter adds one day automatically.