Start here

An ICS is a calendar container, not a renamed CSV

ICS is the common filename extension for the iCalendar format defined by RFC 5545. One calendar object contains required metadata and one or more VEVENT components. Each exported event needs a stable UID, a UTC DTSTAMP, a DTSTART, and the source title as SUMMARY.

iCalendar content lines use CRLF endings, escape text punctuation and line breaks, and should be folded around 75 octets without splitting a UTF-8 character. That means a dependable conversion has to parse values and serialize calendar properties; changing the extension cannot work.

Open the private CSV to ICS converter

Step 1

Prepare one event per row

Give every row an event title and a real start date written as YYYY-MM-DD. Put times in separate HH:MM or HH:MM:SS 24-hour columns. Distinct columns for start date, start time, end date, and end time make the time rule reviewable and avoid locale-dependent parsing such as whether 09/10/26 means September 10 or October 9.

Use an explicit all-day column when the sheet mixes timed and all-day rows. Recognized values include yes/no, true/false, 1/0, all-day, and timed. A blank start time otherwise becomes an all-day event. For categories, separate multiple values with a pipe such as Work|Planning.

If the source already has durable event identifiers, map them to UID. Otherwise, the converter creates deterministic row-specific UIDs. Reusing the same explicit UID can make a calendar app treat two rows as versions of one event, so duplicates are flagged.

Step 2

Map headers without guessing from event content

A header-only mapper can recognize common names such as Subject, Start Date, Start Time, End Date, Location, Description, Status, and Event ID. It should not inspect private event text to decide meaning. Every suggestion stays editable, and choosing one source column for another property moves it instead of silently duplicating it.

Unmapped columns remain out of the file. That boundary is intentional: unknown values should not be dumped into the description where they may expose internal identifiers, personal notes, or spreadsheet-only controls.

Step 3

Choose UTC or floating local time explicitly

UTC mode writes a trailing Z. It represents an exact global instant, so 09:00 UTC may display at a different clock time in Bangkok, London, or New York. Choose it only when the source values are already UTC. The converter does not reinterpret local values or guess a zone from a browser, location, or country.

Floating local mode writes a date-time without Z or TZID. The importing calendar supplies the local context and keeps the shown wall-clock time. This is useful for a schedule intended to occur at 09:00 wherever it is imported, but it is not the same as a named time zone.

Named time zones require a defensible zone identifier and, for portable files, matching time-zone definitions. A lightweight converter should not infer those rules. Normalize zoned timestamps upstream or choose one of the two explicit modes instead.

Step 4

Make the all-day end boundary correct

RFC 5545 defines DTEND as non-inclusive. A one-day event on September 14 therefore starts with DTSTART;VALUE=DATE:20260914 and ends with DTEND;VALUE=DATE:20260915. For a three-day event shown in the spreadsheet as September 14 through 16, the serialized end is September 17.

The converter labels spreadsheet all-day end dates as inclusive, validates that they are not before the start, and adds one day only in the ICS output. Timed events instead require an end after the start. When no usable timed end exists, the visible default duration is applied; it is a disclosed setting rather than a hidden guess.

Step 5

Validate every row before downloading

Treat a missing title, impossible start date, or missing required timed start as an error and skip the row. Treat invalid optional URLs and statuses as property warnings. An invalid or backwards end falls back to the visible duration for timed events or one day for all-day events, and the issue ledger explains the exact decision.

Also flag repeated explicit UIDs and matching title-plus-start signatures. These are review signals, not automatic deletions: recurring shift labels and intentional repeated meetings are legitimate. Keep source row numbers beside findings so corrections happen in the original sheet.

Preview several event cards and inspect the generated text if needed, but keep validation complete-file. A bounded page preview must never imply that rows beyond the first few were ignored.

Step 6

Import the ICS as a reviewed snapshot

  • G

    Google Calendar

    Google's official flow imports .ics or .csv files into a selected calendar. Use Settings - Import & export, select the ICS and destination, then review the created events. Google Calendar import help.

  • M

    Microsoft Outlook

    Microsoft describes ICS import as a snapshot, unlike subscribing to an online calendar that can refresh. Choose Import calendar and upload the ICS in a supported Outlook account, then inspect time and all-day boundaries. Outlook calendar import help.

  • A

    Apple Calendar

    Apple Calendar on Mac can import events by dragging an ICS into Calendar or choosing File - Import, then selecting the destination calendar. Apple Calendar import help.

Use a new or test calendar for the first import. An ICS import copies events; it is not a live sync. Verify a small representative sample before importing a large operational schedule.

Calendar privacy

Keep the schedule out of an upload queue

Calendars can expose travel, customer names, meeting links, locations, and internal plans. Prefer a converter that parses and generates inside the browser, does not persist rows, and does not send headers, mappings, findings, previews, or output to analytics.

The csvtodashboard workflow follows that boundary. Its first-party audience counter receives only the page pathname and a coarse source category; it never receives calendar data or interaction payloads derived from the file.

Common questions
  • *

    How do I convert CSV events to an ICS file?

    Load or paste the CSV or Excel file, review the title and timing mappings, choose UTC or floating-local timed events, inspect every validation finding, then download one ICS containing every exportable event.

  • *

    What is an ICS file?

    ICS is the usual filename extension for iCalendar data. One iCalendar file can contain multiple VEVENT components and can be imported by calendar applications such as Google Calendar, Outlook, and Apple Calendar.

  • *

    Should I choose UTC or floating local time?

    Choose UTC when the spreadsheet times are exact UTC instants. Choose floating local when the shown clock time should remain the same in the destination calendar's local zone. The converter does not guess named time zones.

  • *

    How are all-day events handled?

    A blank start time becomes an all-day event unless an explicit false all-day flag makes the row timed. Spreadsheet end dates are treated as inclusive, then converted to iCalendar's exclusive DTEND date.

  • *

    What happens when an end time is missing?

    A timed row with no usable end receives the visible default duration, initially 60 minutes. Change that control before download if a different duration matches the source.

  • *

    What happens to invalid rows?

    Rows without a title, real YYYY-MM-DD start date, or required timed start are listed as errors and skipped. Invalid optional ends, URLs, statuses, and flags create visible warnings with documented fallback behavior.

  • *

    Does the converter upload or save my calendar data?

    No. Parsing, header matching, mapping, validation, preview, and ICS generation run in the browser tab. Event values are not stored and are never included in first-party audience measurement.

  • *

    Does it support commas, semicolons, line breaks, and non-English text?

    Yes. Text values are escaped, output uses CRLF line endings, and long content lines are folded at UTF-8-safe 75-octet boundaries without splitting multibyte characters.

Keep going