Copy page
Google Calendar
Aktify can schedule appointments directly on your Google Calendars. During a conversation, the Aktify AI agent offers your real open time slots to a lead, and when the lead confirms, Aktify books the appointment on the assigned rep's calendar — no manual back-and-forth required.
This guide walks through connecting Google Calendar to a campaign. For behavior shared with GoHighLevel — timezones, the one-scheduler-per-campaign rule, arrival windows, and more — see the Appointment Scheduling overview.
How it works
Aktify connects to Google Calendar using a dedicated service account — a Google identity that belongs to Aktify. You grant Aktify access by sharing your calendar with that service account, the same way you'd share a calendar with a coworker. There is no password to hand over and no OAuth login screen.
Once a calendar is shared, Aktify can:
- Read availability — so the agent only offers slots that are actually open.
- Create, reschedule, and cancel events — so confirmed appointments land on the rep's calendar automatically.
You can connect multiple reps, each with their own calendar, to a single campaign. Aktify spreads bookings across them and respects the capacity you configure.
Before you begin
You'll need:
-
The Aktify service account email address:
aktify-gcal-scheduler@aktify-api.iam.gserviceaccount.comThis is the Google identity you'll share your calendar with. It's the same for every Aktify customer.
-
The Google Calendar ID for each calendar you want to take appointments on (see Step 2 — Find your Calendar ID).
-
Portal access with an Admin or Editor role on the campaign you're configuring.
Step 1 — Share your calendar with Aktify
Repeat this for each rep's calendar.
- Open Google Calendar as the rep (or as an admin who manages the rep's calendar).
- In the left sidebar, hover over the calendar you want to share, click the ⋮ menu, and choose Settings and sharing.
- Scroll to Share with specific people or groups and click Add people and groups.
- Enter the Aktify service account email:
aktify-gcal-scheduler@aktify-api.iam.gserviceaccount.com - Set its permission to Make changes to events.
- Click Send.
Aktify needs to both read availability and write appointments. The Make changes to events permission grants exactly that. The broader Make changes and manage sharing permission also works but isn't required.
Step 2 — Find your Calendar ID
You'll enter a Calendar ID for each rep in the Portal.
- In Google Calendar, open Settings and sharing for the calendar (same menu as above).
- Scroll to Integrate calendar.
- Copy the Calendar ID.
A primary calendar's ID is usually the account's email address (for example, rep@yourcompany.com). A secondary calendar's ID is a long string ending in @group.calendar.google.com.
Step 3 — Configure Google Calendar in the Portal
-
Open the campaign and go to Settings → Integrations.
-
Under Appointment Scheduling, select Google Calendar.
-
Add your reps. For each rep, add a row with a name and a Calendar ID. Use Add rep to connect more than one.
Just one calendar? That's fine.If you want to book everything onto a single shared calendar, add just one rep row. The name is only a label used inside the Portal — it can be anything you like (for example, "Main Calendar" or your business name). Only the Calendar ID has to be exact.
-
Test access. Click Test access next to each rep. Aktify checks that the calendar has been shared with the service account and reports back inline. If you see a "share not in place" message, revisit Step 1 — the share may not have been sent, or it may have been blocked (see Google Workspace notes).
-
Set open hours. Configure a single open-hours window per day, and uncheck any days the business is closed. Defaults to 9:00 AM – 5:00 PM, Monday–Friday.
-
Set your scheduling options (see the Configuration reference below).
-
Save. Saving activates Google Calendar scheduling for the campaign.
Saving Google Calendar as active deactivates any other scheduler on this campaign. See one scheduler per campaign.
Configuration reference
| Setting | What it controls |
|---|---|
| Reps | One or more { name, Calendar ID } rows. The name is a display label only; the Calendar ID must be exact. Use a single row to book everything onto one shared calendar, or one row per rep to spread bookings across calendars. |
| Open hours | The bookable window for each day of the week. One window per day; uncheck a day to mark it closed. Defaults to 9–5, Mon–Fri. |
| Slot length | The length of each appointment slot, in minutes. |
| Appointments per slot | How many appointments can be booked into the same time slot before it's considered full. Defaults to 1. |
| Days ahead | How far into the future the agent is allowed to offer slots. |
| Schedule date range | An optional start/end date that bounds when appointments may be scheduled. |
| Timezone | The IANA timezone of the calendar / business location (for example, America/Denver). See Timezones. |
| Arrival window | For field-service appointments, the size of the technician arrival window in hours. Leave at 0 for exact-time appointments. See Arrival windows. |
| Event memo | Optional text used as the prefix of the calendar event title. With a memo, events are titled <memo> - <First Last>; without one, Appointment with <First Last>. |
How scheduling works for your leads
Availability
The agent only offers slots that fall within your open hours, lie inside your scheduling window, and aren't already full. When appointments per slot is greater than one, a slot stays bookable until it reaches capacity — at which point the agent stops offering it and suggests the next open time instead.
With multiple reps, capacity is the sum across reps. For example, 3 reps with appointments per slot of 2 allows 6 concurrent appointments in the same slot.
Timezones
Set the Timezone to the IANA timezone where the calendar (and business) lives — for example, America/New_York, America/Chicago, or America/Denver. Aktify books in this timezone and converts each offered time into the lead's own local timezone (see how timezones work).
If you leave the timezone unset, Aktify falls back to the calendar's own Google timezone setting. Setting it explicitly is recommended so availability and confirmations are always unambiguous.
Arrival windows
Set the Arrival window field to the number of hours in the window, or leave it at 0 for exact-time appointments. See arrival windows for how it's used.
Google Workspace notes
Connecting a Google Workspace calendar works exactly like a personal Gmail calendar — share the calendar with the service account and you're done. A couple of admin-controlled settings are worth knowing about:
If your Google Workspace administrator has disabled external calendar sharing, the share you send in Step 1 will silently fail — Google drops the external recipient without an error, and Aktify never gains access. The calendar will then look completely free, and bookings will fail.
If Test access reports that the share isn't in place even though you sent it, ask your IT admin to allow aktify-gcal-scheduler@aktify-api.iam.gserviceaccount.com as an exception to external sharing.
Every appointment Aktify books appears in your Google Workspace Calendar audit log, attributed to the service account — so admins always have a full record of what was scheduled.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Test access reports the share isn't in place | The calendar wasn't shared with the service account, the wrong address was used, or external sharing is blocked | Re-do Step 1; confirm the exact service account email; check Workspace external-sharing settings |
| The agent offers slots that are already busy, or every slot looks open | The calendar isn't actually shared, so Aktify reads it as empty | Run Test access and confirm the share; a calendar with no access reads as 100% free |
| Bookings appear at the wrong time | Timezone misconfigured | Set Timezone to the calendar's IANA timezone (see Timezones) |
| Appointments stop being offered for a popular time | The slot reached its appointments per slot capacity | Increase capacity, add another rep, or leave as-is if the slot is genuinely full |
FAQ
Do I need to give Aktify my Google password or sign in with OAuth? No. Access is granted entirely by sharing your calendar with the Aktify service account. You can revoke it at any time by removing that share.
Can I connect more than one rep? Yes. Add a row per rep, each with their own Calendar ID. Aktify books across all connected reps and respects the per-slot capacity.
Can I use both Google Calendar and GoHighLevel on the same campaign? No — see one scheduler per campaign.
How do I disconnect Google Calendar? Disable Google Calendar for the campaign in the Portal, and optionally remove the service account from your calendar's share list in Google Calendar.