Build log
A Google Maps export gives you a long list of local businesses: names, websites, phone numbers, ratings and review counts. What it doesn't tell you is which of them are worth contacting. This tutorial shows how to turn that list into a ranked prospect list with the Local Leads SEO Gap Scorer, an Apify Actor, and how to read its hot, warm and cold tiers without over-trusting them.
Disclosure: my agency, Manta Media, publishes this Actor. Everything below describes its documented inputs and outputs. The test numbers are from a real run, with the businesses and the city left out.
What the Actor does
For each business in your list, it:
- Audits the website for local SEO: LocalBusiness schema, SSL, http→https, title and meta description, mobile viewport, phone and address on the page, and speed.
- Compares the business's review count with the median of the group you gave it, and checks its rating.
- Looks for a public contact email on the homepage and up to 4 contact or about pages, and labels it verified, likely or unverified.
- Outputs a 0 to 100 opportunity score (higher means a better prospect), a tier, and plain-language pitch points.
It does not scrape Google Maps. It only visits each business's own website, politely: robots.txt is respected and each site gets a handful of requests.
Step 1: get your leads
You have two options:
- An Apify dataset. The usual source is the output of a Google Maps scraper such as
compass/crawler-google-places. The Actor recognizes these fields from it:title,website,phone,totalScore,reviewsCount,categoryNameandcity. - Pasted leads. A JSON list of
{name, website, phone, rating, reviewCount, category, city}.
If you give both, they're combined.
Keep each run to one trade in one area. The review comparison uses the median of the group you supply, so mixing plumbers with dentists, or two cities, makes that comparison meaningless.
Step 2: set the input
Open the Local Leads SEO Gap Scorer.
| Field | Default | What it does |
|---|---|---|
datasetId |
(empty) | An Apify dataset with your leads |
leads |
(empty) | Or paste leads as JSON |
maxLeads |
500 | Upper limit, 1 to 5,000. One charge per lead scored. |
findEmails |
on | Look for a public contact email |
includeSpeed |
off | Adds the PageSpeed mobile score. Needs your own free Google PageSpeed Insights API key; without one Google returns HTTP 429. |
pagespeedApiKey |
(empty) | Your free key |
maxConcurrency |
3 | Sites processed in parallel, 1 to 10 |
A pasted example:
{
"leads": [
{ "name": "Example Plumbing", "website": "https://www.example-plumber.com",
"rating": 4.2, "reviewCount": 12, "category": "Plumber", "city": "Example City" }
],
"findEmails": true,
"includeSpeed": false
}
Pricing is pay per event: one lead-scored event per lead in the output, $8 per 1,000 leads ($0.008 each).
Step 3: understand the score
The opportunity score is built from site gaps, reviews and contactability:
- SEO gap: up to 35 points, from 100 minus the site's local SEO score, scaled
- Specific gaps: no LocalBusiness schema +10; no SSL +8 (or no https redirect +4); no meta description +5; no title +4; no viewport +5; no phone +4; no address +3; slow +5
- Reviews: below the group median, up to +15
- Rating: under 4.0 +7, under 4.5 +3
- Contact email found: +10
- No website: a base of 85. Site down: a base of 45.
- Capped at 100.
The tiers: hot is 50 or more, or no website at all; warm is 30 or more; cold is under 30.
Two things are worth noticing. A business with no website lands in hot automatically. That's a real opportunity for a web designer, but a different pitch from an SEO fix. And a found email adds 10 points, so the score mixes "how much there is to fix" with "can I reach them". Read the pitch points, not just the number.
Step 4: read the results
The dataset has three views:
- Leads: name, opportunity score, tier, email, phone, website and pitch points
- SEO gaps: website, local SEO score, LocalBusiness schema, SSL, http→https, response time, site error and all SEO issues
- Reviews: rating, review count, the group's review median, category and city
Pitch points read like this, from the README: "No LocalBusiness schema - Google gets no structured name/address/phone", "No meta description - Google writes its own snippet", "12 reviews vs area median 48".
A real test: 22 plumbers in one city
I ran the Actor on 22 plumbing businesses from one city in Oregon. I'm not naming the businesses or the city.
| Result | Count |
|---|---|
| Hot (50+ or no website) | 5 |
| Warm (30 to 49) | 7 |
| Cold (under 30) | 10 |
| Median opportunity score | 34 |
| Public email found | 12 of 22 |
At $0.008 per lead, those 22 leads cost about 18 cents.
What I take from it: the split wasn't skewed. Fewer than a quarter came out hot, and almost half came out cold, meaning the scorer found few gaps to point at. The median of 34 sits just inside warm. Ten of the 22 had no public email on their site, which matters if email is your only channel. It's mine.
One test in one trade and one city is a sample, not a benchmark. Your split will differ.
Step 5: turn tiers into a shortlist
- Start with hot, but split it. Separate businesses with no website from those with a weak one. They need different emails.
- Check the email label. The
emailCheckfield says verified, likely or unverified. Only use addresses the business shows publicly on its own site, which is the only kind the Actor collects. - Read warm leads properly. A warm score with one specific, fixable gap, like no LocalBusiness schema, can make a better first email than a hot one with five vague issues.
- Leave cold alone for now. A good site and solid reviews means you have little to say that's both true and useful.
Step 6: verify before you send
Websites change between the run and the email. When my agents re-checked 30 of my own audits before my first outreach batch, 10 cited a problem the business had already fixed. Re-run your shortlist right before you contact anyone, and drop pitch points that no longer appear.
The README also says it plainly: comply with anti-spam law (CAN-SPAM, GDPR, PDPA) when contacting leads. Include your real name, business name, postal address and an opt-out, and keep a suppression list.
Limits
- No Maps scraping; bring your own leads
- Email only from the business's own site, homepage plus up to 4 contact or about pages
- Review comparison is relative to the group you supply
- PageSpeed needs your own key and is off by default
The score is a sorting tool. It shortens a long list to the businesses where you have something specific and true to say. The rest is your judgment.