How to Mine a Dormant Customer List Without Wasting the Good Ones
A step-by-step method to clean, score, and prioritize an old customer list so your best names get a real message instead of a blast.
Everyone tells you to "email your list." Nobody tells you what to do when the list is a mess of duplicate names, dead numbers, one-time buyers, people who never paid, and a guy who yelled at you in 2023.
That mess is why most owners never touch it. The job feels vague, so it never starts.
So here's the job, broken into steps you can finish in a weekend. The goal is not a big blast. The goal is a ranked list where the best names get a real message and the junk gets left alone.
Step 1: Get everything into one file
Pull exports from every system that has ever held a customer name:
- Invoicing or accounting (this is your source of truth for who actually paid)
- Payment processor
- Scheduling or dispatch tool
- Your email (search "invoice," "quote," "estimate")
- Your phone's text history
- Paper records and notebooks
Dump it all into one spreadsheet. Don't clean as you go. Get it in first, then fix it.
Minimum columns you want, even if some are blank: name, phone, email, last job date, last job type, total amount paid, notes.
If you only get two of those, make them phone and last job date. You can run a whole campaign on those two.
Step 2: Deduplicate on phone, not name
Names are unreliable. "Mike Sanders," "Michael Sanders," and "Mike S." are three rows and one person. Email addresses change every time someone switches jobs or gets sick of spam.
Phone numbers persist. People keep the same mobile number for years.
Strip everything down to ten digits. Remove the dashes, the parentheses, the leading 1. Then sort by phone and merge the duplicates, keeping the most recent job date and adding up total spend.
You will be surprised how much your list shrinks. That's fine. A clean 300 beats a dirty 900.
Step 3: Kill the rows that will cost you
Some names are worse than useless. Sending to them burns goodwill, gets you marked as spam, or restarts a fight.
Cut:
- Anyone who never paid or who you had to chase
- Anyone who told you not to contact them
- Anyone who left an angry review or made a threat
- Anyone whose job type physically can't repeat and can't refer (rare, but it exists)
- Businesses that have closed
Also mark, but don't delete, anyone whose contact info is obviously dead — a landline that's disconnected, an email that bounced. You'll want to know later how much of your list was unreachable, because that tells you whether your intake is capturing contact info properly today.
Step 4: Score what's left
Now rank. You don't need a data science model. You need three numbers per row.
Recency. How long since their last job? More recent usually means more likely to respond, but the sweet spot for reactivation is often the 12-to-30-month range: long enough to be lapsed, short enough to still remember you.
Value. How much did they spend? A customer who paid $3,000 once deserves a different message than one who paid $80.
Repeat. Did they buy more than once? A two-time customer is dramatically more likely to become a three-time customer than a one-timer is to become a two-timer. They've already proven the pattern.
Give each one a simple score — say 1 to 3 — and add them up. Sort descending. That top slice is where your attention goes.
Do this in a spreadsheet. It takes an hour. It replaces guessing.
Step 5: Segment by reason, not by score
Score tells you who to reach first. It doesn't tell you what to say. For that, group by the reason they'd plausibly need you again.
For most service businesses that means grouping by job type and elapsed time:
- Installed something 12+ months ago → due for a check or a tune-up
- Bought a seasonal service last year → the season is coming again
- Bought a one-off repair → do they have the same problem elsewhere, or a related one
- Bought your smallest package → is there a bigger one they now qualify for
The message writes itself once the group is right. That's the whole point of segmenting. If you find yourself struggling to write a message for a segment, the segment is wrong.
Step 6: Send in waves, not in a blast
Do not message 400 people on Tuesday morning.
Two reasons. First, if the message works you'll get a flood of replies and you'll drop half of them, which is worse than never sending. Second, if the message doesn't work you just burned your whole list finding that out.
Send 30 to 50. Watch what happens for two days. Count:
- How many replied at all
- How many replied positively
- How many booked
- How many told you to get lost
Then change one thing and send the next wave. The thing you change first should be the message, not the list — the list is already sorted by quality, so the top of the list is your best shot, and if the top doesn't respond the copy is the problem.
Step 7: Have somewhere for the replies to go
This is the step everyone skips and it's the one that decides whether the campaign makes money.
Reactivation replies are warm and short-lived. "Yeah actually, what would it cost to do the back one too?" That message needs an answer in an hour, not on Thursday.
Before you send anything, decide:
- Who is watching for replies
- What the response time target is
- Where a positive reply gets logged so it doesn't vanish in a text thread
- What happens if the person doesn't respond to your response
If your answer to all four is "me, on my phone, when I get to it," you can still run the campaign — just keep the waves small enough that you can keep up. Fifty texts a wave is manageable. Four hundred is not, and the ones you drop are people who were trying to give you money.
Step 8: Write down what you learned
At the end, record three things in the same spreadsheet:
- Which segment responded best
- Which message got the most positive replies
- How much booked revenue came out of the whole exercise
That's your baseline. Next quarter you beat it. And now you know what a reactivation touch is actually worth to you, which means you know whether it's worth building the thing that does it automatically.
Because the real win isn't the campaign. It's when the follow-up date gets set the moment a job closes and the message goes out on its own a year later, forever, without anybody remembering. That's a system, and it's the difference between a good weekend and a revenue line.
The uncomfortable part
When you finish this exercise, you will find customers you forgot existed. Good ones. People who would have hired you again if you'd said one word.
That stings. Let it. Then set up the thing that makes sure it doesn't happen to the next 400.
If you want a second set of eyes on what's hiding in your systems, reach out.