Triage Calendly routing form leads to HubSpot and Slack

Score new Calendly routing form submissions against your ICP every 15 minutes, log them in HubSpot, and ping sales in Slack.

Agentic Task
CalendlyHubSpotSlackSalesOperationsLead EnrichmentNotifications & AlertsData Sync

Build me an agent workflow that triages new Calendly routing form submissions every 15 minutes and routes qualified leads to sales while logging them in HubSpot.

Trigger: cron, every 15 minutes. Calendly is not a poll provider, so use a state file (or equivalent dedupe memory) keyed on submission ID and last-run timestamp so the same submission is never processed twice across runs.

On each run, in Calendly: call List Routing Forms to discover the active forms (or use a fixed form UUID I configure), then call List Routing Form Submissions filtered to submissions created since the last successful run. For each new submission, call Get Routing Form Submission to fetch the full questions and answers.

For each submission, the agent should read the Q and A pairs and score the lead against ICP rules I will provide in the prompt config. The ICP rules cover: company size, role / seniority, and use case fit. The agent decides exactly one of three labels: hot lead, nurture, or disqualify. It should also produce a one-line rationale ("why this is hot" or "why this is disqualified") grounded in the actual answers.

For hot and nurture leads: in HubSpot, call Batch Upsert Contacts using email as the unique property. Set lifecycle stage (e.g. "marketingqualifiedlead" for hot, "lead" for nurture, configurable) and a numeric lead_score property. Stamp any additional context from the routing form into standard or custom contact properties as available (company, jobtitle, use_case, etc.).

For hot leads: post a structured Slack message via Send a Message to a sales channel I configure. The message should include the prospect's name, email, company, the routed answers, the recommended account owner (based on owner rules I'll describe in plain English, e.g. round robin or territory), and the one-line "why this is hot" rationale. Format it cleanly with sections so a rep can act in seconds.

For disqualified leads: post a shorter Slack message to a separate triage channel with the prospect's email, the form they filled out, and the disqualification reason. Do not upsert disqualified leads into HubSpot.

Inputs I want to configure: Calendly routing form UUID(s) (or "all"), ICP rules in plain English, account owner rules in plain English, HubSpot lifecycle stage names per label, Slack sales channel, Slack triage channel, and the polling cadence.

Reliability: be conservative on errors. If the LLM cannot confidently classify a submission, default to nurture (not disqualify). If HubSpot upsert fails, still post to Slack. Log each run's processed submission IDs to the state file so retries don't double-post.

Additional information

What does this prompt do?
  • Checks Calendly every 15 minutes for new routing form submissions and reads each visitor's answers.
  • Scores every lead against your ideal customer profile and labels it as a hot lead, a nurture lead, or disqualified.
  • Adds hot and nurture leads to HubSpot with a lifecycle stage and lead score so your CRM stays clean.
  • Posts hot leads to a sales Slack channel with a one-line reason and a suggested account owner, and quietly logs disqualifications in a separate triage channel.
What do I need to use this?
  • A Calendly account with at least one routing form collecting answers from inbound prospects.
  • A HubSpot account where you want new contacts and lifecycle stages updated.
  • A Slack workspace with a channel for sales alerts and a separate channel for triage notes.
  • Your ICP rules in plain English, covering company size, role, and use case fit.
How can I customize it?
  • Adjust the ICP rules so what counts as a hot, nurture, or disqualified lead matches how your team actually sells.
  • Change the Slack channels, mention your sales team, or pick a different account owner rotation for hot leads.
  • Tune the lead score range, lifecycle stage names, or any extra HubSpot properties you want stamped on each contact.
  • Speed up or slow down the cadence if 15 minutes is too aggressive or not fast enough for your inbound volume.

Frequently asked questions

Do I need a paid HubSpot plan for this to work?
No. As long as you can sign in to HubSpot and create or update contacts, this works on free and paid plans. Lead score and lifecycle stage are standard contact properties.
What if a lead fills out the same routing form twice?
The agent keeps a small memory of submissions it has already processed, so the same response will not be re-routed or re-posted to Slack on the next run.
Can I use this if I do not have routing forms set up yet?
You will need at least one Calendly routing form collecting the answers you want to score on, like company size, role, and use case. Once that exists, point this prompt at it.
How do hot leads get assigned to a rep?
You describe your account owner rules in plain English (by territory, segment, round robin, etc.) and the agent suggests an owner inside the Slack message so a human can confirm before assignment.
Will disqualified leads still show up in HubSpot?
By default no. Disqualifications are logged in a separate Slack channel for visibility, and only hot and nurture leads are upserted into HubSpot. You can change this in the prompt if you want a record of everyone.

Stop letting inbound leads sit while sales sleeps.

Connect Calendly, HubSpot, and Slack once, and Geni will triage every new routing form submission within 15 minutes.