Google Maps Lead Scorer - Rank Local Businesses 0-100 avatar

Google Maps Lead Scorer - Rank Local Businesses 0-100

Pricing

from $2.00 / 1,000 scoring runs

Go to Apify Store
Google Maps Lead Scorer - Rank Local Businesses 0-100

Google Maps Lead Scorer - Rank Local Businesses 0-100

Turn a Google Maps scrape into a ranked call list. Scores every business 0-100 from website quality, reviews, rating, hours, socials, category fit and contactability, with point-by-point reasons and weights you control. Goal presets for web, SEO and review agencies. No LLM.

Pricing

from $2.00 / 1,000 scoring runs

Rating

0.0

(0)

Developer

mohamed alaya

mohamed alaya

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 days ago

Last modified

Share

You scraped 5,000 local businesses from Google Maps. Who do you call first? This Actor turns the scrape into a ranked call list: every business gets a 0-100 score, a tier (Hot / Warm / Cool / Cold) and the reasons, based on website quality signals, review volume, rating, Maps profile completeness, opening hours, social profiles, category fit and how easily you can reach them. Deterministic rubric, no LLM, no network calls, weights you control.

Built to sit right behind the Google Maps scraper: it reads that Actor's output as-is (title, categoryName, website, phone, totalScore, reviewsCount, openingHours, emails, facebooks, claimThisBusiness, permanentlyClosed ...), and also accepts CSV exports from other directories.

Pick what you sell: the score changes with your offer

A good lead depends on the offer, so goal switches the rubric:

GoalWho it is forWhat scores high
bestOverallgeneral prospecting, partnershipsestablished, well-rated, reachable, complete profile, own https website
websiteAgencyweb design / SEO agenciesno website, a social page or free-builder site as "website", or no https, on a business with real reviews and a phone
reputationMgmtreview / reputation toolsmany reviews but a rating between 3.0 and 4.4
localMarketingsocial media / local marketinggood ratings with few social profiles and a thin Maps profile

Then override any weight: {"reviewVolume": 40, "email": 0}. Weights are relative; the score is always scaled to 0-100.

How a score is built

score = 100 x sum(weight x signal) / sum(weight) over the criteria that apply:

CriterionReads
Phonea phone number is listed
E-mailan e-mail is present (e.g. from the Maps scraper's contact enrichment)
Websitenone / social page / free builder subdomain (Wix, Square, business.site ...) / own domain without https / own https domain
Social profilesFacebook, Instagram, LinkedIn, X, YouTube, TikTok links found
Review volumelog-scaled review count (500+ reviews = full marks)
Ratingthe star rating, interpreted by your goal
Maps profileopening hours, description, photos, claimed listing
Category fitonly when you set targetCategories

Missing data is not zero. If your records have no emails column the e-mail criterion is left out and the other weights are rescaled; the row lists it under leadNotScored. Closed businesses, excluded categories and businesses below your minReviews become tier Skip (kept at the end of the dataset with the reason, unless you turn that off).

It does not visit the website, so "website quality" means what the listing itself shows (does a site exist, is it a social page, a free-builder subdomain, https or not). It cannot judge design, speed or SEO of the site.

Output

One row per business, your original columns plus:

{
"title": "Greenleaf Plumbing Co.",
"categoryName": "Plumber",
"phone": "(512) 555-0190",
"website": null,
"totalScore": 4.9,
"reviewsCount": 64,
"leadRank": 4,
"leadScore": 76,
"leadTier": "A",
"leadTierLabel": "Hot",
"leadWhy": "Strengths: no website: strong web-design / SEO opening (+33.3); phone number listed (+15.6); rating 4.9 (well liked) (+11.1). Weak spots: no e-mail found (0/8.9); Maps profile 33% complete (2.2/6.7).",
"leadBreakdown": [
"Phone: 15.6/15.6 - phone number listed",
"Website: 33.3/33.3 - no website: strong web-design / SEO opening",
"Review volume: 13.4/20 - 64 reviews (established)",
"Rating: 11.1/11.1 - rating 4.9 (well liked)"
],
"leadNotScored": ["Category fit (no data: no target categories set)"],
"leadWebsiteStatus": "none",
"leadGoal": "websiteAgency"
}

(the example above was run with goal: websiteAgency; the breakdown is abridged.)

Key-value store: TOP_LEADS.csv (rank, score, tier, name, category, phone, e-mail, website, address, rating, reviews, why, Maps link: your call sheet) and SUMMARY (tier counts, score range, weights used, warnings).

Started with no input it scores a built-in sample of 15 Google Maps businesses (two are closed and come out as tier Skip).

Input

FieldDefaultWhat it does
datasetIds / places / sourceUrl / csvTextbuilt-in sampleGoogle Maps scraper dataset IDs, pasted rows, a CSV / JSON URL or pasted CSV.
goalbestOverallThe rubric preset (table above).
weightOverrides{}Your own weights: phone, email, website, socials, reviewVolume, rating, profile, categoryFit.
targetCategories / excludeCategories[]Words matched against Maps categories (dentist, plumber ...).
minReviews, excludeClosed0, trueSkip rules.
tierACutoff / tierBCutoff / tierCCutoff75 / 55 / 35Where Hot / Warm / Cool start.
topN, csvTopCount, includeSkipped0 (all), 100, trueOutput size.
fieldMap{}Rename columns: {"name":"Business","rating":"Stars","reviews":"Votes"}.

Pipelines

  • Maps scraper -> Remove Duplicate Leads -> this Actor. Overlapping searches return the same business twice; merge first, then score the clean list.
  • Maps scraper with contact enrichment -> this Actor -> export TOP_LEADS.csv -> your CRM or dialer.
  • Schedule it after a weekly scrape and diff the top tier.

Make, Zapier and n8n work through the Apify integrations (trigger on "run succeeded"). From code:

curl -X POST "https://api.apify.com/v2/acts/that_red_bird~maps-lead-scorer/runs?token=$APIFY_TOKEN" \
-H 'content-type: application/json' \
-d '{"datasetIds":["YOUR_MAPS_DATASET_ID"],"goal":"websiteAgency","targetCategories":["plumber","roofing"]}'

AI agents can call it as an Apify Actor tool (MCP) with the same JSON.

Pricing

Pay per event: $0.002 per run + $0.002 per business scored (skipped rows included, they are delivered output). 1,000 businesses cost about $2. Rows that cannot be read are not charged and the run stops cleanly at your maximum cost. Scoring 100,000 rows took about 4 seconds in testing.

FAQ

Is the score "accurate"? It is a transparent ranking rule, not a prediction of who will buy. Check the leadWhy and leadBreakdown on a few rows, tune the goal and weights until the top of the list matches your instinct, then trust it for the rest.

Why do two goals rank the same business differently? Because "good" changes with what you sell. A business without a website is a great web-agency lead and a poor partnership lead.

My file is not from the Maps scraper. Use fieldMap to point at your columns. Anything it cannot find is left out of the score and listed in leadNotScored.

Does it scrape or call anything? No. It only reads the data you give it.

Support

Open an issue on the Actor page with a row that scored surprisingly and we will check the rubric. A short review helps others find it.