Convert CSV to iCal

"iCal" usually means one of two things: the old name of Apple's Calendar app, or the .ics file format it reads. Either way, Apple Calendar cannot import a CSV — only .ics — and Koyomi converts your CSV to a proper .ics file in your browser.

Say the league sent the season schedule as a CSV: game date, kick-off time, opponent, field. Drop it here and each row becomes an event with the opponent as the title and the field as the location. Kick-off times are read in whatever form the league used — 6:30 PM, 18:30, 6pm — and whether dates are day-first or month-first is inferred from the data.

Check the preview, download the .ics, then open it on your Mac or send it to your phone; import steps for both are below. If you're building the schedule yourself, start from our template so the headers are recognized without any mapping.

How to convert a CSV to iCal for Apple Calendar

  1. Check the schedule's columns. A league CSV typically has Date, Kick-off (or Time), Opponent and Field (or Venue). Opponent, Kickoff and Field are all recognized headers, so the opponent becomes the title and the field the location without mapping. A Home/Away column can go to Description.
  2. Fix dates only if they're inconsistent. Apple Calendar never sees the CSV's date text; Koyomi resolves it first, in either day-first or month-first order. What it can't resolve is 09/14/2026 and 14/09/2026 in the same file. Pick one style before converting.
  3. Add an End Time column if match length matters. Without one, every game gets the default duration. Set it to 90 or 120 minutes so games block out the right stretch, or fill in the End Time column when the league gives it.
  4. Choose the zone the games are played in. Apple Calendar converts the file's UTC instants to whatever zone the device is in, so select the league's home zone here so the conversion starts from the right wall-clock time.
  5. Name the calendar before downloading. The name field becomes the .ics file name and is written inside the file. When you import on the Mac, Calendar still asks which of your calendars to add the games to, so create a season calendar first if you want one.

iCal, iCalendar and .ics: which is which

iCalendar is the standard (RFC 5545), .ics is its file extension, and iCal was the name of Apple's calendar application on Mac OS X from 2002 until it was renamed Calendar in 2012. When a league website offers an "iCal feed", it means a subscribable .ics URL. When a spreadsheet is involved, you're producing the file version.

The difference matters over a season. A subscribed feed updates on the device automatically when the source changes; an imported file doesn't. If the league publishes a feed URL, subscribing is the better option. If all they send is a CSV, converting and importing is the route, and re-importing after a fixture change is a manual step.

Apple Calendar treats an imported .ics as ordinary events in the calendar you chose, editable like anything else, so a rescheduled game can be dragged to its new date without touching the spreadsheet.

How Apple Calendar treats the times in the file

Koyomi writes each kick-off as a UTC instant, computed from the zone you picked. Apple Calendar displays it in the device's current zone, so a 3:00 PM home game shows as 3:00 PM at home and as 12:00 PM to a parent traveling on the West Coast. That is usually what you want.

The alternative is the "No timezone" option, which writes the wall-clock time with no zone. Apple Calendar treats those as floating: 3:00 PM stays 3:00 PM wherever the device is. Use it for a schedule you'll only ever look at locally; the zone control then plays no part in the conversion.

Time Zone Support in Calendar's settings lets you view the calendar in a zone other than the system's. It changes how times are shown, not what the file says.

After you download the .ics

Apple Calendar

  1. Mac: double-click the .ics, or File → Import in Calendar, then pick the calendar to add to.
  2. iPhone / iPad: open the .ics from Files or Mail and tap Add All.
  3. Events added to an iCloud calendar sync to every device.

Frequently asked questions

Is iCal the same as ICS?
In practice, yes. iCalendar is the standard, .ics is its file extension, and iCal was Apple's name for its calendar app until 2012. A file that a guide calls an "iCal file" is an .ics file.
Can I import the file on my iPhone?
Yes. Save the .ics to Files or email it to yourself, open it, and tap Add All to put every event into a calendar of your choice. No Mac required.
Will the games show at the right time when we travel for away matches?
Yes. Times are written as exact instants in the timezone you pick, so Apple Calendar shows them correctly wherever you are. If you'd rather they stay at the same wall-clock time regardless, switch to floating mode.
Can I put the season on a shared family calendar?
Import the .ics into an iCloud calendar you already share, or create one for the season and share it afterwards. Everyone subscribed to that calendar gets the games.
Can I import a CSV into Apple Calendar without converting it?
No. Calendar's File → Import dialog doesn't accept CSV, and dragging a CSV onto the app does nothing useful. The file has to be iCalendar (.ics), which is what Koyomi writes.
The season has a bye week. Do I need a row for it?
Only if you want it on the calendar. A row with a title and no date is skipped with a warning; give it the date and it becomes an all-day event titled "Bye", which is a useful marker on a family calendar.
Can the title show both teams?
The title comes from one column. Add a column in the spreadsheet that joins them ("Tigers vs Lions") and map it to the title, or keep the opponent as the title and put the home/away flag in Description.
Is my spreadsheet uploaded anywhere?
No. Parsing and the .ics file are produced entirely in your browser — the file never leaves your device. That's also why there is no size limit, no queue and no account.
Is this really free?
Yes. Every input format, every option, no sign-up, and nothing added to the calendar file.
Does it support recurring events?
Not yet. Each row becomes one single event. For a weekly class or shift, put one row per occurrence — filling a date column down in a spreadsheet takes seconds.