Use cases / Local and reviews

6 min read

Local lead generation

A query and a city in, a list of local businesses with a reason to talk to each one out.

Give this to your agent
$ Set up https://www.routergrowth.com/SKILL.md, then find dental clinics in Lyon with under 4 stars, pull their recent reviews and get me a contact at each.
On this page

Selling to local businesses has a specific problem: the list is easy and the qualification is not. Anyone can pull every dentist in a city. What separates a list from a pipeline is knowing which of them has a problem you fix, and having a reason to call that is not "I noticed you have a website".

Reviews solve that. They are public, dated, specific, and they say out loud what is wrong.

The pipeline

local.places         →  businesses on Google Maps for a query and a city
reviews.search       →  recent reviews, ratings and whether the owner replied
company.enrich       →  firmographics for the ones with a website
contact.find         →  a named contact rather than the front desk
email.domain_health  →  whether their domain can even receive properly

Step 1: the list

curl -X POST https://api.routergrowth.com/v1/run \
  -H "Authorization: Bearer $ROUTERGROWTH_API_KEY" \
  -d '{
    "capability": "local.places",
    "input": {"query": "dental clinic", "location": "Lyon, France", "limit": 100}
  }'

Name, category, address, phone, website, rating and review count per place. Two filters do most of the qualification before you have looked at anything else:

  • No website, or a website that is a single page. If you sell web, SEO or booking software, this is the whole pitch.
  • Rating between 3.0 and 4.3 with a real review count. Below 3.0 is often a business with problems no vendor fixes. Above 4.5 they are doing fine and know it. The band in between is a business that cares, is visibly not winning, and has budget.

Run the same query across neighbourhoods rather than once for the city. Map results are ranked and truncated by proximity, so one city-level query systematically misses the outskirts.

Step 2: reviews are the qualification

curl -X POST https://api.routergrowth.com/v1/run \
  -H "Authorization: Bearer $ROUTERGROWTH_API_KEY" \
  -d '{"capability": "reviews.search",
       "input": {"place": "Clinique Dentaire Bellecour, Lyon", "platform": "google", "limit": 50}}'

Rating, text, author, date and the owner's response. Three reads, in order of how much they tell you:

  1. Are negative reviews unanswered? An unanswered one-star review from last month is a business with no process for this. If you sell reputation management, review response or anything customer-experience adjacent, that is your opening line and it is specific.
  2. What do the complaints have in common? Ten reviews about waiting on hold is a phone problem. Ten about booking is a software problem. The pattern names the product you should be pitching.
  3. Has the rating trend moved? Reviews are dated. Recent reviews materially worse than older ones is a business with a new problem and urgency to match.

Run it on yelp as well where relevant. The complaint sets differ.

Step 3: finish the row

curl -X POST https://api.routergrowth.com/v1/run \
  -H "Authorization: Bearer $ROUTERGROWTH_API_KEY" \
  -d '{"capability": "company.enrich", "input": {"domain": "cliniquebellecour.fr"}}'

For the places with a website, firmographics tell you size, which decides whether this is a one-person operation or a group with a marketing budget. Then a named contact rather than the generic inbox:

curl -X POST https://api.routergrowth.com/v1/run \
  -H "Authorization: Bearer $ROUTERGROWTH_API_KEY" \
  -d '{"capability": "contact.find",
       "input": {"first_name": "Marie", "last_name": "Laurent", "company_domain": "cliniquebellecour.fr"}}'

Local businesses have shallow org charts, so the owner is usually the buyer and usually findable. Coverage is thinner here than in mid-market B2B, and unmatched lookups are not billed, so running it across the whole list costs only what it finds.

One extra call worth making before any email campaign:

curl -X POST https://api.routergrowth.com/v1/run \
  -H "Authorization: Bearer $ROUTERGROWTH_API_KEY" \
  -d '{"capability": "email.domain_health", "input": {"domain": "cliniquebellecour.fr"}}'

A large share of small-business domains have broken or missing mail authentication. That affects whether your message arrives, and on a services pitch it is also a finding you can lead with.

The scored list

Four columns turn this into a call queue:

Signal Where it comes from What it means
Rating 3.0 to 4.3 local.places Cares, visibly not winning
Unanswered negative reviews reviews.search No process, recent pain
No website or a thin one local.places Obvious gap, easy pitch
Named contact found contact.find Reachable without a gatekeeper

Three or four signals is a call today. One is a newsletter.

Where it breaks

  • Map data is denormalized and duplicated. The same business appears under variant names and stale addresses. Dedupe on phone and website before you count your list.
  • Review coverage varies by platform and country. Google dominates in most markets, Yelp in some. Absence of reviews is often absence of a claimed listing, which is itself a signal.
  • Chains and franchises pollute the list. A location has no budget authority. Filter on repeated brand names early.
  • Local contact data is thinner than B2B. Expect a lower hit rate on contact.find here than the mid-market numbers in the enrichment guides. The phone number from local.places is often the more reliable channel.

Run it as an agent

routergrowth run -c local.places -i '{"query":"dental clinic","location":"Lyon, France","limit":100}'
routergrowth run -c reviews.search -i '{"place":"Clinique Dentaire Bellecour, Lyon","limit":50}'
routergrowth run -c contact.find -i '{"first_name":"Marie","last_name":"Laurent","company_domain":"cliniquebellecour.fr"}'

The scoring pass is exactly the kind of loop an agent should own: pull, read the reviews, score, and hand back only the rows worth a call.

What does each call cost?#

Prices below are the starting price per successful call. /v1/inspect returns the exact figure before the run and reserves it against your balance; failures and unbilled no-matches release the hold in full.

CapabilityWhat it returnsFromProviders
local.places Businesses on Google Maps for a query and location: name, category, address, phone, website, rating and review count. $0.003
reviews.search Recent reviews for a place on Google Maps or Yelp: rating, text, author, date and the owner's reply, plus the place's overall score. $0.003
company.enrich Firmographics for a company from its domain. $0
contact.find Find a professional email from a person and company. $0
email.domain_health MX, SPF, DKIM and DMARC check for a sending domain, with the issues to fix before an outbound campaign. Run by RouterGrowth directly. $0.002

One prepaid balance covers every row. Capabilities marked coming soon are listed but not yet executable.

FAQ#

Why the 3.0 to 4.3 rating band specifically?

Below 3.0 the problems are usually operational rather than marketing, and a vendor pitch lands badly on a business in real trouble. Above 4.5 the business is performing and has no urgency. The middle band is where a business is visibly not winning, cares enough that the reviews sting, and has revenue to spend. It is a heuristic, not a law, and it is worth re-tuning per vertical.

How do I avoid pitching a franchise location?

Filter on repeated brand names in the local.places result before anything else, and check whether the website is a location subpage of a national domain. Franchise locations rarely control budget, so time spent on them converts at near zero. The exception is a franchisee-owned location with its own domain, which behaves like an independent business.

Are Google and Yelp reviews different enough to pull both?

In markets where Yelp has real share, yes. The complaint sets diverge because the audiences do, and a business that responds diligently on one platform often ignores the other entirely. That gap is itself a finding. In markets where Yelp is thin, Google alone is enough and the second call is not worth the cost.

Is the phone number better than the email here?

Often, yes. Local contact data is thinner than mid-market B2B, so contact.find hit rates are lower, while local.places returns a verified phone number for nearly every listing. For local outreach the realistic pattern is phone as the primary channel with email as follow-up, which is the reverse of B2B SaaS outbound.

What does the whole list cost to build and score?

The place lookup and the review pull are fractions of a cent each, so the scan across a city is cheap. The cost concentrates in enrichment and contact lookup, and those only run on rows that already passed the review filter. Scoring first and enriching second is what keeps a several-hundred-business scan in the low single-digit dollars.

Run this today

Sign up, get $5 of credit, and the first call in this guide costs a fraction of a cent. One key, one balance, price shown before every call.

Get started →
local lead generationgoogle maps apireview monitoringlocal business datamap pack leads
Give this to your agent
Claude CodeCodexHermesOpenClawCursor

Install the skill once and Claude Code, Codex, Cursor and the rest discover these capabilities, check the price, then run them.

Install the agent skill →

Reading this as an agent? This guide as markdown: /use-cases/local-lead-generation.md · every guide: /use-cases/llms.txt · RSS