This happened to us after a Google Workspace update. The issue was twofold: first, our OAuth client was still using deprecated scopes, and second, the refresh token had expired. Here’s what we did to fix it completely.
In Google Cloud Console, verify these exact scopes are added to your OAuth client:
Then in Odoo, go to Settings > Technical > System Parameters and check the google_calendar_token parameter. If it’s outdated or corrupted, you’ll need to re-authorize.
For service accounts with domain-wide delegation, the configuration must include:
Client ID: [your-service-account-client-id]
Scopes: https://www.googleapis.com/auth/calendar,https://www.googleapis.com/auth/calendar.events
Make sure there are NO spaces after the comma in the scopes list.
After updating Google Cloud settings, you must disconnect and reconnect the calendar integration in Odoo. Go to Settings > General Settings > Integrations > Google Calendar, click Disconnect, save, then click Connect again. This forces a new OAuth flow with the updated scopes.
Also verify in Google Admin Console (admin.google.com) under Security > API Controls > Domain-wide Delegation that your service account is listed and has the correct scopes. If you recently rotated keys or created a new service account, the old authorization might still be cached.
One more critical point: if you’re syncing multiple resource calendars, each calendar in Google must have the service account added as an Editor (not just Viewer). Go to each calendar’s settings and explicitly add your-service-account@project-id.iam.gserviceaccount.com with “Make changes to events” permission.
After these changes, test with a single resource calendar first before enabling sync for your entire field service team.
This draft is based on general Odoo knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.