Qualify Typeform leads with UpLead before they hit HubSpot
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.
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.
Additional information
What does this prompt do?
- Watches your demo request, contact us, or waitlist Typeform for new submissions.
- Looks up the person and their company on UpLead in one shot, pulling title, seniority, company size, industry, and revenue.
- Decides if the lead matches your ICP using plain-English rules you set (industries, headcount band, seniority floor).
- Saves every lead to HubSpot with the enriched fields and sets the lifecycle stage based on the verdict, then pings your sales Slack channel only for ICP-qualified leads.
What do I need to use this?
- A Typeform account where your demo or contact form lives.
- An UpLead account with API access (Essentials plan or higher).
- A HubSpot account you can write contacts to.
- A Slack workspace and the channel where you want qualified leads announced.
How can I customize it?
- Edit the ICP rules in plain English: which industries count, your headcount band, the minimum seniority you want sales to talk to.
- Choose which HubSpot lifecycle stage and lead status get applied to qualified vs unqualified leads.
- Pick which Slack channel gets pinged, and what the alert message includes (title, company, size, why it qualified).
- Add personal email domains you want to keep out of UpLead lookups and Slack alerts, like gmail.com or yahoo.com.
Frequently asked questions
Will this work if my form lives on Typeform but my CRM is not HubSpot?
What happens when someone fills out the form with a Gmail or Yahoo address?
How does the agent decide what counts as ICP-qualified?
Will the same person hitting submit twice create duplicate HubSpot contacts?
How much does this cost to run on UpLead?
Stop letting unqualified leads drown your sales channel.
Connect Typeform, UpLead, HubSpot, and Slack once, and every form response gets enriched, scored, and routed automatically.