How to auto-archive stale HubSpot deals with no activity for 60 days
Auto-archive stale HubSpot deals after 60 days of inactivity. Compare n8n, Make, code, and Claude Code approaches with setup guides.

This recipe includes a downloadable n8n template and Claude Code skill.
Workflow
Why auto-archive stale deals?
Every sales team has zombie deals — opportunities that stopped moving months ago but nobody bothered to close out. In a typical 100-deal pipeline, 15-25% are stale (60+ days without activity). That's $500K-2M of phantom pipeline inflating forecasts and misleading leadership.
The problem compounds: reps avoid closing their own deals because it hurts their numbers, managers don't enforce it because the manual review takes 30-60 minutes per week, and the pipeline gets less accurate over time. Auto-archiving with a grace period solves this — stale deals get flagged, owners get 48 hours to object, and deals that are truly dead get closed automatically.
How it works
Every approach in this guide follows the same two-phase pattern:
- Scan the pipeline daily for deals where
hs_lastmodifieddateis older than 60 days - Warn the deal owner in Slack with the deal name, value, and days stale
- Wait 48 hours for the rep to update the deal (any activity resets the clock)
- Verify the deal is still stale after the grace period
- Close the deal as Closed Lost with a stale reason if no activity occurred
What you'll need
- HubSpot account with API access (including
crm.objects.deals.writescope) - Slack workspace with bot access
- A defined inactivity threshold (e.g., 60 days)
- A "Closed Lost — Stale" close reason in HubSpot
Which approach should I use?
- n8n (recommended) if you want the full warn-then-close pattern in a single visual workflow. n8n's Wait node pauses mid-execution for 48 hours, making the grace period trivial to implement. Free self-hosted or $24/mo cloud.
- Code + Cron if you want zero ongoing cost. Uses a state file to track warned deals across runs. Best for teams with a developer who can maintain the two-phase script.
- Make if your team already uses Make. Requires two separate scenarios (warn + close) since Make doesn't have a built-in wait equivalent. Data Store tracks warned deals between scenarios.
- Claude Code if you want human review before any deal is closed. The agent finds stale deals, shows you the list, and waits for your confirmation — ideal for weekly pipeline cleanup sessions.
Select an approach below to see the full step-by-step guide.
Compare approaches
| Approach | Complexity | Cost | Latency | Code | Reliability |
|---|---|---|---|---|---|
n8n | high | $0-24/mo | polling | low | 24/7 cloud |
Make | medium | $10-29/mo | polling | none | 24/7 cloud |
Code + Cron | medium | $0 | real-time | high | Self-hosted |
Claude Code | low | Usage-based | on-demand | none | On demand |
n8n
highMake
mediumCode + Cron
mediumClaude Code
lown8n
highSchedule → Find stale deals → Slack warning → Wait 48h → Close if no objection
Make
mediumScheduler → Search Deals → Filter stale → Slack notify → Delayed close
Claude Code
lowGuided Claude Code skill — ask Claude to find stale deals and archive them with your confirmation
Related Recipes
How to flag HubSpot deals with missing close dates or amounts and Slack the rep
HubSpot + Slack
How to alert Slack when Pipedrive deals go stale with no activity
Pipedrive + Slack
How to snapshot your HubSpot pipeline weekly and track changes in Google Sheets
HubSpot + Google Sheets
How to alert Slack when a HubSpot deal is stuck in a stage for over 14 days
HubSpot + Slack
Frequently Asked Questions
Looking to scale your AI operations?
We build and optimize automation systems for mid-market businesses. Let's discuss the right approach for your team.