RecurSync — a Zoho CRM extension
Recurring meetings that actually sync — in both directions.
Zoho CRM has synced with Google Calendar for years, but never recurring meetings. Your Monday stand-up, the monthly board call, the every-other-Thursday check-in — those have always been the ones that quietly went missing. RecurSync is the extension that finally carries them across, and keeps them in step afterwards.
Why I built it
I’m Nate, and Finicky Fox is my one-person shop in St. Paul, Minnesota. The request for recurring-event sync between Zoho CRM and Google Calendar has been sitting in Zoho’s community forums for about fourteen years. People kept asking; the gap kept not closing. The usual workarounds are to enter every series twice, or to let a general-purpose automation tool flatten your series into dozens of unconnected one-off meetings.
So I wrote the thing that was missing. RecurSync understands a recurring series as a series — it translates the recurrence pattern itself between the two systems, so a weekly meeting stays one weekly meeting on both sides.
What it does
Install it in your Zoho CRM org, connect your Google account, pick a calendar. From then on the two stay matched, without anyone copying anything by hand.
Recurring series, kept whole
Daily, weekly, monthly and yearly patterns — including the awkward ones like “second Tuesday” and “last Friday” — translate between Google’s format and Zoho’s, along with end dates and occurrence counts.
Both directions
Create or change a meeting in either system and the other follows. Change just one occurrence of a series and only that occurrence changes on the other side. Delete a series in one and it disappears from the other, expanded occurrences included.
Near real time
Google changes reach CRM in about a minute through a notification channel. CRM changes reach Google in seconds. An hourly backstop re-syncs anything a missed notification would otherwise have dropped.
Per person, not per org
Each CRM user connects their own Google account and syncs to the meetings they own. Connecting doesn’t expose your calendar to your colleagues or your admin.
Setting it up
- 1 Install the extension into your Zoho CRM org Your admin installs it once, the way any Marketplace extension is installed.
- 2 Each person opens the RecurSync tab and clicks Connect Google’s own consent screen opens and asks for that person’s permission, then RecurSync shows which Google account is being linked to which CRM user before anything is saved. Nobody connects on anyone else’s behalf.
- 3 Pick one calendar Choose which of your Google calendars should sync — any calendar you own. Only that one is touched.
- 4 That’s it The RecurSync tab shows when the last sync ran and flags anything that failed. Disconnect from the same tab whenever you want.
What RecurSync does with your Google Calendar data
RecurSync is not a web service with a login. The extension installs into your own Zoho CRM org and runs there, talking directly from your org to Google’s API. There is no Finicky Fox machine in the path your calendar events take, which means your calendar data never reaches me — not as a promise, but because no such system exists.
The one thing I do run is a small sign-in service at auth.finickyfox.com. It
handles the Google sign-in, hands your org a sealed token, and renews access when your org
asks. It stores nothing and never sees your calendar events. The token itself is kept
encrypted on your own Sync Profile record, inside your Zoho org.
The permissions it asks for, and why
| Google scope | Why RecurSync needs it |
|---|---|
| calendar.calendarlist.readonly | Lists the calendars on your account so you can choose which one to sync, and confirms you own it. It gives no access to any event. |
| calendar.events.owned | Reads events on the calendar you selected, and creates, updates or deletes the matching Google event when you change a meeting in CRM. This is the two-way sync itself — without write access it could only ever work one way. It only covers calendars you own; shared or subscribed calendars can’t be synced. |
The fields it reads
Title, description, location, start and end times, the all-day flag, the recurrence rule, the event ID and version tag, whether the event was cancelled, and — for a single changed occurrence — which series it belongs to and its original start time. That is the complete list. If your CRM admin turns on Google Notes, a cleaned-up copy of the description also goes into a rich-text field on the meeting.
What it deliberately never touches
No attendees or guest lists. No organizer identity. No Google Meet or conferencing links. No attachments, colors, visibility flags or reminders. No other calendar on your account, and no free/busy lookups of anyone else. RecurSync also never adds attendees or invitations to the Google events it writes — nobody gets emailed because of this extension.
Google API Services User Data Policy. RecurSync’s use of information received from Google APIs adheres to the Google API Services User Data Policy, including the Limited Use requirements. Calendar data is used only to provide the sync you turned on. It is never sold, never used for advertising or profiling, and never transferred to anyone except as needed to provide the sync or where the law requires it.
The full detail — storage, retention, deletion, logs, your rights — is in the RecurSync privacy policy.
You can withdraw access at any time, from either end: click Disconnect in the RecurSync tab, or revoke it directly at myaccount.google.com/permissions. Either one stops the sync immediately. Uninstalling the extension revokes every connected user’s Google access.
What it doesn’t do — stated up front
I’d rather you know these before you buy than discover them afterwards.
- A changed first occurrence becomes a linked standalone meeting Changing one occurrence of a series in Google updates the matching occurrence in CRM — except the very first one, which in Zoho is the series record itself. If you change just that first occurrence in Google, it arrives in CRM as its own meeting linked back to the series. The information is all there; the shape is different.
- Deleting a single occurrence in CRM stays in CRM Changing one occurrence in CRM — its title, place, description or time — updates just that occurrence in Google. Deleting a single occurrence in CRM isn’t sent to Google yet; delete it in Google Calendar and it disappears from CRM too.
- Unusual recurrence rules are skipped, not guessed at Patterns Zoho has no equivalent for — something like “the 20th week of the year” — sync their normal fields and log a warning instead of silently inventing a wrong pattern.
-
Series titles containing brackets or commas delete only the parent
When you delete such a series in Google, the parent CRM record is removed but the
expanded occurrences need clearing by hand. It’s a limitation in how Zoho’s
record search handles those characters, and it affects titles with
()or,in them. - One calendar per person Each user syncs a single Google calendar, and it has to be one they own — shared or subscribed calendars can’t be synced. That covers the case this was built for; if you need several, tell me and I’ll look at it.
Price
One price for the whole org, however many people connect. No per-user tier, no usage metering, no enterprise upsell. It’s a small tool that does one job properly, and it’s priced like one.
Questions go to a person — me
One person wrote this extension and one person answers the email about it. If something breaks, or you want to know whether it handles your particular calendar setup before you commit, just ask and you’ll get a straight answer.
Nate — Finicky Fox
hello@finickyfox.com
Saint Paul, Minnesota, USA