← Blog
Jascha Kaykas-Wolff··7 min read

AI SDR Meeting Booking: Send a Link, Offer Times, or Let the Agent Book

For cold outbound, an AI SDR should answer a yes with two specific times in the prospect's own time zone plus a single-use booking link as a fallback, and it should write to the calendar only after the prospect picks one, re-checking free/busy at the moment of the write. A plain Calendly link is fine for high-volume, low-ACV sales, and a router such as Chili Piper fits teams that split meetings across reps. The one option we rule out is the agent booking a time the prospect never chose.

Thursday, 4:52 pm. “Sure, next week could work. What did you have in mind?”

That reply is the whole reason the campaign exists, and your agent is about to answer it. Whatever it writes next decides whether a VP of Operations in Columbus ends up on your rep's calendar on Tuesday or quietly decides this was too much effort. The model is good at the sentence. It is bad at knowing that your rep blocked Tuesday morning an hour ago, that Columbus is three hours ahead of San Francisco, and that a second agent run picked up the same thread at 4:53.

Our reply handling guide covers how the agent labels that message as interested. This page is the step after: getting from interested to an event on a calendar without a double booking or a meeting set for the wrong hour.

How booking goes wrong when an agent does it

Stale availability is the common one. The agent checks the rep's calendar while drafting, the draft waits in the approval queue through a pipeline review, and by the time someone approves it the 10:00 slot belongs to a renewal call.

Time zones are the embarrassing one. Europe left summer time on October 25 this year and the US followed on November 1, so for one week London sat four hours ahead of New York instead of five, and an agent that converted times with fixed offsets instead of named zones offered London buyers slots that were off by an hour all week. Parallel runs cause the rest: two threads at the same company, both offered Tuesday at 10, both accepted.

Booking methods compared

MethodWhat the agent callsBest forMain riskWho writes the event
Plain booking linkNothing. Pastes a Calendly or Google Calendar appointment page URL into the replyHigh-volume, low-ACV motions where a prospect booking themselves is normalThe prospect has to do the work, and a reusable link can be forwarded and booked by anyoneThe prospect, through the scheduler
Single-use linkCalendly’s scheduling links endpoint with max_event_count set to 1, one link per threadA fallback under offered times, so a prospect who wants a third option is not stuckSame friction as a plain link, but at least it dies after one bookingThe prospect, through the scheduler
Offer two times, book the pickGoogle Calendar freeBusy.query to draft, then freeBusy again and events.insert after the prospect picksCold outbound with deals of $5K or more, where one reply is expensive to wasteThe two times go stale while the draft sits in an approval queueThe booking tool, never the model directly
Router (Chili Piper, HubSpot round robin)The router’s API or embed, which picks the rep and the slotTeams splitting meetings across several reps by territory or account ownerAnother system with its own rules, and its routing logic is invisible to the agentThe router
Agent books a slot nobody choseevents.insert straight away, inviting the prospect to a time the agent pickedExisting customers who asked for exactly this. Nobody coldAn unrequested invite from a stranger reads as spam and gets declined or ignoredThe model, which is the problem

Offer two times, and keep the link as a fallback

This is our default, and we would argue for it with anyone running cold outbound into deals worth $5K or more.

A buyer who wrote “what did you have in mind?” asked a question, and a link answers a different one. Two concrete times (“Tuesday at 10:00 or Wednesday at 2:30, Eastern”) let them reply with one word from a phone. Two, because one feels like an order and four turns into a menu nobody reads on mobile. The single-use Calendly link goes underneath for anyone who needs something else, and it stops working after one booking, so a forwarded email cannot fill your rep's Friday.

We do not put tentative holds on the rep's calendar while the prospect decides. With a few dozen live threads a week, two holds per thread can swallow whole afternoons, reps learn to decline them by hand, and after that the calendar stops meaning anything.

What the booking tool checks before it writes

The model never calls the calendar API itself. It calls a booking tool with a thread ID and the slot the prospect picked, and the tool does the rest or refuses. Same pattern as our MCP permission matrix, where writes to someone else's calendar sit in the column that needs a guard in code.

CheckWhy it existsWhen it fails
Free/busy on every calendar the rep actually usesA slot that was open when the draft was written can be gone by the time an approver clicks send three hours laterReturn to the agent for two new times. Never send the stale ones
Time zone stored as an IANA name (America/Chicago), never an offsetAn offset of -5 is right for Chicago until November 1 and wrong after itAsk the prospect. A signature city is a guess, not a time zone
Idempotency key per threadA retried tool call creates a second invite, the same way a retried send creates a second emailReturn the existing event instead of creating another
Invitee is the address that replied, unless the reply names someone elseAn executive assistant who says “loop in Dana” wants Dana on the invite, and the CRM may have a different address for DanaHold for a person when the named attendee is not in the thread or the CRM
Video link created with the eventAn invite with no place to meet produces a “where are we meeting?” email at 9:58Block the write until the conference link exists

The free/busy check matters most by a wide margin. On Google Calendar it is a freeBusy.query call against the rep's primary calendar and any shared ones they actually live in, made immediately before events.insert, with sendUpdates set to all so the prospect gets the invite from Google rather than a pasted ICS file. The idempotency key reuses the idea from our duplicate emails guide: one thread, one event, however many times the tool gets retried. The event ID then goes into the CRM writeback as a meeting record, and into the audit log next to the reply that earned it.

Holidays

The agent does not know November 26 is Thanksgiving unless something tells it.

Where each option fits (and where it does not)

A plain link wins when volume is high and each meeting is cheap. If you sell a $99-a-month tool and book hundreds of demos, the back-and-forth of offered times costs more than the meetings you lose to friction, and a link is honest about what the meeting is. Chili Piper, or HubSpot's round-robin meetings links, win the moment more than one rep takes meetings and someone has to decide whose calendar gets the slot; we would not rebuild routing inside an agent. Offered times win in the middle, where a reply is rare and a sloppy answer to it wastes weeks of sending.

Our own service sits in that middle, so weigh our opinion with that in mind. Mira books meetings on the client's calendar through Calendly or Google Calendar, the first campaign is a free pilot, and after that pricing is per qualified meeting, agreed with each client. If your team already runs Chili Piper with clean routing rules, keep it, and point whatever agent you use at it.

Test it before a real prospect does

In shadow mode, reply “Tuesday at 10 works” to a test thread, then add a busy block at Tuesday 10:00 to the rep's calendar before approving the draft, and confirm the tool refuses and asks for new times. Fire the same booking call twice and count the events (one). Set a test contact's location to London and check the offered times in late October. Boring work. It takes an afternoon.

Why we care

After the free pilot we get paid per qualified meeting, and a qualified meeting is one where the prospect shows up. A prospect invited for 9:00 their time who believed it was 10:00 does not show up, and neither does one whose slot was double-booked with a renewal call. Mira runs 24/7 on OpenClaw from a Mac mini in San Francisco, booking into clients' calendars at hours when nobody is around to catch a bad invite, so the booking tool has to catch it. How Mira works walks through the rest, from ICP kickoff to booked call.

Jascha Kaykas-Wolff founded Mira Outbound and runs Mira, the outbound agent described across this site, on OpenClaw. These guides come from the guardrails that agent actually uses. kaykas.com