How to clean up stale deals in your pipeline as Small RevOps Teams

Sales & CRMFor Small RevOps Teams2 apps11 steps~22 min to set up

Your pipeline has 200+ open deals and at least 40 of them haven't been touched in 60 days. The reps know it. The CRO knows it. Nobody wants to own the cleanup. So it falls to you: exporting HubSpot or Salesforce to a Google Sheet, writing COUNTIF formulas to surface last-activity dates, chasing reps on Slack to confirm whether something is dead or just slow, then manually updating stage and close-date fields one by one. You do this every quarter. The next quarter it's just as bad. The problem isn't that reps are lazy — it's that there's no system that enforces hygiene automatically, surfaces aging deals without you pulling a report, or routes the right follow-up back to the right rep without a RevOps ticket.

Sales & CRMFor Small RevOps Teams2 apps11 steps~22 min to set up
Outcome

What you'll set up

A live deal-aging view that surfaces every opportunity with no activity in 30, 45, or 60+ days, pulling from HubSpot on a scheduled sync and enriched with Apollo and Gmail context
An automated hygiene workflow that flags stale deals in Slack, assigns a rep action, and re-stages or disqualifies based on rules you write in plain English
A forecast-ready pipeline view that only shows deals with recent activity and a realistic close date, so you stop wasting forecast-call minutes on dead weight
The Starch recipe

Apps, data, and prompts

The combination of Starch apps, the data sources they pull from, and the prompts you use to drive them.

Apps used
Data sources & config

Starch syncs your HubSpot data on a schedule — contacts, companies, deals, and owners — giving the agent a typed, queryable dataset to run hygiene rules against. Apollo.io is also synced on a schedule, so sequence history and contact-level engagement data sits alongside your HubSpot deal records. Gmail is synced on a schedule for email thread context, so last-contact dates reflect actual correspondence, not just CRM log entries. Salesforce and Pipedrive are reachable from Starch's integration catalog and queried live when your app needs them. LinkedIn enrichment runs through browser automation — no LinkedIn API needed.

Prompts to copy
Sync my HubSpot deals and show me every open opportunity with no activity logged in the last 45 days, grouped by owner, with last-contact date and current stage
Every Monday at 7am, find deals in my pipeline that haven't moved stage in 30 days and send each rep a Slack message listing their stale deals with a one-click 'mark dead' or 'update close date' option
Build me a hygiene score for each deal based on days since last email, days since stage change, and whether a next step is set, then surface the bottom quartile in a dashboard
Pull every deal that closed-lost in the last 90 days and show me the median days-to-loss by original lead source so I can see which sources are clogging my pipeline
Run these in Starch → or paste them into your favorite agent
Walkthrough

Step-by-step

1 Connect HubSpot as a scheduled-sync provider. Starch pulls deals, contacts, companies, and owners on a schedule — you get a typed dataset without any export or ETL work.
2 Connect Apollo.io as a scheduled-sync provider. Sequence enrollment, step completions, and contact-level engagement data now sits in the same dataset as your HubSpot deal records.
3 Connect Gmail as a scheduled-sync provider so last-email dates are pulled from actual threads, not just whatever the rep remembered to log in HubSpot.
4 Start with the Sales Agent CRM app from the App Store. It's pre-wired for HubSpot and Apollo. Fork it and add your own deal-aging thresholds — 30 days for SMB, 45 for mid-market, whatever matches your sales cycle.
5 Tell Starch: 'Show me every open deal with no activity in 45+ days, grouped by rep, with last-contact date, current stage, and close date.' That view becomes your weekly hygiene dashboard.
6 Set up an automation: 'Every Monday at 7am, find deals with no stage change in 30 days, send the owning rep a Slack message listing their stale deals, and give them a task to update or disqualify by Friday.' Starch writes this in plain English — no Zap to build.
7 Add a hygiene score field to your pipeline view. Tell Starch: 'Score each deal 1–10 based on days since last email, days since stage change, and whether a next step is set. Show the bottom 25% in red.' This becomes the first slide of your forecast call.
8 Build a disqualification workflow: 'If a deal has been in the same stage for 60 days and the rep hasn't responded to the Monday hygiene alert, move it to Closed-Lost and tag it stale-pipeline-cleanup.' This runs automatically — you don't chase anyone.
9 Create a closed-lost analysis view: 'Show me all deals closed-lost in the last 90 days, median days-to-loss by lead source, and which Apollo sequences those contacts were enrolled in.' Now you know which sources are generating pipeline noise, not revenue.
10 Publish the hygiene dashboard as a shared Starch view for the CRO. They see pipeline health in real time. You stop being the person who prepares the weekly pipeline deck in Google Slides.
11 Revisit thresholds quarterly. Tell Starch: 'Update the deal-aging rule from 45 days to 30 days for any deal in the Proposal stage.' The rule updates immediately — no Salesforce admin ticket, no Zap rebuild.

See this running on Starch

Connect your tools, describe what you want, and the agent builds it. Closed beta is free.

Try it on Starch →
Worked example

Q1 2026 pipeline cleanup — 30-rep org

Sample numbers from a real run
Stale deals surfaced (45+ days no activity)47
Deals disqualified automatically by hygiene rule19
Deals re-engaged by rep after Monday Slack alert12
Forecast value removed from pipeline (closed-lost or disqualified)680,000
Hours saved vs. manual HubSpot export + Sheets cleanup11

Going into Q1 forecast week, the RevOps team ran the deal-aging dashboard for the first time. Out of 214 open opportunities, 47 had no logged activity in 45+ days. Of those, 19 matched the auto-disqualification rule — stuck in 'Proposal Sent' for over 60 days with no rep response to the Monday Slack nudges. Starch moved them to Closed-Lost and tagged them as stale-pipeline-cleanup, removing $680K from the forecast that the CRO had been counting on. The remaining 28 deals got a Slack alert to the owning rep; 12 reps updated close dates or logged a next step within 48 hours. The forecast call that week took 22 minutes instead of the usual 50 because the pipeline view only showed deals with a hygiene score above 6. The RevOps team didn't touch a spreadsheet.

Measurement

How you'll know it's working

Pipeline hygiene score: % of open deals with a logged next step and activity in the last 30 days
Stale deal rate: % of open pipeline untouched for 45+ days, tracked week over week
Forecast accuracy: predicted close amount vs. actual close amount by quarter, filtered to deals that passed hygiene thresholds
Days-to-loss by lead source: median deal age at closed-lost, broken down by Apollo sequence, LinkedIn, or inbound form fill
Rep compliance rate: % of Monday hygiene alerts that result in a CRM update or disqualification within 5 business days
Comparison

What this replaces

The other ways teams handle this today, and how the Starch version compares.

HubSpot native workflows + manual export to Google Sheets
HubSpot's deal rotation and aging workflows require paid tiers and admin time to configure, and the output still lands in a Sheet you have to format, share, and re-pull every week — Starch builds the hygiene rules, the dashboard, and the Slack automation from one natural-language description.
Salesforce + Einstein Activity Capture
Einstein gives you last-activity timestamps inside Salesforce, but surfacing them in a clean cross-rep view, routing Slack alerts, and auto-disqualifying deals still requires Flows or custom reports that a small RevOps team has to maintain.
Clari or Gong Forecast
Purpose-built forecast tools are strong on pipeline inspection, but they're priced for sales orgs larger than 30 reps, don't let you write custom hygiene rules in plain English, and add a third platform the team has to keep current alongside HubSpot and Apollo.
Zapier + HubSpot + Slack
You can wire Monday-morning Slack alerts in Zapier, but each rule is a separate Zap, filter logic is limited to what Zapier's condition blocks support, and there's no queryable pipeline view — just trigger-action chains that break when HubSpot field names change.
On Starch RECOMMENDED

One platform — sales agent crm, crm all running on connected data. Setup in plain English; numbers stay current via scheduled syncs and live agent queries.

Try it on Starch →
FAQ

Frequently asked questions

Does Starch write back to HubSpot, or is the sync read-only?
The HubSpot scheduled sync is read-only — Starch pulls your deals, contacts, and owners on a schedule and stores them in Starch's database for querying. Automations that need to update a HubSpot record (changing stage, logging an activity) do so via HubSpot's API through Starch's integration catalog, queried live at the time the automation runs. So the answer is: Starch reads on a schedule and writes live when an action fires.
What if some of our deals are in Salesforce, not HubSpot?
Salesforce is reachable from Starch's integration catalog and queried live when your app runs. You can build a hygiene dashboard that pulls HubSpot deals (scheduled sync) alongside Salesforce opportunities (live query) and display them in a single view. The query is live rather than stored, so for large Salesforce orgs you may notice slightly longer load times on first run.
Can the Monday Slack alert include a direct link to the HubSpot deal?
Yes. When you describe the automation to Starch, tell it to include the HubSpot deal URL in the Slack message. Starch constructs the link from the deal ID in the synced dataset. Example prompt addition: 'include a link to the HubSpot deal record in each Slack message so the rep can update it in one click.'
Is Starch SOC 2 certified? We handle deal data for enterprise accounts.
Not yet — Starch is not currently SOC 2 Type II certified. If that's a hard requirement for your security review, that's worth knowing upfront. It's on the roadmap.
What happens to our HubSpot data if we stop using Starch?
Starch doesn't modify your HubSpot data — it reads from it. If you stop using Starch, your HubSpot instance is unchanged. There's no lock-in on the source-of-record side.
We also want to see which Apollo sequences are correlated with stale deals. Can Starch cross-reference that?
Yes. Apollo is a scheduled-sync provider, so sequence enrollment and step-completion data sits in the same Starch dataset as your HubSpot deals. Tell Starch: 'Show me stale deals grouped by the Apollo sequence the contact was last enrolled in, with average days-since-activity per sequence.' That view tells you which outbound motions are generating pipeline that doesn't close, not just pipeline that looks good on a call.

Ready to run clean up stale deals in your pipeline on Starch?

Request closed-beta access. Everything is free during beta.

You're on the list! We'll be in touch soon.