Calendar bridge
CSV → calendar
Paste or upload a spreadsheet of events. Each event keeps its local time in whatever timezone you specify — the .ics file has correct UTC timestamps so the event opens at the intended wall-clock time for every attendee.
Column mapping
- Standup2026-05-04 13:00 UTCAmerica/New_York
- Product sync2026-05-04 13:00 UTCEurope/London
- APAC all-hands2026-05-05 01:00 UTCAsia/Tokyo
- Demo day2026-05-08 13:30 UTCEurope/Berlin
- Quarterly review2026-05-12 05:30 UTCAsia/Kolkata
How to convert a CSV of events to a calendar (.ics) file
A five-step walkthrough for turning a spreadsheet of events with timezone columns into a timezone-correct .ics file you can import into Google Calendar, Outlook, or Apple Calendar.
Paste your CSV or upload a file
Paste your spreadsheet rows into the text area, or click Upload file to load a .csv, .tsv, or .txt file from your device. The page also has a Load sample button to populate the area with five example events.
Confirm the column mapping
The tool auto-detects which columns hold the title, date, time, IANA timezone, duration, location, and description. Review the dropdowns under Column mapping and override anything that was guessed wrong; title, date, and timezone are required.
Review the parsed events list
Each row appears under Results with a green check (valid event) or a red error message. The valid count and error count are shown above the list so you can see at a glance whether anything needs fixing.
Fix any rows that errored out
Common errors are missing required fields, an unrecognised IANA timezone, or a date that does not parse as YYYY-MM-DD. Edit your CSV in the text area and the results re-parse instantly — no upload step required.
Click Download .ics and import into your calendar
When the valid count looks right, click Download .ics to save the calendar file. Open it in Google Calendar, Outlook, or Apple Calendar to import the events; each event opens at the intended local wall-clock time for every attendee, with DST handled automatically.
Questions
FAQ
- Why does each event need a timezone column?
- Because "3pm on March 15" is meaningless without a timezone. If you bulk-import events as naive local times, your calendar app guesses — usually by assuming your local zone, which silently mangles the schedule for events that are supposed to happen elsewhere. Forcing a timezone column makes the intent explicit and the .ics output unambiguous.
- What date and time formats are accepted?
- Date must be ISO YYYY-MM-DD (e.g. 2026-05-04). Time must be HH:MM in 24-hour clock (e.g. 14:30); if the time cell is empty the event starts at 09:00. Duration accepts plain minutes ("60"), suffixed minutes ("60m"), or hours ("1h", "1.5h"). A malformed date, time or time zone is flagged as an error on that row so you can fix it before downloading.
- What timezone strings work?
- Any IANA zone identifier — "America/New_York," "Europe/London," "Asia/Kolkata," etc. Friendly aliases like "EST" or "PST" are not accepted because they're ambiguous (EST also describes Australian Eastern Standard Time). If your spreadsheet has cities, map them to zones first via the Time Zone Converter or the city pages.
- Will this work with Google Calendar imports?
- Yes. The output is a standard RFC 5545 .ics file with UTC timestamps and one VEVENT per row, which Google Calendar, Outlook and Apple Calendar can import. Each event gets a UID built from its start time and row number, so re-importing the same file updates those events; if you change an event's start time or reorder the rows, the calendar treats it as a new event.
Related tools
- Meeting plannerLine up working hours for several cities on one timeline and pick an hour that suits everyone.
- Time zone converterConvert a date and time from one city or time zone to another. Daylight saving and date changes are handled for the exact date you pick.
- Cron expression translatorTranslate a cron expression into plain English and list its next run times in a time zone you choose.
- Discord timestamp generatorBuild <t:…> codes that Discord shows in each reader's own local time.
