Google Maps Leads Scorer – Local SEO Lead Scoring avatar

Google Maps Leads Scorer – Local SEO Lead Scoring

Pricing

$8.00 / 1,000 lead scoreds

Go to Apify Store
Google Maps Leads Scorer – Local SEO Lead Scoring

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

Alex

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 days ago

Last modified

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:

  1. Audits the website for local SEO (LocalBusiness schema, SSL, http→https, title/meta, mobile viewport, phone/address on page, speed).
  2. Compares its review count with the median of the input group and checks its rating.
  3. Finds a public contact email (homepage + up to 4 contact/about pages) and labels it verified / likely / unverified.
  4. 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)

BusinessRatingReviews (area median 79)Local SEO scoreOpportunityTierFirst pitch point
Apollo Plumbing, Heating, AC & Electric4.920142054hotNo LocalBusiness schema
Precision Plumbing Beaverton5.035148warmNo LocalBusiness schema
Anctil Plumbing Inc4.0316846warmNo LocalBusiness schema
Power Plumbing Company4.0787337warmNo LocalBusiness schema
Rocksteady Plumbing5.0148929coldNo street address on homepage
Leak Locaters4.91858220coldPhone number not visible on homepage

Use with Google Maps Scraper

  1. Run Google Maps Scraper (compass/crawler-google-places) for a niche + city, e.g. "plumber Beaverton OR".
  2. Copy the run's dataset ID into datasetId here. Fields title, website, phone, totalScore, reviewsCount, categoryName, city are mapped automatically.
  3. Sort the output by opportunityScore and 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

FieldDescription
datasetIdApify dataset with leads (Google Maps scraper fields title, website, phone, totalScore, reviewsCount, categoryName, city are recognized).
leadsOr paste [{name, website, phone, rating, reviewCount, category, city}].
maxLeadsLimit (default 500).
findEmailsLook for a contact email (default on).
includeSpeed / pagespeedApiKeyOff by default. PageSpeed needs a free Google PageSpeed Insights API key; without one Google returns HTTP 429.
maxConcurrency1-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:

LeadReviewslocalSeoScoreopportunityScoretierFirst pitch points
An/ano website85hotNo website listed
Bn/a1369hotNo LocalBusiness schema · no valid SSL · no meta description
E2,0142054hotNo LocalBusiness schema · http:// doesn't redirect to https://
F1858220coldPhone 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 ApifyClient
client = 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 Uploads folder. 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-apify on 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 datasetId and 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 (scoredAt timestamp). 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 datasetId and 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.

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.