## Overview

After you **connect Google Calendar**, the Calendar keeps everything in sync **both ways**. This
article covers the **monitoring** side of that sync: how to **import** events that already existed in
Google, what each **sync status** means, how to force an update with **Sync now**, and what to do when
the **Google access expires** and you need to **reconnect**.

The sync is **near real-time**, with a **periodic check** that reconciles differences. You don't need to
sync manually day to day — the options below are for inspection and one-off cases.

## Prerequisites

- The **Calendar** module enabled and a **Google connection** already created (see the connection/OAuth
  article).
- A profile allowed to manage integrations.
- At least one Google **calendar** selected to mirror.

## Step by step

**Import existing events:**
1. Open the **Calendar** and go to the **Google connection**.
2. Select the **calendars** you want to mirror.
3. Wait for the **first sync**: events that already existed in Google start showing in the Calendar.

**Check the status and force an update:**
1. On the Google connection, check the **sync status** (see the table below).
2. To update right away, use **Sync now**.

**Reconnect when access expires:**
1. If the status shows **access expired/revoked**, click **Reconnect**.
2. Redo the **Google authorization** and grant the calendar permissions.
3. The sync resumes and the periodic check reconciles anything pending.

## Settings & options

- **Import existing events**: the first sync brings into the Calendar the events already in Google.
- **Sync status:**

| Status | What it means |
|---|---|
| **Connected / Synced** | Up to date; updates flow both ways. |
| **Syncing** | A sync is in progress (first load or an update). |
| **Access expired / revoked** | Google revoked access — you need to **reconnect**. |
| **Error** | A temporary failure; the periodic check retries. |

- **Sync now**: forces an immediate update, without waiting for the periodic check. It also **unsticks** a
  connection wedged on "Syncing".
- **Reconnect**: redoes the Google authorization when access expires or is revoked.
- **Last error / recent errors**: the panel shows the latest failure Google returned **even while the
  status is still "Syncing"**, so you never wait on a process that already failed.

### What happens when you change something directly in Google

A change made **in Google** counts exactly like one made in the platform. When you drag, edit or cancel
an appointment in Google Calendar:

- **The customer is told.** A **reschedule** or a **cancellation** sends the same notice (WhatsApp/email
  and the `.ics` file) as one made from the dashboard — honouring the **same** notification switches you
  already configured. If you turned reschedule notices off, they stay off.
- **Your automations run.** Rules and flows triggered by an appointment being **created**, **rescheduled**
  or **cancelled** now fire for changes coming from Google too.
- **The screen updates on its own.** The agenda grid reflects the change **without a page reload**.
- **Reminders for the new time work again.** Dragging an appointment to another date in Google
  reschedules its reminders to the **new** time.
- **The reservation follows.** Cancelling in Google also closes the matching **booking**, so the
  customer's public page stops offering "reschedule" for an appointment that no longer exists.

**The first import is silent.** When you mirror a calendar that already held hundreds of appointments,
that initial load does **not** fire notices, automations or notifications — it only brings across what
was already there. Only changes **from then on** are announced.

**Importing an appointment is never a booking confirmation.** The platform never sends "your appointment
is confirmed" to someone just because the appointment showed up in Google.

### Google integration per event type

Each **event type** decides independently how it talks to Google. The setting lives in the event-type
editor, under **Google integration**:

- **Block times already busy on these calendars**: tick **as many calendars as you like**. No time already
  taken on any of them is offered on the public page. This is how you avoid being booked over a personal
  appointment that lives on a different calendar.
- **Create events on**: pick **one** Google calendar to receive confirmed bookings. That is where the
  invite and the Meet link are created.

If you configure nothing, behaviour is exactly what it was before: the type uses its own calendar and only
talks to Google when that calendar is mirrored.

## Use cases

- Bring the calendar that already existed in Google into the Calendar, without retyping events.
- Quickly check the connection is **up to date** before a busy day.
- Force **Sync now** after changing several events in Google.
- Restore the sync with **Reconnect** after the Google password/permission changed.

## Tips, limits & best practices

- Day to day you **don't** need to sync manually — the sync is automatic and near real-time.
- Use **Sync now** only for inspection or after big changes in Google.
- If the status stays on **access expired**, **reconnect** as soon as possible so you don't miss
  updates.
- Select **only the calendars** you actually want to mirror — less noise in the Calendar.
- Events created by the platform are internally marked to **avoid loops** back and forth.
- Editing an appointment in the platform no longer changes what you configured only in Google: events
  marked **"Free"**, the **visibility** (private/confidential) and the **guest permissions** are
  preserved.

## Troubleshooting

- **I connected, but the old events didn't come in**: confirm you selected at least one **calendar** to
  mirror and wait for the **first sync**; use **Sync now** to force it.
- **I stopped getting updates**: access may have **expired/been revoked** in Google — use **Reconnect**.
- **An event disappeared or duplicated**: the periodic check reconciles differences; if it persists, use
  **Sync now** and, as a last resort, **reconnect** the account.
- **The status stays on "Syncing" for a long time**: the first load of a large calendar takes a few
  minutes, but **no longer than that**. If it stays on "Syncing", **don't just wait** — open the
  connection panel and read the **last error** and the **recent error count**, which are now shown even
  while the status is still "Syncing". Use **Sync now**: it unsticks a wedged state and restarts the
  load. If the error persists, **reconnect** the account.
- **The status stays on "Error"**: the panel shows the message Google returned. An access error
  (**expired/revoked**) can only be cleared by **Reconnect**.
- **It stops syncing on its own after a few days**: if the Google OAuth app is still in **Testing** mode
  (unverified), Google **revokes access every 7 days** — the connection will break weekly until the app
  is verified in Google Cloud. You get an e-mail when it happens; the permanent fix is to publish/verify
  the app.
- **Events marked "Free" in Google**: they show up in the agenda but do **not** block slots on your
  booking page — the same behaviour as Google itself.
- **Recurring events**: each occurrence is imported individually, so the series shows on **every** date,
  not just the first one.

## See also

- [Connect Google Calendar (OAuth) and sync](/hc/ajuda/articles/calendar-scheduling-conectar-google-calendar-en)
- [Delete or cancel an event: which to use](/hc/ajuda/articles/calendar-scheduling-excluir-ou-cancelar-evento-en)
- [Reschedule, cancel, Google Meet and the .ics file](/hc/ajuda/articles/calendar-scheduling-reagendar-cancelar-meet-ics-en)
- [Calendar & Scheduling overview](/hc/ajuda/articles/calendar-scheduling-overview-en)