Route Typeform leads to HubSpot, WhatsApp via Heyy, and Slack

Every "Talk to sales" submission gets scored hot, warm, or cold, then filed in HubSpot, kicked into a WhatsApp follow-up via Heyy, and briefed in Slack.

Agentic Task
TypeformHubSpotHeyySlackSalesMarketingLead EnrichmentNotifications & AlertsData Sync

Build me an agent workflow that runs every time a new submission lands on my Typeform "Talk to sales" or "Get started" form. The trigger should be the Typeform new-submission webhook (use Create or Update Webhook on the form so Typeform posts to us in real time).

When a submission arrives, the agent should read every answer, including any free-text fields, and score the lead as hot, warm, or cold.

Scoring rules: HOT = the respondent is a decision-maker (founder, VP, head of, director, owner, manager-or-above buying their own tool) AND they stated a budget OR a timeline to buy. WARM = clearly interested and evaluating, but no budget or timeline yet, or not clearly a decision-maker. COLD = newsletter signup, student, agency wanting to resell, or obviously out of ICP. Keep a short reason string explaining the score in 1 to 2 sentences.

Before the first run does any writes, resolve the IDs the agent will need:

1. Call Heyy List Contact Attributes and find the externalIds for the custom attributes "primary_use_case" and "company_size". If either is missing, create it with Heyy Create Contact Attribute (display name and externalId of the same name, type text) and use the returned externalId.

2. Make sure the three Heyy labels exist: "hot_inbound", "warm_inbound", and "newsletter". If any are missing, create them with Heyy Create Label and remember the returned label IDs. Cache all of this on the workflow so we don't redo it every run.

Then, for every submission, do these three things in parallel where possible:

(1) HubSpot. Call HubSpot Batch Upsert Contacts with the lead's email as the idProperty, and set firstname, lastname, phone, company, jobtitle, and the lifecycle stage that matches the score: lead for hot, marketingqualifiedlead for warm, subscriber for cold (let the user override these mappings in setup). For hot leads only, also call HubSpot Create Deal with a deal name like "<Company> - <Primary use case>", the default sales pipeline, the first stage, and associate it to the contact we just upserted.

(2) Heyy. If the submission has a phone number, call Heyy Create Contact with name, email, phone, the matching label ID (hot_inbound for hot, warm_inbound for warm, newsletter for cold), and custom attributes set to the answers for primary_use_case and company_size (using the externalIds resolved above). This is what triggers the Heyy automation to send the right WhatsApp follow-up template. If the phone is missing, skip Heyy entirely.

(3) Slack. For hot and warm leads only, call Slack Send a Message to the #sales channel with a 3-line brief: line 1 = name, role, company, and the score in caps; line 2 = what they want in one sentence (use case, urgency, budget if mentioned); line 3 = why they scored that way. If the phone was missing and Heyy was skipped, add a final line that says "No WhatsApp follow-up: phone missing". Do NOT post anything to Slack for cold leads.

Other rules: never block one system on another (a HubSpot failure should not stop Slack from posting), but log every failure clearly so I can see what went wrong. Treat the email as the canonical identity. Lowercase and trim it before upserting. If two fields could be the company name, prefer the one from a dedicated company-name question over a domain-derived guess.

At setup time, ask me which Typeform form IDs to listen to, which Slack channel to post in, which HubSpot pipeline and stage to use for hot-lead deals, and confirm the three Heyy label names. Remember everything for future runs.

Additional information

What does this prompt do?
  • Reads every answer on a new Typeform submission and scores the lead hot, warm, or cold based on role, budget, timeline, and fit.
  • Files the contact in HubSpot with the right lifecycle stage, and creates a deal automatically for hot leads.
  • Adds the lead to Heyy with their phone, primary use case, company size, and a label that triggers the matching WhatsApp follow-up template.
  • Posts a 3-line brief to your sales Slack channel for hot and warm leads only, with what they want and why they scored that way.
What do I need to use this?
  • A Typeform account with the form you want to listen to (Talk to sales, Get started, or similar).
  • A HubSpot login with permission to create contacts and deals.
  • A Heyy account with WhatsApp connected, plus labels and follow-up automations set up for hot, warm, and newsletter leads.
  • A Slack workspace and the channel where your sales team gets pinged.
How can I customize it?
  • Change the scoring rules. Tell the workflow what counts as decision-maker, what budget or timeline turns a lead hot, and which answers mean newsletter or out of ICP.
  • Swap the Slack channel, the HubSpot pipeline, or the Heyy labels to match the names your team already uses.
  • Decide what should happen when the phone number is missing. The default is HubSpot and Slack still run, Heyy is skipped, and the Slack brief calls it out.

Frequently asked questions

What scoring signals does the agent actually use?
By default: decision-maker job title plus a stated budget or timeline becomes hot, interested-but-exploring becomes warm, and newsletter signups, students, or out-of-ICP answers become cold. You can tighten or loosen this in the prompt without touching code.
Will this overwrite contacts I already have in HubSpot?
No. The workflow uses HubSpot's batch upsert keyed on email, so existing contacts are updated in place with the new lifecycle stage. A new deal is created only for hot leads.
What if the lead did not give us a phone number?
HubSpot and Slack still run. Heyy is skipped because WhatsApp needs a phone, and the Slack brief mentions that no WhatsApp follow-up was sent.
Which WhatsApp template gets sent?
Heyy picks the template based on the label you attach. The workflow attaches hot_inbound, warm_inbound, or newsletter, and your existing Heyy automations send the matching template. You stay in control of the copy.
Do I have to use both my Talk to sales and Get started forms?
No. Point the workflow at one form, both, or any other Typeform you want. The agent reads the answers and applies the same scoring logic to each.

Stop triaging inbound leads by hand.

Connect Typeform, HubSpot, Heyy, and Slack once. Geni scores every submission, files it, fires the right WhatsApp follow-up, and pings sales only when it matters.