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.
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?
Will this overwrite contacts I already have in HubSpot?
What if the lead did not give us a phone number?
Which WhatsApp template gets sent?
Do I have to use both my Talk to sales and Get started forms?
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.