Google Maps Related Place & Competitor Finder
Pricing
from $0.49 / 1,000 results
Google Maps Related Place & Competitor Finder
Find the related and 'people also search for' places Google Maps shows on a business, hotel, or landmark page. Get each related place's name, rating, review count, category, coordinates, and image, linked back to the place you searched.
Pricing
from $0.49 / 1,000 results
Rating
0.0
(0)
Developer
Dataspryva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share
Find the places Google Maps treats as related to a business, hotel, or landmark — and keep going when Google shows no carousel by discovering same-category places around the same pin. Enter many URLs, Place IDs, or place names in one run, filter and sort the results, and get an explicit relationMode on every row so you always know whether Google recommended the place or it was found nearby.
What it does
- Two entry modes:
byPlaceaccepts Google Maps URLs, canonicalChIJPlace IDs, and legacy0x…:0x…feature IDs;byQueryaccepts business names plus an optional city or area. Batch both. - Carousel first, nearby fallback second: reads Google's related-place carousel when it exists, then fills short results with places from the source's own category around the same coordinates.
- Explicit provenance: every row says
googleCarouselorsameCategoryNearby; fallback rows are never presented as Google recommendations. - Filters and order: minimum rating, minimum reviews, maximum straight-line distance, category text, and sort by recommended order, rating, reviews, or distance.
- Identity, contacts, and distance: canonical Place ID, legacy feature ID, CID, KG MID, address, website, phone, plus code, photo count, coordinates, image, and computed
distanceMeters. - Empty fields are omitted rather than sent as
nullor guessed.
Services
| Service | What it returns | Used by |
|---|---|---|
| Google Maps place record | Source name, canonical and legacy IDs, category, address, rating, reviews, website, phone, coordinates | both modes |
| Google Maps related carousel | Up to the cards Google publishes for that place, with names, ratings, reviews, coordinates, images, and visible card text | byPlace, byQuery |
| Google Maps same-category search | Ranked places in the source category around the source coordinates, 20 per page | fallback in both modes |
| Google Maps place details | Canonical Place ID, address, contacts, categories, plus code, photo count, image for one returned place | optional enrichment |
How it works
- Resolve the source. A place URL provides its feature ID and coordinates directly. A canonical
ChIJID is resolved through Google's public place page in one request. A name query is resolved through Google's map search, preferring the focused result and requiring a name match otherwise. - Read the source record and carousel. The same place response carries the source business data and, when Google exposes one, the related-place carousel.
- Decide whether to fall back. In
automode the fallback runs when the carousel has fewer usable rows thanminSimilarand the carousel cannot already fillmaxItems.carouselnever falls back;sameCategoryskips the carousel entirely. - Search the same category nearby. The fallback uses the source's first category (or
categoryOverride) anchored at the source coordinates, page by page, until enough places pass the filters, the result window is exhausted, ormaxItemsis reached. Sorting by rating, reviews, or distance considers the full window before the cap is applied. - Clean the result set. The source place is removed, filters are applied, identities are deduplicated, and rows are sorted.
- Optionally enrich.
includeDetails=truelooks up each emitted place's own page for its canonical Place ID, contacts, category, plus code, photo count, and image. - Push immediately. Records are emitted as they are finalised, with the global
maxItemscap. Unresolved inputs are skipped and reported without failing the whole run.
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | byPlace | byPlace accepts URLs or IDs; byQuery accepts place names |
placeUrls | array | – | Google Maps URLs, ChIJ… IDs, or 0x…:0x… feature IDs (mode=byPlace) |
searchQueries | array | – | Business, hotel, or landmark names (mode=byQuery) |
location | string | – | City or area appended to every name (mode=byQuery) |
maxItems | integer | 100 | Global cap on returned rows (1–500) |
similaritySource | string | auto | auto, carousel, or sameCategory |
minSimilar | integer | 5 | In auto, fall back when the carousel has fewer usable rows than this and cannot fill maxItems (0–20) |
categoryOverride | string | – | Category used by the fallback instead of the source's own |
minRating | number | – | Drop places below this rating (0–5) |
minReviews | integer | – | Drop places below this review count |
maxDistanceKm | number | – | Keep places within this straight-line distance (0.1–50 km) |
categoryFilter | string | – | Keep places whose category list contains this text |
sortBy | string | recommended | recommended, rating, reviews, or distance |
deduplicate | boolean | true | Keep one row per place identity |
includeDetails | boolean | true | Look up each returned place's own page for extra fields |
includeMedia | boolean | true | Include image URLs when Google publishes them |
language | string | en | Maps language: en, es, fr, de, it, pt, ja, ko, zh, ar, ru |
Example: related hotels for one place URL
{"mode": "byPlace","placeUrls": ["https://www.google.com/maps/place/The+Ritz+London/@51.5070782,-0.1416273,17z/data=!3m1!4b1!4m6!3m5!1s0x48760529d30fc857:0x596135811e044014!8m2!3d51.5070782!4d-0.1416273!16zL20vMDQ3enJ2?hl=en"],"maxItems": 20,"similaritySource": "auto","minSimilar": 5}
Example: competitors for a restaurant with no carousel
{"mode": "byPlace","placeUrls": ["ChIJ8Q2WSpJZwokRQz-bYYgEskM"],"similaritySource": "sameCategory","maxItems": 50,"includeDetails": true}
Example: several names in one city, filtered and sorted
{"mode": "byQuery","searchQueries": ["Joe's Pizza", "Peter Luger Steak House"],"location": "New York","minRating": 4.2,"minReviews": 500,"maxDistanceKm": 5,"sortBy": "rating","maxItems": 30}
Example: carousel only, no fallback
{"mode": "byPlace","placeUrls": ["ChIJ4fRwZb25yhQRpHwVijb3LeU"],"similaritySource": "carousel","includeMedia": false,"maxItems": 10}
Output
Every row is one related place:
relationMode—googleCarouselorsameCategoryNearbyrelationQuery— category used by the fallback, when applicablerelatedSectionType— Google's own section label when the response exposes onerank— 1-based position in the returned ordername— related place nameplaceId— canonicalChIJ…Place ID, only when Google publishes onefeatureId— legacy0x…:0x…feature ID, never used in place ofplaceIdcid,kgmid— other observed identitiesgoogleMapsUrl— link to the related placecategoryName,categories— primary category and full observed listtotalScore,reviewsCount— rating and review countaddress,website,phone— contacts when Google publishes themplusCode,photoCount— detail fields when enrichment is enabledprice— visible carousel price string, kept exactly as showndescription— visible carousel comparison textdistance— visible carousel distance badgedistanceMeters— straight-line distance from the source coordinates, in metreslatitude,longitude— related place coordinatesimage— image URL at a larger size, when availablesourceBusinessName,sourcePlaceId,sourceFeatureId,sourcePlaceUrl— the place you searchedsourceCategory,sourceAddress,sourceLatitude,sourceLongitude— source contextsourceUrl— alias ofsourcePlaceUrlfor older integrationsrecordType— alwayssimilarPlacescrapedAt— ISO timestamp
Use cases
- Local SEO and competitive analysis — compare the places Google associates with a client's listing, or the competitors around its pin.
- Market and category research — expand a handful of seed businesses into a wider set of nearby places in the same category.
- Lead and partner discovery — collect contacts, websites, and ratings for businesses around a target area.
- Data enrichment — attach canonical Place IDs, categories, and coordinates to an existing list of businesses.
- Recommendation feeds — build a "places like this" list from Google's own related signal plus a transparent fallback.
Usage cost
- No Google API key, no billing account, and no paid API calls are required.
- The actor runs in 1024 MB and needs no browser.
- A small run with
includeDetails=falsereturns in seconds.includeDetails=trueadds one place lookup per returned row, so largemaxItemsvalues take longer. maxItemsis a hard cap: the actor stops when it reaches it, when Google's result window is exhausted, or when every input is resolved. Filters are counted before the cap, so they do not shorten the result set while eligible places remain.sortBy=rating,reviews, ordistancereads the full nearby window before selecting rows;recommendedstops as soon as the cap is met.
FAQ
Why did carousel mode return no rows? Google does not show a related-place carousel for many signed-out place pages. carousel is truthful about that; use auto or sameCategory when you need rows.
Are fallback rows Google recommendations? No. They are places in the source's category near the source coordinates. relationMode says sameCategoryNearby, and relationQuery shows the category used.
How many carousel results can I get? Google typically publishes 3–5 cards, and sometimes none. That is the whole carousel; no setting can make Google show more.
How many same-category places are available? Google returns 20 per page and the observed window is around 104 unique places for a dense query. Sparse categories or small towns exhaust sooner.
Why is address or website missing from a carousel row? The carousel does not carry contacts. Turn on includeDetails to look up each place's own page; if Google still does not publish the field, it is omitted.
Why does distanceMeters differ from the distance badge on the card? The badge is Google's own display string. distanceMeters is a straight-line calculation from the source coordinates to the related place coordinates.
Why are prices in an unexpected currency? The carousel price is Google's localized display string for the request location. It is kept raw, not converted or normalised.
Can I use a Place ID instead of a URL? Yes. Canonical ChIJ… IDs work in placeUrls, and legacy 0x…:0x… feature IDs are accepted too.
Do I need a proxy or cookies? No. The actor reads public place data and selects a working connection automatically.
What happens if one input is invalid? That input is skipped and reported in the status message; the other inputs still run. If no input resolves, the run fails with a clear message instead of returning an empty success.
Notes
price,description,distance, andrelatedSectionTypeare emitted only when Google's response actually carries them.- A canonical
ChIJ…value always goes toplaceId; a legacy0x…:0x…value always goes tofeatureId. They are never relabelled. sourceUrlremains an alias ofsourcePlaceUrlso older integrations keep working.- Duplicate identities are removed by default: canonical Place ID first, then feature ID, then name plus rounded coordinates.
- In
automode, carousel rows and fallback rows can both appear;relationModeseparates them.
Limitations
- The carousel is conditional. Most signed-out place pages show no related carousel at all. The actor cannot create one; it uses the honest same-category fallback instead.
- Fallback relevance depends on category. If the source category is broad or wrong, nearby results can be broad too. Use
categoryOverrideorcategoryFilterto narrow them. - The nearby window is finite. Google stops returning new places after roughly 100 unique results for a dense query, and sooner for sparse categories.
- No similarity score. Google does not publish one, and the actor does not invent one.
- Detail fields are optional and conditional.
includeDetailsimproves coverage, but a field Google does not publish is omitted rather than fabricated.