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.

Agentic Task
TypeformUpLeadHubSpotSlack BotSalesMarketingLead EnrichmentNotifications & AlertsData Sync
PromptCreate

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.

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.

FAQs

Will this work if my form lives on Typeform but my CRM is not HubSpot?
This prompt is wired for HubSpot. If you use a different CRM, start from this template and swap HubSpot for your CRM of choice when the workflow is being built.
What happens when someone fills out the form with a Gmail or Yahoo address?
Personal email domains skip the UpLead lookup, so you do not burn a credit on a contact UpLead cannot enrich. The contact is still created in HubSpot, but the Slack ping is suppressed since there is no company context to act on.
How does the agent decide what counts as ICP-qualified?
You write the rules in plain English when you set this up. Something like "SaaS or fintech, 50 to 1000 employees, manager level or above." The agent compares those rules to the enriched fields from UpLead and makes the call.
Will the same person hitting submit twice create duplicate HubSpot contacts?
No. Contacts are matched on email, so a second submission updates the existing record with any new info instead of creating a duplicate.
How much does this cost to run on UpLead?
UpLead charges one credit per enriched person and one per company. The combined lookup used here covers both in a single request, so each qualified business lead costs roughly two credits. Personal email submissions cost nothing because they are skipped.

Related templates

Build a credential rotation checklist when someone leaves

When someone leaves, we check which shared passwords they used in their final months and post a ranked rotation list to your security channel.

1Password
Rippling
Slack Bot
+1
Agentic Task
Weekly Amazon S3 bucket security audit posted to Slack

Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.

Amazon S3
Slack Bot
Google Sheets
Agentic Task
Log Agorapulse social conversations to HubSpot contacts

Twice every weekday, the conversations from your social inbox land on the right HubSpot contact timelines, with a Slack recap for sales.

Agorapulse
HubSpot
Slack Bot
Agentic Task
Turn procurement portal tenders into CRM deals each morning

Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.

Anchor Browser
Google Sheets
HubSpot
+1
Agentic Task
Clean up HubSpot contacts from your Amazon SES suppression list

Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.

Amazon SES
HubSpot
Slack Bot
Agentic Task
Draft polite follow-ups for emails that never got a reply

Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.

Aurinko
Google Sheets
Slack Bot
Agentic Task

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.