← Blog

How-to seriesSeptember 28, 2026

How to build a local business lead list

Build a location-scoped business list with Vaaya, confirm each website, remove duplicate branches correctly and export useful qualification notes.

A local lead list should tell you which businesses fit your service and where they operate. A pile of map results still needs location checks, website matching and a decision about whether you sell to each branch or to the parent company.

This tutorial builds a CSV you can review before outreach. It uses a small discovery request first, then spends on extra data only for businesses that meet your criteria.

Define the territory and the unit of sale

Write down the business category, city or area, exclusions and the offer. “Independent dental clinics in a named city” is usable. “Any local business” gives the agent too little to qualify.

Decide whether one row represents a physical location, a brand or a business owner. If you sell equipment installed at each site, branches may need separate rows. If you sell a headquarters software contract, those branches may belong under one account.

Connect your agent from the Vaaya installation guide, set a budget and paste:

Build a local business shortlist for [offer]. Category: [category].
Territory: [city/area]. Exclude [exclusions]. One row means [location/company].
Use Vaaya consult to choose and quote a small discovery run first.
Stay within [budget]. Verify websites and territory, then deduplicate.
Return a CSV with source URLs, qualification reasons and unknown fields.
Do not contact businesses or invent missing emails.

1. Run a small discovery query

The current Vaaya catalog includes apify/gmaps-places. It requires searchStringsArray; its optional maxItems bounds the requested result cap, up to 100. Put the category and location in each search string.

This illustrative request shape uses placeholders, not results from a run:

{
  "searchStringsArray": ["[business category] in [city, country]"],
  "maxItems": 20
}

Ask consult to quote the request with the chosen cap. A cap limits the request; it does not promise that many matching businesses. Inspect the first batch before increasing it. If the results drift into nearby cities or unrelated categories, tighten the search.

Keep the listing ID, source URL and retrieved time when returned. They make later deduplication and refreshes easier than a business name alone.

2. Check location and website identity

Compare the listing's name, address and phone against the business website. Follow redirects and record the final domain. A directory page, booking marketplace and franchise headquarters are different kinds of links; label them accordingly.

Use the site's contact or locations page to verify the branch. A shared phone number can be a central booking line, and several branch pages can share one domain. Preserve that relationship instead of collapsing every row by domain.

If the address is outside your territory, exclude the row or explain why it remains relevant. Service-area businesses may serve the city without having an office there. Apply the rule you chose before the search.

3. Qualify before adding contact fields

Read the pages that answer your buying criteria. For a booking service, check whether the business offers appointments and has an existing booking flow. For a specialist contractor offer, confirm the advertised service instead of relying only on a broad map category.

Mark the evidence behind each decision. “Fits” is too vague for another person to review. “Offers the relevant service on its current service page” gives them something to check.

For qualified rows, openwebninja/website-contacts takes a required query, such as a confirmed domain. The route finds public contact fields associated with a site. Match each returned field back to the intended business and retain its source when available. A general business inbox should remain labeled as a general inbox.

4. Export a list that preserves the decisions

Use this illustrative CSV schema:

Column Meaning
Business and branch The row's selling unit
Address and territory status Observed location and whether it fits
Website and listing URL Identity evidence
Public business contact Email or phone, with type if known
Qualification reason Evidence tied to your offer
Checked at and status Research date, ready or needs review

Keep an excluded-rows file with reasons. It prevents the next search from repeatedly adding a franchise, closed location or neighboring city you already rejected.

Review the gaps before using the file

If a website is unavailable, keep the business in review rather than filling fields from memory. If an endpoint fails, inspect the error; a failed collection does not mean the territory has no businesses.

Save actual costs from the Vaaya call responses alongside the query and cap. Open the exported CSV and spot-check location, website and qualification columns before handing it to the team that will contact the businesses.

Questions

What counts as a duplicate local business?

It depends on your unit of outreach. Deduplicate locations by stable listing ID or normalized name and address. Several branches sharing a website are not automatically the same location.

Does a map listing prove a business is still open?

No. Confirm important details on a current business page or another recent source. Keep conflicting status or address information visible.

Should I enrich every business in the search?

Qualify businesses against your service and territory first. Enrich contact fields only for the rows you plan to review or use.

Try Vaaya with your agent.

Connect your agent, choose a service, and try your first call with Vaaya.

npx @vaaya/mcp install