# Google Maps Similar Places Scraper (`googleapi/google-maps-similar-places-scraper`) Actor

Extracts public, source-labeled similar and related business recommendations from Google Maps place panels.

- **URL**: https://apify.com/googleapi/google-maps-similar-places-scraper.md
- **Developed by:** [Google API](https://apify.com/googleapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Find businesses that Google Maps labels as similar or related to a selected place. Each result is a visible recommendation from a Maps page, connected to the place where it appeared. The Actor reports Google’s recommendations and does not calculate its own similarity score.

### How to use

Provide a public Maps place URL in `startUrls`, or search for a source place with `queries`. A search URL is used to find a source place; it does not turn every search result into a recommendation.

```json
{
  "startUrls": [
    { "url": "https://www.google.com/maps/place/Example+Grand+Hotel/" }
  ],
  "maxItems": 25,
  "includeMedia": true,
  "includeDetails": false
}
```

To filter and sort recommendations:

```json
{
  "queries": ["coffee shops"],
  "locationQuery": "Brooklyn, New York",
  "minRating": 4.5,
  "minReviews": 100,
  "categoryFilter": "coffee",
  "sortBy": "rating_desc",
  "maxItems": 10
}
```

### Input

| Input | Description | Default |
|---|---|---:|
| `startUrls` | Public Google Maps place or search URLs. `urls` is an alias. | — |
| `queries` | Search phrases used to find source places. Aliases include `searchStringsArray`, `searchKeywords`, `searchQuery`, and `similarTo`. | — |
| `locationQuery` | Location appended to generated searches. | — |
| `page` / `maxPages` | Starting position and number of source URLs/searches to inspect (up to 25). These do not paginate a Maps results feed. | 1 / 3 |
| `maxItems` | Maximum recommendation records across the run. `maxCrawledPlacesPerSearch` is a compatibility alias. | 25 |
| `deduplicate` | Remove repeated recommendations by place identity or name. | `true` |
| `minRating` / `minReviews` | Optional filters using visible card ratings and review counts. | — |
| `categoryFilter` | Optional category text filter. | — |
| `sortBy` | Keep recommended order or sort by rating, review count, or name. | `recommended` |
| `includeMedia` | Include visible public Maps photo URLs. | `true` |
| `includeDetails` | Visit selected recommendation panels for additional public business details. | `false` |
| `maxDetailItems` | Maximum recommendation profiles to inspect across the run (up to 10). | 3, or the selected result limit if lower |
| `locale` | Language/locale for Maps. `language` is an alias. | `en` |
| `proxyConfiguration` | Optional Apify Proxy configuration for public Maps pages. | — |

The Input tab also includes bounded page timing and retry settings.

### Output

Each dataset row represents a recommended business and requires `title`, `recommendationLabel`, and `relatedTo`. The `relatedTo` object identifies the source place where Maps showed the recommendation.

When visible, a recommendation can include:

- **Recommendation context:** section label, order, comparison text, card summary, and distance from the source place.
- **Business details:** title, category, rating, review count, price, and Maps URL or identifiers.
- **Optional profile details:** address, phone, website, hours, services, attributes, aggregate review distribution, and public photos when `includeDetails` is enabled.
- **Source place:** the `relatedTo` profile, with its name and other public details when available.

Example dataset item:

```json
{
  "title": "Example Boutique Hotel",
  "recommendationLabel": "Similar hotels nearby",
  "recommendationPosition": 1,
  "categoryName": "Boutique hotel",
  "totalScore": 4.6,
  "reviewsCount": 321,
  "priceText": "$240 per night",
  "distanceText": "0.2 km away",
  "comparisonText": "Also a boutique hotel",
  "canonicalUrl": "https://www.google.com/maps/place/Example+Boutique+Hotel/",
  "relatedTo": {
    "title": "Example Grand Hotel",
    "canonicalUrl": "https://www.google.com/maps/place/Example+Grand+Hotel/"
  }
}
```

Optional values depend on what Maps displays. Ratings and review counts are aggregate business information; individual reviews are not collected. The Actor records public email and social links only when shown on the place panel.

The Output tab shows the available result fields. Run summary information is available with the run output in Apify.

### Limits and responsible use

Recommendations, labels, ordering, and profile details vary by place and region. Optional profile visits can increase run time. Google Maps may limit page access; the Actor does not sign in or bypass access checks.

Use public business information responsibly and follow applicable privacy requirements and Google Maps terms. This Actor is not affiliated with Google.

# Actor input Schema

## `startUrls` (type: `array`):

Public Maps place URLs are preferred. A Maps search URL is resolved to its first public place result.

## `urls` (type: `array`):

Compatibility alias for startUrls.

## `queries` (type: `array`):

Maps searches used to find one source business when no place URLs are supplied.

## `searchStringsArray` (type: `array`):

Compatibility alias for queries.

## `searchKeywords` (type: `array`):

Compatibility alias for queries.

## `searchQuery` (type: `string`):

Compatibility alias for one Maps place search.

## `similarTo` (type: `string`):

Compatibility alias for one source-place search. Similarity comes from Google's labeled recommendation section, not a locally generated score.

## `locationQuery` (type: `string`):

Optional location appended to generated place searches.

## `page` (type: `integer`):

One-based starting position in the ordered list of supplied URLs or generated queries.

## `maxItems` (type: `integer`):

Global maximum of valid similar-business records.

## `maxCrawledPlacesPerSearch` (type: `integer`):

Compatibility alias for maxItems.

## `maxPages` (type: `integer`):

Maximum number of ordered source place or search pages to visit, starting at page.

## `deduplicate` (type: `boolean`):

Deduplicate by public place identity, then related source business and business name.

## `minRating` (type: `number`):

Optional minimum rating shown on the recommendation card.

## `placeMinimumStars` (type: `number`):

Compatibility alias for minRating. If both are supplied, they must match.

## `minReviews` (type: `integer`):

Optional minimum review count shown on the recommendation card.

## `categoryFilter` (type: `string`):

Optional case-insensitive category filter when Maps exposes a recommendation category.

## `sortBy` (type: `string`):

Keep source recommendation order or sort by visible rating, review count, or name.

## `includeMedia` (type: `boolean`):

Include filtered public photo URLs when present in the panel.

## `includeDetails` (type: `boolean`):

Visit selected recommendation panels on the same public Maps page to add optional business profile fields. Disabled by default.

## `maxDetailItems` (type: `integer`):

Global maximum number of recommendation-panel attempts across all selected source places when includeDetails is enabled.

## `requestTimeoutSecs` (type: `integer`):

Maximum wait for each public Maps page navigation.

## `requestTimeoutMs` (type: `integer`):

Millisecond compatibility alias for requestTimeoutSecs.

## `browserWaitMs` (type: `integer`):

Bounded wait after Maps navigation for rendered public content.

## `requestDelayMs` (type: `integer`):

Bounded delay between source pages.

## `proxyConfiguration` (type: `object`):

Optional Apify Proxy configuration for Puppeteer page requests.

## `userAgent` (type: `string`):

Optional ordinary browser user agent; no stealth or fingerprint overrides.

## `locale` (type: `string`):

Short Maps locale such as en or en-US.

## `language` (type: `string`):

Compatibility alias for locale.

## Actor input object example

```json
{
  "page": 1,
  "maxPages": 3,
  "deduplicate": true,
  "sortBy": "recommended",
  "includeMedia": true,
  "includeDetails": false,
  "browserWaitMs": 2000,
  "requestDelayMs": 750
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

## `runHealth` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("googleapi/google-maps-similar-places-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("googleapi/google-maps-similar-places-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call googleapi/google-maps-similar-places-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,googleapi/google-maps-similar-places-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/VVfuQcU8BzZsh7OJo/builds/m4X853EhgpKZQknQV/openapi.json
