SFOLN

Catalogue / Local & maps

Google Business Profile Scraper

sfoln/google-business-profile · Lead generation, Travel, SEO tools On request

Get the full Google Business Profile of any business by name and city, place ID or CID: categories, address, phone, website, rating and its distribution, hours, attributes, review topics, photo count and claimed status. $19 per 1,000 profiles.

About

What it does

Google Business Profile Scraper looks up the complete Google Business Profile of any business — by name and city, Google place ID or CID — and returns one normalized record with categories, description, full address, phone, website, rating and rating distribution, opening hours, attributes (accessibility, payments, service options…), review topics, photo count, claimed status, booking link and owner contributor URL. Built for listing audits, local-SEO tools, CRM enrichment and AI agents that need the facts Google shows on a business panel.

Price

Price per delivered record

EventPricePer 1,000Charged for
Google Business Profile
google-business-profile
$0.019$19 / 1,000Charged once per business for which a full Google Business Profile was returned (or a billed not-found lookup).

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~google-business-profile/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"businesses":["cid:2946633002421908862"],"location":"New York,New York,United States"}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/google-business-profile"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~google-business-profile/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Get the Google Business Profile of Katz's Delicatessen in New York: opening hours, rating, phone, website and whether the listing is claimed.

Input

Input fields

List businesses by name (best with city), Google place ID or CID. Each line produces one dataset record.

FieldTypeDefaultMeaning
businesses *arrayrequiredBusinesses
One per line: a business name ("Katz's Delicatessen New York"), a place ID ("ChIJ…" or "place_id:…"), or a CID ("cid:2946633002421908862" or the bare number of 15+ digits, always as a string: JSON numbers that large lose digits). Override the location per line with "name | location". Accounts on the Apify free plan can process up to 10 businesses per run.
locationstring—Location
Where to look up business names: a DataForSEO location name ("New York,New York,United States") or numeric location code (2840 = United States). For place IDs / CIDs it only sets the regional context.
languageCodestring"en"Language code
Language of the profile data (ISO code such as en, de, es).
maxItemsinteger1000Max businesses
Safety cap on the number of lookups in this run. Range 1–10000.
concurrencyinteger4Concurrency
How many lookups run in parallel. Range 1–8.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified provider item to each record (larger output).
Example input
{
  "businesses": [
    "cid:2946633002421908862"
  ],
  "location": "New York,New York,United States"
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstring | objectInput
The lookup string as given.
lookupKindstringLookup kind
cid | place_id | keyword
lookupKeywordstringLookup keyword
Keyword sent upstream (cid:…, place_id:… or the business name).
locationstringLocation
Location context used for the lookup.
foundbooleanFound
Whether a profile was found.
titlestring | nullName
Business / place name.
categorystring | nullCategory
Primary Google category.
additionalCategoriesarrayAdditional categories
Secondary Google categories.
categoryIdsarrayCategory ids
Google category ids, e.g. pizza_restaurant.
addressstring | nullAddress
Full formatted address.
addressInfoobject | nullAddress parts
street, borough, city, zip, region, countryCode.
phonestring | nullPhone
Phone number as shown on Google Maps.
urlstring | nullWebsite
Website URL.
domainstring | nullDomain
Website domain without www.
placeIdstring | nullPlace ID
Google place_id (ChIJ…).
cidstring | nullCID
Google customer id (maps.google.com/?cid=…).
featureIdstring | nullFeature ID
Google feature id.
latitudenumber | nullLatitude
WGS84 latitude.
longitudenumber | nullLongitude
WGS84 longitude.
ratingobject | nullRating
{ value, votesCount }
ratingDistributionobject | nullRating distribution
Number of reviews per star (1–5).
priceLevelstring | nullPrice level
inexpensive | moderate | expensive | very_expensive
isClaimedboolean | nullClaimed
Whether the owner has verified the listing.
currentStatusstring | nullCurrent status
open | closed | temporarily_closed | closed_forever
openNowboolean | nullOpen now
True when open at crawl time.
workHoursSummarystring | nullOpening hours
Compact weekly hours, e.g. "Mon 09:00-17:00; …; Sun closed".
workHoursobject | nullOpening hours (structured)
Day → list of "HH:MM-HH:MM" ranges; null = closed.
mainImagestring | nullMain image
URL of the main photo.
totalPhotosinteger | nullPhotos
Number of photos on the listing.
snippetstring | nullSnippet
Short text shown in the results.
googleMapsUrlstring | nullGoogle Maps URL
Link to the place on Google Maps.
descriptionstring | nullDescription
Business description from the listing.
originalTitlestring | nullOriginal name
Untranslated business name.
logostring | nullLogo
Logo image URL.
hotelRatinginteger | nullHotel stars
Hotel class 1–5 (hotels only).
contactUrlstring | nullContact URL
Contact page link from the listing.
contributorUrlstring | nullContributor URL
Google Maps contributor profile of the owner.
bookOnlineUrlstring | nullBook online URL
Booking link shown on the listing.
attributesarrayAttributes
Available attributes, e.g. has_delivery, accepts_reservations, has_wheelchair_accessible_entrance.
unavailableAttributesarrayUnavailable attributes
Attributes explicitly marked as not available.
placeTopicsobject | nullReview topics
Keywords mentioned in reviews → number of mentions.
hasPopularTimesbooleanPopular times available
Whether Google shows a popular-times chart for this place.
localBusinessLinksarrayBusiness links
Reservation / order / menu links: { type, title, url }.
peopleAlsoSearcharrayPeople also search
Names of related businesses Google suggests.
isDirectoryItemboolean | nullDirectory item
Whether the place is a directory (e.g. a mall) containing other businesses.
servicesarrayServices
Services listed on the profile { category, title, price }.
statusstringStatus
ok | not_found | error | skipped_budget | skipped_free_plan e.g. "ok"
chargedbooleanCharged
Whether this record incurred a pay-per-event charge.
chargedEventstringCharged event
google-business-profile when charged.
warningsarrayWarnings
Non-fatal notes, when any.
errorobjectError
{code, message, provider?} when status is not ok.
sourcestringSource
Upstream data source.
fetchedAtstringFetched at
ISO timestamp.
Example record
Example record
{
  "input": {
    "lookup": "cid:2946633002421908862"
  },
  "lookupKind": "cid",
  "lookupKeyword": "cid:2946633002421908862",
  "location": "New York,New York,United States",
  "found": true,
  "title": "RustyBrick, Inc.",
  "category": "Software company",
  "additionalCategories": [
    "Internet marketing service",
    "Website designer"
  ],
  "categoryIds": [
    "software_company",
    "internet_marketing_service",
    "website_designer"
  ],
  "description": "Since 1994, RustyBrick has been creating Web and mobile software ...",
  "address": "250 W Nyack Rd #200, West Nyack, NY 10994",
  "addressInfo": {
    "street": "250 W Nyack Rd #200",
    "borough": null,
    "city": "West Nyack",
    "zip": "10994",
    "region": "New York",
    "countryCode": "US"
  },
  "phone": "+1877-467-8789",
  "url": "https://www.rustybrick.com/",
  "domain": "rustybrick.com",
  "placeId": "ChIJP0warDDowokRfvXMkBqL5Cg",
  "cid": "2946633002421908862",
  "featureId": "0x89c2e830ac1a4c3f:0x28e48b1a90ccf57e",
  "latitude": 41.097343,
  "longitude": -73.9934641,
  "rating": {
    "value": 4.7,
    "votesCount": 49
  },
  "ratingDistribution": {
    "1": 2,
    "2": 0,
    "3": 2,
    "4": 4,
    "5": 41
  },
  "priceLevel": null,
  "isClaimed": true,
  "currentStatus": "open",
  "openNow": true,
  "workHoursSummary": "Mon 08:30-18:00; Tue 08:30-18:00; Wed 08:30-18:00; Thu 08:30-18:00; Fri 08:30-14:00; Sat closed; Sun closed",
  "attributes": [
    "is_small_business",
    "offers_online_appointments",
    "has_wheelchair_accessible_entrance",
    "requires_appointments"
  ],
  "placeTopics": {
    "SEO": 4,
    "news": 3
  },
  "mainImage": "https://lh5.googleusercontent.com/p/...",
  "logo": "https://lh4.googleusercontent.com/...",
  "totalPhotos": 35,
  "contributorUrl": "https://maps.google.com/maps/contrib/104876075931666699163",
  "bookOnlineUrl": null,
  "services": [
    {
      "category": "Internet Marketing Service",
      "title": "Citation Building",
      "price": "$5.00"
    }
  ],
  "googleMapsUrl": "https://www.google.com/maps?cid=2946633002421908862",
  "status": "ok",
  "charged": true,
  "chargedEvent": "google-business-profile",
  "source": "dataforseo",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents