Automate HubSpot Lead Score 80+ → Slack Alert + Deal or Task Created in n8n — Step by Step
A HubSpot contact just crossed lead score 80 — the threshold your team agreed means "sales-ready." But nobody knows. The score updated silently inside a property, no notification fired, and your best-
A HubSpot contact just crossed lead score 80 — the threshold your team agreed means "sales-ready." But nobody knows. The score updated silently inside a property, no notification fired, and your best-fit lead sits untouched in a list while a rep works a colder record. By the time someone runs the daily report, the window is gone. This is the single most expensive gap in most HubSpot-based funnels: the signal exists, but nothing acts on it in real time.
This article shows you how to close that gap with n8n. When a contact hits score 80 or higher, you'll fire an instant Slack alert to the right channel and automatically create either a deal (for named-account motions) or a high-priority task (for SDR follow-up) inside HubSpot — no manual triage, no polling a dashboard. Everything below is concrete: the exact nodes, the trigger configuration, the branching logic, and the traps that break this workflow in production.
Why manual lead-score follow-up quietly kills your pipeline
Lead scoring only creates value if the score changes behavior. Most teams treat the score as a passive attribute — a number a rep might glance at if they happen to open the contact. That breaks down for three reasons. First, latency: the average "hot" lead is worked hours or days after they signal intent, and conversion rates collapse with every hour of delay. Second, consistency: manual triage depends on whoever is watching, so scores that spike overnight, on weekends, or during a busy sprint get missed entirely. Third, routing: even when someone notices, deciding whether this lead deserves a deal record or just a follow-up task is a judgment call made differently by every person.
The fix isn't more discipline — it's removing the human from the detection step. HubSpot already computes the score. What's missing is a listener that reacts the instant the threshold is crossed and routes the response deterministically. That's exactly what an n8n workflow does well: watch a property, evaluate a condition, and fan out to Slack and HubSpot in the same run.
The solution: an event-driven n8n workflow
The architecture is a straight line with one fork. n8n watches for HubSpot contact changes, filters down to only the records that just crossed score 80, sends a Slack alert, and then branches: enterprise-fit contacts get a HubSpot deal; everyone else gets a high-priority task assigned to their owner. The whole run takes under two seconds and requires zero human input until the rep clicks into Slack.
You'll use five node types: a HubSpot Trigger (or a scheduled HubSpot node for polling), an IF node to enforce the 80+ threshold, a Slack node for the alert, a second IF/Switch node for the deal-vs-task decision, and two HubSpot action nodes — one to create a deal, one to create a task. n8n handles credentials once via OAuth2 for HubSpot and a bot token for Slack, then reuses them across every node.
Step-by-step setup in n8n
1. Add the trigger. Drop in a HubSpot Trigger node and authenticate with your HubSpot OAuth2 app (Developer account → private/public app with the crm.objects.contacts.read, crm.objects.deals.write, and tickets/tasks scopes). Set the event to Contact Property Change and specify the property hs_lead_status or your custom score property — for HubSpot's built-in predictive score, use hubspotscore. HubSpot pushes a webhook to n8n the moment that property changes, so you react in real time. If your plan doesn't expose the webhook subscription you need, fall back to a Schedule Trigger (every 5–15 minutes) feeding a HubSpot node with a search filter for hubspotscore >= 80.
2. Enforce the threshold with an IF node. The webhook fires on any change to the property, including drops from 90 to 70. Add an IF node with a Number condition: {{ $json.propertyValue }} is greater than or equal to 80. To avoid re-alerting on every tiny bump above 80, also compare against the previous value if HubSpot sends it (propertyValue >= 80 AND previousValue < 80) — this guarantees you only fire on the crossing, not on every update while the contact stays hot.
3. Enrich the contact. The webhook payload is thin — usually just the object ID and the changed property. Add a HubSpot node set to Contact → Get, passing {{ $json.objectId }}, and request the properties you'll need downstream: firstname, lastname, email, company, jobtitle, hubspot_owner_id, and num_associated_deals. Now you have a full record to build messages and route on.
4. Send the Slack alert. Add a Slack node, operation Send Message, targeting a channel like #hot-leads. Use Block Kit or a rich text message: "🔥 *{{ $json.properties.firstname }} {{ $json.properties.lastname }}* at *{{ $json.properties.company }}* just hit lead score *{{ $json.properties.hubspotscore }}*." Include a button or link straight to the HubSpot contact: https://app.hubspot.com/contacts/YOUR_PORTAL_ID/contact/{{ $json.objectId }}. That one-click link is what turns an alert into action.
5. Branch: deal or task. Add a second IF (or a Switch for more tiers) to decide the follow-up type. A common rule: if company is set and num_associated_deals equals 0, create a deal (net-new enterprise opportunity). Otherwise create a task. On the deal branch, use a HubSpot node → Deal → Create: set dealname to {{ $json.properties.company }} – Inbound Hot Lead, dealstage to your "Appointment Scheduled" or first real stage, pipeline to your default, and associate the contact via the association field using {{ $json.objectId }}. Set hubspot_owner_id from the enriched record so it lands with the right rep.
6. Create the task on the other branch. Use a HubSpot node → Engagement/Task → Create (or the Tasks API via an HTTP Request node if your n8n version lacks native task support). Set the subject to Follow up: {{ $json.properties.firstname }} hit score 80+, priority to HIGH, due date to {{ $now.plus(1, 'hour') }}, and associate it to the contact. Assign it to hubspot_owner_id. Both branches then converge — you can add a final Slack or HubSpot Note node to log that the automation ran.
What this buys your team
Speed to lead. The gap between "score crossed 80" and "rep is notified" drops from hours to seconds. Since inbound conversion is dominated by response time, this is often the highest-leverage automation in the entire stack — it changes outcomes without changing headcount.
Zero missed signals. The workflow runs 24/7. A lead that heats up at 2 a.m. Saturday gets a task waiting Monday morning, correctly prioritized and assigned. Nothing depends on a human watching a dashboard.
Consistent routing. The deal-vs-task decision is now a rule, not a mood. Every enterprise-fit lead gets an opportunity record; every other hot lead gets a tracked, high-priority task. Your pipeline data stays clean because records are created the same way every time.
Full auditability. Because n8n logs every execution, you can see exactly which contacts triggered, what was created, and whether Slack delivered — turning "did we follow up on that lead?" into a searchable answer instead of an argument.
Common pitfalls and how to avoid them
Alert storms from repeated firing. Without the "crossing" check in step 2, a contact hovering at 82–85 will re-trigger on every minor recalculation. Always gate on previousValue < 80 AND currentValue >= 80, or write a boolean property like alerted_hot back to HubSpot after the first fire and exclude already-alerted contacts in your IF node.
Thin webhook payloads. Teams skip the enrichment node and then wonder why Slack shows undefined for the company name. The trigger gives you an object ID, not a full contact — the Contact → Get step is not optional.
OAuth scope errors. The most common setup failure is a 403 on deal or task creation because the HubSpot app was only granted read scopes. Grant crm.objects.deals.write and task/engagement write scopes up front, and re-authorize the credential in n8n after changing scopes — n8n caches the token.
Owner mismatches. If hubspot_owner_id is empty on the contact, the deal or task lands unassigned and disappears. Add a default owner fallback in a Set node so unowned hot leads still route to a round-robin queue or team lead.
Timezone drift on due dates. HubSpot expects task due dates as epoch milliseconds. Using a plain date string, or n8n's server timezone instead of your team's, produces tasks due at the wrong hour. Format explicitly with {{ $now.plus(1,'hour').toMillis() }} and confirm your n8n instance timezone matches the team's.
Build this once and it runs silently forever, converting a passive number into instant, correctly-routed action on every hot lead you generate. That's the difference between a scoring model that looks good in a report and one that actually feeds your pipeline.
Ja construimos isso pra voce
Nao comece do zero. O HubSpot Lead Score 80+ → Slack Alert + Deal or Task Created e um workflow n8n pronto para instalar — conecta suas ferramentas em minutos, sem codigo.
Instalar por $49 →