Google Maps Weak Profile Finder avatar

Google Maps Weak Profile Finder

Pricing

from $2.40 / 1,000 weak profile results

Go to Apify Store
Google Maps Weak Profile Finder

Google Maps Weak Profile Finder

Find local businesses on Google Maps with weak or incomplete profiles - missing websites, low reviews, low ratings, missing phones - ranked with transparent weakness scoring, reason tags, and a recommended pitch angle for SEO, GBP, web design, and reputation outreach.

Pricing

from $2.40 / 1,000 weak profile results

Rating

0.0

(0)

Developer

Delowar Munna

Delowar Munna

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Google Maps Weak Profile Finder

Find local businesses on Google Maps with weak or incomplete profiles — missing websites, missing phones, low review counts, low ratings, missing categories or hours. Each row is ranked with a transparent weakness score, reason tags, and a recommended pitch angle for SEO, GBP, web design, and reputation outreach.

V1 deliberately avoids website crawling, email extraction, full review scraping, photos, menus, and AI enrichment so the run stays fast and cheap. You only pay for unique weak-profile rows that pass your filters and are successfully written to the dataset.

✨ Why this scraper

  • Weakness-focused — returns only businesses with at least one visible weakness signal, with explainable scoring and reason tags.
  • Pay-Per-Event — you pay per saved row. No subscription, no monthly fee, no hidden compute charges.
  • No login, no cookies, no sessions — just keyword + location.
  • CSV-friendly output — flat 27-field structure, no nested objects.
  • Transparent scoring — rule-based (no AI), explained below.
  • Five weakness modes — bias scoring towards missingWebsite, lowReviews, lowRating, incompleteProfile, or run balanced.

🚀 Quick start — sample inputs

Example 1 — single query, balanced

{
"searchQueries": [
{ "key": "plumbers", "value": "Canberra ACT" }
],
"maxResults": 100,
"country": "AU",
"language": "en",
"minWeaknessScore": 40,
"weaknessMode": "balanced",
"websiteFilter": "any",
"phoneFilter": "any",
"maxRating": 4.2,
"maxReviewCount": 30,
"categoryFilter": "",
"includeOpeningHours": true,
"includeCoordinates": true,
"deduplicateResults": true,
"proxyConfiguration": { "useApifyProxy": true }
}

Example 2 — multi-query, only businesses with no website (web-design lead list)

{
"searchQueries": [
{ "key": "electricians", "value": "Sydney NSW" },
{ "key": "dentists", "value": "Melbourne VIC" },
{ "key": "cafes", "value": "Brisbane QLD" }
],
"maxResults": 200,
"country": "AU",
"language": "en",
"minWeaknessScore": 60,
"weaknessMode": "missingWebsite",
"websiteFilter": "missingWebsite",
"phoneFilter": "any",
"maxRating": 4.2,
"maxReviewCount": 30,
"categoryFilter": "",
"includeOpeningHours": true,
"includeCoordinates": true,
"deduplicateResults": true,
"proxyConfiguration": { "useApifyProxy": true }
}

The searchQueries field uses Apify's Key/Value form editor — the Key column is the business keyword (e.g. plumbers), the Value column is the location (e.g. Canberra ACT). Add one row per search.


📦 Output

The dataset has five views:

TabFilter
Weak profile leadsAll saved rows (full 27-column flat table).
High opportunityweakness_score >= 75
Missing websitehas_website = false
Low reviewsReviews < 30 (or missing)
Low ratingRating < 3.8 (or missing)

Weak profile leads — table view

Weak profile leads — table view

Sample record — Weak profile leads

{
"search_keyword": "plumbers",
"search_location": "Canberra ACT",
"business_name": "MTA Plumbing & Gas",
"category": "Plumber",
"rating": 5,
"review_count": 17,
"phone": "+61 439 451 555",
"website": "",
"website_domain": "",
"address": "Canberra ACT",
"city": "Canberra",
"state": "ACT",
"postcode": "",
"country": "Australia",
"google_maps_url": "https://www.google.com/maps/place/MTA+Plumbing+%26+Gas/",
"place_id": "0x6b164d85a3f912bd:0x8a2c3d4e5f6a7b8c",
"latitude": -35.2809,
"longitude": 149.13,
"opening_hours": "",
"is_open_now": null,
"has_website": false,
"has_phone": true,
"weakness_score": 60,
"weakness_label": "Medium Opportunity",
"weakness_tags": [
"missing_website",
"low_review_count",
"missing_opening_hours",
"website_design_opportunity",
"review_generation_opportunity",
"local_seo_opportunity"
],
"recommended_pitch_angle": "Website design opportunity",
"scraped_at": "2026-05-06T13:55:53.315Z"
}

Sample record — High opportunity (score ≥ 75)

{
"search_keyword": "plumbers",
"search_location": "Canberra ACT",
"business_name": "Example Local Plumbing",
"category": "Plumber",
"rating": 3.6,
"review_count": 4,
"phone": "",
"website": "",
"website_domain": "",
"address": "Canberra ACT, Australia",
"city": "Canberra",
"state": "ACT",
"postcode": "",
"country": "Australia",
"google_maps_url": "https://www.google.com/maps/place/example-local-plumbing/",
"place_id": "0x6b164d0fe0a3a3ad:0x1234567890abcdef",
"latitude": -35.2809,
"longitude": 149.13,
"opening_hours": "",
"is_open_now": null,
"has_website": false,
"has_phone": false,
"weakness_score": 90,
"weakness_label": "High Opportunity",
"weakness_tags": [
"missing_website",
"missing_phone",
"very_low_review_count",
"low_rating",
"missing_opening_hours",
"incomplete_profile",
"website_design_opportunity",
"reputation_opportunity",
"review_generation_opportunity",
"gbp_optimization_opportunity",
"local_seo_opportunity"
],
"recommended_pitch_angle": "Website design opportunity",
"scraped_at": "2026-05-06T14:00:00.000Z"
}

Sample record — Missing website

{
"search_keyword": "plumbers",
"search_location": "Canberra ACT",
"business_name": "MTA Plumbing & Gas",
"category": "Plumber",
"rating": 5,
"review_count": 17,
"phone": "+61 439 451 555",
"website": "",
"website_domain": "",
"address": "Canberra ACT",
"city": "Canberra",
"state": "ACT",
"postcode": "",
"country": "Australia",
"google_maps_url": "https://www.google.com/maps/place/MTA+Plumbing+%26+Gas/",
"place_id": "0x6b164d85a3f912bd:0x8a2c3d4e5f6a7b8c",
"latitude": -35.2809,
"longitude": 149.13,
"has_website": false,
"has_phone": true,
"weakness_score": 60,
"weakness_label": "Medium Opportunity",
"weakness_tags": ["missing_website", "low_review_count", "website_design_opportunity"],
"recommended_pitch_angle": "Website design opportunity"
}

Sample record — Low reviews

{
"search_keyword": "electricians",
"search_location": "Sydney NSW",
"business_name": "The Local Electrician Sydney Level 2 & Emergency Specialists",
"category": "Electrician",
"rating": 4.9,
"review_count": null,
"phone": "+61 439 823 190",
"website": "https://www.thelocalelectrician.com.au/",
"website_domain": "thelocalelectrician.com.au",
"address": "",
"google_maps_url": "https://www.google.com/maps/place/The+Local+Electrician+Sydney/",
"place_id": "0x6b12bb6df74fac53:0xb207cd5a2b9b9258",
"has_website": true,
"has_phone": true,
"weakness_score": 40,
"weakness_label": "Low Opportunity",
"weakness_tags": [
"very_low_review_count",
"missing_address",
"missing_opening_hours",
"review_generation_opportunity"
],
"recommended_pitch_angle": "Review generation opportunity"
}

Sample record — Low rating

{
"search_keyword": "cafes",
"search_location": "Brisbane QLD",
"business_name": "Example Cafe",
"category": "Cafe",
"rating": 3.4,
"review_count": 87,
"phone": "+61 7 0000 0000",
"website": "https://example-cafe.com.au/",
"website_domain": "example-cafe.com.au",
"address": "100 Example Rd, Brisbane QLD 4000, Australia",
"city": "Brisbane",
"state": "QLD",
"postcode": "4000",
"country": "Australia",
"google_maps_url": "https://www.google.com/maps/place/example-cafe/",
"place_id": "0x6b915a0fe0a3a3ad:0xabcdef1234567890",
"has_website": true,
"has_phone": true,
"weakness_score": 30,
"weakness_label": "Low Opportunity",
"weakness_tags": ["low_rating", "reputation_opportunity"],
"recommended_pitch_angle": "Reputation improvement opportunity"
}

Output fields (27)

search_keyword, search_location, business_name, category, rating, review_count, phone, website, website_domain, address, city, state, postcode, country, google_maps_url, place_id, latitude, longitude, opening_hours, is_open_now, has_website, has_phone, weakness_score, weakness_label, weakness_tags, recommended_pitch_angle, scraped_at.


🎯 Weakness scoring

Transparent rule-based score (0–100) computed from visible fields — no AI, no website crawling, no enrichment.

Base formula

SignalPoints
Missing website+30
Missing phone+20
Reviews missing or < 10+20
Reviews 10–29+10
Rating missing+10
Rating < 3.8+20
Rating 3.8–4.2+10
Missing address+10
Missing opening hours+10
Missing category+10

Score is capped at 100.

Weakness mode bias (stacks on top)

ModeBonus
balanced(default formula only)
missingWebsite+15 if no website
lowReviews+15 if review count < 30
lowRating+15 if rating < maxRating
incompleteProfile+10 each for missing website, phone, address, category, opening hours

Labels

ScoreLabel
75–100High Opportunity
50–74Medium Opportunity
25–49Low Opportunity
0–24Weakness Not Clear

Derived from the highest-priority weakness tag — non-AI rule mapping.

Top weaknessPitch angle
missing_websiteWebsite design opportunity
low_ratingReputation improvement opportunity
low_review_countReview generation opportunity
missing_phoneProfile completion opportunity
incomplete_profileGBP optimization opportunity

⚙️ Filters

FilterEffect
minWeaknessScoreSave only rows with weakness score ≥ this value (default 40, range 0–100).
weaknessModeBias scoring towards a specific kind of weakness (balanced keeps everything broad).
websiteFilterany / missingWebsite / hasWebsite.
phoneFilterany / missingPhone / hasPhone.
maxRatingWhen weaknessMode = lowRating, drop businesses rated above this value.
maxReviewCountWhen weaknessMode = lowReviews, drop businesses with more reviews than this value.
categoryFilterCase-insensitive contains match against the business category.
deduplicateResultsDrop duplicates across queries (recommended ON).

Filters are applied after extraction and weakness scoring, before dataset push or event charge.


💰 Pricing

Pay-Per-Event with a single event:

EventWhen chargedFrequency
weak-profile-resultEach unique, filtered, weak-profile row successfully written to the dataset.Per row

🚦 Proxy policy

Use Apify Datacenter proxy or no proxy for normal runs — both work reliably for Google Maps search at this actor's conservative concurrency (max=3).

Apify Residential proxy is not supported. The actor will fail at startup if apifyProxyGroups includes RESIDENTIAL. Reason: in pay-per-event actors, residential bandwidth (~proxy/GB) is billed to the developer, not the run user, so a single bandwidth-heavy run could exceed the per-result event revenue.

If you genuinely need residential routing, supply your own residential provider via the proxy editor's Custom proxy URLs field — that traffic goes through your provider, not Apify, and is unaffected:

http://user:pass@proxy.iproyal.com:12321
http://user:pass@proxy.brightdata.com:22225
http://user:pass@proxy.oxylabs.io:7777

Spending-cap behavior

The actor honors the user-configured per-run spending cap (Apify eventChargeLimitReached) and stops cleanly when reached.

Not charged for weak-profile-result

  • Duplicates (de-duplicated by place_id, listing URL, name+address, name+phone, or name+location).
  • Rows filtered out by minWeaknessScore, websiteFilter, phoneFilter, maxRating, maxReviewCount, or categoryFilter.
  • Rows missing a business_name.
  • Rows with no meaningful weakness signal.
  • Failed dataset pushes.
  • Anything after the per-run spending cap is reached.

📊 Run summary

After each run, a RUN_SUMMARY entry is written to the key-value store:

{
"inputs_total": 3,
"successful_inputs": 3,
"failed_inputs": 0,
"raw_results_found": 240,
"results_saved": 100,
"duplicates_removed": 20,
"filtered_out": 120,
"charged_events": 100,
"blocked_requests": 0,
"retry_count": 0,
"runtime_seconds": 180,
"scraped_at": "2026-05-07T00:00:00.000Z"
}

charged_events always equals results_saved for the weak-profile-result event.


🚧 Limitations (V1)

  • Cards-only extraction: V1 reads each business row directly from the search results panel and does not click into individual place detail panels. Phone, website, full opening hours, and place_id only appear when Google surfaces them on the card itself; otherwise these fields are empty/null.
  • No website crawling, email extraction, or social link extraction.
  • No full review text or sentiment.
  • No photos, menus, prices, or popular times.
  • No login/cookie/session-based scraping.
  • Address parsing into city/state/postcode is best-effort; the full address field is the source of truth.
  • Per-query hard cap is 500 results; per-run hard cap is 5,000 results.

🛠️ Technical notes

  • Stack: Node.js 22 · Apify SDK 3 · Crawlee · Puppeteer.
  • Concurrency: min=1, max=3 (conservative to reduce blocking).
  • Memory: 1 GB min · 2 GB default · 4 GB max.
  • Proxy: Apify Proxy enabled by default (datacenter). Apify Residential is rejected at startup — use Custom proxy URLs (IPRoyal / BrightData / Oxylabs) if you need residential routing. See the Proxy policy section above.
  • Diagnostics: On the first failed render (no feed, or feed but zero cards), the actor saves the page HTML and URL to the key-value store as debug-no-feed-html / debug-zero-cards-html.