ICS url sync to Google Calendar

Hey everyone :wave:,
I’m trying to automate syncing an ICS url to my Google calendar. I’ve got something working, but it basically deletes everything in Google Calendar and then puts the new ICS data in the calendar. I’m thinking this could be done much more efficient (and with less errors, my workflow isn’t the most stable). Could someone give me a hint on how I could compare the Google Calendar with the ICS file item by item and then decide which action to take (delete/edit/nothing)?

It looks like your topic is missing some important information. Could you provide the following if applicable.

  • n8n version:
  • Database (default: SQLite):
  • n8n EXECUTIONS_PROCESS setting (default: own, main):
  • Running n8n via (Docker, npm, n8n cloud, desktop app):
  • Operating system:

Hey @OpenSourceSimon,

Assuming you can split the ICS events what about using a merge node to check if the event names match then only add the ones that don’t or use the compare dataset node which will tell you if there are changes so you could maybe update the dates if needed.

Hey @Jon,
That’s an amazing idea! I don’t have experience with that, is it possible that you could make a quick outline workflow so I can test how it works?

Hey @OpenSourceSimon,

Annoyingly as much as I would like to I am not going to have a chance to this week but we do have some examples on using that node already which may help which you can find here: n8n workflow templates

Once I have managed to catch up on forum replies I can look at a more specific example for you.

Hi Jon,
Thanks for your reply. In the meantime I haven’t been able to find a solution for this use-case. Do you have some time to take a quick look at it?


Hey @OpenSourceSimon,

I think I still have a few others to reply to before I can sit down and make a template for this, How far have you managed to get?

Hey Jon,
Thanks for your reply. I’ve managed to get it working by first removing all the events in my calendar and then putting the events from the ICS in it. The workflow for that is in the post. This is of course very inefficient, so that’s why I opened this post to see if there’s a better solution.

Looking forward to your reply,

This is a Google Script I use. Maybe you can get some inspiration from it :wink: