DEV Community

ZhuAI Studio
ZhuAI Studio

Posted on

How to Build a Verified B2B Lead List Without Apollo or a Big Budget

How to Build a Verified B2B Lead List Without Apollo or a Big Budget

Apollo, ZoomInfo, and similar databases are convenient, but they come with two problems for small teams and solo founders. The first is price: paid plans quickly land in the $49–$119 per user per month range, before you have sent a single email. The second is data quality. Database records decay fast — people change jobs, companies shut down, inboxes get abandoned. If you export 1,000 contacts and 25% of them bounce, you don't just waste money, you damage your sender reputation and can get your domain flagged.

The good news: almost everything you need to build a small, accurate, verified lead list is public. It takes more manual work per lead, but the output is fresher and far more targeted. This is the exact workflow I use, step by step.

Step 1: Define your ICP like you mean it

Most lead lists fail here, before any research starts. "Marketing agencies" is not an ICP. A usable ICP has five concrete filters:

  1. Industry / niche — as narrow as you can sell to. "Dental clinics" beats "healthcare."
  2. Company size — employee range (e.g., 5–50). Size determines who the decision-maker is and whether they can pay.
  3. Geography — country, state, or metro area. Local businesses behave very differently from national ones.
  4. Buying signals — things you can observe: they're hiring, they just opened a new location, their website has no online booking, they run ads, they were recently funded, they exhibit at trade shows.
  5. Exclusions — franchises (decisions are made at HQ), businesses with no website, companies already using your biggest competitor, anyone you legally can't email in your jurisdiction.

Write it as one sentence you can test against any candidate company:

"Independent dental clinics with 1–3 locations in Texas, 5–30 staff, with a website but no online booking system."

If you can't say yes/no within 30 seconds of looking at a company, your ICP is still too vague. Every lead that doesn't match this sentence gets cut, no exceptions — a smaller list of exact-fit leads outperforms a big fuzzy list every time.

Step 2: Gather raw candidates from public sources

Forget databases for a moment. These sources are free and surprisingly rich:

  • Google Maps — search "dental clinic in Austin" and work through the results. You get name, address, phone, website, rating, and review count (review count is a rough proxy for how active the business is).
  • Company websites — the About, Team, and Contact pages are where decision-maker names and generic inboxes (info@, hello@) actually live.
  • LinkedIn public pages — company pages show employee count range, HQ location, and industry. Public search results (e.g., via Google: site:linkedin.com/company "dental" "Austin") help you find companies and confirm size without any paid plan.
  • Industry directories — Clutch and G2 for agencies and SaaS; Yelp and TripAdvisor for local businesses; niche associations (e.g., a state dental association member list) for verticals.
  • Trade show and conference exhibitor lists — massively underrated. Exhibitors are companies with a marketing budget who actively want customers. Last year's exhibitor page is usually still online.
  • Google search operators — combine them: "dental clinic" "Austin" site:*.com "contact", or intitle:"dentist" "book appointment" Texas. Operators turn Google into a free, always-updated database.
  • Job boards — a company hiring for a role related to your offer (e.g., hiring a "front desk receptionist" = growing, possibly overloaded = may need your software/service) is a real-time buying signal.

Collect 2–3× more candidates than your target list size. You'll lose a lot of them in verification and fit-checking, and that's the point.

Step 3: Capture a fixed field set for every lead

Decide your columns before you start, and never change them mid-build. This is the field set I deliver, and it covers 95% of outreach use cases:

Field Why it matters
Company Name Obvious, but normalize it ("ABC Dental LLC" → "ABC Dental")
Website Your verification anchor — everything gets checked against it
Industry / Niche For segmentation later
Location (City, State, Country) Time zones and local references in outreach
Company Size (est.) Fit check against ICP
Contact First Name / Last Name Personalization
Job Title Is this person actually the decision-maker?
Email The deliverable — verified in Step 5
Email Status Valid / Catch-all / Risky — from verification
LinkedIn URL (company or person) Second touch channel
Phone (if public) Only if published on their site/Maps listing
Source URL Where you found this lead — auditability
Intent Signal The observed trigger (hiring, new location, no booking system…)
Tier A / B / C — assigned in Step 6

Two rules: one row per person (not per company), and never leave the Source URL blank. If you can't trace where a lead came from, you can't defend its quality.

Step 4: Find the decision-maker and their email pattern

For small companies, the decision-maker is usually the owner, founder, or practice/office manager — and they're often named right on the website's About or Team page. For mid-size companies, target the head of the function you'd sell to (VP Sales, Head of Marketing, Operations Manager).

Once you have one known email at a company, you know its pattern. Common formats:

  • first@company.com
  • first.last@company.com
  • flast@company.com
  • first_last@company.com

If no email is published for your target person, find any email from that domain (on the contact page, in a PDF, in a press release), infer the pattern, and construct the address. Then it goes into the verification pipeline — never straight into a campaign. A constructed email is a hypothesis, not a lead.

Step 5: Verify every email — this is the non-negotiable step

"Verified" has to mean something specific. My pipeline has four layers:

  1. Syntax check — is it a well-formed address? Catches typos and malformed scrapes. Free tools and even a spreadsheet formula can do this.
  2. Domain & MX check — does the domain exist and have mail exchanger (MX) records? You can check with nslookup -type=mx company.com or any online MX lookup. No MX record = dead address, delete it.
  3. Verification service — run the list through a verifier such as MillionVerifier, NeverBounce, Bouncer, or ZeroBounce. Most have free trial credits or pay-as-you-go pricing of a few dollars per thousand. This layer checks mailbox existence and flags catch-all domains (domains that accept mail to any address, so "valid" can't be fully confirmed).
  4. Status discipline — keep Valid emails for sending. Treat Catch-all as send-with-caution (small test batch first). Drop Invalid, Disposable, and Role-based addresses for cold outreach to individuals (info@, sales@ are fine as company contacts, but they convert poorly and some verifiers flag them).

Done right, your hard bounce rate should stay under 2–3%. Above 5%, stop and fix the list — continuing will burn your sending domain. One more hygiene rule: re-verify any list older than 60–90 days before reusing it. People change jobs constantly; a verified list is a perishable good.

Step 6: Tier the list A / B / C

Not all verified leads deserve equal effort. Score each one on fit + signal:

  • Tier A — exact ICP fit and a fresh intent signal (hiring your target role, new location, recent funding, visibly missing the thing you sell). These get fully personalized outreach.
  • Tier B — exact ICP fit, no visible signal. Solid list for standard sequences.
  • Tier C — partial fit (slightly outside size range, adjacent niche, catch-all email only). Keep them, but they get the lightest touch or wait for a later campaign.

This tiering is where a hand-built list beats a database export: the intent signals were observed by a human, not guessed by an algorithm.

Step 7: Deliver in a clean, usable format

A CSV with UTF-8 encoding, one header row, no merged cells, no stray commas in fields. Example:

Company Name,Website,Industry,City,State,Country,Company Size,First Name,Last Name,Job Title,Email,Email Status,LinkedIn URL,Phone,Source URL,Intent Signal,Tier
Bright Smiles Dental,brightsmiles.example.com,Dental Clinic,Austin,TX,USA,11-50,Jane,Doe,Owner,jane@brightsmiles.example.com,Valid,linkedin.com/company/example,,google.com/maps/example,No online booking on website,A
Riverwalk Dental,riverwalkdental.example.com,Dental Clinic,San Antonio,TX,USA,5-10,John,Smith,Practice Manager,j.smith@riverwalkdental.example.com,Valid,linkedin.com/company/example2,(512) 555-0100,riverwalkdental.example.com/team,Hiring front desk staff,B
Enter fullscreen mode Exit fullscreen mode

Before delivery: deduplicate on email and on domain+person (the same person appears under pattern variants), normalize company names, and spot-check a random 5% of rows against their source URLs. If a row fails the spot check, find out why before shipping the list.

A few compliance ground rules

Publicly available does not mean "no rules." Collect only data people and companies have published for business contact purposes, don't scrape behind logins or bypass access controls, and honor GDPR/CAN-SPAM/your local equivalent when you actually send — lawful basis, honest sender identity, working unsubscribe. And never buy lists from random sellers: unverifiable provenance usually means scraped or stolen data, and your bounce rate will expose it within one campaign.

The honest trade-off

This workflow is slower than clicking "export" in a database. Building 250 verified, tiered leads this way takes real hours of research. What you get for those hours is accuracy a generic export can't match: current decision-makers, observed buying signals, bounce rates under control, and a list you can actually defend row by row.

If you'd rather skip the manual grind: I build verified B2B lead lists to order on Fiverr — verified B2B lead list, 250 leads per package, from $30 — and I'm happy to send 5 free sample leads first, so you can check the format and quality before you commit. And if content is the bottleneck once the list is ready, my 30-Day Social Media Content Pack ($24.99) covers the follow-up month of posts.

— ZhuAI Studio

Top comments (0)

⌂ 换网址