ICS Parser
Parse an iCalendar (.ics) file into a structured JSON list of events — one object per event with title, start/end times, all-day flag, location, description, status, categories, organizer, attendees and a parsed recurrence rule (RRULE). Paste the file contents; everything runs in your browser and nothing is uploaded.
About this tool
ICS Parser turns an iCalendar (.ics) file into a clean, structured JSON
array — one object per event — so you can inspect a calendar, feed it to an API,
or load it into a script without hand-writing an RFC 5545 parser. Paste the file
contents and every BEGIN:VEVENT…END:VEVENT block becomes an event object, in
document order.
Each event carries its uid, summary, start and end times, an all_day
flag (set when the date has no time component or is tagged VALUE=DATE),
location, description, status, and categories as a list. People are
parsed too: organizer and each attendee become a name + email pair, read
from the CN parameter and the mailto: value. Empty or absent fields are left
out so the JSON stays tidy — no columns of blanks, no nulls.
Repeating events are decoded into a structured recurrence object rather than
left as a raw RRULE string: freq, interval, count, until, and day
patterns like byday each become their own field, with numbers where the value
is numeric and arrays where it is a comma list.
Choose how dates are written with Date format: ISO-8601 normalizes
20240309T081530Z to 2024-03-09T08:15:30Z, raw keeps the original .ics
text, and Unix converts to epoch seconds. Toggle Pretty-print for indented
versus compact JSON, and turn off Include description to drop long
description fields. Everything runs locally in your browser — your calendar is
never uploaded.
FAQ
What fields does each event include?
Every event object can carry uid, summary, start, end, all_day,
location, description, status, categories, organizer, attendees, and
recurrence. A field is only emitted when the source event actually has it, so
an event with no location or attendees simply omits those keys instead of showing
blanks or null.
How is a recurring event (RRULE) represented?
The RRULE is parsed into a structured recurrence object. For example
FREQ=WEEKLY;INTERVAL=2;COUNT=10;BYDAY=MO,WE,FR becomes
{"freq":"WEEKLY","interval":2,"count":10,"byday":["MO","WE","FR"]} — numeric
parts become numbers, comma lists become arrays, and an UNTIL value is
formatted with the same Date format setting as the event's start and end.
Are timezones converted?
Times marked with a trailing Z (UTC) are handled exactly. Floating times and
times with a TZID parameter are read as wall-clock UTC — no timezone
database is shipped in the browser sandbox, so the tool does not shift a
TZID-tagged time into a target zone. If you need true timezone conversion, pick
raw to keep the original value and convert it downstream.
Which calendar components are parsed?
Only VEVENT components are parsed. task, journal, and free-busy components are
ignored, and nested sub-components inside an event — such as VALARM reminders
and VTIMEZONE definitions — are skipped so their properties never leak into the
event object.
Is my calendar uploaded anywhere?
No. The parser is compiled to WebAssembly and runs entirely inside your browser
tab. The .ics text you paste never leaves your device — there is no server call
and nothing is stored, so it is safe to use with private or work calendars.
Developer & Automation Access
Run it from the terminal
Same engine as this page, headless — via the gizza CLI:
gizza tool ics-parse "BEGIN:VCALENDAR
BEGIN:VEVENT
SUMMARY:Team Standup
DTSTART:20240309T081530Z
DTEND:20240309T083000Z
LOCATION:Room 4
END:VEVENT
END:VCALENDAR"New to the CLI? Get gizza →
Open it by URL
Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:
https://gizza.ai/tools/ics-parse/?ics=BEGIN%3AVCALENDAR%0ABEGIN%3AVEVENT%0ASUMMARY%3ATeam%20Standup%0ADTSTART%3A20240309T081530Z%0ADTEND%3A20240309T083000Z%0ALOCATION%3ARoom%204%0AEND%3AVEVENT%0AEND%3AVCALENDAR&date_format=iso&pretty=true&include_description=trueMachine-readable descriptor: tool.json — title + parameters JSON Schema for agents.
