Google Maps Lead & Contact Scraper avatar

Google Maps Lead & Contact Scraper

Pricing

from $0.03 / 1,000 results

Go to Apify Store
Google Maps Lead & Contact Scraper

Google Maps Lead & Contact Scraper

Extract B2B leads directly from Google Maps. Automatically scrape company names, addresses, phone numbers, websites, to supercharge your sales pipeline.

Pricing

from $0.03 / 1,000 results

Rating

0.0

(0)

Developer

ScrapeCraft

ScrapeCraft

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Company Contact Scraper - Apify Actor

Scrapes one company/place profile from Google Maps and outputs one dataset item with contact details, address data, ratings, review star distribution, photos, web results, and Google Maps identifiers.

What It Extracts

  • Company/place name
  • Category and category list
  • Website and phone number
  • Full address plus parsed street, city, state, postal code, and country
  • Latitude/longitude
  • Google Maps URL, CID, feature ID, KG/MID, and optional Place ID
  • Rating, review count, and star distribution histogram
  • Opening hours
  • Photos and image URLs
  • Web results shown in the Google Maps panel
  • About/attribute data when available

The actor does not return individual review text. It returns only the aggregate star distribution.

How It Works

  1. Resolves the target company using a strategy: url, cid, placeId, or search.
  2. For search runs, optionally verifies the matched result by website domain.
  3. Opens the Google Maps profile in Puppeteer.
  4. Uses Google Maps preview/place data when available.
  5. Enriches missing contact, rating, review distribution, photos, web results, and about fields from the live Maps page when apiOnly is false.
  6. Pushes one item to the default Apify dataset.
  7. Writes OUTPUT_METADATA to the default key-value store.

Input

At least one of url, cid, placeId, or searchQuery is required.

If strategy is auto and multiple target fields are provided, the priority is:

  1. url
  2. cid
  3. placeId
  4. searchQuery
FieldTypeRequiredDefaultDescription
strategystringNoautoTarget resolution method. Allowed values: auto, url, cid, placeId, search.
urlstringConditionalnullFull Google Maps place URL.
cidstringConditionalnullGoogle Maps CID. Accepts decimal CID, Maps URL with cid/ludocid, cid:123, ludocid=123, or a URL with a hex CID pair. Keep large CIDs as strings.
placeIdstringConditionalnullGoogle Place ID.
searchQuerystringConditionalnullCompany name to search on Google Maps.
websitestringNonullCompany website used to verify the correct search result. Strongly recommended with searchQuery.
proxyConfigobjectNoApify residential proxyApify proxy configuration. Residential proxies are recommended for cloud runs.
blockAssetsbooleanNotrueBlocks image/font/media requests during the main scrape to reduce bandwidth.
apiOnlybooleanNofalseUses only the Maps preview API and disables DOM fallback/enrichment. Leave false for best completeness.
languagestringNoenGoogle Maps UI language code, for example en, es, fr, de.
headlessbooleanNotruePuppeteer headless mode. Keep true on Apify Cloud.

Input Examples

Search by Company Name and Website

{
"strategy": "search",
"searchQuery": "VAS Global | Virtual Assistant Services for Businesses",
"website": "https://virtualassistantsolutions.com/",
"language": "en",
"blockAssets": true,
"apiOnly": false,
"proxyConfig": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Direct Google Maps URL

{
"strategy": "url",
"url": "https://www.google.com/maps/place/Eiffel+Tower/@48.8583701,2.2922926,17z",
"language": "en",
"proxyConfig": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Google Maps CID

{
"strategy": "cid",
"cid": "15430805186958748717",
"language": "en"
}

Google Place ID

{
"strategy": "placeId",
"placeId": "ChIJZQi5xUUPyokRKnfZHK7gBnc",
"language": "en"
}

Output

The actor writes one object to the default dataset. Some fields can be null or empty arrays if Google Maps does not expose the data.

Main Output Fields

FieldTypeDescription
searchStringstring or nullOriginal search/target value used for the run.
titlestring or nullCompany/place name.
descriptionstring or nullBusiness description when available.
categoryNamestring or nullPrimary Google Maps category.
categoriesarrayCategory list.
addressstring or nullFull address.
streetstring or nullParsed street address.
citystring or nullParsed city.
postalCodestring or nullParsed postal/ZIP code.
statestring or nullParsed state/province/region.
countryCodestring or nullParsed country/country label.
websitestring or nullCompany website URL.
phonestring or nullPhone number as displayed by Google Maps.
phoneUnformattedstring or nullNormalized phone number when possible.
totalScorenumber or nullAverage rating.
reviewsCountnumber or nullTotal reviews count.
reviewsDistributionobjectReview histogram by star rating.
openingHoursarrayOpening hours by day.
locationobject or nullLatitude and longitude.
urlstring or nullFinal Google Maps URL.
placeIdstring or nullGoogle Place ID when provided.
cidstring or nullGoogle Maps CID.
fidstring or nullGoogle Maps feature ID.
kgmidstring or nullGoogle Knowledge Graph / Maps ID when available.
plusCodestring or nullGoogle Plus Code when available.
imageUrlstring or nullPrimary image URL.
imageUrlsarrayCollected image URLs.
imagesCountnumberNumber of collected image URLs.
imagesarrayImage objects with imageUrl, authorName, authorUrl, and uploadedAt.
videoUrlsarrayCollected video URLs when available.
webResultsarrayRelated web results shown in Google Maps.
additionalInfoobjectAbout/attribute sections such as accessibility, amenities, planning, and payments.
placesTagsarrayFlattened tags/attributes from Google Maps.
permanentlyClosedbooleanWhether Google Maps marks the place permanently closed.
temporarilyClosedbooleanWhether Google Maps marks the place temporarily closed.
scrapedAtstringISO timestamp when the item was scraped.

Example Output

{
"searchString": "VAS Global | Virtual Assistant Services for Businesses",
"title": "VAS Global | Virtual Assistant Services for Businesses",
"description": null,
"categoryName": "Business management consultant",
"address": "123 Example Street, Miami, FL 33101, United States",
"street": "123 Example Street",
"city": "Miami",
"postalCode": "33101",
"state": "Florida",
"countryCode": "United States",
"website": "https://virtualassistantsolutions.com/",
"phone": "+1 850-861-6367",
"phoneUnformatted": "+18508616367",
"totalScore": 2.4,
"reviewsCount": 21,
"reviewsDistribution": {
"oneStar": 6,
"twoStar": 7,
"threeStar": 4,
"fourStar": 1,
"fiveStar": 3
},
"openingHours": [
{
"day": "Monday",
"hours": "9 AM-5 PM"
}
],
"location": {
"lat": 25.6554871,
"lng": -80.4031784
},
"url": "https://www.google.com/maps/place/...",
"placeId": null,
"cid": "10346650057377339081",
"fid": "0x88d9c189a9fea2df:0x8f919ce21903b6c9",
"kgmid": "/g/11wbwhnbf9",
"imageUrl": "https://lh5.googleusercontent.com/...",
"imageUrls": [
"https://lh5.googleusercontent.com/..."
],
"imagesCount": 1,
"images": [
{
"imageUrl": "https://lh5.googleusercontent.com/...",
"authorName": null,
"authorUrl": null,
"uploadedAt": null
}
],
"videoUrls": [],
"webResults": [
{
"title": "VAS Global",
"url": "https://virtualassistantsolutions.com/",
"displayedUrl": "virtualassistantsolutions.com",
"description": "Related website result text when available"
}
],
"additionalInfo": {},
"placesTags": [],
"permanentlyClosed": false,
"temporarilyClosed": false,
"scrapedAt": "2026-05-25T08:40:00.000Z"
}

Local Development

Install dependencies:

$npm install

Run with CLI arguments:

$node src/main.js --searchQuery="VAS Global | Virtual Assistant Services for Businesses" --website="https://virtualassistantsolutions.com/"

Run through Apify CLI:

$apify run

Validate Apify schemas:

$apify validate-schema

Apify Deployment

The Dockerfile is stored at the project root:

Dockerfile

Apify auto-detects it because .actor/Dockerfile is not present.

Deploy/rebuild on Apify:

$apify push

If Chrome startup fails in Apify Cloud, set the environment variable below and rerun to print Chrome stderr:

DEBUG_BROWSER=1