DocsFeaturesGoogle Calendar Integration

Google Calendar Integration

Set up Google Calendar for automatic interview scheduling sync. Covers self-hosted OAuth app configuration and per-user connection.

Google Calendar Integration

Reqcore integrates with Google Calendar to keep interview schedules in sync automatically. When an interview is scheduled, a calendar event is created and both the interviewer and candidate are added as attendees. RSVP responses from Google Calendar sync back to Reqcore in real-time via webhooks.

How it works

  1. An admin configures a Google OAuth app once at the server level (self-hosted only — reqcore.com handles this for cloud users)
  2. Each user connects their own Google account from Settings → Integrations
  3. Reqcore creates calendar events on that user's calendar when interviews are scheduled
  4. When a candidate accepts or declines the invite in Google Calendar, Reqcore reflects that response automatically

Cloud vs. self-hosted

reqcore.com (cloud)Self-hosted
OAuth app setupManaged by reqcore — nothing to doYou create and manage your own Google OAuth app
User connectionClick "Connect" → doneAdmin sets up env vars first, then users click "Connect"
Google API quotaShared across all cloud usersYour own project — full quota
Data residencyreqcore's infrastructureYour infrastructure

If you are using reqcore.com, skip to Connecting your account. The steps below are only required for self-hosted instances.


Self-hosted setup

You need to create a Google OAuth 2.0 app and provide two environment variables: GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET.

This is a one-time setup done by whoever administers the Reqcore server. Users do not need to touch Google Cloud.

Step 1 — Create a Google Cloud project

  1. Go to console.cloud.google.com
  2. Click the project dropdown in the top navigation bar, then click New Project
  3. Give it a name (e.g. Reqcore) and click Create
  4. Make sure the new project is selected in the dropdown before continuing

Step 2 — Enable the Google Calendar API

  1. In the left sidebar, go to APIs & Services → Library
  2. Search for Google Calendar API
  3. Click on it and click Enable
  1. Go to APIs & Services → OAuth consent screen
  2. Choose your user type:
    • Internal — only available if your organization uses Google Workspace. Recommended for company-internal deployments. No verification required.
    • External — for personal Gmail accounts or mixed deployments. Up to 100 test users can connect without Google verification (sufficient for most self-hosted deployments).
  3. Click Create
  4. Fill in the required fields:
    • App name: Reqcore (or your company name)
    • User support email: your email address
    • Developer contact information: your email address
  5. Click Save and Continue

Add scopes

On the Scopes page, click Add or Remove Scopes and add the following:

ScopePurpose
https://www.googleapis.com/auth/calendar.eventsCreate, update, and delete calendar events
https://www.googleapis.com/auth/userinfo.emailDisplay the connected account email in settings

Click Update, then Save and Continue.

Add test users (External apps only)

If you chose External user type, add each person who will use the calendar integration as a test user on the next screen. They must have a Google account (Gmail or Google Workspace).

Note: You can add up to 100 test users without Google verification. For larger deployments, submit your app for verification via the OAuth consent screen dashboard.

Click Save and Continue, then Back to Dashboard.

Step 4 — Create OAuth 2.0 credentials

  1. Go to APIs & Services → Credentials
  2. Click Create Credentials → OAuth client ID
  3. Set Application type to Web application
  4. Give it a name (e.g. Reqcore Web)
  5. Under Authorized redirect URIs, click Add URI and enter:
    https://your-domain.com/api/calendar/google/callback
    

    Replace your-domain.com with the value of your BETTER_AUTH_URL environment variable. For example, if BETTER_AUTH_URL=https://recruiting.mycompany.com, the redirect URI is:
    https://recruiting.mycompany.com/api/calendar/google/callback
    

    The redirect URI must exactly match what is set in BETTER_AUTH_URL. An HTTP/HTTPS mismatch or a trailing slash will cause the OAuth flow to fail.

  6. Click Create
  7. A dialog shows your Client ID and Client Secret — copy both now (you can retrieve them later from the Credentials page)

Step 5 — Set environment variables

Add the following to your environment configuration (.env, docker-compose.yml, or your hosting platform's secret manager):

GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-your-client-secret

Docker Compose — add to the environment section of the app service in docker-compose.yml:

environment:
  GOOGLE_CLIENT_ID: "your-client-id.apps.googleusercontent.com"
  GOOGLE_CLIENT_SECRET: "GOCSPX-your-client-secret"

Railway — add both variables in your service's Variables tab.

Step 6 — Restart and verify

Restart the Reqcore server to pick up the new variables. Then:

  1. Log in to your Reqcore instance and go to Settings → Integrations
  2. The Google Calendar card should now show a Connect Google Calendar button instead of "Not configured"
  3. The integration is ready for users to connect

Connecting your account

Once the integration is configured (or if you're on reqcore.com), any team member can connect their Google Calendar:

  1. Go to Settings → Integrations
  2. Click Connect Google Calendar
  3. You'll be redirected to Google's sign-in and consent screen — select your account and click Allow
  4. You'll return to the Integrations page with a confirmation message

After connecting:

  • New interviews you schedule will automatically create a Google Calendar event
  • The candidate and any co-interviewers are added as attendees
  • They'll receive a calendar invite and can accept or decline from their calendar
  • RSVP responses appear in Reqcore within seconds via webhook

You can disconnect at any time from the same page. Tokens are encrypted at rest using your BETTER_AUTH_SECRET.


Troubleshooting

"Not configured" badge on the integrations page

The GOOGLE_CLIENT_ID or GOOGLE_CLIENT_SECRET environment variables are missing or empty. Double-check the values and restart the server.

"redirect_uri_mismatch" error from Google

The redirect URI registered in Google Cloud Console doesn't match what Reqcore is using. The URI Reqcore uses is derived from BETTER_AUTH_URL:

{BETTER_AUTH_URL}/api/calendar/google/callback

Go to Google Cloud Console → APIs & Services → Credentials, edit your OAuth client, and make sure the redirect URI matches exactly (including https://, no trailing slash).

"Access blocked: This app's request is invalid" (external apps)

Your Google account is not on the test users list. Go to the OAuth consent screen in Google Cloud Console and add your email under Test users.

"Failed to obtain OAuth tokens"

This happens if Google does not return a refresh token. This can occur if the user previously granted access and the consent screen was not shown again. Reqcore uses prompt: 'consent' to force re-consent, so this should not happen in normal use. If it does, the user can disconnect and reconnect to force a new consent prompt.

Two-way sync shows "Pending setup"

The webhook registration happens automatically after connecting. If it shows "Pending setup" for more than a minute, the webhook may have failed to register — this is usually a network issue where Google cannot reach your server URL. Verify your instance is publicly accessible at the BETTER_AUTH_URL address.

Self-hosted instances on a private network (not publicly accessible) will not receive webhook push notifications. Calendar events will still be created, but RSVP responses won't sync back automatically.