Google Maps Scraper avatar

Google Maps Scraper

Under maintenance

Pricing

from $2.50 / 1,000 record scrapeds

Go to Apify Store
Google Maps Scraper

Google Maps Scraper

Under maintenance

Many Google maps scrapers leave discovery gaps that quietly cost you leads. This actor systematically scans entire areas to uncover almost all businesses, reduces duplicates, and generate cleaner, outreach ready datasets with contact details, and pin point coordinates with link & much more

Pricing

from $2.50 / 1,000 record scrapeds

Rating

0.0

(0)

Developer

Mohsen S

Mohsen S

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 days ago

Last modified

Share

Primelabs Google Maps Lead Extractor

Scan up to 25 geographic zones per keyword, run multiple keywords in a single execution, and control runtime costs with built-in request budgeting. By automatically dividing target geographic regions into automated search matrix cells, this tool helps discover businesses across different neighborhoods and geographic areas within a target region.


Built for Agency Outcomes and Cost Control

Instead of just dumping raw data, this extractor is built to support outbound operational goals while keeping platform spend under precise control.

  • Prevent accidental credit burn. Most scrapers let users accidentally launch hundreds of hidden queries. This actor evaluates your planned search footprint (keywords times grid cells) and checks it against your max_search_requests cap before spinning up browser instances, blocking cost overruns.
  • Lead generation agencies can export targeted lists containing only verified, actionable contact data. Use required_fields to filter out incomplete rows at runtime.
  • Local SEO and web design teams can instantly isolate regional businesses missing an active website or with poor review metrics, ideal for outreach.
  • Cold outreach teams get low-quality profiles filtered automatically at runtime so reps spend time on verified leads instead of chasing unverified numbers.

Core Features

Granular data qualification (required_fields) Most scrapers dump every profile they find and leave filtering to you. This actor includes a pre-qualification engine. Pass configurations like ["phone", "website"] and only fully qualified leads are written to the dataset.

Geographic grid scanning Google Maps search results are often limited within a single viewport, so a broad city search misses part of the market. This tool divides the target area into a search matrix grid and scans neighborhoods and suburbs individually to surface localized business profiles.

Multi-keyword batch processing The search_queries array input supports batch processing. Passing a list of niches overrides single-keyword execution and runs the full grid sequence across each keyword in one run.

Live run analytics Every run generates a run_metadata asset in the key-value store, logging the active keyword set, spatial grid configuration, and final data yield metrics.

Coordinates from profile URLs Latitude and longitude are parsed directly from the business tracking signatures (!3d and !4d) embedded in the profile's routing parameters, keeping data structured for mapping, filtering, and CRM workflows.

Duplicate removal When scanning overlapping neighborhood boundaries, the scraper identifies and filters out duplicate profiles using their unique business signatures, so the final dataset stays clean.


Lead Quality Scoring

Every unique business is graded from 0 to 100 based on its online footprint.

SignalMaximum ValueLogic
Contact phone present25 pointsConfirms direct contact capability
Website URL present25 pointsConfirms active digital presence
Review volume25 pointsreviews / 10, capped at 25
Star rating25 pointsrating * 5, capped at 25

Output Format Presets

The actor structures data into three layout configurations depending on what you need.

  • full: Every collected parameter, including grid cell center points, timestamps, and full coordinate data.
  • crm: A clean layout focused on fields essential for prospecting: business name, address, phone, website, operating status, and lead quality score.
  • contact_only: A lightweight directory layout with only name, phone, website, and the keyword that matched.

Data Fields Collected

FieldTypeDescription
nameStringOfficial listed trade name of the business
addressStringFull street address with line breaks removed
phoneStringCleaned contact phone number
websiteStringValidated external homepage URL
total_ratingFloatStar rating from 0.0 to 5.0
review_countIntegerTotal number of public reviews
lead_quality_scoreIntegerCalculated score from 0 to 100
business_statusStringoperational, permanently_closed, or temporarily_closed
Maps_urlStringDirect link to the listing
latitudeFloatLatitude coordinate
longitudeFloatLongitude coordinate
matched_keywordStringThe search query that returned this profile
target_cityStringThe municipality configured for the crawl
scraped_atStringISO timestamp of when extraction completed
record_idStringDeterministic fingerprint unique to the entry
place_keyStringParameter-stripped unique Google routing key
source_cell_latFloatLatitude of the search grid cell center
source_cell_lngFloatLongitude of the search grid cell center
schema_versionStringVersion tag for the output schema
business_categoryStringProfile category, may be null depending on listing layout

Configuration

Main Settings

  • target_city (String, required): City or region to scan, for example "Washington DC".
  • target_country (String, optional): Restricts boundary parsing to a country code. Default "US".
  • search_query (String, optional): A single business niche or keyword. Used if search_queries is empty.
  • search_queries (Array, optional): A list of keywords to process sequentially across the grid. Overrides search_query.
  • max_results (Integer, optional): Stops the run once this many unique leads are saved.
  • output_format (String, optional): full, crm, or contact_only.

Spatial Grid Settings

  • scan_mode (String, optional): How search coordinates distribute across the boundary: city_center, balanced, or full_coverage.
  • scan_depth (String, optional): Density of the search grid: basic (1), standard (4), deep (9), enterprise (25).
  • max_search_requests (Integer, optional): Caps total planned cells. The run stops if the plan exceeds this limit.

Data Filters

  • with_website (Boolean, optional): Only save listings that have a website.
  • without_website (Boolean, optional): Only save listings missing a website.
  • min_reviews (Integer, optional): Skip profiles with fewer reviews than this.
  • skip_permanently_closed (Boolean, optional): Filter out businesses flagged as closed.
  • required_fields (Array, optional): Drop listings missing these fields, options are phone and website.
  • include_lead_scoring (Boolean, optional): Toggles calculation of the lead_quality_score field.
  • include_row_metadata (Boolean, optional): Toggles inclusion of backend metadata fields such as grid cell center coordinates and schema version.

Diagnostics in the Key-Value Store

If a search grid point fails to complete due to a page layout or load issue, the actor saves trace files to the default key-value store so you can debug without rerunning the whole job.

  • Screenshot (FEED_FAILURE_*): An image of the browser window at the moment of the timeout.
  • HTML dump (FEED_FAILURE_*_HTML): A copy of the page DOM, useful for spotting broken or renamed selectors.
  • Run metadata (FEED_FAILURE_*_META): A JSON log with the grid cell coordinates, final redirect URL, HTTP status, and traceback.

Performance

  • Runs on 2048 MB of allocated memory, using Crawlee's concurrency controls to stay within safe limits.
  • Configured with CRAWLEE_PURGE_ON_START=1 and PYTHONUNBUFFERED=1 so each run starts clean and logs stream immediately.

Example Configuration

{
"target_city": "Washington DC",
"target_country": "US",
"search_query": "Cafe",
"search_queries": ["Cafe", "Coffee Shop"],
"scan_mode": "full_coverage",
"scan_depth": "deep",
"max_results": 5,
"max_search_requests": 30,
"output_format": "full",
"with_website": false,
"min_reviews": 5,
"skip_permanently_closed": true,
"required_fields": ["phone"],
"include_lead_scoring": true,
"include_row_metadata": true
}

API Usage

Start a Run

curl -X POST "https://api.apify.com/v2/acts/primelabs~google-maps-scraper/runs?token=YOUR_API_TOKEN&memory=2048" \
-H "Content-Type: application/json" \
-d '{
"target_city": "Washington DC",
"search_queries": ["Cafe", "Coffee Shop"],
"scan_depth": "standard",
"max_results": 5,
"output_format": "full"
}'

Fetch Results

$curl -X GET "https://api.apify.com/v2/datasets/YOUR_DATASET_ID/items?token=YOUR_API_TOKEN"