VOOZH about

URL: https://apify.com/santamaria-automations/google-maps-scraper

โ‡ฑ Google Maps Scraper | $1/1k Places ยท Apify


๐Ÿ‘ Google Maps Scraper | $1/1k Places avatar

Google Maps Scraper | $1/1k Places

Pricing

from $0.75 / 1,000 place scrapeds

Go to Apify Store

Google Maps Scraper | $1/1k Places

The cheapest Google Maps scraper on Apify. Extract places, reviews & contacts for $1/1k results. Lightning fast, minimal resources. Optional email/phone extraction and AI-powered contact & job data from company websites.

Pricing

from $0.75 / 1,000 place scrapeds

Rating

5.0

(1)

Developer

๐Ÿ‘ Ale

Ale

Maintained by Community

Actor stats

7

Bookmarked

274

Total users

123

Monthly active users

3.7 hours

Issues response

12 days ago

Last modified

Share

Google Maps Scraper -- Extract Business Data from Any Location on Earth

Scrape Google Maps search results worldwide. Get business names, addresses, phone numbers, websites, reviews, ratings, opening hours, GPS coordinates, and 30+ structured fields per place. Fast, reliable, and priced per result.

Why this scraper

  • All-inclusive pricing -- 30+ fields per place at one flat rate. No extra charges for reviews, photos, hours, or address parsing.
  • Extremely fast -- Returns results in seconds, not minutes.
  • Volume-friendly pricing -- $1.00 per 1,000 places.
  • Built-in enrichment -- optionally trigger AI-powered contact extraction or job listing extraction on every website found.
  • Your LLM, your choice -- Gemini (recommended, free tier available), Groq, or OpenRouter with automatic fallback between providers.
  • Works worldwide -- any country, any language. Pass an ISO language code and get localized results.

Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client โ€” Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

Apify MCP server URL:

https://mcp.apify.com?tools=santamaria-automations/google-maps-scraper

Example prompt once connected:

"Use google-maps-scraper to process data with google maps. Return results as a table."

Clients that support dynamic tool discovery (Claude.ai, VS Code) will receive the full input schema automatically via add-actor.

Quick start

Simple search

Pass plain search strings. Include the location in the string itself:

{
"searchStrings":[
"restaurants in Paris",
"coffee shops in Tokyo",
"dentists in New York"
],
"maxResults":20
}

Structured queries

For programmatic use with company IDs, location filtering, and country codes:

{
"queries":[
{
"query":"software companies",
"location":"Berlin",
"country":"DE",
"company_id":"my-internal-id-123"
},
{
"query":"plumbers",
"location":"London",
"country":"GB"
}
],
"maxResults":50,
"language":"en"
}

With contact extraction

Find businesses and automatically extract team contacts from their websites:

{
"searchStrings":["IT companies in Munich"],
"maxResults":20,
"enableContactExtraction":true,
"geminiApiKey":"your-gemini-api-key"
}

With job listing extraction

Find businesses and automatically extract open positions from their career pages:

{
"searchStrings":["software companies in Berlin"],
"maxResults":20,
"enableJobExtraction":true,
"geminiApiKey":"your-gemini-api-key"
}

Input parameters

ParameterTypeDefaultDescription
searchStringsstring[][]Simple search strings. Include location in the string for geo-targeting.
queriesobject[][]Structured queries with optional query, location, country, company_id.
maxResultsPerQueryinteger20Results per query. Max 120 (Google Maps page limit).
maxTotalResultsinteger--Optional global cap across all queries combined. Leave empty for no cap. Useful for budget control.
maxResultsinteger--Deprecated โ€” use maxResultsPerQuery. Still works as a per-query alias for backward compatibility.
languagestring"en"ISO 639-1 language code (en, de, fr, ja, es, pt, it, ko, zh, ar, etc.).
includeReviewCountbooleantrueEnrich each result with review_count via the Maps Embed API. Adds ~150 ms per place.
includePopularTimesbooleanfalseOpt-in. Enrich each result with the visitor-traffic histogram by weekday ร— hour (0โ€“100). Adds ~1.5 s per place.
enableContactExtractionbooleanfalseAfter scraping, extract contacts from company websites via AI.
enableJobExtractionbooleanfalseAfter scraping, extract job listings from career pages via AI.
enableBrowserFallbackbooleanfalseRe-scrape JS-rendered sites (React, Vue, Angular) with a full browser. Catches ~25% more sites.
outputLanguagestring"en"Language for AI-extracted fields (en/de/fr/it/es/pt/nl/auto).
geminiApiKeystring--Gemini API key. Recommended for add-ons. Free tier: 1M tokens/min.
groqApiKeystring--Groq API key. Ultra-fast inference. Optional fallback.
openrouterApiKeystring--OpenRouter API key. Access 100+ models. Optional fallback.
excludeCidsstring[][]Google CIDs to skip. Useful for excluding already-scraped places.
maxConcurrencyinteger10Parallel requests (1-20).
requestDelayinteger300Delay between pagination requests in milliseconds (100-10,000).
proxyConfigurationobjectApify proxyProxy settings. Datacenter proxies work well.

Use either searchStrings or queries (or both). With searchStrings, each string is sent directly to Google Maps. With queries, you can separate the search term from the location and attach your own company_id for linking results back to your data.

Output

Each result contains 30+ fields. Here is an example:

{
"company_id":"restaurants in Paris",
"title":"Le Petit Cler",
"category":"French restaurant",
"categories":["French restaurant","Restaurant"],
"address":"3 Rue Cler, 75007 Paris, France",
"complete_address":{
"street":"3 Rue Cler",
"city":"Paris",
"postal_code":"75007",
"state":"Ile-de-France",
"country":"France"
},
"latitude":48.8571,
"longitude":2.3007,
"plus_code":"8FW4V87C+X3",
"timezone":"Europe/Paris",
"phone":"+33 1 45 51 24 52",
"website":"https://www.lepetitcler.com/",
"emails":[],
"review_rating":4.5,
"review_count":1823,
"reviews_per_rating":{"1":42,"2":31,"3":89,"4":312,"5":1349},
"reviews_link":"https://search.google.com/local/reviews?placeid=...",
"user_reviews":[
{
"name":"Marie Dupont",
"rating":5,
"text":"Excellent cuisine, warm atmosphere...",
"published_at":"2 months ago"
}
],
"status":"OPERATIONAL",
"price_range":"$$",
"open_hours":{
"Monday":["12:00-14:30","19:00-22:30"],
"Tuesday":["12:00-14:30","19:00-22:30"],
"Wednesday":["12:00-14:30","19:00-22:30"],
"Thursday":["12:00-14:30","19:00-22:30"],
"Friday":["12:00-14:30","19:00-23:00"],
"Saturday":["12:00-23:00"],
"Sunday":[]
},
"thumbnail":"https://lh3.googleusercontent.com/places/...",
"images":[
{"title":"Interior","image":"https://lh3.googleusercontent.com/..."}
],
"owner":{"name":"Le Petit Cler","link":"https://maps.google.com/..."},
"about":[
{"id":"dine_in","name":"Dine-in"},
{"id":"reservations","name":"Reservations"}
],
"reservations":[
{"link":"https://www.thefork.com/...","source":"TheFork"}
],
"order_online":[],
"menu":{"link":"https://www.lepetitcler.com/menu","source":"lepetitcler.com"},
"description":"Cozy French bistro in the heart of the 7th arrondissement.",
"link":"https://www.google.com/maps/place/Le+Petit+Cler/...",
"cid":"12345678901234567",
"data_id":"0x47e671a4e...",
"searchString":"restaurants in Paris",
"_rank":1,
"scraped_at":"2026-03-05T10:30:00.000Z"
}

Complete field reference

FieldTypeDescription
company_idstringYour reference ID (from queries) or the search string
titlestringBusiness name
categorystringPrimary Google Maps category
categoriesstring[]All assigned categories
addressstringFull formatted address
complete_addressobjectParsed components: street, city, postal_code, state, country
latitudenumberGPS latitude
longitudenumberGPS longitude
plus_codestringGoogle Plus Code
timezonestringIANA timezone identifier
phonestringPhone number
websitestringWebsite URL
emailsstring[]Email addresses found on the listing
open_hoursobjectOpening hours grouped by day of week
popular_timesobjectVisitor traffic patterns (opt-in via includePopularTimes)
price_rangestringPrice level ($ to $$$$)
statusstringOPERATIONAL, CLOSED_TEMPORARILY, or CLOSED_PERMANENTLY
review_countintegerTotal number of reviews
review_ratingnumberAverage rating (1.0 to 5.0)
reviews_per_ratingobjectBreakdown of reviews by star rating (1 through 5)
reviews_linkstringDirect URL to all reviews
user_reviewsarraySample reviews with name, rating, text, date, owner response
thumbnailstringMain business photo URL
imagesarrayAdditional photos with titles
reservationsarrayReservation links with source (TheFork, OpenTable, etc.)
order_onlinearrayOnline ordering links with source
menuobjectMenu link and source
ownerobjectBusiness owner name and profile link
aboutarrayAmenities and features (dine-in, Wi-Fi, wheelchair access, etc.)
descriptionstringBusiness description from Google
linkstringFull Google Maps URL for this place
cidstringGoogle Maps CID -- stable identifier that persists across name/address changes
data_idstringGoogle internal data ID
searchStringstringThe search query that produced this result
_rankintegerPosition in search results (1-based)
scraped_atstringISO 8601 timestamp

About popular_times

Set the input flag includePopularTimes: true to enrich each result with Google's visitor-traffic histogram. The output shape is Day โ†’ Hour โ†’ Popularity(0-100) with English day keys (Sunday, Monday, โ€ฆ) regardless of input language, so the data stays portable across runs.

Each enrichment is one extra request to Google's place-detail endpoint and is run sequentially (concurrency 1) with a 300 ms delay; budget roughly 1.5 s per place on top of the SERP scrape. Only places with enough foot traffic for Google to compute the histogram will have non-null data; smaller venues will keep popular_times: null โ€” that is expected, not an error.

Example:

"popular_times":{
"Sunday":{"12":41,"13":56,"14":63,"15":70,"16":73,"17":83,"18":76},
"Monday":{"11":43,"12":61,"13":60,"14":53, ...},
...
}

Enrichment add-ons

After the Maps scrape completes, this actor can automatically trigger AI-powered extraction on every website found in the results. Each add-on runs as a separate actor and produces its own dataset.

Contact extraction

Extracts team member names, email addresses, phone numbers, positions, and departments from company websites. Powered by the Website Contact Extractor.

Enable it by setting enableContactExtraction: true and providing at least one LLM API key. The sub-actor run ID is stored in the key-value store as CONTACT_EXTRACTOR_RUN_ID.

Job listing extraction

Extracts open positions, job titles, locations, departments, and career page URLs from company websites. Powered by the Website Job Extractor.

Enable it by setting enableJobExtraction: true and providing at least one LLM API key. The sub-actor run ID is stored in the key-value store as JOB_EXTRACTOR_RUN_ID.

Browser fallback

Some company websites are built with JavaScript frameworks (React, Vue, Angular) that require a full browser to render. When enableBrowserFallback is set to true, the contact/job extractors will automatically re-scrape these sites with a real browser. This catches ~25% more sites but increases cost and runtime. Only applies when contact or job extraction is enabled.

LLM API keys

Both add-ons use LLMs to extract structured data. Provide one or more API keys. When multiple keys are provided, the system uses them in priority order with automatic fallback:

  1. Gemini (recommended) -- Best quality-to-cost ratio. Free tier includes 1M tokens/min. Get a key at Google AI Studio.
  2. Groq (optional) -- Ultra-fast inference. Get a key at Groq Console.
  3. OpenRouter (optional) -- Access to 100+ models. Get a key at OpenRouter.

One key is sufficient. With multiple keys, if the primary provider hits a rate limit, the system falls back to the next available provider automatically.

Use cases

  • Lead generation -- Search for businesses by type and location. Get phone numbers, websites, and emails in one run.
  • Market research -- Map competitors in a geographic area with ratings, review counts, and price ranges.
  • Company enrichment -- Add addresses, phone numbers, GPS coordinates, and opening hours to your existing database.
  • Local SEO monitoring -- Track your business listing and competitor rankings across locations.
  • Real estate analysis -- Find nearby amenities, restaurants, and services for property listings.
  • Hiring intelligence -- Discover companies in a region and extract their open positions in a single pipeline.
  • Review analysis -- Collect review ratings and sample reviews across competitors for sentiment analysis.

Excluding already-scraped places

Use the excludeCids parameter to skip places you have already scraped. The CID (Customer ID) is a stable Google Maps identifier that does not change even if the business changes its name or address.

{
"searchStrings":["cafes in Zurich"],
"maxResults":100,
"excludeCids":["12345678901234567","98765432109876543"]
}

This is useful for incremental scraping workflows where you want to collect only new results.

Supported languages

Pass any ISO 639-1 language code: en, de, fr, ja, es, pt, it, ko, zh-CN, ar, nl, pl, sv, da, fi, no, cs, hu, ro, el, tr, th, vi, id, and more.

Tips for better results

  • Include the location in your search -- "plumber Berlin" works better than just "plumber"
  • Use the local language for better results in non-English countries (e.g., "Zahnarzt Zurich" instead of "dentist Zurich")
  • Set language to match your target market -- de for German results, fr for French
  • Use Exclude CIDs to avoid re-scraping places you already have from previous runs

Pricing

$1.00 per 1,000 places scraped. All 30+ fields are included per place. No extra charges for reviews, photos, opening hours, parsed addresses, or any other field.

Example costs:

  • 100 places = $0.10
  • 1,000 places = $1.00
  • 10,000 places = $10.00
Add-onPricing
Contact extractionBilled separately by the Website Contact Extractor
Job listing extractionBilled separately by the Website Job Extractor

Limitations

  • ~120 results per query -- Google Maps returns a maximum of approximately 120 places per search query. For broader coverage, split your search into multiple queries by neighborhood or sub-region.
  • No individual place detail pages -- Data comes from search results, not from visiting each place page individually. Most fields are populated, but some niche fields (full review text, all photos) may be limited to what Google includes in search results.
  • Search relevance -- Results depend on Google's ranking algorithm. The same query may return slightly different results over time.
  • Rate limiting -- Very high concurrency or very low request delays may trigger temporary blocks from Google. The defaults (10 concurrency, 300ms delay) are tuned for reliability.

Related Actors

Find businesses to enrich

Real Estate

E-Commerce

Enrichment

Support

Found a bug or have a feature request? Open an issue.

You might also like

Google Maps Places Scraper

codingfrontend/google-maps-places-scraper

Scrape Google Maps places data including business name, address, phone, website, ratings, reviews, and more. Extract leads and business information from Google Maps search results.

๐Ÿ‘ User avatar

codingfrontend

118

Google Maps Photos Scraper โ€” Batch places

scrape.badger/google-maps-photos-scraper

Scrape Google Maps photos at scale. Batch input: pass one or many place_ids / data_ids in a single run โ€” no need to configure a separate task per place. Each photo is pushed as its own dataset record stamped with the source place_id. Cheapest photos-only actor on Apify.

14

Trip.com Hotel Data Scraper with Advanced Filters

hotels-scrapers/trip-hotel-scraper

Powerful Trip.com hotel/accomendation data scraper & API. Collect prices (original, current, total), ratings, reviews, room types, amenities, images, promotions. Apply advanced filters, monitor markets, build dashboards, or call via REST & schedule. Exports JSON or CSV fast.

๐Ÿ‘ User avatar

Hotels Scraper

95

4.7

Google Maps Photos Scraper

thescrappa/google-maps-photos-scraper

Extract and download photos from any Google Maps business listing. Get high-quality images including customer photos, owner uploads, and street view photos with metadata like author, date, and engagement metrics.

Google Maps Photos Scraper | Categorized by Menu, Food, Vibe

solidcode/google-maps-photos-scraper

[๐Ÿ’ฐ $1.8 / 1K] Extract every photo for any Google Maps place โ€” categorized exactly like the Maps website (Menu, Food & drink, Vibe, By owner, and more). Perfect companion to the Google Maps Scraper: paste place URLs, get a complete categorized photo library per place.

195

4.9

Google Maps Places Extractor

enckay/google-maps-places-extractor

Extract Places and businesses from Google Maps. Scrap phone numbers, emails, website, business hours, address and gps, Google Place ID. Use filters to include or exclude irrelevant leads.

861

Google Places Reviews Plus

canadesk/google-places-reviews-plus

No limits + Full details. Get all reviews for places such as monuments, restaurants or hotels from Google Maps! Also includes likes, images, replies and filters. It's (very) fast and costs little!

๐Ÿ‘ User avatar

Canadesk Support

8

๐Ÿ“๐Ÿ“ธ Google Street View Scraper (PPE)

3x1t/google-street-view-scraper-ppe

Extract data from thousands of Google Maps Street View locations, including points of interest (businesses, shops, etc.), historical data, panorama images & more. Cover wide map areas by leveraging powerful input methods. Fast, cheap & reliable. Pay-per-event version.

Google Maps Scraper โœ… $1.5/1k places

x_guru/google-maps-scraper

Scrape Google Maps places from $1.5/1k results. Get business names, addresses, phones, websites, ratings, reviews, images, opening hours, GPS coordinates, categories, Place IDs, and optional public website emails from keywords, URLs, Place IDs, or map areas.

๐Ÿ‘ User avatar

Hundevmode Labs

13

5.0