If you have ever tried to add your iCloud calendar in Google Calendar, you probably saw this error: "Could not fetch the URL because robots.txt prevents us from crawling the URL." That's because the https://www.icloud.com/robots.txt file tells "web crawlers" not to index anything under /calendar/ which is a good idea if we're talking about something like Googlebot, but should not apply when done in response to an interactive action initiated by a human. However, for reasons unknown, Google decided that Google Calendar should follow Apple's robots.txt instruction.
I have looked for a solution for this before, but today I found one: iCloud Calendar Proxy. The service could not be simpler: 1) Get your iCloud calendar URL from iCloud.com. 2) Paste the URL into the field at iCalToGCal. 3) Copy the new URL to Google Calendar. Boom! Now your iCloud calendar is available on Google Calendar.
That's all you need to do, but there are a few provisos, a couple of quid pro quos you should know about. First of all, this process requires that your iCloud calendar be made public. Now, it doesn't seem likely that someone would accidentally stumble across your seemingly random 64-character iCloud calendar URL, but it's at least theoretically possible. You do not have to make the calendar public on Google. You should also be aware that Google Calendar only updates "every few hours" and there is no way to manually update the calendar, so the Google version of your iCloud calendar might not always be up-to-the-minute. Still, until there's a better way, this is much better than nothing.
iCalToGCal is offered for free by Jason Funk, but he does ask for donations to keep the server running. He also made "the sharing core of icaltogcal.com" available on Github, which means that you can set this up on your own server, assuming that it runs PHP. I set it up on mine in a matter of minutes, and then added the URL to my PHP script to Google Calendar instead of using the custom iCalToGCal URL.
If you know any other ways to sync an iCloud calendar to Google Calendar, let us know in the comments.
There are any number of reasons why Google might have decided to do this, including: 1) Wanting to avoid the appearance of doing something nefarious that Apple might object to, 2) wanting to make it more difficult for people to use iCloud Calendar and Google Calendar together with the hope that more people would choose to use Google Calendar instead of iCloud or 3) some other reason entirely. I generally try to apply Hanlon's Razor to these types of situations, but given the history of animosity between the two companies, it's hard to give them the benefit of the doubt. ↩
Unfortunately for me, it does not seem possible to share only the "busy/free" information via Google calendar, which was what I was trying to do. That's not really relevant to the technical aspect of this; I just mention it in case anyone else was thinking of doing the same thing. ↩