OpusDone books into Google Calendar and Cal.com, and no other calendar provider. It reads every calendar you mark as busy, writes only where you allow it, and takes its closures from a month view you control. Changes reach the agent in about 15 seconds.
Reviewed

freeBusy sweeps every calendar you marked busy and merges the result, so a personal commitment blocks a business slot. The busy endpoint returns times only, never event titles. A partial read raises rather than treating a calendar it could not read as free.
Connect with OAuth, no API key. Closures are mirrored in as an all-day “Closed — {your business}” event; deleting that event does not reopen the day.
Connect with an API key. Bookings can wait pending until you accept them, and no-shows are recorded against the appointment.
The dentist appointment on your personal calendar is still a reason you cannot see a customer at 11:00. An integration that reads one calendar will book straight over it.
August, a long weekend, the Monday after a fair. Blocking those by hand, in the right calendar, in the right timezone, is exactly the job that gets forgotten.
When one calendar in the sweep fails to answer, the easy thing is to treat it as empty. That is how a booking lands on top of something you had already committed to.
Times only. The endpoint your assistant reads returns free and busy blocks, never event titles, so the calendar that tells it you are unavailable at 11:00 never tells it why.

Click a day, drag a range, the calendar closes.
The connection asks for calendar.events and calendar.readonly, deliberately not the full calendar scope. The app can read your free time and create the appointment. It cannot delete your calendars.
OAuth sign-in, nothing to paste.

Alongside the same booking gates, Cal.com supports a pending to accepted step, so an appointment can wait for your yes, and lets you record a no-show against the booking.
Connected with an API key.

A blocked range appears in Google as an all-day event titled “Closed — {your business}”. Deleting that mirrored event does not reopen the day, because the closure itself is held here.
Closures are checked in three independent places, one immediately before the write.

Some of these are permissions we did not ask for. Others are things we decided an agent should not be able to do to a business calendar.
The Google scopes stop at events and read access. Full calendar access was available and we did not take it.
A partial read raises rather than quietly returning a cheerful, empty diary. Nothing is offered on evidence that did not arrive.
The mirrored all-day event is a copy for your benefit. Deleting it in Google leaves the closure standing in OpusDone.
The editor refuses. An empty week is almost always a mistake, and an agent should not be left guessing what open means.
One calendar per business is written to. If your team keeps separate diaries, mark them as busy calendars so their time is respected in the sweep.
Edits to hours and closures reach your assistant in about 15 seconds, and the hours editor refuses to save an empty week. A disconnected or expired calendar promises nothing: every booking call returns an offline result and files a human escalation. Free to build and test, no card; 14 days from going live. Starter €39/mo, Pro €99/mo, 15% off yearly.
Request access