Free ICS test files and sample generator
The calendar interchange format every scheduling system reads, Outlook, Google Calendar, Apple Calendar and every CRM that sends invitations. Generate valid .ics sample files of any size to test calendar imports, invitation parsing and feed subscriptions.
What is a .ics file?
ICS: iCalendar Event File. iCalendar is how a meeting travels between systems: the .ics attachment on an invitation, the feed a team calendar subscribes to, the export a booking system hands you. It is line-based text with strict rules, CRLF line endings, lines limited to 75 octets with longer values folded onto continuation lines, and importers are unforgiving about all of them, which is exactly why a correctly formed sample is worth having.
Why generate a test ICS file?
- Test a calendar import, an invitation parser or a feed subscription.
- Exercise recurrence handling with an RRULE, and timezone or all-day edge cases.
- Check what an importer does with a calendar containing thousands of events, or none.
What you can put inside a .ics file
You get 3 content options for ICS, so the file holds something meaningful rather than random padding: Single event, Many events, Recurring event. For ICS these are alternatives, so choose the one that matches what you need to test.
How a .ics file is identified
A .ics file has no signature at the start. A text format has no identifying leading bytes, so the extension and the reported media type are the only claims about it until a parser actually reads it, which is why validating uploads by extension alone is unsafe.
Negative testing with broken ICS files
- Invalid. Identifiable, but wrong inside, so it fails during parsing.
- Corrupted. The leading bytes are destroyed. Same length as the valid file.
- Incomplete. Truncated part-way, so it is genuinely shorter.
- Empty. Chosen under Content rather than File Condition: valid structure, no data.
Which failure to reach for, and what to assert for each, is covered in how to make a corrupted file for testing. For upload limits and type checks see testing file upload validation, and for this format's encodings, UTF-16 and BOM test files.
Sample ICS content
BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT UID:1000@example.com DTSTART:20260101T090000Z DTEND:20260101T100000Z SUMMARY:Widget A review END:VEVENT END:VCALENDAR
This shows the shape of the file. Your download is generated fresh at the size you choose, so the values will differ.
How to open and verify the file
Double-click to open it in Outlook, Apple Calendar or Google Calendar, or import it under Settings. `python -c "import icalendar,sys;icalendar.Calendar.from_ical(open(sys.argv[1]).read())" file.ics` validates it strictly.
Media type text/calendar · extension .ics · category Data
Generate a .ics file → · questions about sizes, privacy or cost are answered on the site FAQ.
Frequently asked questions about ICS files
What identifies a .ics file?
Nothing at the start of the file does. A text format has no identifying leading bytes, so the extension and the reported media type are the only claims about it until a parser actually reads it, which is why validating uploads by extension alone is unsafe.
What can go inside the ICS file?
There are 3 content options for .ics: Single event, Many events, Recurring event. For ICS these are alternatives, so pick the one matching what you need to test.
Can I download several broken ICS files at once?
Yes, select more than one File Condition and you get one ZIP containing a .ics per condition, each named after its condition.
Can the ICS file use UTF-16 or a byte-order mark?
Yes. .ics is a text format, so it can be generated as UTF-8, UTF-8 with a byte-order mark, UTF-16 LE or UTF-16 BE. The body is shortened before re-encoding so the finished file still lands on the exact size you asked for. Note that a UTF-16 file always has an even byte count.
How do I open or verify the ICS file?
Double-click to open it in Outlook, Apple Calendar or Google Calendar, or import it under Settings. python -c "import icalendar,sys;icalendar.Calendar.from_ical(open(sys.argv[1]).read())" file.ics validates it strictly.