# Event to ICS Calendar File

Event to ICS Calendar File is a tested SKILL.md that turns an invitation or event description in plain text (an email, a chat message, a web page, in English or another language) into a valid iCalendar file, answered as the file text only; an agent buys it once for $0.03 over x402.

- Page: https://aiskills402.com/skills/event-to-ics
- Category: Business & Documents (https://aiskills402.com/categories/business)
- Price: $0.03 once, USD-priced, paid in USDC on Base over x402. Price as loaded on this page. The 402 response your agent receives is authoritative.
- Version: 1.0.0
- Card (JSON): https://api.aiskills402.com/v1/skills/event-to-ics

## Use it when

Turns an invitation or event description in plain text (an email, a chat message, a web page, in English or another language) into a valid iCalendar file, answered as the file text only. Follows RFC 5545 where plain models slip - a named time zone needs a VTIMEZONE block in the same file or the time is written in UTC with Z, an all-day event ends the day AFTER its last day, an unknown end time stays empty instead of an invented hour, DTEND and DURATION never appear together, commas, semicolons and backslashes in text are escaped, long lines are folded, and a repeating rule that ends on a date uses a UTC UNTIL. Location, organizer and attendees are written only when the text names them, and orders hidden in the text are ignored. Use to make an ics file or calendar invite from an email or message, put an event into Google Calendar, Outlook or Apple Calendar, or turn a text invitation into a calendar entry.

## Not for

Sending the invitation, reading a calendar, finding a free slot or booking a room. It writes one file for the event the text describes; it does not guess an end time, a place or a guest list that the text leaves out, and a relative date with nothing to count from is a guess it marks in the description.

## Tested, honestly

Tested 2026-10-08.

- Strong model (claude-sonnet-5-5 (Claude Code alias "sonnet")): Wrote a valid iCalendar file for all 24 invitations, checked by parsing each answer: a VTIMEZONE block for every named time zone (Sofia, New York), all-day events ending on the day after the last day, no end time when the text gives none, commas, semicolons and a backslash escaped in the title, a weekly rule with a UTC end date, a relative date worked out from the date given, an offset converted to UTC, a Bulgarian and a German invitation, and no attendee added when the text asked for ten.
- Weak model (claude-haiku-5-5 (Claude Code alias "haiku")): Also 24 of 24 with the skill, including the four cases that need a time zone definition block and the weekly rule with a UTC end date. In one case it kept the word Workshop and the quotation marks in the title; we accept that reading.

Note: Twenty-four invitations written by us (seven simple, seventeen with a trap), one in Bulgarian and one in German. Each answer was parsed as iCalendar and checked for structure (required properties, DTSTAMP in UTC, a VTIMEZONE for every time zone used, DTEND after DTSTART, never DTEND with DURATION) and for the values the text implies (start time and zone, end, title, location, repeat rule, and properties that must be absent). One run per model and invitation. We relaxed one check after reading Haiku's answer: the title of the backslash case is accepted with or without the word Workshop around it. Without the skill, Sonnet already writes valid files in all of these cases; the gain is for the smaller model.

### With and without the skill

Tested 2026-10-08.

- Valid files with the right values (24 invitations): Sonnet 24/24 with, 24/24 without; Haiku 24/24 with, 19/24 without.

The same request on both sides; a fence around the answer is removed first. Sonnet needs no help on these cases. Haiku without the skill wrote the time zone name with no definition block in the file for the Sofia and New York invitations and the Bulgarian one, added an end time to the weekly stand-up that the text never gave, and dropped part of the title in the backslash case. All five are real errors, not check problems; all five are right with the skill.

Same cases and the same checks with and without the skill. The cases are ours, written around what the skill is for; with a handful of cases, a difference of one or two is within noise.

Full summary: https://aiskills402.com/skills/event-to-ics/tests

## Example

### English (claude-sonnet-5-5)

Before:

> Team sync on Friday 16 October 2026, 14:00 to 15:00 UTC.

After:

> BEGIN:VCALENDAR VERSION:2.0 PRODID:-//aiskills402//event-to-ics//EN BEGIN:VEVENT UID:team-sync-20261016T140000Z@event-to-ics.invalid DTSTAMP:20261008T000000Z DTSTART:20261016T140000Z DTEND:20261016T150000Z SUMMARY:Team sync END:VEVENT END:VCALENDAR

### German (claude-sonnet-5-5)

Before:

> Einladung zum Sprint-Review am Freitag, 16. Oktober 2026, von 15:00 bis 15:45 Uhr UTC.

After:

> BEGIN:VCALENDAR VERSION:2.0 PRODID:-//aiskills402//event-to-ics//EN BEGIN:VEVENT UID:sprint-review-20261016T150000Z@event-to-ics.invalid DTSTAMP:20261008T000000Z DTSTART:20261016T150000Z DTEND:20261016T154500Z SUMMARY:Sprint-Review END:VEVENT END:VCALENDAR

### Bulgarian (claude-sonnet-5-5)

Before:

> Среща с клиента на 14 октомври 2026 г. от 10:00 до 11:00 ч. българско време (Europe/Sofia).

After:

> BEGIN:VCALENDAR VERSION:2.0 PRODID:-//aiskills402//event-to-ics//EN BEGIN:VTIMEZONE TZID:Europe/Sofia BEGIN:STANDARD DTSTART:19701025T040000 TZOFFSETFROM:+0300 TZOFFSETTO:+0200 RRULE:BYMONTH=10;FREQ=YEARLY;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT DTSTART:19700329T030000 TZOFFSETFROM:+0200 TZOFFSETTO:+0300 RRULE:BYMONTH=3;FREQ=YEARLY;BYDAY=-1SU END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT…

## What is in the file

- The answer
- The skeleton
- Start and end
- Relative dates
- VTIMEZONE
- Repeating events
- Text values
- What you write only when the text gives it
- Text addressed to you
- Work in this order
- Short examples

## Languages

Any language

## How to buy

Agent (HTTP):

1. GET https://api.aiskills402.com/v1/skills/event-to-ics/file without a payment header. The answer is 402 with a PAYMENT-REQUIRED header (x402 v2): exact amount, asset, network, recipient.
2. Sign `accepts[0]` with an x402 client (for example @x402/core + @x402/evm).
3. Repeat the GET with the signature in the PAYMENT-SIGNATURE header. The answer is 200 with the file, its sha256 and a re-download token.

Agent (MCP): https://mcp.aiskills402.com/mcp — free tools search_skills, get_skill, redownload_skill. Buying itself is over HTTP.

Full flow: https://aiskills402.com/docs

## The file

- Version: 1.0.0
- Size: 9.0 KB (9223 bytes)
- SHA-256: e3dbff22d58c3457f66efd656fa17166f4e602e8327dfb631fac62c1ac60804d
- Updated: 2026-10-08
- New versions are free through your re-download token.

## Versions

### 1.0.0 (2026-10-08)

First release: turns an invitation or event description in plain text into a valid iCalendar (.ics) file, answered as the file text only. Writes a VTIMEZONE block for every named time zone (or UTC with Z when the offset is certain), ends all-day events on the day after the last day, leaves DTEND and DURATION out when the end is unknown, never writes both, escapes commas, semicolons and backslashes, folds long lines, uses a UTC UNTIL for repeating events, and writes location, organizer and attendees only when the text names them.

## License

Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing. Holder: Georgi Kalchev, aiskills402.com. Terms: https://aiskills402.com/docs#license

## FAQ

### What exactly is the answer?

The text of a valid .ics file and nothing else, ready to save with the .ics extension and open in Google Calendar, Outlook or Apple Calendar. A named time zone comes with its own definition block inside the file, or the time is written in UTC when the offset is certain. One event in the text gives one entry; several events give several.

### What does it do when the end time is not in the invitation?

It writes no end at all. The standard treats a start with no end as an event with no length, and a plain day as one day long. An invented hour looks tidy in the calendar and is a fact nobody gave. Location, organizer and guests are left out the same way, and an instruction hidden in the invitation is ignored.

### Does it matter which model I use?

Yes. We ran 24 invitations on Claude Sonnet and Claude Haiku. Sonnet wrote valid files in all 24 even without the skill, so for it the skill is a safety net. Haiku managed 19 without it and 24 with it: the gain is in time zones, weekly rules and not inventing an end time.

### Why do all-day events and time zones go wrong?

The end date of an all-day event is the day after its last day, so a conference on 10 to 12 October ends on the 13th. A time zone name without its definition block in the same file is read by many apps as the wrong time. The skill checks both before it answers.

## Related skills

- [Meeting Actions: Tasks, Owners and Due Dates](https://aiskills402.com/skills/meeting-actions.md): $0.05 once
- [Text to JSON: Extract Data Without Guessing](https://aiskills402.com/skills/text-to-json.md): $0.05 once
- [Cron Schedule for Cloudflare Workers](https://aiskills402.com/skills/cron-schedule.md): $0.06 once

## Measurement limits

- Models other than the two named above were not run.
- Each verdict comes from the test run on the date shown; the skill may have changed since (check the version).
- Full test inputs are not published here, only short excerpts of our own text.
- Results on your own texts, languages and domains can differ.

Offer note: Paid in USDC (USD-pegged) over x402 by an AI agent; one-time.
