# Google Local Business Scraper (`googleapi/google-local-business-scraper`) Actor

Extracts source-backed business records from Google Search local results and visible Google Maps business profiles.

- **URL**: https://apify.com/googleapi/google-local-business-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

Search public Google results for local businesses and collect the details visible on their result cards. Optionally open a limited number of Google Maps profiles to add contact information, hours, and business attributes.

The dataset contains one record per unique business. Review information is aggregate only; the Actor does not collect individual reviewer identities or review text.

### Quick start

Search for a type of business in a location:

```json
{
  "query": "restaurants",
  "location": "Seattle, WA",
  "gl": "us",
  "hl": "en",
  "page": 1,
  "maxPages": 2,
  "maxItems": 10
}
```

You can also provide public Google Search or Google Maps result and place URLs with **startUrls**. Supplied URLs take precedence over the generated query and location.

### Input

| Input | Description |
| --- | --- |
| **query** | Business name, type, or local-search phrase. Defaults to restaurants. |
| **location** | City, region, or country added to the query. |
| **startUrls** | Up to 10 public Google Search or Maps result and place URLs. |
| **gl / hl** | Google country and language settings (defaults: US and English). |
| **page** | Starting results page (default 1; maximum 50). |
| **maxPages** | Maximum pages per source URL (default 3; maximum 20). |
| **maxItems** | Maximum unique business records across the run (default 10; maximum 50). |
| **renderJavaScript** | Render public result cards in a browser (default true). |
| **includeDetails** | Open some business profiles for additional contact, hours, and About details (default false). Requires renderJavaScript. |
| **maxDetailItems** | Maximum number of profiles to open across the run (default 3; set to 0 to disable). |
| **proxyConfiguration** | Optional Apify proxy settings for rendered pages. Use groups available to your account. |

### Output

Each dataset row represents one business and may include:

- **Business identity:** name, place ID, category, and Google Maps link.
- **Contact and location:** address, phone, website, coordinates, and public ordering or reservation links.
- **Ratings and reviews:** displayed rating, review totals, rating distribution, and Google's aggregate review topics or summary.
- **Hours and status:** current hours, weekly opening hours, and explicitly displayed open or closed status.
- **Business details:** service options, accessibility, amenities, menu details, popular times, and other attributes shown on the profile.
- **Photos:** public business images and photo categories shown on Google.

Only information visible on the Google page is included. Some values may be absent when Google does not display them. A photo count such as “620+ Photos” is preserved as a lower bound, not reported as an exact count. Missing business attributes are not treated as false.

```json
{
  "businessName": "Harbor Table",
  "title": "Harbor Table",
  "placeId": "ChIJexamplePlaceId",
  "categoryName": "Seafood restaurant",
  "categories": ["Seafood restaurant"],
  "rating": 4.6,
  "reviewCount": 742,
  "address": "10 Example Street, Seattle, WA 98101, United States",
  "phone": "+1 206-555-0100",
  "website": "https://harbor-table.example/",
  "priceRange": "$25–50",
  "hoursStatus": "Open now",
  "businessStatus": "Open",
  "isOpen": true,
  "mapsUrl": "https://www.google.com/maps/place/Harbor+Table/"
}
```

Download the dataset from the Apify run page in JSON, CSV, Excel, or another supported format. Run totals and access outcomes are shown in the run output.

### Limits and troubleshooting

Google's results and available business details can vary by search phrase, location, and time. A run may return fewer records than the requested limit. If no businesses are saved, check the run log and summary; Google may have shown an access boundary or no matching results.

The Actor uses public Google pages. It does not sign in or bypass CAPTCHAs or other access controls. An optional proxy does not guarantee that Google will show more results.

### Privacy

The Actor sends the search phrase, location, and selected locale to Google. If you provide start URLs, it visits those public Google pages. Avoid submitting sensitive information. This Actor is independent and is not affiliated with Google.

# Changelog

This Actor's version history is a separate document: https://apify.com/googleapi/google-local-business-scraper/changelog.md

# Actor input Schema

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

Business name, type, or local-search phrase. Defaults to restaurants when omitted; custom start URLs take precedence.

## `location` (type: `string`):

City, region, or country to append to the query; this is search input and is not copied into business records.

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

Optional public Google Search, Maps results, or Maps place URLs. When provided, these URLs take precedence over generated query/location searches.

## `gl` (type: `string`):

Two-letter country code used by Google for the generated search.

## `hl` (type: `string`):

Google interface language code used for the generated search and business profile.

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

One-based starting page. Google result offsets are preserved and advanced for subsequent pages.

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

Maximum consecutive result pages per start URL. Pagination stops early when Google returns no new businesses.

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

Global maximum number of unique business records across all pages and result URLs.

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

Render public result cards in normal Chromium. Optional profile requests are controlled separately by includeDetails.

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

Open a bounded number of public Google Maps profiles for full contact, hours and About details. Requires renderJavaScript=true. Disabled by default.

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

Global profile request budget across all result pages. Zero disables optional profile requests.

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

Timeout for each direct request and rendered page, in seconds.

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

Additional wait after Google renders a results or business-profile view, in milliseconds.

## `maxRetries` (type: `integer`):

Maximum retry count for the bounded direct HTML request. Browser access boundaries are not bypassed.

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

Optional Apify Proxy configuration for rendered Chromium requests. Residential proxies are recommended for Google. Requires renderJavaScript=true.

## Actor input object example

```json
{
  "query": "restaurants",
  "location": "Seattle, WA",
  "gl": "us",
  "hl": "en",
  "page": 1,
  "maxPages": 3,
  "maxItems": 10,
  "renderJavaScript": true,
  "includeDetails": false,
  "maxDetailItems": 3,
  "requestTimeoutSecs": 30,
  "browserWaitMs": 2500,
  "maxRetries": 1
}
```

# Actor output Schema

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

Source-faithful business records only; operational errors and empty results are kept out of the dataset.

## `output` (type: `string`):

Record counts, pagination totals, enrichment counts, and error tallies.

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

Whether public business data was available and whether any bounded pages failed.

# 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 = {
    "query": "restaurants",
    "location": "Seattle, WA",
    "gl": "us",
    "hl": "en",
    "maxItems": 10,
    "renderJavaScript": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("googleapi/google-local-business-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 = {
    "query": "restaurants",
    "location": "Seattle, WA",
    "gl": "us",
    "hl": "en",
    "maxItems": 10,
    "renderJavaScript": True,
}

# Run the Actor and wait for it to finish
run = client.actor("googleapi/google-local-business-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 '{
  "query": "restaurants",
  "location": "Seattle, WA",
  "gl": "us",
  "hl": "en",
  "maxItems": 10,
  "renderJavaScript": true
}' |
apify call googleapi/google-local-business-scraper --silent --output-dataset

```

## MCP server setup

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