Module 15 · business · intermediate
Stale Deal Nudger
After this module you can catch deals going cold before they're lost: every weekday, each salesperson gets a short, prioritized list of their quiet deals with a follow-up email ready to send.
What it does
Every weekday at 8 AM the workflow pulls open deals from HubSpot, compares each deal's days without activity to a limit per pipeline stage (e.g. 3 days after a contract is sent, 7 days when qualifying), and ranks the stale ones by urgency (days overdue × deal size). Each deal gets a follow-up draft, from a template or written by AI, and each owner gets one digest.
The same logic is exposed as POST /webhook/deals/stale-check with { deals: [...], now?, ai? }, so you can test it deterministically, or feed deals from any CRM (Pipedrive, GoHighLevel, a spreadsheet).
Flow
Weekdays 8 AM ─┐ ┌─(schedule)→ Get HubSpot Deals → Map HubSpot Deals ─┐
Stale Check API┴→ Settings → Deals from API? ─(API)→ Has deals[]? → Deals from Request ───────┴→ Find Stale Deals → Any Stale?
└→ 400 │
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
├yes→ Use AI? ─yes→ Draft Follow-up (AI) → Attach AI Drafts ─┐
│ └no─→ Template Drafts ─────────────────────────┴→ Group by Owner → Called via API? → Collect Owners → Respond
│ └→ Send Nudges (Exercise 1)
└no─→ (API) Respond Nothing Stale
Verification status (n8n 2.43.6)
- API path: 15/15 checks with
assets/sample-deals.json(closed and recent deals skipped, per-stage limits, owner grouping, urgency order, pipeline-at-risk totals, template drafts, empty result, 400). - AI drafts: need an OpenAI credential (
WITH_CREDS=1 ./test/test.sh). - HubSpot path: the node renders as Deal → Get Many with the deal properties set, and needs a HubSpot Service Key (private app) credential. The mapping handles both HubSpot property shapes, but it has not run against a live HubSpot account.
Files
| File | Tier | Purpose |
|---|---|---|
| lesson.md | Free | Step-by-step build + HubSpot setup |
| workflow/starter.json | Free | Triggers, both deal sources, validation |
| workflow/learner.json | Learner | Finished nudger |
| workflow/code/ | Learner | Readable copies of the Code nodes |
| assets/sample-deals.json | Learner | Test pipeline with known answers |
| exercises.md | Learner | Practice tasks |
| solutions.md | Learner | Exercise solutions |
| notes.md | Private | Learning log |
| sell/ | Private | Offer, video script, blog post |