When a small B2B company tells me cold outreach doesn't work, I ask one question first: where did the list come from? The answer is usually a list vendor or an old export from a shared drive.
The email gets the blame. The list is usually the problem. A list full of the wrong companies, the wrong people and dead addresses will fail no matter how good the writing is. Here's how I build one that's worth emailing.
Step 1: Write down who you actually sell to
Before anyone searches for a single contact, describe your ideal customer in plain words. Not "small and mid-sized businesses." Something you could hand to a new hire. Look at your five best customers, the ones who pay on time, stay for years and send referrals, and write down what they have in common:
- Industry. Be specific. "Manufacturing" is too wide. "Metal fabrication shops" is a list.
- Size. Employee count or revenue range, roughly. A five-person company and a 300-person company buy differently.
- Location. Your service area, or the regions where you can actually deliver.
- The role that buys. Owner, operations director, office manager, purchasing. Often it's not the person with the biggest title.
- A reason to care now. A new location, a hiring spree, a new contract, a move. Triggers like these make an email timely instead of random.
This is your ideal customer profile. Every contact on the list should match it. If you can't explain why a company is on the list in one sentence, take it off.
Step 2: Pick sources that match your market
You don't need to buy a list to build one. For most small B2B markets, public sources do the job, and they tend to be fresher than anything a vendor sells:
- Company websites. The team page, the contact page and the about page tell you who works there and what they do.
- Business directories and map listings. Good for finding local and regional companies by category.
- Industry associations and chambers. Member directories are often public and already sorted by industry.
- Trade show exhibitor lists. Companies spending money to find customers are often open to talking.
- Job postings. A company hiring for a role tells you what it's investing in right now.
- LinkedIn, for research. Useful for checking who holds a role. Its terms restrict scraping and automation, so use it to confirm, not to bulk-collect.
Respect each site's terms. If a source says don't scrape it, don't.
Step 3: Enrich each record so the email can be specific
A row with just a name and an email address isn't much to write from. For each contact, add a few fields that help you write something specific:
- Company name, website and location
- Contact name, role and email
- Why they fit your profile, in one line
- Anything timely: a new location, a recent hire, an announcement
- A fit grade, like A or B, so the best accounts go first
That one line about why they fit becomes the first line of your email. It's the difference between "I help companies like yours" and something the reader recognizes as written for them.
Step 4: Verify every address before you send
This is the step people skip, and it's the one that hurts most. Sending to addresses that don't exist causes bounces, and a high bounce rate tells inbox providers you don't know who you're emailing. That can drag down delivery for everything you send from that domain, including your normal business email.
Run every address through an email verification tool before it goes into a sequence. You'll usually get back a few kinds of results:
- Valid. Safe to use.
- Invalid. Remove it. Don't guess at another version of the address.
- Catch-all or unknown. The server accepts everything, so the tool can't confirm. Treat these as risky. Use them sparingly or leave them off.
Never guess an address from a pattern like first.last@company.com and send to it unverified.
Step 5: Clean it before it goes anywhere
- Remove duplicates, including the same person at two addresses.
- Take out current customers, open deals and competitors.
- Keep a do-not-contact list of everyone who ever opted out, and check every new list against it.
- Remove role addresses like info@ and sales@ unless that inbox is really the right door.
Step 6: Keep it small and keep it fresh
A list of 60 companies that truly fit beats 6,000 that sort of fit. Smaller lists let you write more specific emails, keep sending volume modest, and actually follow up with the people who reply.
People change jobs and companies change direction, so a list starts going stale the day you finish it. Add a fresh batch of accounts every week, take out the bounces and job changes, and re-verify anything older than a few months before you use it again.
Where AI agents fit
Most of this is research and checking, which is exactly the kind of work AI agents now do quickly: visiting company sites, filling in fields, flagging fits and running verifications. What they don't do well on their own is judge whether a company truly fits your business or notice that a contact looks wrong. A person who knows your market still has to review the list before anyone gets an email. Do that, and the email you write next has a real chance.


