Qualify Typeform leads with UpLead before they hit HubSpot

By General Input

Every new form response gets enriched with UpLead, saved to HubSpot with the right lifecycle stage, and only ICP-matched leads ping your sales channel in Slack.

Integrations

  • Typeform
  • UpLead
  • HubSpot
  • Slack Bot

Type

Agentic Task

Categories

  • Sales
  • Marketing

Build me an agent workflow that qualifies every inbound lead from my Typeform before it lands in HubSpot, so reps in Slack only hear about the leads that actually match our ICP.

Trigger: a Typeform webhook on response.submitted from my demo request / contact us / waitlist form. The form id (or webhook tag) should be configurable. The webhook payload includes a definition.fields array and a form_response.answers array; the agent should pull the email answer out of that payload.

Step 1: classify the email domain. If the domain is a known personal/free provider (gmail.com, yahoo.com, hotmail.com, outlook.com, icloud.com, aol.com, proton.me, gmx.com, msn.com, live.com, etc.), mark it as personal and skip UpLead enrichment. Otherwise treat it as a business email and continue.

Step 2: for business emails, call UpLead Search Combined (Person + Company) with the email. This returns person fields (first_name, last_name, title, seniority, linkedin) and company fields (name, domain, employees, industry, revenue, location, linkedin) in a single request and one credit when the email is valid. If UpLead returns no match (email_status invalid/unknown), record it as unenriched and continue without failing the workflow.

Step 3: apply ICP rules in plain English. The user should be able to express rules like: industries in [SaaS, Fintech, Marketplaces], company size between 50 and 1000 employees, seniority at Manager or above. The agent compares the enriched UpLead fields against those rules and produces a verdict: qualified | unqualified | unenriched, plus a one-sentence reason.

Step 4: write the lead to HubSpot using Batch Upsert Contacts with email as the unique identifier, so re-submissions update the existing record instead of creating duplicates. Map UpLead fields to HubSpot properties: firstname, lastname, jobtitle, company, website, industry, numemployees, annualrevenue, city, state, country, linkedinbio. Set lifecycle_stage and hs_lead_status based on the verdict (e.g. qualified -> lifecycle MQL + lead_status NEW, unqualified -> lifecycle lead + lead_status UNQUALIFIED, unenriched -> lifecycle lead + lead_status NEW). Stash the qualification reason on a custom property or in a HubSpot note.

Step 5: if and only if the verdict is qualified, use Slack Bot Send a Message to post a clean lead card to the sales channel (also configurable). The message should include: name + title at company, employee count + industry + revenue band, the one-line ICP reason, the original form responses, and a link to the HubSpot contact. Skip the Slack ping entirely for unqualified leads and for personal-email leads so the channel does not get flooded.

Edge cases the agent should handle: missing email on the form (log + exit), UpLead rate limit 429 (honor Retry-After and retry once), HubSpot 409 on duplicate (fine, that's the upsert working), and Slack channel_not_found (log and surface so the user can fix the channel id).

Inputs the user should be prompted for when installing: Typeform form id (or webhook tag), the ICP rules in plain English, the Slack channel id for qualified leads, the personal-email domain list (with a sensible default), and which HubSpot lifecycle stage + lead status to apply per verdict.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasoniMessage campaign console with pre-flight checks and delivery boardLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsA searchable RFP answer library your bid team drafts fromLinkedIn Ads budget pacing dashboard for every client account