Google Calendar Integration
Last updated: November 5, 2026
Span's Google Calendar integration reads meeting times and attendance from your team's calendars, with event titles and descriptions removed before anything is stored, so you can see meeting load, focus time and time off next to your delivery metrics.
Why it matters
Meetings and interviews take time away from building. Connecting Google Calendar lets Span show where that time goes and account for time off in your metrics.
Focus time and meeting load: see how much uninterrupted time people and teams have, and how much goes to recurring, ad hoc and recruiting meetings.
Fair per-week metrics: out-of-office days leave the days Span divides by, so time off doesn't lower rates like PRs merged / week.
Hiring load: interviews scheduled through Greenhouse, Ashby or Lever show up as recruiting time.
How it works
Access. Google Calendar connects through domain-wide delegation with one read-only scope: https://www.googleapis.com/auth/calendar.readonly. Span never creates, edits or deletes events.
Whose calendars Span reads. Span reads calendars only for active employees in your Span roster. It doesn't read calendars for other users in your Google Workspace domain, even though domain-wide delegation would allow it. Span rebuilds the list of calendars from your active employees each time a sync starts, so new hires are picked up and people who leave stop being read on the next sync.
What Span stores and what it removes. Span removes or redacts these fields as it reads each event, before the event is stored.
Stored | Removed or changed before storage |
|---|---|
Event start and end times, and time zones | Event titles (replaced with "REDACTED") |
Event status, type and visibility | Descriptions, except links to Greenhouse, Ashby or Lever, which identify interviews |
Recurrence information | Display names of the organizer, creator and attendees |
Whether the event shows you as busy or free | Attachments |
Organizer, creator and attendee email addresses | Conferencing details, such as video call links |
Attendee response status | Extended properties that other apps add to events |
Location | Email addresses outside your company's domains (pseudonymized) |
Private events. Span doesn't skip events marked private. The same rules apply to them as to every other event: the title and description aren't stored, except for recruiting tool links.
History and syncing. When you first connect, Span backfills 12 months of calendar history. After that, Span syncs calendars about every 6 hours and picks up new and changed events. Span reads events up to the time of each sync, so future meetings reach Span once they start or are updated. Metrics update in the processing run that follows each sync.
Retention. Span keeps calendar data for as long as your organization has an agreement with Span.
What Span uses it for. Focus time, meeting hours (recurring, ad hoc and recruiting), and out-of-office days when Google Calendar is your OOO source.
Setup
Before you begin, you need:
The Admin or Integrations Admin role in Span.
A Google Workspace admin who can manage domain-wide delegation in the Google Admin console.
Step 1: Start the connection in Span. Go to Settings → Integrations and start connecting Google Calendar. Span shows the Client ID to use.
Step 2: Authorize Span in Google.
In your Google Admin console, go to Main → Security → Access and data control → API controls.
In the Domain wide delegation pane, select Manage Domain Wide Delegation, then click Add new.
Enter the Client ID from Span. In OAuth Scopes, enter
https://www.googleapis.com/auth/calendar.readonly.Click Authorize.
Step 3: Finish in Span. Return to Span and click Continue. Span checks that it can open your people's calendars before it saves the connection.
Optional: use your calendar for time off. Go to Settings → Org Calendar and, under Out of Office Days Source, pick Calendar Integration. You need the Metrics Configuration permission. See Connecting an OOO Data Source in Span.
Things to know
Domain-wide delegation is broad, but Span narrows it. Google grants read access to every calendar in the domain. Span reads only the calendars of active employees in your Span roster.
Location is stored. Unlike titles and descriptions, an event's location field is kept. If people put sensitive details in the location field, that text reaches Span.
External email addresses are pseudonymized, not anonymized. Span replaces each email address outside your company's domains with a one-way hash, so the address itself isn't stored. The hash is the same every time, so someone who already knows an address could match it to its hash.
A connection that stops authenticating pauses syncing. If the delegation is removed or changed in Google, calendar metrics stop updating until a Google admin re-authorizes it.
Worked example: Priya marks a 2 PM to 3 PM event as private, titled "Doctor appointment," with an external guest and a video call link. Span stores the event's start and end times, its status and visibility, Priya's email and response status, and a pseudonymized version of the guest's email. The title, the description, everyone's display names and the video link aren't stored.
Troubleshooting
Symptom | Resolution |
|---|---|
"Could not access any Google Calendar. Confirm domain-wide delegation is configured." | Check the Client ID and scope in your Google Admin console, then try again. |
The integration shows Reconnect required | Span paused it after repeated credential failures. A Google admin should check the domain-wide delegation entry, then reconnect in Settings → Integrations. |
One person's meetings or time off are missing | Check that the person is an active employee in your Span roster and that their email in Span matches their Google account. New events can take several hours to appear. |
Related articles
Need help?
Contact your Span account team or reach out to support@span.app.