# Google Maps Business Social Links Scraper (`googleapi/google-maps-business-social-links-scraper`) Actor

Source-backed public Google Maps business records with optional social-profile discovery from linked business websites.

- **URL**: https://apify.com/googleapi/google-maps-business-social-links-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 public business profiles on Google Maps and collect the social links associated with each business. The Actor can also check a limited number of public business websites linked from Maps for additional social profiles and public email links.

Website checks are disabled by default. The Actor does not follow social profile links or verify account ownership.

### Quick start

```json
{
  "query": "coffee shops in Austin",
  "maxItems": 10,
  "maxPages": 2,
  "includeDetails": true
}
```

### Input

#### Searches and results

| Input | Description |
| --- | --- |
| **query** | One Google Maps search phrase. **searchQuery** is an alias. |
| **queries** | Multiple search phrases. **searchStringsArray** and **searchKeywords** are aliases. |
| **startUrls** | Public Google Maps search or place URLs. These replace generated searches. **urls** is an alias. |
| **locationQuery** | Optional location appended to generated search phrases; ignored when Maps URLs are supplied. |
| **maxItems** | Global maximum number of business records (default 25). **maxCrawledPlacesPerSearch** is a compatibility alias. |
| **page / maxPages** | Starting result batch and maximum batches per source (defaults: 1 and 3). |
| **deduplicate** | Remove duplicates using public Maps identity (default true). |
| **minRating / minReviews** | Keep businesses meeting the visible rating or review-count threshold. |
| **categoryFilter** | Keep listings whose visible primary category contains this text. |
| **sortBy** | Sort by recommended Maps order, rating, review count, or business name. |

#### Optional details

| Input | Description |
| --- | --- |
| **includeDetails** | Open selected Google Maps profiles for additional public business details (default false). |
| **maxDetailItems** | Maximum number of profiles to open (default 5). |
| **includeMedia** | Include visible business photo URLs (default true). |
| **maxImages** | Maximum photo URLs per business (default 12). |
| **includeWebsiteEnrichment** | Check the linked business website for public social and email links (default false). |
| **maxWebsiteEnrichmentItems** | Maximum listed business websites to check (default 5). |

#### Page settings

| Input | Description |
| --- | --- |
| **renderJavaScript** | Render dynamic Maps pages in a standard browser (default true). **useBrowser** is a compatibility alias. |
| **proxyConfiguration** | This input is retained for compatibility, but the Actor uses direct connections; configuring a proxy here does not change the route. |
| **locale** | Language preference such as en or en-US. **language** is a compatibility alias. |

### Dataset

Each dataset row represents one business. It can contain the business name, category, Maps profile link, address, phone, website, public email addresses, ratings, opening hours, service attributes, business photos, and social links.

Social links are available as a platform-indexed **socialProfiles** object and as a **socialLinks** list with each link's platform and source. Sources distinguish links found on a Maps result, a Maps profile, or the linked business website. When website enrichment is enabled, public website details are grouped in **websiteProfile** to distinguish them from the Maps listing.

Only visible public information is included. Individual reviewer identities and review text are not collected. Social profile links are not opened, and their ownership is not verified.

```json
{
  "businessName": "Example Coffee",
  "canonicalUrl": "https://www.google.com/maps/place/Example+Coffee",
  "categoryName": "Coffee shop",
  "website": "https://example.com/",
  "socialProfiles": {
    "instagram": "https://www.instagram.com/examplecoffee"
  },
  "socialLinks": [
    {
      "platform": "instagram",
      "profileUrl": "https://www.instagram.com/examplecoffee",
      "source": "public_business_website"
    }
  ],
  "socialLinkCount": 1,
  "socialLinkSources": ["https://example.com/"]
}
```

The example is illustrative; fields depend on what Maps or the linked website publishes. Download the dataset from the Apify run page in JSON, CSV, Excel, or another supported format. Run totals and source outcomes are available in the run output.

### Limits and troubleshooting

Google Maps and business websites may not expose social links for every business. Website enrichment reads at most one public page per selected business and is limited by **maxWebsiteEnrichmentItems**. A run may return fewer listings than requested.

If a run is empty or partial, check the run log and summary. The Actor uses public pages and does not bypass CAPTCHAs or other access controls. The **proxyConfiguration** input does not enable proxy routing in this Actor.

### Privacy

The Actor sends search phrases, location, and supplied Maps URLs to Google Maps. When website enrichment is enabled, it also visits the public website linked from selected Maps profiles. Avoid submitting sensitive information. This independent Actor is not affiliated with Google.

# Actor input Schema

## `query` (type: `string`):

One public business search, for example coffee shops in Austin.

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

Compatibility alias for query.

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

One or more public business searches. maxItems is global across these searches.

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

Compatibility alias for queries.

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

Compatibility alias for queries.

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

Public HTTPS Google Maps search or place URLs. When supplied, these URLs take precedence over generated queries.

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

Compatibility alias for startUrls. Values must be public HTTPS Google Maps search or place URLs.

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

Text appended to each generated query. Ignored when startUrls or urls are supplied.

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

Global maximum of business records across all sources.

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

Compatibility alias for maxItems.

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

One-based starting batch for rendered Google Maps result feeds.

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

Maximum rendered result batches per source. Static HTML mode reads one response per source.

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

Deduplicate using the public place ID, CID, Knowledge Graph ID, or canonical Maps URL.

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

Keep businesses with a visible rating at or above this value. Businesses without a visible rating do not match.

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

Keep businesses with a visible review count at or above this value. Businesses without a visible count do not match.

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

Case-insensitive substring filter over the visible primary category.

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

Non-default sorts are applied across the collected result set.

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

Open a bounded number of public Google Maps profiles for additional business fields. A profile URL used as a start URL is already a detail page.

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

Maximum number of selected businesses whose public Maps profile is opened.

## `includeWebsiteEnrichment` (type: `boolean`):

Fetch one public page from the website linked by Maps to find business social links and mail links. DNS checks pin the request to a validated public address; redirects are revalidated. An 8-second timeout, size limit, and business-name match are applied.

## `maxWebsiteEnrichmentItems` (type: `integer`):

Maximum number of linked public business websites to read when website enrichment is enabled. At most one page is fetched per business.

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

Include photo URLs visible on result cards.

## `maxImages` (type: `integer`):

Upper bound for public business photo URLs in one record.

## `renderJavaScript` (type: `boolean`):

Use ordinary headless Chromium for the JavaScript-rendered result feed. No stealth or access-control bypass is used.

## `useBrowser` (type: `boolean`):

Compatibility alias for renderJavaScript.

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

Bounded pacing between public pages and result-feed scrolls.

## `maxRequestRetries` (type: `integer`):

Finite retries for network errors in static HTTP mode. Access challenges and HTTP blocks are not retried.

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

Maximum time for one Google Maps HTTP request or browser navigation.

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

Bounded wait after a public Google Maps page navigation.

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

Proxy settings are ignored for Apify input compatibility; this Actor uses direct connections and logs a warning when a non-empty configuration is supplied.

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

Short locale used for generated search pages, such as en or en-US.

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

Compatibility alias for locale.

## Actor input object example

```json
{
  "maxItems": 25,
  "page": 1,
  "maxPages": 3,
  "deduplicate": true,
  "sortBy": "recommended",
  "includeDetails": false,
  "maxDetailItems": 5,
  "includeWebsiteEnrichment": false,
  "maxWebsiteEnrichmentItems": 5,
  "includeMedia": true,
  "maxImages": 12,
  "renderJavaScript": true,
  "requestDelayMs": 750,
  "maxRequestRetries": 1,
  "requestTimeoutSecs": 45,
  "browserWaitMs": 1500,
  "locale": "en"
}
```

# Actor output Schema

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

No description

## `summary` (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-business-social-links-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-business-social-links-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-business-social-links-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,googleapi/google-maps-business-social-links-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/g5viAD6JLC6KP3hTe/builds/a8AFd5ZMSUpLd4N8j/openapi.json
