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.
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 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
| Node | Purpose |
|---|---|
| Schedule Trigger | Daily scan of the open pipeline |
| HubSpot / Pipedrive | Read open deals and their last-activity date |
| Filter | Detect stalls and dedupe already-nudged deals |
| OpenAI | Write context-aware re-engagement copy |
| Gmail | Send the nudge |
| Google Sheets | Track last_nudged_at and nudge_count |
| Slack | Escalate high-value or twice-nudged deals to a human |
Getting started
- Pick your CRM source and confirm it exposes a last-activity timestamp per deal.
- Add a Schedule Trigger on a daily Cron.
- Read open deals and add the stale-detection filter on
last_activity_at. - Add the dedupe filter on
last_nudged_atand a 2-nudge cap. - Add an OpenAI node with structured output and a parse step for the copy.
- Send the email, then write
last_nudged_atand incrementnudge_count. - Add a Slack escalation for high-value deals and a reply-handler that clears the stall.
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.
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.
Common questions
How do I detect a stalled deal in n8n?
How do I stop n8n from nudging the same deal repeatedly?
Is stalled-deal follow-up the same as cold outreach?
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.
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
More automation guides

n8n Backup Automation That Actually Verifies the Backup
A Backup You Never Verified Is a Coin Flip Every n8n backup automation tutorial that ranks does the same thing: schedule an export, push the JSON to Google Drive or S3, done. They back up the data and…

How to Build an n8n Log Alerting Workflow (No Grafana Required)
Most n8n Error Setups Tell You Everything, Which Means They Tell You Nothing An n8n log alerting workflow has one job: surface the failures that need a human and quietly file the ones that don't. The…

n8n Uptime Monitoring with Slack Alerts (Without the Alert Storms)
An Uptime Check That Cries Wolf Gets Muted in a Week The point of n8n uptime monitoring with Slack alerts isn't to detect a single outage. It's to be trusted the next hundred times it fires. Most of t…