# Reach roofing companies in Phoenix with weak reviews

150 accounts and 150 people, about 95 verified work emails and 285 emails sent from inboxes on your own domain.

Family: [Local businesses](https://www.routergrowth.com/workflows/local-businesses.md) · HTML page: https://www.routergrowth.com/workflows/local-roofers-phoenix

## Give this to your agent

```text
Using RouterGrowth, run this workflow: Find roofers in Phoenix with Google reviews under 4 stars and email the owner. 150 accounts, 1 contact each, three-step sequence.
Show me the price before every call, and stop after each stage with a sample of the results so I can adjust.

1. Source the businesses: local.places x 8 map searches, reviews.search x 750 reviews read. Google Maps places for the category and area, with site, phone and rating.
2. Qualify on firmographics: company.enrich x 150 companies. Headcount, industry and location to keep the accounts that fit.
3. Find the people: people.search x 150 profiles. 1 contact per account by title and seniority, with current role.
4. Get the contact: contact.find x 105 (150 tried, 70% found), contact.verify x 105 verdicts. Charged on a match only: a miss is free, so the estimate is a ceiling.
5. Context for the first line: web.scrape x 150 pages. One page per account and a few recent posts per person, so the opener is about them.
6. Run the outreach: email.send x 285 (95 contacts x 3 steps). Sequence from inboxes on a domain you own, one call per email.
7. Read the replies: email.messages x 29 inbox reads. Poll the inboxes, classify replies, hand the warm ones to a human.

Before sending: email.domain x 1, email.inbox x 1, on a domain I own.

Budget for one run: about $8.43 plus $4.66 one-time setup. Run routergrowth inspect on any capability before the first call to confirm the quote.
```

## Why this works

Roofing reviews are about quotes that never arrived and crews that came late. The owner sells every job personally and knows the pipeline leaks.

The first line, as your agent would write it:

> Two homeowners wrote that they never received the quote. How do estimates go out today?

## The workflow, stage by stage

Source the businesses → Qualify on firmographics → Find the people → Get the contact → Context for the first line → Run the outreach → Read the replies

| # | Stage | Calls | Cost |
|---|---|---|---:|
| 1 | Source the businesses | `local.places` x 8, `reviews.search` x 750 | $3.24 |
| 2 | Qualify on firmographics | `company.enrich` x 150 | $1.06 |
| 3 | Find the people | `people.search` x 150 | $0.06 |
| 4 | Get the contact | `contact.find` x 105, `contact.verify` x 105 | $2.17 |
| 5 | Context for the first line | `web.scrape` x 150 | $0.84 |
| 6 | Run the outreach | `email.send` x 285 | $1.00 |
| 7 | Read the replies | `email.messages` x 29 | $0.06 |
| + | One-time setup | `email.domain` x 1, `email.inbox` x 1 | $4.66 once |

One run: $8.43 for 1,732 calls. Assumptions: 2 contacts per account unless the brief says otherwise, 70% email find rate, 90% verification pass, 3 emails per contact, 30% LinkedIn accept rate. Prices are the catalog's at the time this page was built; `routergrowth inspect` returns the exact quote before a call.

### Source the businesses

Google Maps places for the category and area, with site, phone and rating.

### Qualify on firmographics

Headcount, industry and location to keep the accounts that fit.

### Find the people

1 contact per account by title and seniority, with current role.

### Get the contact

Charged on a match only: a miss is free, so the estimate is a ceiling.

### Context for the first line

One page per account and a few recent posts per person, so the opener is about them.

### Run the outreach

Sequence from inboxes on a domain you own, one call per email.

### Read the replies

Poll the inboxes, classify replies, hand the warm ones to a human.

## Run it from the command line

```bash
# RouterGrowth workflow: Find roofers in Phoenix with Google reviews under 4 stars and email the owner. 150 account
npm install -g routergrowth && routergrowth setup

# one-time setup
routergrowth run -c email.domain -i '{"domain":"<domain>"}'
routergrowth run -c email.inbox -i '{}'

# 01 Source the businesses  (local.places x 8, reviews.search x 750)
routergrowth run -c local.places -i '{"query":"<query>"}'
routergrowth run -c reviews.search -i '{"place":"<place>"}'

# 02 Qualify on firmographics  (company.enrich x 150)
routergrowth run -c company.enrich -i '{"domain":"<domain>"}'

# 03 Find the people  (people.search x 150)
routergrowth run -c people.search -i '{}'

# 04 Get the contact  (contact.find x 105, contact.verify x 105)
routergrowth run -c contact.find -i '{"first_name":"<first_name>","last_name":"<last_name>","company_domain":"<company_domain>"}'
routergrowth run -c contact.verify -i '{"email":"<email>"}'

# 05 Context for the first line  (web.scrape x 150)
routergrowth run -c web.scrape -i '{"url":"<url>"}'

# 06 Run the outreach  (email.send x 285)
routergrowth run -c email.send -i '{"inbox_id":"<inbox_id>","to":"<to>"}'

# 07 Read the replies  (email.messages x 29)
routergrowth run -c email.messages -i '{"inbox_id":"<inbox_id>"}'
```

## Questions

### How do I get local business leads from Google Maps?

local.places returns the businesses on Google Maps for a category and a city, with address, phone, website, rating and review count. The agent pages through the area until it has the number you asked for.

### How do I qualify a local business before contacting it?

With its reviews. reviews.search reads the recent ones for each place, so the agent can keep the businesses under a rating you set and note the complaint that comes back most often.

### How do I find the owner's email?

people.search looks for the owner or manager at the business's domain and contact.find returns a work email, charged only when one is found. Small businesses without a domain are reached through the phone number and site on the listing instead.

### Is this for agencies or for local businesses themselves?

For anyone who sells to local businesses: agencies, software vendors, suppliers. The workflow builds a list of businesses to sell to, not a list of consumers.

### What does this workflow cost to run?

About $8.43 for one run of 1,732 calls, plus $4.66 once for the sending inboxes. Each call is quoted before it runs and a lookup that finds nothing is not charged, so the figure is a ceiling. There is no subscription: the run is paid from a prepaid balance.

## Related

- [Reach med spa owners in Dallas with weak reviews](https://www.routergrowth.com/workflows/local-med-spas-dallas.md)
- [Reach auto repair shop owners in Atlanta with weak reviews](https://www.routergrowth.com/workflows/local-auto-shops-atlanta.md)
- [Reach dental clinics in Austin with weak reviews](https://www.routergrowth.com/workflows/local-dental-austin.md)
- [Reach restaurant owners in Chicago with recent bad reviews](https://www.routergrowth.com/workflows/local-restaurants-chicago.md)
- Guide: [Local lead generation with Google Maps listings and reviews](https://www.routergrowth.com/use-cases/local-lead-generation.md)
- Skill: [Cold email pipeline](https://www.routergrowth.com/skills/cold-email-pipeline.md)
- Skill: [Hiring-signal outbound](https://www.routergrowth.com/skills/hiring-signal-outbound.md)

Adjust the volumes and assumptions: https://www.routergrowth.com/free-gtm-tools/workflow-generator#q=Find%20roofers%20in%20Phoenix%20with%20Google%20reviews%20under%204%20stars%20and%20email%20the%20owner.%20150%20accounts%2C%201%20contact%20each%2C%20three-step%20sequence.
