ICS to JSON
BetaConvert a Google, Apple or Outlook .ics export to JSON: one object per event with uid, summary, start, end, time zone, attendees and recurrence rule.
- Free, no sign-up
- REST + MCP
- Updated
- Reviewed by Olgun Ozoktas
One object per event will appear here..
How to Convert ICS to JSON Online
-
Export the calendar
In Google Calendar, Settings > Import & export > Export gives a zip of .ics files. Apple Calendar exports from File > Export. Outlook saves an .ics from File > Save Calendar. -
Upload the .ics file or paste its text into the input panel
The conversion runs as soon as the text arrives. -
Check the preview
Each object carries the event's uid, summary, start, end, time zone, people, categories and recurrence rule as text. Turn on to-dos and journal entries if the file has them. -
Download the JSON or copy it
The file name follows the uploaded file's name.
Common Use Cases
Fixtures
Scripts
Dashboards
Migration
Auditing
Why Convert ICS to JSON in the Browser?
Each VEVENT in the file becomes one object with a fixed set of keys: type, uid, summary, description, location, start, end, all_day, timezone, status, url, organizer, attendees, categories, rrule, exdate, recurrence_id, created, last_modified, sequence and alarms. The organizer and each attendee are written as Name <address>, categories and exception dates as arrays, sequence as a number, alarms as the count of VALARM blocks nested in the event. Folded lines are joined and escaped text is decoded before any of it is read.
Every date-time is written in wall-clock ISO-8601 form exactly as the file states it: YYYY-MM-DD for an all-day value, YYYY-MM-DDTHH:MM:SS for a timed one, with a trailing Z when the file said Z. The timezone field names the TZID the start was stated in, UTC for a Z stamp, or nothing for floating time. No time is converted between zones, because that would need the zone rules of the reader's calendar. The end is the exclusive iCalendar end, computed from DURATION when DTEND is absent, and set from the start when the event has neither.
The result also carries a calendar block with the name, PRODID, METHOD, the X-WR-TIMEZONE hint and the list of VTIMEZONE ids, plus counts: how many objects were returned, how many carry a recurrence rule, how many components were skipped and how many lines could not be read. To-dos and journal entries are skipped and counted unless you include them, in which case each carries its own type. On this page, the file is read in your browser, it is not uploaded, and no calendar URL is fetched. The REST API and the MCP tool are a separate path: a call sends the calendar text you include to FindUtils, which converts it without storing it.
How it compares
The same calendar family on this site has two shapes. ICS to CSV writes one row per event for a spreadsheet, with an inclusive end date and the fields a sheet wants. ICS to JSON writes one object per event for code, with the exclusive end the format defines, attendees and exception dates as arrays, and every key present on every object. Pick the CSV for people and the JSON for scripts; both read the same fields and neither converts a time zone.
Conversion Tips
- Times are written as the file states them, in ISO-8601 wall-clock form, and the timezone field names the zone: the TZID, UTC for a trailing Z, or empty for floating time. Nothing is converted to your local zone.
- The end is the iCalendar end, which is exclusive: a two-day all-day event on the 5th and 6th ends on the 7th. When the file gives a DURATION instead of DTEND, the end is computed from it.
- A recurring event is one object. Its rule stays as RRULE text and its exception dates are listed under exdate; nothing is expanded into occurrences.
- A modified occurrence of a recurring event is its own object with the series UID and a recurrence_id naming the occurrence it replaces.
- Missing values are empty strings and empty arrays, never absent keys, so a script can read every field without checking for it first.