Skip to main content
Lifetime license included with every purchase
n8n workflowssales automationdeal followupCRM automation

Automate Stalled Deal Follow-Up in n8n

Build n8n stalled deal follow-up: detect no-activity-since deals, dedupe the already-nudged ones, and fire AI re-engagement copy. With the exact node chain.

Nn8n Marketplace Team·July 9, 2026·Updated July 9, 2026·7 min read

Deals don't usually die from a no. They die from silence. A prospect goes quiet after a demo, the rep means to follow up, a week passes, then a month, and the deal quietly rots in the pipeline. An n8n stalled deal follow-up workflow scans the CRM for exactly those gone-quiet deals and fires a warm, contextual re-engagement before they're cold.

The agency blog posts describe this as "scan the CRM daily and flag at-risk deals." They never show the three steps that make it work: the no-activity-since detection query, the dedupe that stops you nudging the same deal every day, and the AI step that writes copy referencing the actual conversation. This builds all three.

It's warm re-engagement, not cold prospecting. Different job, different copy, different node chain.

What you can automate around a stalled deal

A re-engagement workflow handles the follow-up a busy rep keeps forgetting:

  • A daily scan for open deals with no activity past a cutoff
  • Dedupe against deals already nudged inside a cooldown window
  • AI re-engagement copy that references the deal stage and last touch
  • A Slack alert when a high-value deal goes quiet, for a human reply
  • Logging every nudge so the cadence stays sane
  • Escalation after two unanswered nudges: hand it to the rep or mark it lost

The workflow does the chasing the rep intends to do and never gets to.

Why detection and dedupe are the hard parts

Writing a re-engagement email is the easy step now; an LLM does it in one node. The two steps that actually break are detection and dedupe.

Detection is a query, not a vibe. You need open deals whose last_activity_at is older than your cutoff. Most CRMs expose that field; the trick is filtering on it correctly and not catching deals that are legitimately mid-conversation. A deal touched yesterday isn't stalled even if it's old.

Dedupe is the one that quietly humiliates you. Run a daily scan without a last-nudged guard and you email the same stalled deal every morning. The prospect who went quiet now gets a "just checking in" every 24 hours. That's not re-engagement, that's harassment, and it's the single most common way this workflow goes wrong.

Here's the take: the cooldown matters more than the copy. A perfectly written nudge sent daily is worse than a mediocre one sent once a week. Store a last_nudged_at per deal, gate every send on a 5-to-7-day cooldown, and cap total nudges at two before escalating to a human. Get the cadence right and average copy converts. Get the cadence wrong and great copy still burns the lead.

The stalled-deal pipeline

Schedule Trigger (daily)
  → Read open deals (HubSpot / Pipedrive / Sheets)
  → Filter: last_activity older than cutoff
  → Filter: not nudged within cooldown AND nudges < 2
  → OpenAI: write re-engagement copy from deal context
  → Send email + log nudge
  → Slack alert if high-value

Two filters back to back: one finds the stalled deals, one removes the ones you've recently touched. That second filter is the dedupe, and it's the node the blog posts never mention.

1. Detect the stall

The Schedule Trigger fires daily and reads open deals from the CRM. A filter keeps only those whose last_activity_at is older than the cutoff. Ten days is a reasonable start; tune it to your sales cycle.

// Filter: no activity in 10+ days, still open
const d = items[0].json;
const days = (Date.now() - new Date(d.last_activity_at)) / 864e5;
return d.stage !== 'closed' && days >= 10;

2. Dedupe the already-nudged

The second filter is the dedupe. Drop any deal nudged inside the cooldown, or already nudged twice. Read last_nudged_at and nudge_count from your tracking sheet or a CRM custom field.

// Filter: respect cooldown and the 2-nudge cap
const d = items[0].json;
const since = (Date.now() - new Date(d.last_nudged_at || 0)) / 864e5;
return since >= 7 && Number(d.nudge_count || 0) < 2;

3. Write the re-engagement copy

The OpenAI node writes a short, warm email referencing the deal stage and the last real interaction, not a generic "circling back." Feed it the deal name, stage, and the last activity note. Force structured output (subject plus body) and parse it with a Code node. Skip the parse and the email node sends raw model text where it expects a subject field; the send fails or mangles. AI workflows break at the parse step more than anywhere else.

4. Send, log, escalate

Send the email (Gmail or your sending node), then immediately write back last_nudged_at and increment nudge_count. Order matters: if you send first and the write fails, tomorrow's run re-sends. For high-value deals, a Slack alert lets a human take the reply instead of the bot. After the second nudge with no response, escalate: assign to the rep or mark the deal dormant. Don't nudge a third time.

5. Close the loop

When a prospect replies, a separate inbound flow should clear the deal from the stalled set so it stops getting scanned. The reply is the signal that re-engagement worked; let it reset the state.

The cooldown is the difference between re-engagement and harassment

The most common stalled-deal failure isn't bad copy. It's a missing cooldown. A daily Schedule scan with no last-nudged guard re-emails every quiet deal every single day. The prospect who went silent now gets pinged each morning until they block you. Store last_nudged_at, enforce a 5-to-7-day gap, and cap at two nudges before a human steps in. One thoughtful nudge a week beats seven desperate ones.

Implementation patterns

Pattern 1: two-filter detection. One filter finds stale deals, a second removes recently-nudged ones. Both are required; the second is the one everyone forgets.

Read deals → Filter(stale) → Filter(cooldown + cap) → act

Pattern 2: context-aware AI copy. Feed deal stage and last-touch into the prompt so the email reads like a real follow-up, not a template. The AI Lead Scoring and Email Routing template uses the same GPT-4o-mini structured-output pattern if you want the scoring-and-routing core pre-built.

deal context → OpenAI(structured: subject+body) → parse → send

Pattern 3: state-driven escalation. Track nudge_count; after two, route to a human instead of sending again. Keeps the automation from outstaying its welcome.

n8n nodes you'll use most

NodePurpose
Schedule TriggerDaily scan of the open pipeline
HubSpot / PipedriveRead open deals and their last-activity date
FilterDetect stalls and dedupe already-nudged deals
OpenAIWrite context-aware re-engagement copy
GmailSend the nudge
Google SheetsTrack last_nudged_at and nudge_count
SlackEscalate high-value or twice-nudged deals to a human

Getting started

  1. Pick your CRM source and confirm it exposes a last-activity timestamp per deal.
  2. Add a Schedule Trigger on a daily Cron.
  3. Read open deals and add the stale-detection filter on last_activity_at.
  4. Add the dedupe filter on last_nudged_at and a 2-nudge cap.
  5. Add an OpenAI node with structured output and a parse step for the copy.
  6. Send the email, then write last_nudged_at and increment nudge_count.
  7. Add a Slack escalation for high-value deals and a reply-handler that clears the stall.
Browse sales automation templates
Skip the build

The Stalled Lead Rescue ships this end-to-end: it detects contacts that have gone quiet, fires a personalised AI re-engagement email, logs every attempt with a nudge counter, and Slack-alerts you when it's time to escalate. It's part of The Complete n8n Templates Bundle, a one-time lifetime license to the whole catalog plus every template added later, worth it if you run more than one of these automations.

Get the Stalled Lead Rescue template

Re-engaging warm deals is one half of a healthy pipeline; scoring and routing the new ones is the other. For the inbound side, see lead scoring automation in n8n, and for the broader CRM picture there's automating your CRM with n8n. Detect with a real query, dedupe with a cooldown, and the silence stops costing you deals.

FAQ

Common questions

How do I detect a stalled deal in n8n?
Query your CRM on a schedule for open deals whose last-activity date is older than a cutoff (say 10 days). The no-activity-since filter is the detection step. Deals past the cutoff with no recent touch are the stalled ones to re-engage.
How do I stop n8n from nudging the same deal repeatedly?
Store a last-nudged timestamp per deal and exclude anything nudged inside a cooldown window. Without that dedupe, a daily scan re-emails the same stalled deal every single day until it either replies or churns out of annoyance.
Is stalled-deal follow-up the same as cold outreach?
No. Cold outreach prospects strangers. Stalled-deal follow-up re-engages warm leads already in your pipeline who went quiet. The copy references the existing conversation, so the AI prompt and the tone are different from a cold open.
Stop reading. Start running.

Get the workflow templates this guide is built on

Import-ready n8n JSON, step-by-step setup, and tested end-to-end. One-time payment, own it forever.

Free — $40 value

Get 3 tested n8n templates, free

The full customer package for three real catalog templates — workflow JSON, step-by-step setup guide, credential checklist. Built through the same live-instance release process as everything we sell. Plus new templates and automation guides in your inbox. No spam, unsubscribe anytime.

  • 01Smart To-Do List ManagerPre-built n8n workflow template that automates productivity with OpenAI. Live in about 10 minutes.$14
  • 02Email Follow-Up AutomatorPre-built n8n workflow template that automates crm with OpenAI. Live in about 15 minutes.$12
  • 03Market Trend AnalyzerPre-built n8n workflow template that automates data processing with OpenAI. Live in about 10 minutes.$14