Spot the clients who stopped rebooking and book them back in
A standing list of everyone who books with you, ranked by who is overdue for their next session, so you can book them back in without leaving the screen.
Build me a client rebooking desk on top of Cal.com and HubSpot. I coach and consult, and most of my income comes from people who book me again and again. The problem is that nobody cancels loudly. A regular just quietly stops rebooking, and I notice months later. I want one screen that shows me everyone who has booked with me before, tells me who is overdue for their next session, and lets me book that session for them without leaving the app.
The main view is a roster of past clients. Build it by paging Cal.com Get All Bookings over the last six months, using take and skip until the pagination metadata says there is no next page, then group the results by attendee email. That email is the identity key for the whole app. For each person show their name, their email, total number of sessions, the date of their most recent session, how many weeks ago that was, and whether they already have a future booking on the calendar. Make the number of months of history a setting the user can change, since a six month window is a starting point and not a rule.
The cadence logic is the heart of the screen, so do not hardcode a fixed number of weeks. For each person, sort their past bookings by date, compute the gaps between consecutive bookings, and take the median gap as their personal normal rhythm. Flag someone as lapsed when the time since their last session exceeds their own median gap by a meaningful margin, around one and a half times, and they have no future booking. A client who books monthly and a client who books weekly must not be judged by the same ruler. Make that multiplier adjustable in settings.
Someone with only one past booking has no rhythm to measure, so do not force them into the lapsed list. Put them in a separate group called something like never returned. Sort the board so lapsed clients sit at the top, ordered by how far past their own rhythm they have drifted, then the never returned group, then everyone who is on track. Someone with a future booking already on the calendar is never lapsed, no matter how long ago their last session was, and should be visually marked as booked.
Clicking a person opens a detail panel. On one side show their booking history, every past session with its date and session type, plus their computed rhythm and how overdue they are. On the other side show their CRM context, fetched with HubSpot Get Contact using the email address as the lookup with the idProperty parameter, falling back to HubSpot Search Contacts on the email when the direct lookup finds nothing. Show lifecycle stage, contact owner, and company. Request the contact's associated deals and pull each one with HubSpot Get Deal to show deal name, stage and amount, so I can see whether this is a live opportunity before I reach out. If the person has no HubSpot record at all, say so plainly and let the rest of the panel keep working.
The same panel is where I book the next session. Populate a session type picker from Cal.com Get All Event Types, which returns the event types for the authenticated user. Do not ask me to paste event type IDs anywhere. Default the picker to the session type this particular person has booked most often in their own history, since that is almost always the one I want, and let me override it. Once a session type is chosen, call Cal.com Get Available Time Slots for that event type across the next fourteen days and show the open times grouped by day. Make the look ahead window configurable.
When I pick a time, call Cal.com Reserve a Slot to hold it so nobody else takes it while I finish, then call Cal.com Create a Booking in the client's name using their email and name from the booking history. Reservations are temporary and expire, so create the booking promptly after I confirm, and handle the case where the hold lapsed while I was deciding by telling me clearly, refreshing the available times, and letting me pick again rather than failing silently or double booking. If a colleague should join, let me add their email and call Cal.com Add Guests to a Booking after the booking exists. That endpoint is rate limited to five requests per minute, so add guests one booking at a time and never in a bulk loop.
After a booking succeeds, write it back to the CRM with HubSpot Create Note, associated to that contact, recording that I rebooked them and the date and time of the new session. Show the result inline in the panel and update the person's row immediately so they now count as having a future booking and drop off the lapsed list. If the HubSpot note fails, the booking still stands, so surface the note failure separately and let me retry it without rebooking.
A few Cal.com API details that matter. Slots endpoints need the header cal-api-version set to 2024-09-04 and bookings endpoints need cal-api-version set to 2026-02-25, and a missing version header shows up as a confusing 404. Get Available Time Slots requires no authentication. Successful responses are wrapped as an object with status and data, so read the payload out of data. The standard rate limit is 120 requests per minute, which is easy to hit when paging months of history on first load, so page sequentially rather than firing every page in parallel, and cache the roster so switching between clients does not refetch the entire history.
Persist the user's settings, meaning the history window, the lapsed multiplier, the default session type and the look ahead window. Add a manual refresh control on the roster so I can pull the latest bookings after I have been working in Cal.com directly. Keep the language throughout the interface about clients and sessions, not about slots or event types, because this is a screen I open between calls and I want it to read like a client list rather than a scheduling tool.
What does this prompt do?
- Builds a list of every client who has ever booked with you, showing how many sessions they have had, when the last one was, and whether anything is on the calendar next
- Works out each person's own normal rhythm, so a monthly client and a weekly client are judged fairly, and floats anyone who is overdue with nothing booked to the top
- Opens a booking panel on any client, shows your real availability for the next two weeks, and books the session in their name, adding a colleague as a guest when one should join
- Shows their CRM record beside the booking panel so you know their deal and lifecycle status before you reach out, and records the rebooking back to the CRM afterwards
What do I need to use this?
- A Cal.com account where you take your client bookings
- A HubSpot login, so the app can show each client's record and log a note when you rebook them
- A few months of past bookings in Cal.com, since the list is built from your booking history
How can I customize it?
- Change how far back the history goes, the default is the last six months of bookings
- Adjust how overdue someone must be before they count as lapsed, if you want a gentler or stricter cut-off
- Choose which session type the booking panel offers by default, and how far ahead it looks for open times
FAQs
How does it know a client is overdue?
What happens to people who only ever booked once?
Does it book the session for the client, or just remind me to?
Will this work if I do not use HubSpot?
Does it change anything in my calendar without asking?
Related templates
Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.
Pick a date, a starting point and a radius, then build a sequenced day of customer visits that lands straight on your calendar.
One screen where reps filter for companies that fit, see who is actually reachable at each account, and save only the addresses that verify.
See every competitor battlecard next to the number of open deals that name that competitor, so the cards carrying real pipeline get refreshed first.
Score every target account against the buying committee you actually need, see the exact holes, and have an assistant fill them in your CRM.
See open and pending conversations from all your Help Scout inboxes in one queue, sorted so the customers who have waited longest on you come first.
Stop losing regulars who quietly stop booking.
See who is overdue for their next session and book them back in from the same screen, before they drift somewhere else.