---
title: "ICS Busy/Free"
description: "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."
url: https://findutils.com/convert/ics-busy-free/
category: convert
---

# ICS Busy/Free

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 this tool:** [ICS Busy/Free](https://findutils.com/convert/ics-busy-free/)

## Programmatic access

- REST id `ics-busy-free`: POST https://api.findutils.com/api/tools/ics-busy-free/execute (reference: https://findutils.com/api/ics-busy-free/)
- MCP tool `ics_busy_free` on https://mcp.findutils.com (reference: https://findutils.com/mcp/ics-busy-free/)
- Data: The REST API and the MCP tool are a separate path from this page: 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.

## 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.

## 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](https://findutils.com/convert/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.

## Related Tools

- [ICS Privacy Scrub](https://findutils.com/convert/ics-privacy-scrub/)
- [ICS Timezone Convert](https://findutils.com/convert/ics-timezone-convert/)
- [Merge ICS](https://findutils.com/convert/merge-ics/)
- [ICS to CSV](https://findutils.com/convert/ics-to-csv/)
- [Split ICS](https://findutils.com/convert/split-ics/)
- [Timezone Converter](https://findutils.com/productivity/timezone-converter/)
