HubSpot
How to Automatically Close Stale HubSpot Deals
Thresholds by stage, a definition of activity that reps cannot game, and the alert we deliberately did not build. A pipeline hygiene design.

Key Takeaways
- Use two conditions, not one: nothing logged recently AND nothing scheduled ahead. A deal with a meeting booked for next week is not stale.
- HubSpot's Last activity date includes notes and completed tasks, so it is too easy to satisfy. Build your own definition of a meaningful touch.
- Vary the threshold by stage. Late stages deserve longer windows or no automation at all.
- Do not warn reps that a record is about to be swept. A warning turns the rule into a game with a two second workaround.
- Flag with a property rather than blanking the owner. Blanking destroys the distinction between never-owned and swept, and breaks historical reporting.
Every pipeline accumulates deals nobody is working. They inflate the forecast, they make the conversion rate meaningless, and no amount of asking reps to tidy up has ever fixed it at any company we have worked with.
Automating the cleanup is straightforward. Automating it in a way that does not close live deals, and that reps cannot trivially defeat, takes about four design decisions. Here are the ones that mattered when we built this on a client's pipeline.
Decision one: the threshold varies by stage
A single rule across the pipeline is the most common version of this and the worst. A deal in early discovery going quiet for three weeks means something very different from a deal at verbal commitment going quiet for three weeks.
The thresholds we landed on, as a starting point rather than gospel:
| Stage | Threshold |
|---|---|
| Early discovery | No activity for 21 days |
| Qualified, active trial, post-trial | No activity for 30 days |
| Verbal commitment and later | No automation |
That last row is a deliberate choice, not an omission. At the end of a pipeline the cost of automatically closing a deal that was actually alive is high, and the number of such deals is low enough to review by hand. Automate where the volume is and the stakes are low; use humans where the stakes are high and the volume is small.
Expect to argue about the numbers with the client's sales leadership, which is fine, because the argument surfaces how their sales cycle actually works. What matters is that the thresholds differ by stage, not what the specific values are.
Decision two: two conditions, not one
The rule is not "no activity in 21 days." It is no activity in 21 days AND no future activity scheduled.
An earlier version of this on one portal tested only past activity, and it was wrong. A rep who has a discovery call booked for next Tuesday has a live deal, whatever the last three weeks look like.
HubSpot gives you both sides of this:
- Last activity date is the most recent past logged activity.
- Next activity date is the next upcoming one, including a logged future call or sales email and a scheduled future meeting.
Use both. Requiring the record to fail both tests removes almost all the false positives, and it is the single change that made the client's sales leadership willing to switch the automation on.
Decision three: define "activity" yourself
Here is the trap, and it is the reason most implementations of this quietly stop working.
HubSpot's Last activity date includes notes and completed tasks alongside calls, meetings and tracked emails. A note takes four seconds to log and says nothing about whether the deal is progressing.
So if your rule is "Last activity date is more than 21 days ago," you have built a rule that any rep can satisfy without doing any work, and once one rep notices, the rest will.
We defined a meaningful touch narrowly:
- Calls
- Meetings
- One-to-one emails
- Sequence emails
- Inbound replies from the prospect
Explicitly excluded: notes. Not because notes are worthless, but because they are unilateral. A note proves the rep typed something. An inbound reply proves the prospect is engaged, which is the thing you are actually measuring.
Tasks we argued about and left out for the same reason: a task is something a rep intends to do, and creating one resets a timer without moving the deal.
Building this means you cannot rely on the default property alone. You need your own date property, maintained by workflows that stamp it only on the activity types you have chosen to count. That is more work than pointing at Last activity date, and it is the difference between a rule that holds and a rule that gets gamed within a quarter.
Decision four: no warning shot
The team wanted a friendly alert to the rep: "this deal will be closed in three days unless you touch it."
We killed it, and this is the design decision most worth stealing.
An alert converts the rule into a target. The rep receives it, logs a call that did not require a prospect on the other end, the timer resets, and nothing about the state of the deal has changed. You have built a system that measures whether reps read notifications.
If you want a safety net, make it something the rep cannot manufacture in isolation. What we shipped instead was a check for genuine signals: an open task with a real due date, or an open associated opportunity. Those are harder to fake casually and they catch the legitimate "I am on it" cases without inviting the illegitimate ones.
The general principle: do not tell people the exact moment a measurement is taken. Measure the underlying behaviour and let the measurement be quiet.
The ownership question, and why blanking is wrong
Deal hygiene usually comes with a companion project: sweeping account ownership. On one portal roughly 25,000 accounts had no activity in 90 days and the question was what to do with the owner field.
The client wanted to reassign them all to a placeholder user representing a business development pool. We pushed back, for three reasons:
You lose sight of the accounts. A placeholder owner is a black hole. Nobody's list, nobody's problem.
Reporting breaks. Every historical report attributing activity by owner now attributes a slice of history to a fictional person.
You cannot distinguish never-owned from swept. These are different states requiring different treatment, and blanking or overwriting the owner merges them permanently.
What we built instead: an active list defining eligibility, plus a single checkbox property on the company marking the account as pooled. Ownership untouched. The list is the working view, the checkbox is the durable flag, and both states remain distinguishable forever.
Three further rules from the same build:
- Company ownership changes trickle to contacts. Deal ownership is left alone. A deal has commercial history attached to its owner and should not be reassigned by a hygiene sweep.
- Parent and child company structures are excluded. Sweeping a subsidiary because it individually looks quiet, when the relationship is managed at the parent, produces exactly the wrong outcome.
- For closed-lost deals, the rep keeps the account for a defined window regardless of the loss reason. Ours was 90 days. It preserves the relationship and it removes the incentive to mis-record why a deal was lost.
How to ship it without breaking the pipeline
Pipeline hygiene automation touches revenue records, so the rollout matters as much as the design.
- Build the criteria as a list first, not as a workflow. A list shows you exactly which records would be affected, today, with no side effects.
- Run enrollment previews. HubSpot will tell you how many records meet the criteria before anything is switched on. If that number surprises you, your criteria are wrong.
- Take the list to sales leadership and get sign-off on the actual records. Not on the concept. Nothing builds trust in an automation faster than a named list of deals the owner agrees are dead, and nothing destroys it faster than a surprise.
- Run it in report-only mode for one cycle. Flag the records without closing them, and see whether anything gets rescued.
- Then switch it on, and review the closures monthly for the first quarter.
- Sequence hygiene before routing. Do not build lead routing on top of a dirty pipeline; routing depends on knowing which records are real, and a scoring or fit model built on stale data will distribute the staleness rather than fix it.
Step three is where these projects succeed or fail. The technical build is a day. The agreement is the deliverable.
What happens to the deals you close
Closing a deal automatically is only half a design. The other half is what that closure means afterwards, and getting it wrong poisons the reporting you built the automation to protect.
Give them their own loss reason. Not "lost to competitor," not "no budget." Something like "closed by inactivity," set by the automation itself. Two reasons. Your win and loss analysis stays clean, because these were never competitive losses and counting them as such misrepresents why you lose. And you can measure the automation: if the inactivity bucket is a large share of all closures, either your thresholds are wrong or your pipeline discipline is worse than anyone admits.
Make reopening cheap and visible. Somebody will occasionally come back. The rep needs an obvious path to reopen the deal, and reopening should be logged. If reopening is awkward, reps will create a duplicate deal instead and you have made the data worse than before you started.
Report on rescued deals. Every deal that is reopened within a month of automatic closure is evidence about the threshold. A steady trickle is healthy. A pattern at one particular stage means that stage's window is too short, and the number tells you by how much.
Do not backdate the close. Close the deal today, with today's date, and let the activity dates tell the story of when it actually went quiet. Backdating breaks period reporting and makes closed months change retroactively, which finance will notice.
Decide what happens to the associated contacts. Usually nothing, and that is the right answer. A closed deal does not mean the person is uninterested, and sweeping their marketing eligibility because a deal aged out is an overreach the client did not ask for.
The bottom line
Automatic deal closure works when the threshold varies by stage, when the rule requires both no recent activity and no scheduled future activity, when "activity" is defined narrowly enough that a note does not reset the clock, and when nobody is warned in advance.
For ownership sweeps, flag with a property and leave the owner alone. Blanking it destroys information you cannot recover.
If your team is inheriting client pipelines where the forecast is fiction and nobody wants to be the one to close 400 deals, that build and the conversation around it are standard work for our agency automation team, delivered under your brand. A structured portal audit is usually the fastest way to size the problem before you quote it.
Sources
Frequently Asked Questions
How long before a HubSpot deal should be closed as stale?
It depends on the stage. Around 21 days with no activity works for early discovery stages and 30 days for qualified, trial and post-trial stages. Late stages such as verbal commitment usually deserve no automation at all, because the cost of closing a live deal is high.
What counts as activity on a HubSpot record?
HubSpot's Last activity date covers notes, calls, tracked and logged sales emails, meetings, LinkedIn, SMS, WhatsApp messages, chats and completed tasks. Next activity date covers future logged or scheduled calls, emails and meetings. Notes being included is why the property is a poor staleness test.
Should you use Last activity date or Next activity date for pipeline hygiene?
Both. Last activity date tells you nothing has happened; Next activity date tells you nothing is planned. A deal that fails only the first test may have a meeting booked next week, and closing it would be wrong.
Should reps be warned before a deal is auto-closed?
No. A warning converts the rule into a target: the rep logs a note or a task, the timer resets, and nothing about the deal has changed. If you want a safety net, check for open tasks and real scheduled activity instead of asking the rep to react.
Should you remove the owner when sweeping inactive accounts?
No. Blanking the owner destroys the difference between an account that was never owned and one that was swept, and it breaks historical reporting. Use a checkbox property to mark eligibility and leave ownership intact.
Agency Automation
Your Agency Runs on Hours. Stop Spending Them on Busywork.
We automate 230+ hours of agency process a month (intake, reporting, delivery ops) so your team ships client work instead.
Related Articles

The HubSpot Salesforce Sync Does Not Backfill History
An ongoing two-way sync and a one-time history migration are different projects. HubSpot's integration does the first and none of the second.

