Cadence is a calendar app for Mac and iPhone, built and maintained by George Taylor. It shows your Google Calendar events, finds video-call links in them, and alerts you before calls start. This policy explains what data Cadence accesses, how it uses that data, where the data is stored, and how to remove it.
See the Cadence home page for what the app does. This policy covers both the Mac and the iPhone app; where they differ, it says so. Questions about it: cadence@george.dev.
Short version
Cadence uses your Google Calendar to show you your events, help you join your calls, and make the changes you ask for: creating, editing or deleting events, inviting guests, and answering invitations. When you invite guests, it looks up people and Google Groups in your contacts and your organisation’s directory to suggest them as you type, and shows when they’re busy. When you open an event, it shows who’s invited and how they’ve replied. None of this about other people is ever stored. Your data goes straight between Google and your device and stays there, apart from event addresses Cadence looks up in Apple Maps to show a map or work out when to leave. There is no Cadence server. Cadence doesn’t sell or share your data, and doesn’t use analytics, advertising or tracking.
Google user data Cadence accesses
When you connect a Google account, Cadence asks Google for these permissions:
calendar.calendarlist.readonly: see the list of calendars you’re subscribed to.calendar.events: view and edit events on your calendars, so you can create, edit and delete events and answer invitations.openid,emailandprofile: your Google account’s email address, name and profile photo.contacts.readonly: see your Google contacts, to suggest guests.contacts.other.readonly: see the people Google lists under “Other contacts” (people you’ve emailed or met with), to suggest guests.directory.readonly: see your Google Workspace organisation’s directory, to suggest colleagues as guests. Personal Google accounts have no directory, so nothing is read.cloud-identity.groups.readonly: search your organisation’s Google Groups by name or email address, to suggest a group as a guest. Personal Google accounts have no groups, so nothing is read.calendar.events.freebusy: see when the guests you’re inviting to an event are busy, to suggest times that suit everyone. Google returns only start and end times, never what the events are. For a Google Group, Google also returns its members’ email addresses.
The contacts, directory and groups permissions are read-only, and Cadence uses them only for suggesting guests and for putting names to a group’s members. The free/busy permission is read-only too, and is used only for the guests of an event you’re creating, editing or viewing.
With these permissions, Cadence reads:
- Your email address, name and profile photo, to label the connected account in the app and tell multiple accounts apart. The photo’s web address is kept with your sign-in in the keychain; the photo itself is loaded from Google when it’s shown.
- Your calendar list: each calendar’s ID, name and colour, and whether it is your primary calendar or is selected in Google Calendar, and whether you’re allowed to edit it.
- Events in those calendars, from about two weeks in the past to about six weeks ahead. For each event: the title, start and end times, location, description, conference details (for example a Google Meet link), your own response status (accepted, declined and so on), the number of guests, the organiser’s name or email address, the event’s status and type, and its link to Google Calendar.
- People, only while you’re adding guests: when you type in an event’s guest field, Cadence searches your contacts, your other contacts and your organisation’s directory for matching names, email addresses and profile photos, using Google’s own search, as Google Calendar does. Only the matches for what you’ve typed are returned; Cadence never downloads these lists in full. Matches are kept in memory for a few minutes so retyping is instant, never written to disk, never sent anywhere else, and gone when you quit. Once per account while Cadence is running, after it syncs, it also sends Google one empty contacts search, which Google asks apps to do so its search is up to date; it returns no one.
- Google Groups, only while you’re adding guests: as you type, Cadence searches your organisation’s groups for names containing, or email addresses starting with, what you’ve typed, and suggests up to three. Google’s group search needs your organisation’s ID, which Cadence reads from one group you’re a member of after it syncs, so your first search is as quick as the rest, and keeps in memory while it’s running. Matching groups are kept in memory only, like the people above.
- Guests’ busy times, only while you’re inviting them: when you add guests to an event you’re creating or editing, Cadence asks Google when they are busy over the dates around it. Google returns start and end times only: no titles, guests, locations or other details. Within a Google Workspace organisation colleagues usually share this by default; anyone else only if they have shared their calendar with you. If a guest is a Google Group, Google also returns its members’ email addresses and busy times, so each member can be shown separately. To put names to them, Cadence looks up up to 10 members of each group, one email address at a time, in your organisation’s directory. Anyone else is shown by email address.
- Titles of guests’ events, where they share them: if a guest has shared their calendar’s event details with you (not just free/busy), Cadence reads their events over the same dates using the
calendar.eventspermission, and keeps only each event’s title and times, to label their busy times. Private events and calendars that only share free/busy show as busy with no title. - Who’s invited to an event, when you open it: when you open an event’s details, Cadence fetches its guest list from Google: each guest’s name, email address and reply (going, maybe, declined or not yet answered), and whether they’re the organiser or optional. To show which guests are Google Groups and who’s in them, it asks Google’s free/busy service about the guests for the event’s time, and looks up the names of up to 10 members of each group in your organisation’s directory, as above. The list is shown in the event’s details and kept in memory only.
When Cadence saves your events on your device (see below), it saves only the number of guests on each, never who they are or how they replied. Everything Cadence reads about other people (guest suggestions, groups, busy times, event titles and guest lists) is held in memory only while Cadence is running, never written to disk or sent anywhere else, and gone when you quit. Cadence changes your calendar only when you ask it to, as described below.
How Cadence uses that data
Cadence uses Google user data only to provide features you can see in the app:
- Showing your events in the menu bar (Mac), the agenda, week and day views, and event details.
- On iPhone, showing your next events in the Up Next widget and, from an hour before your next event, a Live Activity on the Lock Screen and in the Dynamic Island. These are drawn on your iPhone from a copy of the next two days’ events that Cadence keeps for them (see below).
- Finding the video-call link in an event so you can join with one click.
- Suggesting people and Google Groups as you type a guest’s name or email address.
- Showing guests’ busy times beside yours while you’re inviting them (one lane per person, including each member of a small group), naming them where a guest shares their event details, and suggesting times when everyone is free.
- Showing who’s invited to an event and how they’ve replied, with the members of any invited group, in the event’s details.
- Scheduling meeting alerts and notifications for upcoming events. These are scheduled on your device by macOS or iOS; nothing is sent to an external notification service, and Cadence has no push notifications.
- Showing a map of an event’s address, and, if you turn on Time to Leave, working out when to set off (see “Apple Maps and your location” below).
Changes Cadence makes, only when you ask
Cadence writes to your Google Calendar only when you use one of these features:
- Create an event: sends the title, times, location, notes and guests you entered to the calendar you chose, plus a request for a Google Meet link if you tick that option. If you added guests, Google emails each of them an invitation.
- Edit an event: sends only the fields you changed. If you add guests, Cadence fetches the event’s current guest list from Google, adds the new people, and sends the list back, because Google replaces the whole list otherwise. It holds the list in memory only for that request. Google emails the new guests an invitation, and if you changed other details in the same edit, it emails the event’s other guests about the change.
- Delete an event: deletes it from Google Calendar, after you confirm.
- Answer an invitation: to record Going, Maybe or Decline, Cadence fetches the event’s guest list from Google, changes only your own response, and sends the list back. Google requires the whole list in that request. Cadence holds it in memory only for that request and never stores it.
Cadence never changes your calendar in the background. The only emails sent are Google’s own invitation and update emails when you add guests. Otherwise Cadence never emails guests or organisers on your behalf, though your response or change still shows up in their calendars, as it would in Google Calendar.
Cadence does not use Google user data for advertising, does not sell it, and does not use it to build user profiles. It is not used to develop, improve or train any artificial intelligence or machine learning models. Nobody, including the developer, reads your data. It never leaves your device except in Cadence’s direct requests to Google, and the Apple Maps lookups described below.
Limited Use
Cadence’s use and transfer of information received from Google APIs to any other app will adhere to the Google API Services User Data Policy, including the Limited Use requirements.
Data sharing
Cadence does not sell Google user data, and does not share, transfer or disclose it to any third party, except for the one transfer below, which provides a feature you can see.
Apple Maps and your location
- Event addresses: when you open an event that has a location, Cadence asks Apple Maps (Apple’s MapKit) to find that place, to show it on a map and offer directions. Only the location text is sent, not the event’s title, guests or anything else; if you’ve allowed Cadence to use your location, your approximate location is included so Apple Maps can pick the nearest match. When you type in the Location field of the event form, what you type is sent to Apple Maps to suggest places.
- Your location, only if you turn on Time to Leave: Time to Leave is off until you turn it on in Settings. When it’s on, Cadence asks for your permission to use your location, and for upcoming events with an address it asks Apple Maps how long the journey takes from where you are. Your location is used only for those requests and is not stored.
These requests go from your device to Apple and are covered by Apple’s privacy policy. The developer receives none of it.
Cadence talks directly to Google: accounts.google.com and oauth2.googleapis.com to sign in, www.googleapis.com for your calendars, people.googleapis.com for guest suggestions, cloudidentity.googleapis.com for searching Google Groups, and Google’s image servers (googleusercontent.com) for your own and suggested people’s profile photos. There is no Cadence server in between, and the developer has no access to your data.
When you click Join, Cadence opens that event’s meeting link in your web browser or in the call provider’s app (for example Zoom or Microsoft Teams), just as if you had clicked the link yourself. On the Mac you can choose to open Google Meet calls in Cadence’s own Meet window instead, which shows Google’s Meet website. You sign in to Google in that window, and it keeps that sign-in the way a browser does; it uses your camera and microphone only while the call is open. What happens after that is covered by the meeting provider’s own privacy policy.
The Mac app checks for updates once a day by downloading a list of releases from GitHub (Sparkle). This request contains no calendar or Google data; GitHub sees only the request itself, as it would for any download. The iPhone app is updated through Apple.
Where data is stored
Everything is stored locally on your device:
- Sign-in tokens: the OAuth access and refresh tokens from Google, with your account’s email address and profile photo address, are kept in the keychain: your login keychain on the Mac, the app’s keychain on iPhone.
- Calendar cache: a copy of your calendar list and events is kept so the app can open instantly and work offline: on the Mac in
~/Library/Application Support/Cadence/cache.json, on iPhone in the app’s own storage. While Cadence is running it checks Google for changes about every 30 seconds. - Widget and Live Activity (iPhone): a copy of the next two days’ events (title, times, calendar name and colour, the call service’s name, and the address of in-person events) is kept in storage shared only between Cadence and its own widget, so the widget can show them. It is replaced whenever your events change.
- Places: addresses Cadence has looked up in Apple Maps and where they are on the map, so it doesn’t look them up again: on the Mac in
~/Library/Application Support/Cadence/places.json, on iPhone in the app’s own storage. Only the addresses and coordinates, never which events they belong to. It keeps up to 300; on the Mac it’s deleted with theCadencefolder (see below), and on iPhone with the app. - Preferences: settings such as alert timing, which calendars are hidden, and the list of connected account email addresses are kept in the standard preferences for the app.
Contacts, directory and Google Groups search results used for guest suggestions, your organisation’s ID, guests’ busy times and event titles, group members, and the guest lists shown in event details are never stored, only held in memory while Cadence is running.
Cadence has no servers and does not store your data anywhere else.
Data retention and deletion
Cadence keeps your Google data only for as long as your account is connected:
- Disconnect an account: open Cadence → Settings → Accounts and click Remove. This deletes that account’s tokens from the keychain and removes its calendars and events from the local cache.
- Revoke access from Google: go to your Google Account permissions and remove Cadence. Cadence can then no longer read your calendar.
- Delete everything: remove your accounts in Cadence, then delete the app. On the Mac, also delete the
~/Library/Application Support/Cadencefolder. On iPhone, deleting the app removes everything it stored.
Because all data lives on your device, deleting it there removes it completely. There is no copy anywhere else.
Security
Google sign-in happens on Google’s own sign-in page, using OAuth 2.0 with PKCE: in your browser on the Mac, and in Apple’s secure sign-in sheet on iPhone. Cadence never sees your Google password. All communication with Google is encrypted over HTTPS, and tokens are stored in the keychain.
What’s not collected
- No analytics, crash reporting or telemetry SDKs.
- No advertising identifiers or third-party trackers.
- No Cadence account, and no data sent to the developer.
- No push notifications or background servers: the iPhone app’s alerts and Live Activity run on your iPhone.
Children
Cadence is not directed at children under 13 and does not knowingly collect personal information from children.
Changes
If this policy changes materially, the “Last updated” date at the top of this page will change. The new policy will be live at this URL before the change takes effect.