ICS to JSON
BetaDrop a Google Calendar, Apple Calendar or Outlook .ics export and download structured JSON: one object per event with uid, summary, start, end, time zone, attendees, categories and the recurrence rule as text. Times stay exactly as the file states them, and nothing is uploaded.
- Free, no sign-up
- REST + MCP
- Updated
- Reviewed by Olgun Ozoktas
One object per event will appear here..
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
, 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. Nothing is uploaded and no calendar URL is fetched.
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.