Smart lead routing for new Cal.com bookings

When someone books a meeting, an agent figures out who they are, scores them, and routes the booking to the right rep in Slack and HubSpot.

Agentic Task
Cal.comHubSpotSlackApolloSalesOperationsLead EnrichmentNotifications & Alerts
PromptCreate

Build me an agent workflow that routes every new inbound Cal.com booking to the right rep before the meeting starts. Trigger: poll Cal.com for the new_booking event.

When a new booking fires, the agent should pull full booking details from Cal.com using Get a Booking so it has the attendee email, event type, scheduled time, and any intake form answers.

Then the agent classifies the attendee by running HubSpot Search Contacts on the attendee email. There are three branches:

1) Existing customer (HubSpot lifecycle stage = customer): post a message in the account-management Slack channel naming the attendee, event type, scheduled time, and the existing CSM. Also use HubSpot Create Task to create a task for the existing contact owner with subject like "Cal.com booking from existing customer <name>" and a due date matching the meeting time.

2) Existing open opportunity: run HubSpot Search Deals filtered by the contact id with deal stage not in closed-won or closed-lost. If at least one open deal exists, send a Slack DM to the deal owner with the contact link, deal link, event type, scheduled time, and a one-line rationale ("open deal in stage X, you own it").

3) Brand-new contact (no HubSpot match): run Apollo People Enrichment on the email, then Apollo Organization Enrichment on the resulting company domain to pull employee count, industry, and funding stage. Score against this ICP rubric (treat these as the defaults the user can edit later):

- Enterprise: 500+ employees OR Series C+ funding OR target industries (fintech, healthcare, enterprise SaaS). - SMB: 10-499 employees and not in an excluded industry. - Not a fit: under 10 employees, consumer-only, or excluded industries (agencies, students, competitors).

For enterprise leads, post in the enterprise SDR Slack channel. For SMB, post in the SMB SDR Slack channel. For not-a-fit, post in a low-priority triage channel with a note that the rep can disqualify. In all three new-contact cases, also call HubSpot Create Contact with email, name, lifecycle stage = lead, and a custom property source = "Cal.com inbound" plus the event type.

Every Slack message (channel post or DM) must name: attendee full name and email, company (if known), event type, meeting time in the attendee's local timezone if available otherwise UTC, segment classification (Existing customer / Open deal / Enterprise / SMB / Not a fit), and a one or two sentence rationale explaining why the agent classified it that way (e.g. "500-person fintech, Series D, matches enterprise rubric"). Include the Cal.com booking link and the HubSpot contact link.

If anything fails (HubSpot lookup error, Apollo no match, missing email), the agent should fall back to posting a minimal message in the SMB SDR channel with whatever it does know plus a note about what went wrong, so no booking ever falls through silently.

Make the Slack channel names, the ICP rubric, and the HubSpot custom property names easy to edit at the top of the agent instructions so the user can tune routing without rewriting the whole prompt.

Additional information

What does this prompt do?
  • Watches Cal.com for every new booking and pulls the attendee email, event type, and intake form answers.
  • Looks the attendee up in HubSpot to decide if they are an existing customer, an open opportunity, or a brand-new contact.
  • Enriches new contacts with Apollo so the agent knows company size, industry, and funding before scoring against your ICP.
  • Routes the booking to the right Slack channel or DM with a clear summary of who is coming, why they matter, and who should own the meeting.
What do I need to use this?
  • A Cal.com account where inbound meetings are booked
  • A HubSpot login with permission to read contacts and deals and to create contacts and tasks
  • A Slack workspace with the channels you use for SDRs, account managers, and deal owners
  • An Apollo account for company and person enrichment
  • Your ICP rubric (the few traits that make a lead enterprise vs SMB vs not a fit) so the agent can score consistently
How can I customize it?
  • Adjust the ICP rubric: company size bands, target industries, funding stage, geography, or anything else your team uses to separate enterprise from SMB.
  • Change which Slack channel each segment goes to, or add a DM to the deal owner when an existing opportunity is detected.
  • Edit the HubSpot fields written for new contacts (lead source, segment, event type) and the task wording assigned to the existing CSM.

Frequently asked questions

How is this different from a pre-meeting brief workflow?
A pre-meeting brief assumes the right rep already owns the meeting and prepares them for it. This workflow runs first: it decides who that right rep is, then routes the booking before the meeting starts.
What happens if the attendee is already in HubSpot as a customer?
The agent posts the booking into your account-management Slack channel and creates a HubSpot task for the existing CSM so the relationship stays with them.
What happens if there is already an open deal for this contact?
The agent finds the deal owner and sends them a Slack DM with the contact and deal links so the meeting goes to the person who owns the opportunity.
How does it decide enterprise vs SMB for new leads?
It uses the rubric you describe in the prompt, applied to the company data Apollo returns. You can change the bands and signals at any time by editing the prompt.
Will it create duplicate contacts in HubSpot?
No. It only creates a new contact when the email is not already in HubSpot, and it tags the new contact with a Cal.com inbound source so you can track where these leads came from.

Related templates

Weekend football matchday preview, posted to Slack

Every Friday, get a ready-to-read preview of your league's weekend matches, with positions, form, scorers to watch, and predicted results, posted to Slack.

API-Sports
Slack
Agentic Task
Weekly Braintree revenue and refund report for finance

Every Monday morning, finance leadership gets a clear recap of last week's Braintree sales, refunds, and disputes by email and Slack.

Braintree
Gmail
Slack
Agentic Task
Screen new HubSpot contacts for data breach exposure

The moment a new contact lands in HubSpot, we check their email against known data breaches and flag the high-risk ones so your team can act fast.

Have I Been Pwned
HubSpot
Slack Bot
Agentic Task
Daily IP reputation screening with Slack threat alerts

Every morning we check your list of IP addresses for abusive activity, update your spreadsheet, and alert your team only about the risky ones.

AbuseIPDB
Google Sheets
Slack
Agentic Task
Turn Heroku deploys into a readable Slack changelog

Every time you ship to Heroku, we post a clear summary to Slack listing what changed, who deployed it, and whether it was a rollback.

Heroku
GitHub
Slack
Agentic Task
Enrich and prioritize new Help Scout tickets in Slack

The moment a new Help Scout conversation arrives, we check the customer in your CRM, flag high-value accounts, and post a priority alert to Slack before anyone touches it.

Help Scout
HubSpot
Slack Bot
Agentic Task

Stop manually triaging inbound bookings.

Connect Cal.com, HubSpot, Slack, and Apollo once, and Geni routes every new meeting to the right rep with the context they need.