Skip to content

Convert

ICS Busy/Free

ICS Busy/Free

Beta

Turn an .ics calendar export into an availability calendar you can share: every busy event becomes a plain Busy block with the same start, end and repeat rule, or one VFREEBUSY list of busy periods. Titles, descriptions, places, links and guests stay behind. On this page, nothing is uploaded.

Use via API
  • Free, no sign-up
  • REST + MCP
  • Updated
  • Reviewed by Olgun Ozoktas

Each busy block keeps its start, end and repeat rule. Titles, descriptions, locations, links, attendees and alarms are removed, and every block gets a new UID.

Drop .ics files hereor click to choose calendar exports
Availability calendar

The availability calendar will appear here.

How to Make an Availability Calendar from an ICS Export

  1. Export the calendar

    Google Calendar: Settings > Import & export > Export. Apple Calendar: File > Export > Export. Outlook: File > Save Calendar.
  2. Pick the output

    Busy events keeps every event as a Busy block with its repeat rule; VFREEBUSY writes one list of busy periods in UTC.
  3. Drop the .ics file

    The line under the file list says how many events became busy blocks and how many were skipped as cancelled, free or tentative.
  4. Download the availability .ics and share it, or import it into the calendar you share with others

Common Use Cases

Send a recruiter, client or new colleague a file that shows when you are busy for the next few weeks

Fill a shared team calendar with Busy blocks from your private one

Give an assistant or a partner your availability without your meeting titles and guest lists

Publish a VFREEBUSY file for a scheduling tool that reads free/busy data

Keep a recurring weekly block, such as a standup, busy every week without listing each date

Why Share an Availability File Instead of Your Calendar?

When someone needs to know when you are free, they need your busy times, not your client list. A full calendar export hands over every meeting title, the Zoom links in the descriptions, the office addresses and the email address of everyone you met. The manual alternatives are slow: create a second calendar and re-enter every block as Busy, or delete the details from the export by hand. This page builds the availability file from the export you already have: each busy event becomes a block with its times and nothing else, and cancelled or free events are left out, so the file says when you are busy and nothing more.

The Busy events output writes one VEVENT for each busy event in the export. Each keeps only its schedule: DTSTART, DTEND or DURATION, RRULE, RDATE, EXDATE, RECURRENCE-ID and DTSTAMP. The title becomes Busy, TRANSP is set to OPAQUE and CLASS to PRIVATE, and every event gets a new random UID; a recurring series and its moved occurrences share one new UID so they stay linked. Descriptions, locations, links, attendees, the organizer, attachments, categories, alarms and vendor X- properties are left behind. The time zone definitions the events use are copied, so the times import exactly as they were.

The VFREEBUSY output writes one VFREEBUSY component, the iCalendar format for free/busy information. Each busy event becomes a FREEBUSY period in UTC, as the format requires, using the time zone each event states; floating and all-day times are read in the calendar's time zone (X-WR-TIMEZONE), or as UTC when the file names none. Overlapping periods of the same kind are joined. VFREEBUSY has no repeat rules, and this page does not expand them, so a recurring event contributes its first occurrence only; the page says how many events that applies to.

Cancelled events are skipped while Drop cancelled is on; events marked free are always skipped; tentative events are included unless you turn them off. A modified occurrence that is skipped is written as an exception date on its series. To-dos and journal entries are not events and are skipped. The page reads the files you drop and never fetches a calendar URL.

How it compares

Calendar apps can share free/busy views, but only inside their own accounts, and a shared link exposes the live calendar rather than a file you control. Rebuilding a Busy calendar by hand takes as long as the calendar is busy. Stripping the details from an export in a text editor means finding every DESCRIPTION, ATTENDEE and URL line in folded text. This page reads the export once and writes an availability file that keeps the times and nothing else.

Busy/Free Tips

  • An event marked free (TRANSP:TRANSPARENT), such as a holiday or a reminder, is skipped, because it does not make you busy.
  • A cancelled occurrence of a recurring event becomes an exception date (EXDATE) on its series, so that week is not shown as busy either.
  • Turn off Include tentative to share only confirmed busy time; when it is on, a tentative event keeps STATUS:TENTATIVE, or FBTYPE=BUSY-TENTATIVE in VFREEBUSY.
  • VFREEBUSY joins overlapping periods of the same kind, so two back-to-back meetings become one busy stretch.
  • The source calendar's name is not copied, because a Google export names the calendar after the owner's email address; type a name if you want one.

Frequently Asked Questions

What is the difference between Busy events and VFREEBUSY?

Busy events writes a normal calendar in which every busy event is a VEVENT titled Busy, with its start, end and repeat rule; any calendar app imports it. VFREEBUSY writes a single VFREEBUSY component that lists busy periods in UTC with no titles and no events; it is the format scheduling tools read for free/busy data. Busy events keeps recurring events repeating; VFREEBUSY lists them by their first occurrence.

What is removed from each event?

Everything that says what the event is: the title, description, location, links, attendees, organizer, attachments, categories, comments, alarms and vendor X- properties. What stays is when it happens: the start, the end or duration, the repeat rule, exception and extra dates, and, for a moved occurrence, which occurrence it replaces. Each block is titled Busy, marked opaque and private, and gets a new UID.

Which events are skipped?

Events marked free (TRANSP:TRANSPARENT) are always skipped, because they do not make you busy. Cancelled events (STATUS:CANCELLED) are skipped while Drop cancelled is on, and tentative events are skipped only when Include tentative is off. To-dos and journal entries are not events and are skipped too. The line under the file list gives the count for each reason.

Are recurring events expanded into every occurrence?

No. In Busy events mode a recurring event keeps its RRULE, so the calendar that imports it shows every occurrence as busy without the file listing each date. In VFREEBUSY mode there is no repeat rule to keep, and this page does not expand rules, because a rule without an end has no last occurrence; a recurring event is listed by its first occurrence only, and the page says so.

What happens to a cancelled occurrence of a recurring meeting?

It is skipped and written as an exception date (EXDATE) on its series, so the week it was cancelled is not shown as busy. The same happens to an occurrence that is skipped for another reason, such as being marked free. A moved occurrence that is still busy keeps its own block with its new time and stays linked to the series.

Why are the periods in VFREEBUSY written in UTC?

Because the iCalendar standard, RFC 5545, requires FREEBUSY periods to be in UTC. The page converts each event's start and end from the time zone it states, using your browser's time-zone rules. All-day and floating times have no zone of their own, so they are read in the calendar's X-WR-TIMEZONE, or as UTC when the file names none, and a note says which.

Does the availability file keep my calendar's name?

No. The source calendar's name is not copied, because a Google Calendar export names the main calendar after the owner's email address. Type a name in Calendar name, such as Work availability, and it is written as X-WR-CALNAME. The calendar's time zone hint, X-WR-TIMEZONE, is kept in Busy events mode because floating times depend on it.

How is this different from ICS Privacy Scrub?

This page makes one kind of file, an availability calendar, with no per-field choices. ICS Privacy Scrub keeps each event's shape and lets you keep, generalize or remove each field, so you can keep categories, generalized attendees or a shifted copy of the dates. Use Busy/Free when all you want to share is when you are busy.

Is my calendar uploaded when I use this page?

Not on this page. The files are read and converted in your browser, and you can confirm in the browser's network panel that no request carries the calendar text. The page never fetches a calendar URL either. The REST API and MCP tool are a separate path: a call sends the input you include to FindUtils over HTTPS, where it is processed and the result returned. FindUtils does not store that input, and logs the request without its content.

Can I make an availability file from a script?

Yes. The same code runs on the FindUtils REST API and MCP server as the ics_busy_free tool. Send the .ics text as input with mode set to busy_events or vfreebusy, and the include_tentative, drop_cancelled, calendar_name and label options, then read the calendar from the ics field with the busy and skipped counts.

Rate This Tool

0/1000

Get Weekly Tools

Suggest a Tool