← All articles

Work calendar won't connect and IT won't approve the app? What still works with just an ICS link

October 13, 2026 · 6 min read

Part of my week belongs to the mental health provider I work for. The rest belongs to my own practice. Each needs to know when the other has me, so I don’t get double-booked.

Their calendar is locked down. That’s fair. It holds client sessions. IT doesn’t approve outside apps, so when I try to connect my work account I get a screen that says an administrator has to approve it first. Nobody is going to approve it.

What I do get is a secret calendar link. An ICS feed. It’s read-only, and it’s busy-only: every event in it is called “Busy.” No names, no guests, no notes. Just blocks of time.

That covers half the job. My practice can book around my work hours. The other half, my employer seeing when I’m with my own clients, looks impossible. You can’t write into a read-only ICS feed.

But there’s one door every work calendar leaves open. It takes invitations.

The setup: three pairs

Here’s how I solve this problem. It works the same for a consultant with a client calendar, or anyone whose employer hands them a feed and nothing else.

Pair 1 brings work in. The source is the work ICS feed. The destination is a Google calendar I made called Work Busy. It’s one-way, because a feed can only ever be a source. My practice books against Work Busy, so work hours are off the table.

Pairs 2 and 3 send my time out. One runs from my business calendar to a second Google calendar called Business Busy. The other runs from my personal calendar to the same Business Busy. Both are one-way, and both carry the same rules:

  • set the title to “Busy”
  • clear the description
  • clear the location
  • add participant: my work address, Don’t send invite

That last rule does all the work. Every copy that lands on Business Busy invites my work address. The invitation shows up on the work calendar like any other meeting, titled “Busy,” and my employer’s scheduling sees me as not available.

Why not just subscribe to Business Busy from the work side? Two reasons. A locked-down work calendar often won’t let you add outside calendars at all. And where it does, a subscribed calendar usually doesn’t count toward your free/busy time, so the people booking you never see it. An invitation does count. It’s a real event on the real calendar. (More on how subscribed feeds behave in why Google takes up to 24 hours to refresh them.)

The double-up

It worked. Then Work Busy started filling up with my own appointments.

The work feed carries everything on my work calendar. That now included the invitations I’d just sent it. So pair 1 did its job and copied them onto Work Busy. A dentist visit on my personal calendar went to Business Busy, then by invitation to my work calendar, then back out through the feed onto Work Busy. My practice saw the same hour blocked twice, once for real and once as a copy of a copy.

Mostly harmless, until you cancel the dentist. Then one block goes away and the other hangs on until the feed catches up. And Work Busy was meant to mean one thing: work has me.

My first thought was a filter. Skip anything where my personal address is a guest. But the feed is busy-only. There are no guests in it. Filter on the title? Every title is “Busy.” The feed strips out the exact details a filter would need.

The fix: one rule, “made by twocal”

twocal knows its own copies. Every calendar event carries an ID that travels with it, called the iCal UID. Invitations keep it. Feeds keep it. When twocal writes a copy, it records that ID. So when one of its copies comes back through the feed, twocal can tell, even with every other detail gone.

On pair 1 I added one rule: made by twocal, is true, skip event.

That’s all. New invitations still go out and still block my time at work. They just don’t bounce back onto Work Busy.

Saving a skip rule makes twocal go back through the whole feed, not just new events, so the copies already on Work Busy come off on the next sync. If there are a lot of them, 50 or more, twocal pauses the pair instead and asks you to look first. That’s on purpose. It won’t delete a pile of events because of an ID match until a person has checked. Look over Work Busy, and if what’s going is the double-ups, resume the pair.

Isn’t that a loop?

No, and the difference matters.

A loop goes round in a circle. A copy lands somewhere that syncs back to where it came from, and it goes round again. twocal has loop protection for that, and it’s always on. If one of its copies comes back and syncing it would send it round to where it started, twocal skips it without being told.

This setup isn’t a loop. Work Busy doesn’t feed anything. The copy goes one step too far and stops. That’s a double-up, and twocal can’t know it’s unwanted, because it’s a perfectly good copy of a real event. Only I know Work Busy is meant to hold work and nothing else. So that part takes a rule.

What this can’t do

Be clear on the limits before you build it.

The feed is slow. A feed has to be checked on a timer, and your employer’s server rebuilds it on its own schedule. Anything coming in through it takes minutes, not seconds. Fine for knowing you’re at work Thursday. Not fine for a meeting someone booked five minutes ago.

Invitations send email. Business Busy is a Google calendar, so I could pick “Don’t send invite.” But Google’s quiet option only adds the guest on Google’s side. If your work calendar isn’t Google, the invitation email is what carries the event over, so you’ll want Send invite. If you put your busy calendar in Outlook instead, there is no quiet option at all. Microsoft emails every invitation and every cancellation.

Repeating events need the quiet option. twocal copies every occurrence of a weekly meeting as its own event, so Send invite would mail your work address a year of invitations at once. It leaves repeating events out instead. Only Don’t send invite, on Google, carries them over.

The busy calendar can’t be iCloud yet. twocal can’t add participants to iCloud copies. Your personal calendar can still be iCloud; sync it into a Google or Outlook busy calendar, like pair 3 does, and add the participant there.

The invitations may sit as tentative. Some work calendars put an unanswered invitation on your calendar as tentative. Check whether your employer’s scheduling treats tentative as busy. If it doesn’t, accept them.

Your employer sees an invitation from your personal address. The title says “Busy” and nothing else, but the address is yours. If that’s a problem, send the invitations from a calendar on an address you don’t mind sharing.

And it all depends on the feed. If IT has turned off calendar publishing too, there’s nothing to read. On Microsoft 365, the feed usually comes from Outlook’s “Publish a calendar” setting; here’s how to find it, and what to do if it isn’t there.

Where this leaves you

Locked-down doesn’t have to mean cut off. The feed tells your private calendar when you’re at work. Invitations tell your work calendar when you’re not free. One rule keeps the two from echoing each other.

If you only need the second half, keeping your personal life off the work calendar while still blocking the time, start with syncing work and personal calendars privately.

Tired of sync that drops events?

twocal does one thing — keeps your calendars in sync, reliably. 14 days free, no credit card.