Skip to content

Convert

ICS Privacy Scrub

ICS Privacy Scrub

Beta

Take the private details out of an .ics calendar export before you share it. Choose, field by field, whether to keep, generalize or remove titles, descriptions, locations, links, attendees, organizers, attachments, comments and categories; event times and recurrence rules stay as they are. On this page, nothing is uploaded.

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

What happens to each field

Generalize swaps the value for a neutral one: a title becomes Busy.

Title

SUMMARY

Description

DESCRIPTION · X-ALT-DESC

Location

LOCATION · GEO

Links

URL · conference links

Attendees

ATTENDEE

Organizer

ORGANIZER

Attachments

ATTACH

Comments

COMMENT

Categories

CATEGORIES

Other details

X- properties · CONTACT

New UIDs stop the scrubbed copy from replacing the original events when it is imported. Mark private adds CLASS:PRIVATE to every event.

Drop .ics files hereor click to choose calendar exports; every file gets the same rules
Scrubbed calendar

The scrubbed calendar will appear here.

How to Redact an ICS Calendar Export

  1. Export the calendar

    Google Calendar: Settings > Import & export > Export. Apple Calendar: File > Export > Export. Outlook: File > Save Calendar.
  2. Choose what happens to each field

    The defaults turn titles into Busy, keep categories, and remove descriptions, locations, links, attendees, the organizer, attachments, comments and vendor extras.
  3. Drop the .ics file on the page

    The chips under the file list show which fields the file carries, and the preview shows each title before and after.
  4. Download the scrubbed .ics, or a ZIP with a summary when you dropped several files, and share it or import it into the calendar you want to share

Common Use Cases

Share busy times with a recruiter, a client or an assistant without client names and meeting links

Hand a sample calendar to a developer or a support team as a bug report, with every person and link taken out

Publish a team's schedule as Busy blocks while keeping the events' categories for color coding

Make a demo calendar from a real one

generalize the titles and shift every date by a few weeks.

Re-import a cleaned copy next to the original

new UIDs keep the two from overwriting each other.

Why Scrub an ICS File Before Sharing It?

A calendar export carries far more than when you are busy. Each event can hold a client's name in the title, a Zoom or Meet link with its password in the description, the office address, every invited person's email address, the organizer, attached documents and a reminder. Sharing that file to show a colleague, an assistant or a scheduling partner when you are free hands all of it over. The manual fix is opening the .ics in a text editor and deleting DESCRIPTION, ATTENDEE and URL lines one event at a time, without breaking the folded long lines. This page applies the field rules you choose to every event in the file, keeps the times and recurrence rules, and writes a calendar that imports like the original.

An iCalendar event is a list of properties. A few of them say when the event happens: DTSTART, DTEND or DURATION, RRULE, RDATE, EXDATE and RECURRENCE-ID, plus STATUS and TRANSP, which say whether the time is busy. The rest say what the event is: SUMMARY, DESCRIPTION, LOCATION, URL, ATTENDEE, ORGANIZER, ATTACH, COMMENT, CATEGORIES, and the X- properties each calendar app adds, such as X-GOOGLE-CONFERENCE for a Meet link or X-ALT-DESC for Outlook's HTML description. This page keeps the first group as it is and applies your rule to each field of the second.

Keep copies a field exactly. Remove deletes it. Generalize replaces it with something neutral: the title you choose (Busy by default) for SUMMARY, Private for a description, location, comment or category, numbered stand-ins such as Attendee 1 <[email protected]> for people (the same address gets the same number throughout the file, and the role and reply status are kept), and only the scheme and host of a link. Coordinates (GEO), Apple's structured location and inline attachments cannot be generalized and are removed. Other details covers CONTACT, RESOURCES and every remaining X- property, and the calendar's own name and description, which in a Google export is often the owner's email address.

Alarms are removed by default; when you keep them, their text follows the same rules. New UIDs replaces every UID with a random UUID, and a recurring series keeps one shared UID so its moved occurrences still attach to it. Mark private sets CLASS:PRIVATE on every event. Shift dates moves every date by whole days, including UNTIL and exception dates, and never changes a time zone. DTSTAMP, CREATED and LAST-MODIFIED, which record when the file was written, stay as they are. Long lines are folded again at 75 octets.

How it compares

Deleting lines by hand works for one event. A real export has hundreds, each with a description folded across several lines, and a missed ATTENDEE or X-GOOGLE-CONFERENCE line leaks exactly what you meant to hide. Making a separate Busy calendar means re-entering every event. This page reads the format with its folding and escaping rules, applies one rule per field to every event, tells you what each file carried, and writes a calendar that imports cleanly.

Scrub Tips

  • Keep on a field means the value is copied exactly; the line under the preview warns when kept titles or people still identify the events.
  • Generalize writes Private for a description, location, comment or category, numbered stand-ins such as Attendee 1 for people, and only the scheme and host of a link, such as https://zoom.us/.
  • Links covers URL, CONFERENCE and the vendor meeting-link properties Google and Microsoft write, so a Meet or Teams link goes with the Zoom one.
  • Shift dates by a multiple of 7 days when events repeat on weekdays; any other shift moves the first occurrence off its weekday.
  • Recurrence rules, exception dates and moved occurrences are kept as they are; nothing is expanded into separate events.

Frequently Asked Questions

What does ICS Privacy Scrub remove by default?

By default every title becomes Busy, and the description, location, links, attendees, organizer, attachments, comments, alarms and vendor X- properties are removed. Categories are kept. Every UID is replaced, every event is marked CLASS:PRIVATE, and the calendar's name is dropped. Start and end times, durations, recurrence rules, exception dates, status and busy or free status stay exactly as they were.

What is the difference between Keep, Generalize and Remove?

Keep copies the field unchanged, Remove deletes it, and Generalize replaces it with a neutral value. A generalized title becomes the Busy title you set; a description, location, comment or category becomes Private; each attendee or organizer becomes a numbered stand-in such as Attendee 1 with an example.invalid address; a link keeps only its scheme and host, such as https://zoom.us/. Each field has its own rule.

Are recurring events and their exceptions kept?

Yes. The RRULE, RDATE and EXDATE lines are copied as they are, and a moved or edited occurrence, which shares its series' UID and adds a RECURRENCE-ID, is scrubbed with the same rules and keeps its link to the series. When New UIDs is on, the series and its occurrences get one new UID together. Recurrences are never expanded into separate events.

Why does the scrubbed file get new UIDs?

Because a calendar app matches an imported event to one it already holds by UID. Importing a scrubbed copy with the original UIDs into the same calendar would update the original events, and could overwrite their titles with Busy. New UIDs gives every event a random UUID so the copy is added as new events. Turn it off when you want the UIDs preserved.

How does Shift dates work?

Shift dates moves every start, end, due date, exception date, recurrence date, moved-occurrence identifier, recurrence end (UNTIL) and absolute alarm time by the number of whole days you enter, forward or back, up to 3650. Each value keeps its time zone and its clock time. Use it for a demo copy of a real calendar. A shift that is not a multiple of 7 days moves a weekly event off its weekday, and the page says so.

Which properties do Links and Other details cover?

Links covers URL, CONFERENCE and the vendor properties that carry meeting links, such as X-GOOGLE-CONFERENCE and Microsoft's Teams and Skype URLs. Other details covers CONTACT, RESOURCES, every other X- property on an event, and the calendar's own X-WR-CALNAME and X-WR-CALDESC. The calendar time zone hint, X-WR-TIMEZONE, is always kept because floating times depend on it.

Is the scrubbed calendar fully anonymous?

No, and the page does not claim it is. With the defaults the file still shows when you are busy, how long each event lasts, how often it repeats and its category. Any field you set to Keep is copied as it was: a kept title such as Lunch with Deniz still names a person, and the page warns you when kept titles, descriptions or people remain. The times alone can still say something about you.

Can I scrub several calendars at once?

Yes. Drop several .ics files and the same rules apply to each. A file that is not a calendar is reported next to its name and the others are still scrubbed. The download is then a ZIP with one scrubbed .ics per file and a summary.txt listing, for each input, how many entries were scrubbed, how many properties were removed or generalized, and why any file was skipped.

How is this different from ICS Busy/Free?

This page keeps each event's shape and lets you choose per field, so you can keep categories or generalized attendees. ICS Busy/Free builds a pure availability file with no choices: Busy events with nothing but their times, or a single VFREEBUSY list of busy periods. Use Busy/Free when all you want to share is when you are free.

Is my calendar uploaded when I use this page?

Not on this page. The files are read and scrubbed 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: it scrubs the files you drop. 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 scrub a calendar from a script?

Yes. The same code runs on the FindUtils REST API and MCP server as the ics_privacy_scrub tool. Send the .ics text as input, set any of summary, description, location, url, attendee, organizer, attach, comment and categories to keep, generalize or remove, and read the scrubbed calendar from the ics field with the per-field counts, the preview and the notes.

Rate This Tool

0/1000

Get Weekly Tools

Suggest a Tool