n8n + n8n: Expansion Signal Detected → AE Alert + CRM Log

Your best customers are already telling you they're ready to spend more — you're just not listening at machine speed. A workspace jumps from 8 to 40 seats. API usage triples in a week. A free-tier acc

n8n + n8n: Expansion Signal Detected → AE Alert + CRM Log

Your best customers are already telling you they're ready to spend more — you're just not listening at machine speed. A workspace jumps from 8 to 40 seats. API usage triples in a week. A free-tier account hits the storage ceiling three days running. Every one of those is an expansion signal, and every one has a shelf life measured in hours. The account executive who reaches out while the buying intent is hot closes the upsell. The one who finds out at the next QBR watches the moment evaporate. This is the exact gap the Expansion Signal Detected → AE Alert + CRM Log workflow closes: it watches your product and billing data, scores every account against expansion criteria, and the instant a threshold trips it pings the right AE in Slack, logs the event in HubSpot, sends a Gmail brief, and appends a row to Google Sheets — automatically, in seconds, with zero human polling.

The problem: expansion revenue leaks through the gap between signal and action

Net revenue retention is the single most important number in most SaaS businesses, and the majority of it comes from existing accounts growing — not from new logos. Yet expansion is almost always run reactively. The data that proves an account is ready to grow lives in five disconnected places: seat counts in your app database, usage metrics in your analytics warehouse, invoice events in Stripe, support ticket volume in your helpdesk, and engagement scores in your CRM. No single AE looks at all five daily. They can't.

So what happens in practice? Signals fire silently. An admin invites twelve new users on a Tuesday afternoon — a textbook expansion trigger — and nobody on the revenue team knows until the AE happens to open the account weeks later. By then the champion has moved on, the budget cycle has passed, or a competitor has slipped in. Studies of upsell motion consistently show that outreach within 24 hours of an intent signal converts several times better than outreach a week later. Manual monitoring simply cannot hit that window at scale. You are leaving your highest-margin revenue on the table because the alert never reached a human in time.

The solution: a score-gated signal router that fires the moment intent appears

This workflow treats expansion like the time-sensitive event it is. It continuously ingests account-level data, runs each account through a weighted scoring model, and only fires when the score crosses a threshold you define — so AEs get high-signal alerts, not noise. When an account trips the gate, four things happen in parallel: a Slack message lands in the account owner's channel with the account name, the specific triggering signal, and current ARR; a note is written to the HubSpot deal or company record so the CRM is the source of truth; a formatted brief goes out by Gmail to the AE and their manager; and a row is appended to a Google Sheet that serves as the running expansion pipeline for reporting.

The "score-gated" part is what makes it usable. A single new seat isn't worth an alert. Twelve new seats plus a 40% usage jump plus a recent support ticket about "adding a department" is a five-alarm expansion opportunity. The scoring layer combines those weak individual signals into one strong, actionable one — and suppresses everything below the line so your AEs learn to trust the alert instead of muting it.

How it works: step-by-step setup in n8n

The entire pipeline is a single n8n workflow with a handful of nodes. Here is the anatomy and the configuration that matters.

1. Trigger — Schedule or Webhook. Start with a Schedule Trigger node set to run every 15–60 minutes (a Cron expression like */30 * * * *). For true real-time behavior, add a Webhook node instead and have your app POST directly on seat-invite or usage-threshold events. Most teams run both: the webhook for instant events, the schedule as a safety-net sweep.

2. Fetch account data — HTTP Request + Postgres/MySQL. Use an HTTP Request node to pull usage from your analytics API and a Postgres (or MySQL) node to query current seat counts and plan tier from your product database. If billing lives in Stripe, add a Stripe node to read subscription quantity and MRR. Pull all three into the workflow so the scoring step has a complete picture per account.

3. Merge and normalize — Merge + Code node. Use a Merge node (mode: Combine, matching on account_id) to join usage, seats, and billing into one item per account. Then a Code node normalizes the fields — deltas versus last run, percentage growth, days-since-last-signal — so scoring works on consistent inputs.

4. Score the signal — Code node. This is the heart of the workflow. A Code node applies your weighted model. A simple, effective starting formula in JavaScript:

const score = (seatDelta * 5) + (usageGrowthPct * 0.5) + (nearPlanLimit ? 20 : 0) + (recentUpgradeIntent ? 15 : 0); return [{ json: { ...item.json, score } }];

5. Gate it — IF node. Feed the score into an IF node with a condition like {{ $json.score }} greater than 30. Only items above the threshold pass through to the alerting branch. Everything else is discarded silently. Tune the threshold on real data over your first two weeks.

6. Fan out the actions — four nodes in parallel. On the "true" output of the IF node, branch to: a Slack node (operation: Send Message) posting to the AE's channel using account-owner lookup; a HubSpot node (resource: Company or Deal, operation: Update) writing a timestamped note; a Gmail node (operation: Send) with an HTML brief; and a Google Sheets node (operation: Append) adding the row to your expansion tracker. Because n8n runs branches concurrently, all four fire in the same execution.

7. Route to the right AE — a lookup step. Before the fan-out, add a Code or HubSpot node that maps account_id to the owning AE's Slack user ID and email, so alerts reach the person who actually owns the relationship rather than a generic firehose channel.

Why this beats manual monitoring and dashboards

Speed. The gap between signal and outreach collapses from days to minutes. Your AE gets the Slack ping while the champion is still logged in and expanding usage — the highest-conversion moment there is.

Signal quality. Because alerts are score-gated, AEs stop ignoring them. A dashboard shows everything and therefore gets checked by nobody; this workflow shows only what crossed the line, so every alert is worth acting on.

CRM stays clean. Every fired signal writes back to HubSpot automatically, so the account record reflects what actually happened without an AE remembering to log it. Your pipeline reports become trustworthy.

No new tooling. It runs on the stack you already own — Slack, HubSpot, Gmail, Google Sheets — orchestrated by n8n, which you self-host or run in cloud. No new dashboard to buy, no new login for the team to forget.

Auditable and tunable. Every execution is logged in n8n. When an AE says "why did this account alert?", you open the run and see the exact score breakdown. The scoring logic lives in one Code node you can adjust as you learn what actually predicts expansion.

Common pitfalls and how to avoid them

Setting the threshold too low on day one. The fastest way to kill trust is a flood of alerts in week one. Start the IF threshold high, watch which accounts trip it, and lower it gradually. It is far easier to loosen a gate than to win back an AE who muted the channel.

Firing on the same signal repeatedly. Without state, a schedule-triggered workflow will re-alert the same account every 30 minutes forever. Add deduplication: store a "last_alerted_at" timestamp per account (in Google Sheets, Postgres, or n8n's built-in static data) and suppress re-fires within a cooldown window — 7 days is a sensible default.

Rate limits on Slack, Gmail, and HubSpot. A big data sweep can trip API limits when dozens of accounts qualify at once. Insert a Loop Over Items (Split in Batches) node before the fan-out with a small batch size and a short Wait node between batches to stay under provider limits.

Missing or stale account-owner mapping. If the AE lookup returns nothing, the alert goes nowhere or to the wrong person. Add a fallback that routes unmapped accounts to a shared "unassigned expansion" channel so no signal is ever silently dropped.

Scoring on absolute values instead of deltas. A 500-seat account naturally has high usage; that's not a signal. Score on change over time — growth rate, recent deltas, proximity to plan limits — not on raw totals, or your biggest accounts will alert constantly for no reason.

Expansion revenue isn't a mystery to solve — it's a signal to catch in time. Wire this workflow into your stack once, tune the gate over a couple of weeks, and your revenue team stops discovering upsell moments after they've passed and starts acting on them while they're live.

Expansion Signal Detected → AE Alert + CRM Log
PRONTO PARA USAR

Ja construimos isso pra voce

Nao comece do zero. O Expansion Signal Detected → AE Alert + CRM Log e um workflow n8n pronto para instalar — conecta suas ferramentas em minutos, sem codigo.

Instalar por $79 →