Enrich Typeform demo requests with Clay and route them to HubSpot and Slack
The moment a demo request lands in Typeform, run your Clay enrichment routine, tier the lead, upsert HubSpot, and post a ready-to-act brief in Slack.
Build an agent-based workflow that turns every new Typeform demo request into an enriched, scored, sales-ready lead. The trigger is a Typeform webhook on my demo request form, so the workflow runs the moment someone submits the form.
Inputs the workflow needs at build time: the Typeform form ID for the demo request form, my Clay enrichment routine ID (I have the routine already built in Clay), the HubSpot property names I want set from the enrichment, and the Slack channel ID for my SDR team.
On each Typeform submission, pull the submitter's email and derive the company domain from the email (everything after the @). If the domain is a free personal email provider (gmail.com, yahoo.com, hotmail.com, outlook.com, icloud.com, aol.com, protonmail.com) or matches any competitor domain I list at build time, stop the run and do NOT push to HubSpot or Slack. Log the skip reason and exit.
Otherwise, kick off Clay enrichment using the Run a Routine operation with the routine ID and a single input row containing the email and company domain. This returns a routine_run_id with status in_progress. Then poll Get Routine Run Results every 5 seconds, up to a 2 minute ceiling, until status is complete, failed, or validation_failed. If it fails or times out, post a short Slack message to the SDR channel saying enrichment failed for this lead so a human can pick it up manually, and exit.
When enrichment completes, read the results and extract: person full name, job title, seniority, LinkedIn URL; company name, domain, headcount, industry, HQ location, tech stack, funding stage, and any champion signals the routine returns (e.g. "uses our category", "recent role change", "posted about pain point"). Fields that Clay does not return should just be left blank downstream, not fabricated.
Score the lead as Tier 1, Tier 2, or Tier 3 using the enriched profile. Use judgement, not a rigid rubric. Roughly: Tier 1 is a strong ICP fit with clear buying signal or seniority; Tier 2 is a plausible fit that needs qualification; Tier 3 is weak fit but not disqualifying. Include a one-line reason for the tier that names the specific evidence (e.g. "Series B fintech, 320 employees, Head of Ops, stack includes Segment").
Push the contact to HubSpot using Batch Upsert Contacts matched on email as the unique identifier. Set every property I have a value for: firstname, lastname, jobtitle, company, website, industry, numemployees, plus a lead_tier custom property ("Tier 1", "Tier 2", or "Tier 3"), a lead_tier_reason property with the one-line reason, and an enriched_at timestamp.
Then post a Slack message to the SDR channel using the Send a Message operation. Format the message as a lead brief with: a tier badge at the top (🔥 Tier 1, ⭐ Tier 2, or 🧊 Tier 3), the person's name and title, the company name with headcount and industry, 2 to 4 bullet points of the strongest enrichment signals (tech stack, funding, champion signals), the one-line tier reason, and a suggested opening line the SDR can copy-paste that references something specific from the enrichment. Include a link to the HubSpot contact record at the bottom.
Keep the workflow resilient: retry Clay and HubSpot calls on transient errors (429 or 5xx) with exponential backoff, respect Clay's Retry-After header when rate limited, and never lose a submission silently. If HubSpot upsert fails, still post the Slack brief with a note that HubSpot sync failed so an SDR can add the contact manually.
Additional information
What does this prompt do?
- Fires the instant someone submits your Typeform demo request form, so sales sees the lead in seconds, not the next morning.
- Sends the submitter's email and company domain through your existing Clay enrichment routine and waits for the results to come back.
- Reads the enriched profile (person, company, headcount, industry, tech stack, champion signals), scores the lead as Tier 1, Tier 2, or Tier 3 against your ICP, and skips obvious non-fits like competitors and personal email domains.
- Creates or updates the contact in HubSpot with every enriched field set, and posts a Slack brief with the tier badge, a one-line reason, and a suggested opening line for the SDR.
What do I need to use this?
- A Typeform account with the demo request form you want to watch.
- A Clay workspace with an enrichment routine already built and its routine ID handy.
- A HubSpot login with permission to create and update contacts.
- A Slack workspace and the SDR channel you want the briefs posted in.
How can I customize it?
- Point it at a different form, or add more forms so every inbound source runs the same play.
- Change the tiering rules (headcount, industry, tech stack, seniority) so the badges match your ICP definition.
- Swap the Slack channel, mention a specific rep, or route Tier 1 leads to a different channel from Tier 2.
Frequently asked questions
Do I need to build the Clay enrichment first?
What happens with personal email domains like gmail.com or yahoo.com?
How fast does sales get the Slack brief?
Will it create duplicate HubSpot contacts if the same person fills the form twice?
Can I use this with Slack Bot instead of my personal Slack account?
Related templates
Stop letting demo requests sit unread.
Connect Typeform, Clay, HubSpot, and Slack once, and Geni turns every new form response into an enriched, scored, sales-ready lead in under two minutes.