Route new Calendly bookings into Customer.io and brief the host in Slack
When someone books on Calendly, save them in Customer.io with their intake answers, fire the right pre-meeting sequence, and ping the host in Slack with the context they need.
Build me an agent that runs every time a new meeting is booked on Calendly. The trigger should be Calendly's invitee.created webhook so this fires the moment a prospect or customer picks a time, with no polling.
What I want the agent to do, in order:
1) Read the booking. The webhook payload has the invitee's name, email, the event type they booked, the scheduled start time, and their answers to the intake questions. If anything is missing or thin, call Calendly's Get Event Invitee to enrich. Parse the intake answers into clean fields like job title, company, and what they want to discuss.
2) Classify the meeting. Look at the Calendly event type name plus the intake answers and decide which bucket this booking falls into. The buckets I care about are: demo or sales call, customer kickoff or success call, and internal (1:1, interview, recruiting, anything not customer-facing). Keep the classification logic simple and explainable.
3) Save the person in Customer.io. Call Customer.io's Identify Person via the Pipelines API with the invitee's email as the identifier. Set traits for first/last name, company, the upcoming meeting time, the Calendly event type, and each parsed intake answer as its own trait so segments and templates can use them. Do this for every booking, even internal ones, so the contact record always stays current.
4) Fire the right Customer.io flow based on the classification:
- Demo or sales booking: call Trigger Broadcast on the matching pre-meeting nurture broadcast. The broadcast should send a 'see you soon' email with the calendar invite, a couple of prep links, and any tailored case studies. Pass the parsed intake answers as personalization data so the email can reference what they want to talk about.
- Customer kickoff or success booking: call Track Event with an event name like kickoff_scheduled (or success_call_scheduled), passing the meeting details as properties. This lets my existing event-triggered campaign in Customer.io handle the rest.
- Internal booking: skip the Customer.io broadcast and event entirely. Identify Person already ran in step 3, which is fine.
Use a small configured map of Calendly event types to either a broadcast id or an event name so I can edit which meeting type fires which flow without changing the agent instructions. The map should also tell the agent which event types are internal.
5) Notify the host in Slack. Use Slack Bot's Send a Message to post into the host's deal-room or AE channel (also configurable per host or per event type, with a sensible default channel). The message should summarize: who booked (name, role, company), what they want to discuss (pulled straight from the intake answers), any quick signal you can pull from the company name like apparent size or domain, the meeting time in the host's timezone, and a link back to the Calendly event. Format it as a tight one-message brief with Slack mrkdwn, not a wall of text.
Failure handling I care about: the agent should degrade gracefully. If the broadcast lookup fails or Trigger Broadcast errors out, still complete the Identify Person and the Slack post, and call out the broadcast failure inside the Slack message so I can fix the mapping. If the Slack post fails, retry once with a short backoff. Respect Customer.io's per-broadcast rate limit (one trigger per ten seconds per broadcast) which is fine for booking volume but should not be ignored if a flood happens.
Inputs I want to be able to edit without touching the agent's logic: the event-type-to-broadcast-or-event map (including which types are internal), the default Slack channel, optional per-host channel overrides, and the set of intake question keys that should be promoted to Customer.io traits.
Additional information
What does this prompt do?
- Listens for new Calendly bookings and reads the invitee's intake answers (job title, company, what they want to discuss) to classify the meeting.
- Creates or updates the person in Customer.io with their email, name, company, meeting time, event type, and parsed intake answers.
- Fires the right Customer.io pre-meeting flow: a sales or demo booking triggers your nurture broadcast, a kickoff or success call records a behavioral event for your existing campaign.
- Posts a tight summary to the host's deal-room or AE channel in Slack with who booked, what they care about, company signal, the meeting time, and a link back to the booking.
What do I need to use this?
- A Calendly account (paid plan needed to receive booking webhooks).
- A Customer.io workspace with at least one pre-meeting broadcast and one event-triggered campaign already set up.
- A Slack workspace where the Geni bot can post to the channels your reps live in.
- A short list of which Calendly event types map to which Customer.io broadcast or event name.
How can I customize it?
- Edit the map of Calendly event types to Customer.io broadcasts or events so each meeting type fires the right pre-meeting flow.
- Change which traits get saved on the Customer.io person (e.g. add lead source, route, or referrer).
- Pick the Slack channel per host or per event type, or send a DM to the host instead of posting to a shared channel.
- Treat internal meetings like 1:1s or interviews as Slack-only so they skip Customer.io entirely.
Frequently asked questions
Do I need to add anything in Calendly first?
What happens if the booking is for an internal meeting like a 1:1 or an interview?
Can I send different Customer.io sequences for different meeting types?
What if the agent cannot find a matching Customer.io broadcast?
Will this also work for cancellations?
Turn every Calendly booking into a warm, ready-to-run meeting.
Connect Calendly, Customer.io, and Slack once and Geni preps the prospect and the host the moment the meeting is booked.