A commercial cleaning owner can usually name the fifteen buildings in their territory worth winning. The target list is rarely the problem. Prospecting happens in the twenty minutes between a supervisor's callback and a payroll question, so the follow-up that actually closes accounts is the first thing to fall off.
Who actually controls the contract
The decision to switch janitorial vendors rarely sits with the person who notices the lobby is dirty. It sits with a property manager running a portfolio of buildings, a facilities lead at a single large site, or a general contractor handing off a new build. Each one buys differently. The property manager wants one vendor who can cover twelve addresses and send one invoice. The facilities lead wants a walkthrough next Tuesday and a number by Friday. The GC wants proof you can staff a 90,000 square foot building on day one.
An owner who treats all three the same sends one generic email to all of them and hears back from none. The list is the easy part. The work is knowing which buildings just changed management, whose contract renews in ninety days, and the actual name to email instead of info@.
The pipeline most owners run
Most commercial cleaning pipelines run on three sources held together by memory. The first is referrals from current accounts, the best leads and the least predictable. The second is drive-by noticing, a rep spotting a new build going up and writing the address on a sticky note. The third is the RFP that lands in the inbox already late and already shopped to four competitors.
What none of these has is a list of target accounts the owner chose on purpose, worked on a schedule, and pushed on until they got a yes or a hard no. The pipeline is reactive. It produces work when a referral happens to land, then goes quiet the month everyone is heads-down servicing the book.
Where it leaks
The leak is almost always follow-up. A rep does a walkthrough, sends a quote, and the prospect goes quiet. Closing that account takes four to seven touches over six weeks, and almost nobody runs them, because there is no record the walkthrough happened and no reminder that touch number three is due. The quote sits in a sent-mail folder while the account goes to whoever did follow up.
The second leak is the owner. New-account work routes through one person who already prices the jobs and approves the bids, on top of handling whatever escalated that morning. Prospecting is the task with no deadline, so it loses every time it competes with a client who is upset today. Whole weeks pass where the pipeline does not move, because the one person who moves it was busy keeping the current accounts alive.
What a prospecting system changes
For one services business, we built the prospecting layer as software instead of a hire. It sources target accounts that match the profile that actually closes (building type and square footage band, in a defined territory), enriches each with the right contact, and drafts a sequenced outreach the rep approves instead of writes. The follow-up runs on a schedule the system keeps, not on the rep's memory.
The rep opens a queue in the morning and the next touches are already staged, named for the account, and timed. Their job becomes deciding which to send and taking the calls it books. The owner stops being the bottleneck on outreach and goes back to pricing and closing, the two steps where their judgment earns the margin.
Before you build it
A prospecting build only pays off if two things are already true. You know which accounts close for you, specifically enough to describe in a filter, and you can service the wins without dropping the accounts you already have. Point automated outreach at a vague target list and it just generates more unqualified walkthroughs, which burns the rep's time faster than doing nothing.
Map the current pipeline first. Write down every source, the last time each one produced a signed account, and the step where deals actually stall. An afternoon of that tells you whether the gap is sourcing, follow-up, or capacity, and which one a build should fix first. Then scope the one that moves the number.
