← Back to Blog

7 Ways to Build a Local Business Lead List Without Buying One

7 Ways to Build a Local Business Lead List Without Buying One

Buying a lead list from a broker gets you data that's been emailed by fifty other people this month. The open rates reflect it.

Building your own list takes more work upfront but the data is fresh, you control what's in it, and nobody else has the same file. There are more ways to do this than most people realize. Some are free. Some cost a few bucks. All of them beat a resold CSV.

Here are seven methods I've tested or evaluated, with honest notes on what actually works.

1. Google Places API (Text Search)

This is the method I used to pull 67,000 leads. You send a natural language query like "plumber in Denver Colorado" and get back structured JSON with the business name, address, phone, website, and category.

Cost: $200/month free credit on every Google Cloud project. Text Search (Pro) costs vary by fields requested but you can make thousands of calls before hitting the free ceiling.

What you get: Name, phone, address, website, Google category types. No email.

Limits: 20 results per query. No pagination token on Text Search (you get what you get for each query). Narrow your queries by city + category to maximize unique results.

Best for: Broad local business prospecting across many categories and cities. This is the highest-volume method on this list if you have enough city/category combinations.

const res = await fetch('https://places.googleapis.com/v1/places:searchText', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Goog-Api-Key': process.env.GOOGLE_PLACES_API_KEY,
    'X-Goog-FieldMask': 'places.displayName,places.formattedAddress,places.websiteUri,places.nationalPhoneNumber,places.types'
  },
  body: JSON.stringify({
    textQuery: 'plumber in Denver Colorado',
    pageSize: 20,
    languageCode: 'en'
  })
});

2. Yelp Fusion API (Business Search)

Yelp's API gives you similar data to Google Places but with different coverage. Some businesses are on Yelp but not well-represented on Google Maps, and vice versa. Running both gives you a wider net.

Cost: Free tier gives you 5,000 API calls per day. That's generous.

What you get: Name, phone, address, website (sometimes), Yelp categories, rating, review count. The review count is useful for qualifying leads. A business with 200 reviews is probably established enough to have budget. One with 3 reviews might be brand new or a side hustle.

Limits: 50 results per query with offset-based pagination (up to 1,000 per search). Must display Yelp branding if you show results publicly (TOS requirement). Can't store data longer than 24 hours without refreshing unless you have a partnership agreement.

Best for: Qualifying leads by reputation. Cross-referencing against Google Places results to fill gaps.

const res = await fetch(
  `https://api.yelp.com/v3/businesses/search?term=plumber&location=Denver+CO&limit=50`,
  { headers: { Authorization: `Bearer ${process.env.YELP_API_KEY}` } }
);

The catch: Yelp's TOS on data storage is strict. If you're pulling data to put it in a CSV and email those businesses, you need to read their terms carefully and decide if that fits your use case. Many people do it anyway. I'm not going to tell you what to do here.

3. OpenStreetMap (Overpass API)

OpenStreetMap is a free, open-source map database maintained by volunteers. The Overpass API lets you query it for businesses by type and geography. Completely free. No API key. No rate limits beyond being reasonable.

Cost: Free. Forever.

What you get: Business name, coordinates, sometimes phone and website. Coverage is inconsistent. Major cities have good data. Smaller towns are spotty. OSM volunteers add businesses when they feel like it, so you might get a coffee shop mapped in 2019 that closed in 2021.

Limits: No guaranteed phone or website fields. Data freshness varies wildly. Query syntax is its own language (Overpass QL) that takes an hour to learn.

Best for: Free lead research in well-mapped metro areas. Good for cross-referencing. Not reliable enough to be your only source.

[out:json][timeout:30];
area["name"="Denver"]["admin_level"="5"]->.city;
(
  node["shop"="plumber"](area.city);
  node["craft"="plumber"](area.city);
  way["shop"="plumber"](area.city);
);
out body;

You query the Overpass endpoint at https://overpass-api.de/api/interpreter with this as the body. The response is GeoJSON with whatever tags volunteers have added to each node.

4. State Secretary of State business registrations

Every state maintains a public database of registered businesses. LLCs, corporations, sole proprietorships (in some states). These are public records. You can search them online or, in some states, download bulk data files.

Cost: Free to search online. Some states charge $25-100 for bulk data downloads.

What you get: Legal business name, registered agent name and address, filing date, status (active/inactive), and sometimes the principal's name. No phone. No website. No email.

Limits: You get the legal entity info, not the operating info. A plumbing company might be registered as "JDM Holdings LLC" which tells you nothing about what they do. No category data. Many registrations are for shell companies, holding companies, or inactive businesses. Heavy filtering required.

Best for: Finding business owner names for personalization. Cross-referencing against other lists. Finding newly registered businesses (filter by filing date in the last 90 days to find startups that might need services now).

States with decent online search: California (bizfileonline.sos.ca.gov), Texas (direct.sos.state.tx.us), Florida (sunbiz.org), New York (apps.dos.ny.gov), Colorado (sos.state.co.us).

5. Industry-specific directories and APIs

Different industries have their own listing sites with better data than any general-purpose source.

Medical: NPI Registry (npiregistry.cms.hhs.gov) is a free, public API with every licensed healthcare provider in the US. Name, specialty, practice address, phone. No website, but you have enough to find it.

const res = await fetch(
  'https://npiregistry.cms.hhs.gov/api/?version=2.1&taxonomy_description=dentist&state=CO&limit=200'
);

Legal: State bar associations publish member directories. Most aren't APIs but they're scrapeable. Avvo has public profiles with practice areas and contact info.

Home services: HomeAdvisor, Thumbtack, and Angi all have public business profiles. No official API for lead gen purposes, but the data is there.

Restaurants: If you only care about restaurants, the Yelp API or Google Places API both cover them well. OpenTable has a directory but no public API.

Best for: When you only need one vertical and you want deeper data (specialties, credentials, years in practice) than a general business directory provides.

6. SerpAPI or similar search-result APIs

If you want Google search results without getting blocked, services like SerpAPI, ScrapingBee, or Bright Data's SERP API handle the proxies and CAPTCHA solving for you. You get the same local pack results a human would see when searching "plumber near Denver."

Cost: SerpAPI starts at $50/month for 5,000 searches. ScrapingBee is $49/month for 1,000 credits. Not cheap compared to Google Places API directly.

What you get: Whatever Google shows in search results. Local pack listings include name, phone, address, rating, website. Organic results give you URLs to scrape further.

Limits: You're paying a middleman to query Google on your behalf. The data you get back is less structured than a direct API call. You still need to parse the response into something usable.

Best for: When you need Google search results specifically (not just Places data) and you're running from an IP that gets blocked. Also useful if you want to pull "near me" results with geo-targeting you can't easily do with Places API alone.

7. Apollo.io and similar B2B platforms

Apollo, ZoomInfo, Seamless.AI, UpLead, and Hunter all maintain large databases of business contacts. They've already done the scraping, enrichment, and verification. You're paying for the convenience of not building the pipeline yourself.

Cost: Apollo gives you 10,000 free credits per month (generous). ZoomInfo starts at $15K/year (enterprise). UpLead is $99/month for 170 credits. Hunter is $49/month for 500 lookups.

What you get: Email addresses (verified), phone numbers, company size, revenue estimates, tech stack data, social profiles. Much richer than what you get from Google Places alone.

Limits: You're working with their database, not building your own. Their data might be stale. Their coverage of local small businesses is often worse than their coverage of tech companies and mid-market firms. A one-person plumbing shop in Twin Falls isn't in ZoomInfo.

Best for: Enriching a list you've already built. Pull names and websites from Google Places, then run them through Apollo to get emails and decision-maker names. Also works as a standalone source if you're targeting businesses above 10 employees.

Combining methods

No single source gives you everything. The highest-quality lead list combines two or three of these:

Volume play: Google Places API for the initial pull (67K+ businesses across all categories and cities). Then Apollo or Hunter to enrich with emails. Total cost: under $15 for Places + $0 for Apollo's free tier.

Quality play: Industry-specific directories (NPI for medical, state bar for lawyers) for verified professionals with credentials. Then Yelp to filter by review count (skip anyone under 10 reviews as likely inactive). Then a Puppeteer script to scrape emails from their websites.

Free play: OpenStreetMap for the initial list, Secretary of State data for owner names, then manual website visits for contact info. Zero cost. Takes longer. Works fine if you're prospecting a single city.

Freshness play: Secretary of State filings filtered to the last 90 days give you newly registered businesses. These are people actively starting something who might need whatever you're selling right now. Cross-reference against Google Places to get their phone and website once they've set up shop.

The pattern is always the same

Regardless of source, the pipeline structure doesn't change:

  1. Pull structured data from one or more sources
  2. Deduplicate by website URL or business name + address
  3. Enrich with email addresses (scraping, Apollo, or Hunter)
  4. Filter out exclusions (competitors, national chains, industries you don't serve)
  5. Format into your outreach tool's import schema
  6. Send with personalization using the category, city, and name fields

The code I shared in the Google Places walkthrough handles steps 2-5. You just swap out step 1 with whichever data source fits your budget and industry.

Sending the emails: campaign platforms compared

A lead list sitting in a CSV doesn't do anything. You need a platform that sends the emails, rotates your sending accounts, manages replies, and keeps you out of spam. Here are the main options and what actually matters when picking one.

Instantly.ai

This is what I use. It's built specifically for cold outreach at scale.

What it does well: Unlimited email accounts on every plan. Built-in warmup that runs automatically in the background. Workspace-level deduplication so you don't email the same person from two campaigns. Lead management with CSV import and custom variable mapping (city, state, category all become merge fields). Unified inbox so replies from all your sending accounts land in one place.

What to know: The $30/month plan gives you 5,000 active leads and 1,000 uploaded contacts. The $77.60/month Growth plan is where most serious users land because it removes the contact upload limit and adds A/B testing. Warmup takes about 14 days before you should scale volume. Start at 20-30 sends per mailbox per day and work up to 50-80.

CSV import: Upload your file, map columns to Instantly's fields (email, first name, company name, website, phone, plus custom variables for city/state/category), assign to a campaign, and you're ready to write your sequence.

Best for: Cold email as a primary channel. Multiple sending domains. High volume (thousands per week across many mailboxes).

Smartlead

The closest competitor to Instantly and the one people usually compare it against.

What it does well: Also supports unlimited email accounts. Has a similar warmup system. The inbox rotation feature automatically cycles through your sending accounts within a single campaign so no one mailbox gets overloaded. API access on all plans, which matters if you want to programmatically upload leads from your pipeline instead of doing manual CSV imports.

What to know: Starts at $39/month for 2,000 active leads. The $94/month plan gets you 30,000. The API is the real differentiator. If you want your scraping pipeline to push leads directly into a campaign without touching a spreadsheet, Smartlead makes that easier than most.

Best for: Developers who want API-driven lead upload. Teams splitting work across multiple clients or verticals.

Lemlist

More of a sales engagement platform than a pure cold email tool. It leans heavier into personalization and multi-channel sequences.

What it does well: Custom image personalization (dynamically inserts the prospect's name or logo into images in the email body). LinkedIn steps within a sequence (visit profile, send connection request, send message). Built-in email finder and verifier so you can skip the enrichment step if your lead list has names and company domains but no email addresses.

What to know: $39/month for one sending email. $69/month for the email + LinkedIn combo. Each additional sending account costs extra, which adds up fast compared to Instantly or Smartlead's unlimited model. Not ideal if your strategy depends on rotating 20+ mailboxes.

Best for: Personalization-heavy outreach. Multi-channel sequences that combine email and LinkedIn. Smaller-volume, higher-touch campaigns.

Woodpecker

The quiet workhorse. Been around longer than most of the others and has a loyal base of agencies and consultants.

What it does well: Solid deliverability reputation. Simple, clean interface that doesn't try to do too much. Built-in email verification before sending. Condition-based follow-ups (if they opened but didn't reply, send version A; if they clicked a link, send version B). Agency panel for managing multiple client accounts.

What to know: Pricing is per-contact-slot. $29/month gets you 500 contacted prospects. $49 for 1,000. $67 for 2,000. Each additional sending account is $2/month. Less aggressive on pricing than Instantly or Smartlead for high-volume use, but the per-contact model is predictable if you're sending smaller batches.

Best for: Agencies managing multiple client campaigns. Consultants running smaller, targeted lists. People who value simplicity over feature count.

Mailshake

Sits between a cold email tool and a sales engagement platform. Good integration ecosystem.

What it does well: Native integrations with Salesforce, HubSpot, and Pipedrive. Phone dialer built in (separate cost) so you can do email + call sequences from one platform. Lead Catcher feature auto-categorizes replies by intent (interested, not interested, out of office) so you can prioritize follow-ups.

What to know: $25/month on the starter plan for email only. $85/month for the sales engagement tier with phone and LinkedIn. No built-in warmup, you need a third-party warmup tool or handle it yourself. That's a notable gap compared to Instantly and Smartlead.

Best for: Teams already on Salesforce or HubSpot who want outbound data flowing into their CRM automatically. Multi-channel sellers who want email + phone in one tool.

Reply.io

AI-heavy. Leans into automated sequence writing and intent detection.

What it does well: AI sequence generator writes your email drafts based on your value prop and target persona. Meeting booking built in. Multi-channel: email, LinkedIn, calls, SMS, WhatsApp all in one sequence. B2B data included on higher plans (137M+ contacts they claim) so you can skip the lead sourcing step entirely and prospect inside the platform.

What to know: $49/month for 1,000 active contacts with email only. $89/month adds multi-channel and AI features. Their built-in data is useful for mid-market and enterprise prospecting but thin on small local businesses. A plumber in Idaho probably isn't in their database. You'd still need to source your own list for SMB outreach.

Best for: Mid-market and enterprise outbound. Teams that want AI writing assistance. People who want prospecting and sending in one platform.

Which one to pick

If you're doing local SMB outreach with a self-built lead list (which is what this whole article is about), here's how I'd narrow it:

High volume, multiple mailboxes, cost-sensitive: Instantly or Smartlead. Both offer unlimited accounts on every plan. Instantly has the bigger user community. Smartlead has the better API.

Smaller list, higher personalization: Lemlist if you want image personalization and LinkedIn steps. Woodpecker if you want something simpler.

Already in a CRM: Mailshake if you're on Salesforce/HubSpot. Reply.io if you want AI drafting.

Just starting out: Instantly at $30/month with the built-in warmup is the lowest-friction entry point. Upload your CSV, map your fields, write one email, warm up for two weeks, start sending.

Every one of these platforms imports CSV files with the same column structure. The pipeline I described in this article and the Google Places walkthrough outputs a CSV that works with all of them. You just map the columns to whatever that platform calls its merge fields.


Every platform mentioned here has its own terms of service, acceptable use policies, and sending limits. What's allowed on Instantly is different from what's allowed on Lemlist or Smartlead. Anti-spam laws (CAN-SPAM, GDPR, CASL, state privacy statutes) apply regardless of which tool you use to send. Read the terms for every service you touch and adapt your approach to stay within them. Pricing and features change. Verify current plans on each platform's site before committing. This is what worked for my circumstances. Yours may differ.


Fact-check notes and sources

  • Google Places API free credit and pricing: Google Maps Platform Pricing, confirmed April 2026.
  • Yelp Fusion API: 5,000 calls/day on free tier per Yelp Fusion documentation. Data caching policy in their TOS restricts storage beyond 24 hours without refresh.
  • NPI Registry API: free, public, no authentication required. CMS NPI Registry.
  • OpenStreetMap Overpass API: free, no key required, fair-use rate limiting. Overpass API documentation.
  • Apollo.io free tier: 10,000 credits/month per their pricing page as of April 2026.
  • SerpAPI pricing: $50/month for 5,000 searches per their published plans.
  • State business registration portals: California (bizfileonline.sos.ca.gov), Florida (sunbiz.org), Texas (direct.sos.state.tx.us) are all publicly accessible as of this writing.
  • Instantly.ai pricing: $30/month (Growth Leads), $77.60/month (Supersonic) per their pricing page as of April 2026.
  • Smartlead pricing: $39/month (Basic), $94/month (Pro) per their pricing page as of April 2026.
  • Lemlist pricing: $39/month (Email Starter), $69/month (Email Pro) per their pricing page as of April 2026.
  • Woodpecker pricing: $29/month (500 contacts) per their pricing page as of April 2026.
  • Mailshake pricing: $25/month (Starter), $85/month (Sales Engagement) per their pricing page as of April 2026.
  • Reply.io pricing: $49/month (Starter), $89/month (Professional) per their pricing page as of April 2026.

← Back to Blog

Accessibility Options

Text Size
High Contrast
Reduce Motion
Reading Guide
Link Highlighting
Accessibility Statement

J.A. Watte is committed to ensuring digital accessibility for people with disabilities. This site conforms to WCAG 2.1 and 2.2 Level AA guidelines.

Measures Taken

  • Semantic HTML with proper heading hierarchy
  • ARIA labels and roles for interactive components
  • Color contrast ratios meeting WCAG AA (4.5:1)
  • Full keyboard navigation support
  • Skip navigation link
  • Visible focus indicators (3:1 contrast)
  • 44px minimum touch/click targets
  • Dark/light theme with system preference detection
  • Responsive design for all devices
  • Reduced motion support (CSS + toggle)
  • Text size customization (14px–20px)
  • Print stylesheet

Feedback

Contact: jwatte.com/contact

Full Accessibility StatementPrivacy Policy

Last updated: April 2026