If you run a B2B outbound agency, build local SaaS tools, manage GoHighLevel workflows, or prospect brick-and-mortar businesses (dentists, medspas, roofing contractors, HVAC companies, law firms, restaurants), Google Maps is the most accurate, real-time directory of local businesses on earth.
Unlike static B2B databases like Apollo or ZoomInfo—which miss up to 70% of local service businesses and charge $59 to $250+ per seat—Google Maps updates every day as new businesses open, change phone numbers, and collect customer reviews.
- There is just one problem: Google Maps listings never display email addresses, social media links, website tech stacks, or advertising pixels. Even if you pay $17.00 to $40.00+ per 1,000 requests for the official Google Places API, you only get a business name, address, phone number, and raw website URL. To build a usable cold-email or SMS campaign, teams are typically forced to chain 2 to 3 separate scrapers together (a Maps scraper, a Website Contact scraper, and a BuiltWith/pixel checker) and stitch messy CSV files together with
VLOOKUP.
In this 2026 B2B prospecting guide, we break down how to extract complete, outreach-ready B2B leads in a single pass using the UnitBytes Google Maps Email & Leads Scraper (unitbytes/google-maps-leads-scraper)—delivering 48 flat CRM-ready fields (verified emails, E.164 phone numbers, social links, CMS & ad pixel detection, UNCLAIMED_GBP flags, and cold-outreach review hooks) starting at $0.50 to $1.50 per 1,000 leads.
1. Google Maps B2B Lead Generation Pricing & Feature Comparison (2026)#
When building local B2B lead lists, the hidden cost isn't just scraping the map pin—it's enriching each business with verified decision-maker emails, social profiles, and qualification signals without paying double or triple per record.
| Feature / Workflow | UnitBytes Google Maps Leads Scraper | Chaining 2–3 Separate Actors (Maps + Email + Tech) | Outscraper / Legacy Lead Scrapers | Official Google Places API |
|---|---|---|---|---|
| Cost per 1,000 Enriched Leads | 💰 $0.50 – $1.50 / 1K leads (All-in-One) | $4.00 – $9.00 / 1K (2–3x actor fees) | $3.00 – $10.00+ / 1K (extra fee per email/phone) | $17.00 – $40.00+ / 1K calls |
| Free Monthly Quota | ✅ 3,300 – 10,000 Free Leads / mo ($5 Apify credit) | Split across multiple runs | Limited one-time trial | Credit card & Cloud Billing required |
Verified Website Emails (primary_email, emails) | ✅ Included Free (Homepage + /contact + /about) | Requires 2nd Website Crawler Actor | Paid add-on per domain | ❌ Never returned by Google |
| Social Profiles (LinkedIn, IG, FB, X, TikTok, YT) | ✅ Included Free (6 dedicated columns) | Requires 2nd Website Crawler Actor | Paid add-on | ❌ Never returned by Google |
E.164 Phone & WhatsApp (phone_international, whatsapp_url) | ✅ Automatic E.164 formatting + site phones | Raw local string only | Raw local string | Basic phone only |
Ad Pixels & CMS (has_meta_pixel, has_google_ads_tag, website_cms) | ✅ Included Free (12 CMS + 12 Martech/Pixel tags) | Requires 3rd Tech Lookup Tool | ❌ Not supported | ❌ Never returned by Google |
Agency Pitch Flags (UNCLAIMED_GBP, NO_ONLINE_BOOKING, etc.) | ✅ 9 Automated Opportunity Flags + lead_score (0–100) | Manual spreadsheet formulas | ❌ Not supported | ❌ Not supported |
Cold-Outreach Review Hook (review_hook_text, review_hook_report_url) | ✅ Included (most_relevant, lowest_rating, or newest) | Requires separate Reviews Scraper | ❌ Not supported | Max 5 un-sortable reviews |
2. 5 Core Superpowers Built for Outbound Sales, SMMA & Local SEO Agencies#
1. Single-Pass Website Contact & Decision-Maker Email Enrichment (scrapeContacts: true)
When scrapeContacts: true (enabled by default), the Actor doesn't stop at the Google Maps card. As soon as it extracts a business's Google Maps profile, it automatically visits the business's official website—and follows internal links to high-yield /contact, /contact-us, /about, and /about-us pages—to extract:
primary_email&emails: Decodes obfuscatedmailto:links and protected email strings, filters out false-positive asset filenames (.png,.webp,@2x), CSS tokens, and automated junk addresses (noreply@,wixpress.com,sentry.io,example.com), and ranks real business emails so domain-matched addresses and decision-maker prefixes (owner@,founder@,ceo@,president@,director@,dr@,contact@,hello@,info@,office@,sales@) appear first inprimary_email.phone&phone_international(E.164 Standard): Automatically formats local phone numbers into strict international E.164 syntax (e.g.,+15125550199) ready for immediate import into Twilio, GoHighLevel (GHL), AirCall, RingCentral, or WhatsApp Business, pluswebsite_phonesdiscovered on the business website.whatsapp_url&booking_url: Captures directwa.me/api.whatsapp.comchat links and detects 12+ online appointment/reservation systems (Calendly,Zocdoc,NexHealth,LocalMed,FlexBook,OpenTable,Resy,Vagaro,Booksy,Mindbody,Acuity,Square Appointments).- 6 Dedicated Social Media Columns: Extracts and normalizes
linkedin_url,instagram_url,facebook_url,twitter_url,youtube_url, andtiktok_urlinto clean root-level columns for multi-channel outbound sequences.
2. Automated Agency Opportunity Flags (agency_opportunity_flags) & Lead Scoring (lead_score)
Instead of cold-calling every business in a city with a generic pitch, unitbytes/google-maps-leads-scraper automatically audits each prospect's digital footprint and populates agency_opportunity_flags alongside a lead_score (0–100):
agency_opportunity_flags Value | What It Means | High-Converting Agency / SaaS Pitch |
|---|---|---|
UNCLAIMED_GBP | is_claimed: false on Google Maps (includes direct claim_business_url) | Local SEO / GBP Management: "Your Google Business Profile is currently unclaimed—anyone can suggest edits to your hours or phone number." |
MISSING_META_PIXEL | Website has has_meta_pixel: false | Paid Social / SMMA Agencies: Pitch Facebook & Instagram retargeting campaigns to established local businesses with high review counts. |
MISSING_GOOGLE_TAG | Website has has_google_ads_tag: false | PPC / Google Ads Agencies: Pitch high-intent local search ads and conversion tracking setup. |
NO_ONLINE_BOOKING | Website has no Calendly, Zocdoc, NexHealth, Booksy, Mindbody, or OpenTable widget (booking_url: null) | GoHighLevel / AI Receptionist SaaS: Pitch 24/7 automated online appointment booking and missed-call text-back widgets. |
NO_WEBSITE | Business is active on Google Maps with phone & reviews, but website: null | Web Design & Local Landing Page Agencies: Pitch a turnkey WordPress, Webflow, or GoHighLevel website. |
LOW_RATING_UNDER_4_2 | Google Maps rating is below 4.2 stars (rating < 4.2) | Online Reputation Management (ORM): Pitch automated 5-star review generation or disputed 1-star review removal. |
LOW_REVIEW_COUNT | Fewer than 10 total reviews on Google Maps (reviews_count < 10) | Review Generation SaaS: Pitch SMS/QR-code customer review campaigns to outrank local competitors. |
NO_EMAIL_ON_SITE | Business has a website, but no public contact email is listed | Lead Capture / Live Chat Widget Pitch: Pitch AI chat or contact form optimization. |
NO_SOCIAL_LINKS | Website lists zero links to Instagram, Facebook, LinkedIn, or TikTok | Social Media Management: Pitch organic social presence and short-form video packages. |
3. Website CMS & Martech Stack Detection (website_cms & website_tech_stack)
Every website crawl automatically fingerprints the underlying CMS and marketing technology stack at zero extra cost:
website_cms: IdentifiesWordPress,Shopify,Wix,Squarespace,Webflow,GoHighLevel,Duda,Weebly,HubSpot CMS,Joomla,Drupal, orCustom / Static.website_tech_stack: Detects installed ad pixels, CRM chat widgets, and competing local SEO tools includingMeta Pixel,Google Ads / GTag,TikTok Pixel,LinkedIn Insight Tag,HubSpot,Intercom,Stripe,Yext,BrightLocal,Moz Local,Birdeye, andPodium—plus any detected booking platform (Zocdoc,Calendly,Mindbody,OpenTable, etc.).
4. Built-In Cold-Outreach Review Hooks (includeReviewHook & reviewHookType)
Generic cold emails get ignored. Referencing a specific customer review from a prospect's Google Maps listing boosts cold email reply rates by 2x to 4x.
When includeReviewHook: true (default), each lead record includes review_hook_stars, review_hook_author, review_hook_date, review_hook_text, and a 1-click Google policy violation link (review_hook_report_url). You can tailor the hook to your exact offer using reviewHookType:
reviewHookType: "most_relevant"(Cold Email Icebreaker Mode — Default): Pulls a detailed customer review so your outbound sequence in Instantly.ai, Smartlead, or Lemlist can open with:
> "Saw {{review_hook_author}}'s {{review_hook_stars}}-star review mentioning '{{review_hook_text}}'—wanted to reach out..." 2. reviewHookType: "lowest_rating" (ORM & 1-Star Takedown Pitch Mode): Pulls the business's top 1-star complaint directly from Google's backend along with its 1-click Google dispute link (review_hook_report_url) so reputation agencies can pitch:
> "We noticed the 1-star review from {{review_hook_author}} ({{review_hook_date}}) dragging down {{business_name}}'s {{rating}}★ rating—here is the direct link to flag it..." 3. reviewHookType: "newest" (Recent Activity Mode): Pulls the most recently published customer review to confirm active customer volume and recent sentiment.
5. All Supported Search & Location Input Formats (searchQueries)
Pass any combination of search queries, URLs, or IDs inside searchQueries (up to maxPlacesPerQuery: 200 businesses per query):
- Category + City / ZIP Search Queries:
"dentists in Austin TX","roofing contractors in Miami FL","medspas in 90210","personal injury lawyers in Chicago IL" - Google Maps Search URLs:
https://www.google.com/maps/search/implant+dentists/@30.2672,-97.7431,13z - Direct Business Place URLs:
https://www.google.com/maps/place/Katz's+Delicatessen/@40.722233,-73.987429,17z/ - Google Place IDs (
ChIJ...), Hex Feature IDs (0x...:0x...), org.pageShortlinks:ChIJ2_VLfRdawokRXKfA6CMf5YQ - GPS Coordinates (
lat, lng):"30.2672, -97.7431"
3. Complete 48-Field Flat Schema (1-Click CSV, Excel, HubSpot & GoHighLevel Ready)#
Every business extracted by unitbytes/google-maps-leads-scraper is normalized into 48 flat root-level fields—ready to import directly into Excel, Google Sheets, HubSpot, Clay, Instantly.ai, Smartlead, or GoHighLevel:
{
"input_query": "dentists in Austin TX",
"status": "OK",
"scraped_at": "2026-10-24T18:30:12.410291+00:00",
"error": null,
"business_name": "Austin Smile & Implant Center",
"place_id": "ChIJ2_VLfRdawokRXKfA6CMf5YQ",
"place_cid": "9576097791875393372",
"feature_id": "0x8644b599a0f15555:0x84e51f23e8c0a75c",
"knowledge_graph_id": "/g/11b6_r8xyz",
"primary_category": "Dental clinic",
"categories": ["Dental clinic", "Cosmetic dentist", "Dental implants periodontist"],
"google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJ2_VLfRdawokRXKfA6CMf5YQ",
"price_level": "$$",
"primary_email": "[email protected]",
"emails": ["[email protected]", "[email protected]"],
"email_count": 2,
"has_email": true,
"phone": "(512) 555-0199",
"phone_international": "+15125550199",
"website_phones": ["(512) 555-0199", "(512) 555-0192"],
"whatsapp_url": "https://wa.me/15125550199",
"website": "https://www.austinsmilecenter.com/",
"domain": "austinsmilecenter.com",
"contact_page_url": "https://www.austinsmilecenter.com/contact-us",
"booking_url": "https://www.zocdoc.com/practice/austin-smile-center-12345",
"linkedin_url": "https://www.linkedin.com/company/austin-smile-center",
"instagram_url": "https://www.instagram.com/austinsmilecenter",
"facebook_url": "https://www.facebook.com/austinsmilecenter",
"twitter_url": null,
"youtube_url": null,
"tiktok_url": null,
"social_urls": [
"https://www.linkedin.com/company/austin-smile-center",
"https://www.instagram.com/austinsmilecenter",
"https://www.facebook.com/austinsmilecenter"
],
"address": "1200 Congress Ave, Austin, TX 78701, United States",
"street": "1200 Congress Ave",
"neighborhood": "Downtown Austin",
"city": "Austin",
"state": "Texas",
"postal_code": "78701",
"country_code": "US",
"country": "United States",
"plus_code": "7624+9X Austin, Texas",
"latitude": 30.273412,
"longitude": -97.740518,
"timezone": "America/Chicago",
"rating": 4.8,
"reviews_count": 342,
"is_claimed": true,
"claim_business_url": null,
"working_hours": {
"Monday": "8 AM–5 PM",
"Tuesday": "8 AM–5 PM",
"Wednesday": "8 AM–5 PM",
"Thursday": "8 AM–5 PM",
"Friday": "8 AM–2 PM",
"Saturday": "Closed",
"Sunday": "Closed"
},
"cover_image_url": "https://lh3.googleusercontent.com/p/AF1QipN...",
"website_cms": "WordPress",
"website_tech_stack": ["WordPress", "Meta Pixel", "Google Ads / GTag", "Zocdoc"],
"has_meta_pixel": true,
"has_google_ads_tag": true,
"lead_score": 95,
"agency_opportunity_flags": [],
"review_hook_stars": 5,
"review_hook_author": "Michael Vance",
"review_hook_date": "3 days ago",
"review_hook_text": "Dr. Smith and the hygienist team made my dental implant procedure completely painless.",
"review_hook_report_url": "https://www.google.com/local/review/rap/report?postId=ChdDSUhNMG9nS0VJQ0FnSUN..."
}
All 48 Output Fields by Category
| Category | Flat Output Fields |
|---|---|
| Business Identity (13 Fields) | input_query, status, scraped_at, error, business_name, place_id (ChIJ...), place_cid, feature_id, knowledge_graph_id, primary_category, categories, google_maps_url, price_level |
| Verified Emails & Phones (8 Fields) | primary_email, emails, email_count, has_email, phone, phone_international (E.164), website_phones, whatsapp_url |
| Website & Booking Links (4 Fields) | website (stripped of UTM/gclid/fbclid tracking), domain, contact_page_url, booking_url |
| Social Media Profiles (7 Fields) | linkedin_url, instagram_url, facebook_url, twitter_url, youtube_url, tiktok_url, social_urls |
| Address & Geolocation (12 Fields) | address, street, neighborhood, city, state, postal_code, country_code, country, plus_code, latitude, longitude, timezone |
| Reputation & Agency Signals (12 Fields) | rating, reviews_count, is_claimed, claim_business_url, working_hours, cover_image_url, website_cms, website_tech_stack, has_meta_pixel, has_google_ads_tag, lead_score (0–100), agency_opportunity_flags |
| Cold-Outreach Review Hook (5 Fields) | review_hook_stars, review_hook_author, review_hook_date, review_hook_text, review_hook_report_url |
4. Python Tutorial: Scrape B2B Leads & Filter High-Intent Agency Prospects#
You can run unitbytes/google-maps-leads-scraper via the official apify-client Python SDK and segment leads by agency_opportunity_flags in under 30 lines of code:
import os
import pandas as pd
from apify_client import ApifyClient
client = ApifyClient(os.getenv("APIFY_TOKEN", "YOUR_APIFY_TOKEN"))
run_input = {
"searchQueries": [
"dentists in Austin TX",
"medspas in Scottsdale AZ",
"roofing contractors in Tampa FL",
],
"maxPlacesPerQuery": 50,
"scrapeContacts": True, # Crawl homepage + /contact + /about for emails, socials & tech stack
"includeReviewHook": True, # Attach a customer review snippet for cold email personalization
"reviewHookType": "most_relevant", # Or "lowest_rating" to pull 1-star complaints for ORM pitches
"language": "en",
"region": "us",
}
# Execute on Apify Cloud ($0.50 - $1.50 per 1,000 B2B leads)
run = client.actor("unitbytes/google-maps-leads-scraper").call(run_input=run_input)
# Load all 48 flat fields directly into a Pandas DataFrame
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
df = pd.DataFrame(items)
# 1. Filter for verified email leads missing a Meta Pixel (high-intent Paid Social prospects)
meta_prospects = df[
df["has_email"] & (~df["has_meta_pixel"]) & (df["reviews_count"] >= 20)
]
print(f"Found {len(meta_prospects)} established businesses with verified email missing Meta Pixel!")
# 2. Filter for businesses with unclaimed Google Business Profiles or no online booking widget
unclaimed_or_no_booking = df[
df["agency_opportunity_flags"].apply(
lambda flags: isinstance(flags, list)
and ("UNCLAIMED_GBP" in flags or "NO_ONLINE_BOOKING" in flags)
)
]
print(f"Found {len(unclaimed_or_no_booking)} leads with UNCLAIMED_GBP or NO_ONLINE_BOOKING!")
# Export clean CSV ready for Instantly.ai, Smartlead, Clay, or GoHighLevel
df.to_csv("google_maps_b2b_leads_enriched.csv", index=False)
5. Combine with the Full UnitBytes Google Maps Intelligence Suite#
Once you identify high-value local business prospects with the Google Maps Email & Leads Scraper, you can chain any of the specialized UnitBytes Google Maps engines using the exact place_id (ChIJ...) or google_maps_url:
- Google Maps Email & Leads Scraper (
unitbytes/google-maps-leads-scraper): Extract B2B business leads with verified emails, E.164 phone numbers, social media links, website CMS & ad pixel detection (Meta Pixel,Google Ads),agency_opportunity_flags, and cold-outreach review hooks starting at$0.50 / 1,000 leads. - Google Maps Reviews Scraper (
unitbytes/google-maps-reviews-scraper): Need more than 1 review hook? Extract up to 10,000 historical reviews per business starting at$0.25 / 1,000 reviewswith server-sidelowest_ratingsorting andreviewKeywordfiltering (read the 10K Google Maps Reviews Scraper Guide). - Google Maps Review Monitor & Change Tracker (
unitbytes/google-maps-reviews-tracker): Stateful cross-run review monitoring that tracksNEW,REMOVED,RATING_CHANGED,TEXT_EDITED, andOWNER_REPLIEDreviews across scheduled runs, audits owner reply SLAs (response_time_hours), and generates 1-click Google dispute URLs (review_report_url) (read the Review Monitor & Change Tracker Guide). - Google Maps Contributor & Local Guide Scraper (
unitbytes/google-maps-contributor-scraper): Investigate suspicious 1-star reviewers by extracting their full cross-location review history, Local Guide badge, and category distribution (read the Contributor Fake Review Audit Guide). - Google Maps Photos, Menus & Videos Scraper (
unitbytes/google-maps-photos-scraper): Extract uncompressed original (=s0) restaurant menus, storefront photos, and playable MP4 videos at$0.50/1K(read the Photos, Menus & Videos Scraper Guide).
Frequently Asked Questions (FAQ)
Does Google Maps show email addresses natively, and how does this scraper extract them?
Google Maps does not display email addresses on business cards. When scrapeContacts is enabled (default: true), unitbytes/google-maps-leads-scraper automatically visits each business's official website plus its /contact and /about pages to extract verified emails, E.164 phone numbers, WhatsApp links, booking widgets, and social media profiles in a single run.
How does decision-maker email prioritization (primary_email) work?
The contact enrichment engine decodes obfuscated mailto: and protected email strings, strips out image filenames, CSS tokens, and noreply/sentry junk addresses, and ranks real business emails by prioritizing domain-matched addresses and leadership/contact prefixes (owner@, founder@, ceo@, dr@, contact@, hello@, info@) into the primary_email field.
What are agency_opportunity_flags and lead_score?
Every business is audited for high-intent digital marketing gaps and tagged with machine-filterable agency_opportunity_flags: UNCLAIMED_GBP, NO_WEBSITE, NO_EMAIL_ON_SITE, MISSING_META_PIXEL, MISSING_GOOGLE_TAG, NO_ONLINE_BOOKING, LOW_RATING_UNDER_4_2, LOW_REVIEW_COUNT, and NO_SOCIAL_LINKS, along with a 0-100 lead_score for instant CRM prioritization.
How do cold-outreach review hooks (includeReviewHook & reviewHookType) work?
When includeReviewHook is true, the Actor extracts a customer review snippet (review_hook_text, review_hook_stars, review_hook_author, review_hook_date) and a 1-click Google dispute URL (review_hook_report_url). Set reviewHookType to 'most_relevant' for personalized cold-email compliments, or 'lowest_rating' to pull the top 1-star complaint for reputation management pitches.
How much does it cost to scrape 1,000 B2B leads from Google Maps?
Pricing starts at $1.50 per 1,000 leads on the Apify Free tier ($0.0015/lead) and drops to $0.50 per 1,000 leads on Gold/Platinum/Diamond plans ($0.0005/lead), with all website contact enrichment, tech stack detection, and review hooks included at zero extra charge. Every Apify account includes $5.00 in free monthly credits (3,300+ free leads every month).
Bypass Google Places API Caps — Extract Enriched B2B Leads, Photos & 10K Reviews
Extract B2B business leads with verified website emails & ad pixels ($0.50/1K), uncompressed original (=s0) photos, up to 10,000 reviews per place ($0.25/1K), and Local Guide contributor histories at a fraction of official Places API costs.
Related Technical Guides & Teardowns
Google Maps Review Monitor & Change Tracker Guide (2026): Track New, Removed, Edited & Unanswered Reviews
How to monitor Google Maps businesses for NEW, REMOVED, EDITED, and UNANSWERED reviews across runs. Sort 1-star complaints first, filter by keyword, audit owner reply SLAs (response_time_hours), spot burner accounts, and generate 1-click Google report links (review_report_url).
How to Scrape All 10,000 Google Maps Reviews per Business in 2026 ($0.25/1K vs. The 5-Review API Cap)
Why the official Google Places API caps you at 5 reviews per location—and how to extract up to 10,000 Google Maps reviews per business at $0.25/1K with keyword filtering, 1-star sorting, and 41 flat CSV/JSON fields.
Google Places Photo API Pricing & 10-Photo Limit in 2026 ($7.00/1K vs. $0.50/1K Alternatives)
Complete breakdown of Google Places Photo API pricing ($7.00 per 1,000 photos + Place Details fees), the 10-photo and 1600px limits, and how to extract uncompressed (=s0) photos, restaurant menus, MP4 videos, and Local Guide portfolios at $0.50/1K.