Google Maps Scraper: Places, Phones & Reviews, No Browser avatar

Google Maps Scraper: Places, Phones & Reviews, No Browser

Pricing

from $1.00 / 1,000 place scrapeds

Go to Apify Store
Google Maps Scraper: Places, Phones & Reviews, No Browser

Google Maps Scraper: Places, Phones & Reviews, No Browser

Extract Google Maps places with phone, website, rating, reviews, opening hours, popular times, images and place ID. Plain HTTP, no browser, $1.00 per 1,000 places. Accepts compass/crawler-google-places input unchanged.

Pricing

from $1.00 / 1,000 place scrapeds

Rating

0.0

(0)

Developer

subimpact

subimpact

Maintained by Community

Actor stats

0

Bookmarked

10

Total users

4

Monthly active users

14 days ago

Last modified

Features

Limited permissions

Share

Extract Google Maps business data: name, address, coordinates, phone, website, rating, review counts and distribution, opening hours, popular times, images, price bracket, menu, reservation links, plus code, CID and place ID. Optional reviews per place, plus an optional add-on that crawls each place website for company emails, phone numbers and social profiles.

Built on Google Maps' own internal JSON endpoints over plain HTTP. No Playwright and no headless Chrome, so the compute you pay for is small and the price is $1.00 per 1,000 places.

Switching from compass/crawler-google-places

Keep your existing input and change only the actor ID:

// before: client.actor('compass/crawler-google-places').call(input)
const run = await client.actor('subimpact/google-maps-scraper-plainhttp').call(input);

Compass input keys are accepted (unsupported extras are ignored and logged once), and rows carry the compass field names title, phone, phoneUnformatted, website, placeId, kgmid, fid, totalScore, reviewsCount, searchString next to our own. Cost for 10,000 places at Free-plan list prices: $10 here vs $40 on compass/crawler-google-places (place-scraped only, before platform usage). Full details in Compass input compatibility.

Input

FieldTypeDescription
searchStringsArraylistSearch terms. Each term = one search. Terms may be a business name + full address (compass-style exact lookup)
lat / lngstringOptional center coordinates. Empty = Google resolves the location from each search string (no New York bias)
zoomstringViewport zoom (default 13.1)
maxCrawledPlacesPerSearchintMax places per search term (max 200). A run with N terms returns up to N × this; 1 = the single best match per string
maxReviewsintReviews per place (each charged as review-scraped)
scrapePlaceDetailPageboolFull detail payload per place (default on)
placeIdslistDirect scrape by ChIJ place ID
startUrlslistDirect scrape by place URL
languageselectOutput language
proxyConfigurationobjectOptional proxy
scrapeContactsboolAdd-on: crawl each place website for emails, phones and social profiles (default off, $0.001 per place with contacts)
maxContactPagesPerPlaceintPages to scan per website when the add-on is on (default 3, max 10)

Compass input compatibility

Inputs written for compass/crawler-google-places run unchanged: extra compass keys (website, skipClosedPlaces, maxImages, scrapeSocialMediaProfiles, reviewsSort, ...) are accepted and ignored (logged once), maxCrawledPlacesPerSearch is per search string, and each row keeps the exact searchString it came from. scrapeContacts is now supported and produced the same compass field names (emails, phones, facebooks, instagrams, linkedIns, twitters, youtubes, tiktoks, pinterests). Output rows also carry the compass aliases phoneUnformatted, kgmid, fid, description, subTitle next to our own fields.

Search strings that are business names plus full addresses are resolved by Google itself (no coordinates needed). When Google answers with a single place instead of a result list, that place is returned as the row for the string.

Output

Dataset records mirror the classic Google Maps scraper shape: title, categoryName, categories, address (+street/city/postalCode/state/countryCode), location, phone, website, plusCode, totalScore, reviewsCount, reviewsDistribution, price, openingHours, popularTimesHistogram, additionalInfo, imageUrls, menu, tableReservationLinks, orderOnlineLinks, owner, permanentlyClosed/temporarilyClosed, cid/dataId/placeId, reviews, reviewsStatus (omitted-reviews flag), searchString, rank, scrapedAt

Company contacts add-on

Launch offer: the contacts add-on is free until 13 November 2026. From then it is billed at $1.00 per 1,000 places where contacts were found.

Turn on scrapeContacts and each place row is enriched from the place's own website: the homepage, then up to maxContactPagesPerPlace - 1 best-scored contact or about pages (falling back to /contact, /contact-us, /about, /about-us, /kontakt, /impressum). Emails come from mailto links, visible text, Cloudflare-obfuscated addresses and JSON-LD organisation records, junk and placeholder addresses are removed. Phones come from tel: links, text and JSON-LD, with date and number false positives filtered out. Social links are canonicalised and share/intent links dropped. robots.txt is obeyed, responses are capped at 3 MB and only text/html is read. Business websites are fetched directly (no proxy, desktop Chrome user agent) with a 15 s timeout per request and up to 2 retries on network errors, 5xx and 429.

Example input:

{
"searchStringsArray": ["coffee shop kuala lumpur"],
"maxCrawledPlacesPerSearch": 5,
"scrapeContacts": true
}

Example row (values from the repository test fixture contact-obfuscated.html, which stands in for a real cafe site; the place fields come from Google Maps):

{
"title": "Northwind Traders",
"website": "https://northwind-traders.com/",
"phone": "+1 415 555 0100",
"emails": ["hello@northwind-traders.com", "sales@northwind-traders.com", "jobs@northwind-traders.com"],
"phones": ["+14155550123", "60123456789", "+442079460958"],
"facebooks": ["https://facebook.com/northwindtraders"],
"instagrams": ["https://instagram.com/northwindtraders"],
"linkedIns": ["https://linkedin.com/company/northwind-traders", "https://linkedin.com/in/jane-doe"],
"twitters": ["https://x.com/northwind"],
"contactsStatus": "success",
"contactPagesScanned": 2,
"contactsError": null
}

contactsStatus is success, no-contacts, no-website, website-is-social (the listed website is a social profile: it is copied into its social field, not crawled and not charged), robots-disallowed, blocked or error; contactsError carries the reason when the site could not be scanned. A contacts failure never removes or delays the place row itself.

Responsible use: contact data can be personal data. You need a legal basis to collect and use it (for example GDPR in the EU or PDPA in Malaysia), and you are responsible for how you store, use and share it.

Pricing (pay per event)

EventPriceNotes
place-scraped$0.001 ($1.00 per 1,000 places)per place record
contact-details-scraped$0.001 ($1.00 per 1,000 places)add-on, charged once per place and only when an email, website phone or social link was found, after the row is delivered; free until 13 November 2026
review-scraped$0.0005 ($0.50 per 1,000 reviews)per review (only when maxReviews > 0)
actor-start$0.00005once per run

Platform compute is paid by the user (isPPEPlatformUsagePaidByUser), same as the original. No browser in the container → compute per 1k places is ~10× lower than browser-based scrapers.

How this compares

The actor talks to Google Maps' own internal JSON RPC endpoints over plain HTTP, with no Playwright and no headless Chrome in the container, so the compute you pay for is much smaller than with a browser-based scraper.

For places plus company contacts: compass/crawler-google-places is $4.00 per 1,000 places plus $2.00 per 1,000 for the contacts add-on ($6.00 total), lukaskrivka/google-maps-with-contact-details is $5.00 plus $2.50 ($7.50 total), and this actor is $1.00 plus $1.00 ($2.00 total), with contacts charged only when something is found. compass/google-maps-extractor lists $5.00 per 1,000 places without the contacts add-on. Two smaller actors list a lower per-item price: scraperlink/google-maps-scraper ($0.50) and vortex_data/google-maps ($1.00 for a basic place, $1.50 with contact details). Compare field coverage against those listings before choosing on price alone.

ActorPrice per 1,000 placesContacts add-onPlatform usage
subimpact/google-maps-scraper-plainhttp$1.00$1.00 (only when found)paid by you
compass/crawler-google-places$4.00$2.00see listing
lukaskrivka/google-maps-with-contact-details$5.00$2.50see listing
compass/google-maps-extractor$5.00not listedsee listing
scraperlink/google-maps-scraper$0.50not listedsee listing

Prices are Apify Store list prices on the Free plan, checked 29 October 2026. Competitor prices can change; check their listings.

Data source

Google Maps' own website RPC (maps.google.com/search, preview/place, rpc/listugcposts), the same payload stream a browser session receives, fetched over plain HTTP with consent cookies. Position-based parsers are ported from the MIT-licensed gosom/google-maps-scraper and adapted to the current wire format (Sep 2026).