Google Maps Leads Scorer – Local SEO Lead Scoring
Pricing
$8.00 / 1,000 lead scoreds
Google Maps Leads Scorer – Local SEO Lead Scoring
Feed it a Google Maps Scraper dataset and get every business scored 0-100 as an SEO prospect: hot/warm/cold tier, pitch points and public email.
Pricing
$8.00 / 1,000 lead scoreds
Rating
0.0
(0)
Developer
Alex
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Share
Run Google Maps Scraper for a niche and city, then pass its dataset ID here. For each business this Actor checks the homepage (LocalBusiness schema, title/meta, SSL, NAP), compares its review count with the median for that batch, looks for a public contact email, and returns a flat row with a 0-100 opportunity score, a hot/warm/cold tier and short pitch points. It costs $0.008 per scored lead; leads that time out still get a row but are not charged. For a plain list of URLs instead, use Local SEO Bulk Site Auditor.
In detail, for each business it:
- Audits the website for local SEO (LocalBusiness schema, SSL, http→https, title/meta, mobile viewport, phone/address on page, speed).
- Compares its review count with the median of the input group and checks its rating.
- Finds a public contact email (homepage + up to 4 contact/about pages) and labels it verified / likely / unverified.
- Outputs a 0-100 opportunity score (higher = better prospect), a tier (hot ≥ 50 or no website, warm ≥ 30, cold < 30) and plain-language pitch points such as "No LocalBusiness schema" or "12 reviews vs area median 48".
Businesses without a website are flagged as hot prospects. This Actor does not scrape Google Maps; it only visits each business's own website politely (robots.txt respected, a handful of requests per site).
Think of it as light lead enrichment for local business lists: each Google Maps lead comes back with a website SEO score, its review count against the area median, a public contact email (when the site shows one) and pitch points. It does not audit Google Business Profiles; it checks the business's own website, including whether the phone and address are on the page.
Sample output (public dataset)
A real run on 3 Beaverton, OR plumbers, scored on 12 Oct 2026 (email search off for the sample). JSON · CSV · Excel
The fastest way to find local SEO clients: scrape Google Maps, score the leads, then pitch the hot ones.
Example output (real run: plumbers around Beaverton / Portland, OR)
| Business | Rating | Reviews (area median 79) | Local SEO score | Opportunity | Tier | First pitch point |
|---|---|---|---|---|---|---|
| Apollo Plumbing, Heating, AC & Electric | 4.9 | 2014 | 20 | 54 | hot | No LocalBusiness schema |
| Precision Plumbing Beaverton | 5.0 | 3 | 51 | 48 | warm | No LocalBusiness schema |
| Anctil Plumbing Inc | 4.0 | 31 | 68 | 46 | warm | No LocalBusiness schema |
| Power Plumbing Company | 4.0 | 78 | 73 | 37 | warm | No LocalBusiness schema |
| Rocksteady Plumbing | 5.0 | 14 | 89 | 29 | cold | No street address on homepage |
| Leak Locaters | 4.9 | 185 | 82 | 20 | cold | Phone number not visible on homepage |
Use with Google Maps Scraper
- Run Google Maps Scraper (compass/crawler-google-places) for a niche + city, e.g. "plumber Beaverton OR".
- Copy the run's dataset ID into
datasetIdhere. Fieldstitle, website, phone, totalScore, reviewsCount, categoryName, cityare mapped automatically. - Sort the output by
opportunityScoreand start with the hot tier. Each row has pitch points you can use in your first email.
Works the same with any Google Maps leads scraper whose dataset uses those field names, or with leads you paste in leads.
The result is a short list of local leads worth contacting first, ranked by how much each business would gain from local SEO help, instead of a raw export of every Google Maps lead.
Input
| Field | Description |
|---|---|
datasetId | Apify dataset with leads (Google Maps scraper fields title, website, phone, totalScore, reviewsCount, categoryName, city are recognized). |
leads | Or paste [{name, website, phone, rating, reviewCount, category, city}]. |
maxLeads | Limit (default 500). |
findEmails | Look for a contact email (default on). |
includeSpeed / pagespeedApiKey | Off by default. PageSpeed needs a free Google PageSpeed Insights API key; without one Google returns HTTP 429. |
maxConcurrency | 1-10 (default 3). |
Output (one item per lead)
{"name":"Eco Logical Pest","website":"https://www.ecologicalpest.com/","rating":4.1,"reviewCount":12,"reviewMedian":48,"email":"valerie@ecologicalpest.com","emailCheck":"verified: domain matches website","opportunityScore":67,"tier":"hot","pitchPoints":["No LocalBusiness schema - Google gets no structured name/address/phone","No meta description - Google writes its own snippet","12 reviews vs area median 48"],"localSeoScore":74,"hasLocalBusinessSchema":false,"sslValid":true,"httpRedirectsToHttps":true}
Views: Leads, SEO gaps, Reviews.
Scoring
SEO gap up to 35 pts (100 minus the site's local SEO score, scaled) plus: 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 group median up to +15; rating under 4.0 +7 (under 4.5 +3); contact email found +10. No website = 85 base. Site down = 45 base. Capped at 100.
Worked example: from Google Maps leads to a ranked list
1. Scrape one niche in one city with Google Maps Scraper. This is the input of a real run, which returned 22 local businesses:
{ "searchStringsArray": ["plumber"], "locationQuery": "Beaverton, OR, USA", "maxCrawledPlacesPerSearch": 50, "language": "en", "website": "allPlaces" }
Keep website at allPlaces, because businesses with no website are often the best leads.
2. Score the Google Maps leads by passing that run's dataset ID:
{ "datasetId": "<YOUR_GOOGLE_MAPS_SCRAPER_DATASET_ID>", "maxLeads": 500, "findEmails": true }
3. Read the result. The real batch (median 79 reviews) split into 5 hot, 7 warm and 10 cold leads. Twelve of the 22 sites had no LocalBusiness schema. An excerpt, with the businesses anonymised:
| Lead | Reviews | localSeoScore | opportunityScore | tier | First pitch points |
|---|---|---|---|---|---|
| A | n/a | no website | 85 | hot | No website listed |
| B | n/a | 13 | 69 | hot | No LocalBusiness schema · no valid SSL · no meta description |
| E | 2,014 | 20 | 54 | hot | No LocalBusiness schema · http:// doesn't redirect to https:// |
| F | 185 | 82 | 20 | cold | Phone number not visible on homepage |
Sort by opportunityScore and start with the hot tier. Lead E shows why a website check matters: plenty of reviews, but a homepage missing the basics. The Actor checks each business's own website and its reviews. It does not audit Google Business Profiles.
Tutorial: How to turn Google Maps Scraper output into a scored local SEO lead list, a step-by-step walkthrough with code and real results.
Use cases
- SEO agencies prospecting: turn Google Maps leads into a ranked hot/warm/cold list with pitch points. This is lead scoring for local SEO and web design outreach.
- Site owners benchmarking: score your business alongside local competitors to see how your reviews compare with the area median and what SEO basics they have that you don't.
- Multi-location brands and franchises: score every location's listing and site to find the weakest locations (few reviews, missing schema, no phone on page).
- Rank-and-rent builders: score a niche + city. Many businesses without websites or with weak sites means a good rental market.
- Lead-gen freelancers: sell qualified local SEO prospect lists rather than raw scraped data.
Integrations
Apify API (cURL)
Run synchronously and get the results back as JSON (use format=csv for CSV):
curl -X POST "https://api.apify.com/v2/acts/manta-media~leads-seo-gap-scorer/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"datasetId":"<GOOGLE_MAPS_SCRAPER_DATASET_ID>","maxLeads":200,"findEmails":true}'
Large batches: start the run with POST /v2/acts/manta-media~leads-seo-gap-scorer/runs, then read GET /v2/datasets/<defaultDatasetId>/items.
Python (pip install apify-client)
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("manta-media/leads-seo-gap-scorer").call(run_input={"datasetId": "<GOOGLE_MAPS_SCRAPER_DATASET_ID>", "maxLeads": 200, "findEmails": True})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript / Node.js (npm i apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('manta-media/leads-seo-gap-scorer').call({"datasetId":"<GOOGLE_MAPS_SCRAPER_DATASET_ID>","maxLeads":200,"findEmails":true});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Google Sheets
- Quickest: in Google Sheets,
=IMPORTDATA("https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&token=<APIFY_TOKEN>"). Only do this in a private sheet, because the token is visible in the formula. Or download CSV/Excel from the run's Storage tab. - Automatic: the Apify Google Drive integration (Actor > Integrations) uploads each successful run's dataset in your chosen format to the
Apify Uploadsfolder. Or use Make/Zapier (below) to append rows to a sheet.
Make, Zapier, n8n
These use Apify's official integrations. Connect each one with your Apify API token.
- Make: the Apify module's "Run an Actor" action, then "Get Dataset Items", then Google Sheets "Add a Row". For long runs, use the Apify trigger that watches for a finished run instead (Make enforces a timeout on synchronous runs).
- Zapier: the Apify app can act as a trigger (an Actor run finished) or an action ("Run Actor"). For example: new row in Google Sheets → Run Actor → send the hot leads to Slack or Gmail.
- n8n: install the Apify community node (
@apify/n8n-nodes-apifyon self-hosted n8n, or search "Apify" on n8n Cloud). Use it as a trigger or action to run the Actor and pass dataset items to any node. - Chain after Google Maps Scraper: Run Google Maps Scraper, copy the run's dataset ID into
datasetIdand run. The fields are mapped automatically (see "Use with Google Maps Scraper" above).
MCP and AI agents
Add the hosted Apify MCP server to Claude, Cursor, ChatGPT or any MCP client and expose this Actor as a tool:
https://mcp.apify.com?tools=manta-media/leads-seo-gap-scorer
The input and output schemas are flat and documented (opportunityScore, tier, pitchPoints, email), so agents can run audits and reason over the results. Example prompt: "Score the plumbers from my last Google Maps Scraper run and draft a first email for each hot lead using its pitch points."
FAQ
- How much does it cost? $0.008 per scored lead (~$8 per 1,000), pay per event. Apify platform usage is included. You only pay for leads that appear in the output.
- Do I need a PageSpeed API key? Only if you turn on
includeSpeed. Use a free Google PageSpeed Insights key, because keyless calls are rate-limited (HTTP 429). Speed is off by default. - Does it work on JavaScript-heavy sites? It analyses the raw HTML (what Googlebot sees on its first pass). Content injected only by JavaScript may be missed.
- Am I charged if a site times out? No. Each lead is processed in its own worker with a hard time limit. If it is stopped or crashes, you still get a row with the error, but no charge.
- Does it respect robots.txt? Yes. Disallowed pages are skipped and reported, requests are kept to a handful per site, and the User-Agent identifies the tool.
- How fresh is the data? Each run fetches the live websites at run time (
scoredAttimestamp). Use Apify Schedules to re-run weekly or monthly. Review counts come from your input data (e.g. your Google Maps Scraper run). - How do I use it with Google Maps Scraper? Run Google Maps Scraper, copy the run's dataset ID into
datasetIdand run. The fields are mapped automatically (see "Use with Google Maps Scraper" above).
Pricing
Pay per event: one lead-scored event per lead in the output.
Notes
Emails are only those publicly shown on the business's own site. Comply with anti-spam law (CAN-SPAM, GDPR, PDPA) when contacting leads.
Related Actor: Local SEO Audit Tool
Only need the website checks for a list of URLs (no reviews, emails or ranking)? Use Local SEO Audit Tool (bulk website audit): title, meta, H1, LocalBusiness schema, NAP, SSL, mobile, canonical, robots and optional PageSpeed for $0.004 per URL.
Only need a website audit for a list of URLs? Use Local SEO Audit Tool.