# Local Business Data API (`openweb-ninja/local-business-data`) Actor

Fast and reliable local business data API - get comprehensive business information including address, website, phone, email, rating & reviews, and 40+ data points from Google Maps in real-time.

- **URL**: https://apify.com/openweb-ninja/local-business-data.md
- **Developed by:** [OpenWeb Ninja](https://apify.com/openweb-ninja) (community)
- **Categories:** Lead generation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 businesses

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Local Business Data API

Local Business Data is a fast and reliable API for finding businesses and points of interest and retrieving their full profiles from Google Maps and the web in real-time. It returns 40+ data points per business as structured JSON via REST.

What it returns: business search results (by query, area, bounding box, radius, or nearby), full business details, reviews and review details, photos, posts, plus reverse geocoding and autocomplete.

This actor runs the same Local Business Data API that developers use on RapidAPI and OpenWeb Ninja, with the same endpoints, parameters and output.

### What you can do with it

- Build B2B lead lists: businesses by category and area with phone, website, emails and socials
- Enrich CRM records with Google Maps business details
- Collect reviews and ratings for reputation and sentiment analysis
- Map competitors and points of interest for local SEO and market research
- Power store locators, directories and location-based apps

### Endpoints

Pick the endpoint in the **Endpoint** field. Each run makes one call to that endpoint and writes its results to the dataset.

#### Search

`GET /search`

Search local businesses on Google Maps with an option to pull emails and social profile links  from their website (see the `extract_emails_and_contacts` parameter below).

| Parameter | Required | Description |
|---|---|---|
| `query` | Yes | Search query / keyword **Examples:** `Plumbers near New-York, USA` `Bars in 94102, USA` |
| `limit` | No | Maximum number of businesses to return. Default: `20`. |
| `lat` | No | Latitude of the coordinates point from which the query is applied - recommended to use so that results are biased towards this location. Defaults to some central location in the region (see the region parameter). Default: `37.359428`. |
| `lng` | No | Longitude of the coordinates point from which the query is applied - recommended to use so that results are biased towards this location. Defaults to some central location in the region (see the region parameter). Default: `-121.925337`. |
| `zoom` | No | Zoom level on which to make the search (the viewport is determined by lat, lng and zoom). Default: `13`. |
| `language` | No | Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes*. Default: `en`. |
| `region` | No | Query Google Maps from a particular region or country. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `subtypes` | No | Find businesses with specific subtypes, specified as a comma separated list of types (business categories). For the complete list of types, see *https://daltonluka.com/blog/google-my-business-categories*. |
| `verified` | No | Only return verified businesses |
| `business_status` | No | Find businesses with specific status (comma separated). `OPEN, CLOSED_TEMPORARILY, CLOSED` **Examples:** `OPEN` `CLOSED_TEMPORARILY,CLOSED` |
| `extract_emails_and_contacts` | No | Extract emails, contacts and social profiles for each business in the response. Default: `false`. |
| `fields` | No | A comma separated list of business fields to include in the response (field projection). By default all fields are returned. |

#### Bulk Search

`POST /search` (parameters go in the JSON body)

Search multiple queries in a single request (up to 20 queries). Returns a flat, normalized list of businesses aggregated across all queries.

| Parameter | Required | Description |
|---|---|---|
| `queries` | Yes | List of search queries to run in a single request (each treated like a normal Search query). Up to 20 queries per request. |
| `language` | No | Set the language of the results (ISO 639-1 code). Default: `en`. |
| `region` | No | Query Google Maps from a particular region / country (ISO 3166-1 alpha-2 code). Default: `us`. |
| `coordinates` | No | Bias the search toward a specific location, as a "lat,lng" string. |
| `limit` | No | Maximum number of businesses to return per query. Allowed values: 1-500. Default: `20`. |
| `offset` | No | Number of businesses to skip per query, for pagination. Allowed values: 0-500. Default: `0`. |
| `zoom` | No | Map zoom level used for each query (higher = tighter area). Allowed values: 0-22. Default: `13`. |
| `dedup` | No | If true, deduplicate overlapping businesses across queries. Default: `true`. |

#### Area Search (Zoom Level)

`GET /search-in-area`

Search businesses in a specific geographic area defined by a center coordinate point and zoom level. To see it in action, make a query on Google Maps, wait for the results to show, move the map or change the zoom and click "Search this area" at the top.

| Parameter | Required | Description |
|---|---|---|
| `query` | Yes | Search query / keyword |
| `lat` | Yes | Latitude of the center coordinate point of the area to search in. Default: `37.359428`. |
| `lng` | Yes | Longitude of the center coordinate point of the area to search in. Default: `-121.925337`. |
| `zoom` | Yes | Zoom level on which to make the search (the search area / viewport is determined by lat, lng and zoom on a 1000x1000 screen) |
| `limit` | No | Maximum number of businesses to return. Default: `20`. |
| `language` | No | Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes*. Default: `en`. |
| `region` | No | Query Google Maps from a particular region or country. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `subtypes` | No | Find businesses with specific subtypes, specified as a comma separated list of types (business categories). For the complete list of types, see *https://daltonluka.com/blog/google-my-business-categories*. |
| `extract_emails_and_contacts` | No | Extract emails, contacts and social profiles for each business in the response. Default: `false`. |
| `fields` | No | A comma separated list of business fields to include in the response (field projection). By default all fields are returned. |

#### Area Search (Bounding Box)

`GET /area-search-by-bounding-box`

Search businesses within a rectangular area defined by its bottom-left (south-west) and top-right (north-east) corner coordinates.

| Parameter | Required | Description |
|---|---|---|
| `query` | Yes | Search query / keyword |
| `bottom_left` | Yes | The bottom-left (south-west) corner of the bounding box to search in, as a "lat,lng" string. |
| `top_right` | Yes | The top-right (north-east) corner of the bounding box to search in, as a "lat,lng" string. |
| `limit` | No | Maximum number of businesses to return. Default: `20`. |
| `language` | No | Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes*. Default: `en`. |
| `region` | No | Query Google Maps from a particular region or country. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `subtypes` | No | Find businesses with specific subtypes, specified as a comma separated list of types (business categories). For the complete list of types, see *https://daltonluka.com/blog/google-my-business-categories*. |
| `extract_emails_and_contacts` | No | Extract emails, contacts and social profiles for each business in the response. Default: `false`. |
| `fields` | No | A comma separated list of business fields to include in the response (field projection). By default all fields are returned. |

#### Area Search (Radius)

`GET /area-search-by-radius`

Search businesses within a circular area defined by a center coordinate point (lat, lng) and a radius in meters.

| Parameter | Required | Description |
|---|---|---|
| `query` | Yes | Search query / keyword |
| `lat` | Yes | Latitude of the center coordinate point of the area to search in. Default: `37.359428`. |
| `lng` | Yes | Longitude of the center coordinate point of the area to search in. Default: `-121.925337`. |
| `radius` | Yes | The radius (in meters) of the circular search area around the center coordinate point (lat, lng). Allowed values: 1-50000. |
| `limit` | No | Maximum number of businesses to return. Default: `20`. |
| `language` | No | Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes*. Default: `en`. |
| `region` | No | Query Google Maps from a particular region or country. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `subtypes` | No | Find businesses with specific subtypes, specified as a comma separated list of types (business categories). For the complete list of types, see *https://daltonluka.com/blog/google-my-business-categories*. |
| `extract_emails_and_contacts` | No | Extract emails, contacts and social profiles for each business in the response. Default: `false`. |
| `fields` | No | A comma separated list of business fields to include in the response (field projection). By default all fields are returned. |

#### Search Nearby

`GET /search-nearby`

Search businesses near by specific geographic coordinates. To see it in action, right click on a specific point in the map on Google Maps and select "Search nearby", enter a query and search.

| Parameter | Required | Description |
|---|---|---|
| `query` | Yes | Search query / keyword **Examples:** `Bars and pubs` `Plumbers` |
| `lat` | Yes | Latitude of the geographic coordinates to search near by. Default: `37.359428`. |
| `lng` | Yes | Longitude of the geographic coordinates to search near by. Default: `-121.925337`. |
| `limit` | No | Maximum number of businesses to return. Default: `20`. |
| `language` | No | Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes*. Default: `en`. |
| `region` | No | Query Google Maps from a particular region or country. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `subtypes` | No | Find businesses with specific subtypes, specified as a comma separated list of types (business categories). For the complete list of types, see *https://daltonluka.com/blog/google-my-business-categories*. |
| `extract_emails_and_contacts` | No | Extract emails, contacts and social profiles for each business in the response. Default: `false`. |
| `fields` | No | A comma separated list of business fields to include in the response (field projection). By default all fields are returned. |

#### Business Details

`GET /business-details`

Get full business details including emails and social contacts. Supports batching of up to 20 Business Ids.

| Parameter | Required | Description |
|---|---|---|
| `business_id` | Yes | Unique Business Id. Accepts `google_id` / `business_id` or `place_id`. |
| `extract_emails_and_contacts` | No | Whether to extract emails, contacts and social profiles for the business. Default: `true`. |
| `extract_share_link` | No | Whether to extract place's share link for the business. In case true, businesses will be enriched with a share_link field containing a shortened Google URL for sharing *(e.g. https://goo.gl/maps/oxndE8SVaNU5CV6p6)*. Default: `false`. |
| `fields` | No | A comma separated list of business fields to include in the response (field projection). By default all fields are returned. |
| `region` | No | Query Google Maps from a particular region or country. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `language` | No | Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes*. Default: `eu`. |
| `coordinates` | No | Geographic coordinates of the location from which the query is applied - recommended to use so that results are biased towards this location. Defaults to some central location in the region (see the region parameter). |

#### Business Details Plus

`GET /business-details-plus`

Get full business details PLUS additional AI-powered enrichments — currently includes `keywords_mentioned_in_reviews`, an array of the keywords most frequently surfaced in the business' Google Maps reviews together with how many reviews mention each.

| Parameter | Required | Description |
|---|---|---|
| `business_id` | Yes | Unique Business Id. Accepts `google_id` / `business_id` or `place_id`. |
| `extract_emails_and_contacts` | No | Whether to extract emails, contacts and social profiles for the business. Default: `true`. |
| `extract_share_link` | No | Whether to extract place's share link for the business. In case true, businesses will be enriched with a share_link field containing a shortened Google URL for sharing. Default: `false`. |
| `fields` | No | A comma separated list of business fields to include in the response (field projection). By default all fields are returned. |
| `region` | No | Query Google Maps from a particular region or country. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `language` | No | Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes*. Default: `en`. |
| `coordinates` | No | Geographic coordinates of the location from which the query is applied - recommended to use so that results are biased towards this location. Defaults to some central location in the region (see the region parameter). |

#### Business Reviews

`GET /business-reviews-v2`

Get all / paginate business reviews by Business Id using a pagination cursor.

| Parameter | Required | Description |
|---|---|---|
| `business_id` | Yes | Unique Business Id. Accepts `google_id` / `business_id` or `place_id`. **Examples:** `0x880fd393d427a591:0x8cba02d713a995ed` `ChIJkaUn1JPTD4gR7ZWpE9cCuow` |
| `limit` | No | Maximum number of business reviews to return. Default: `20`. |
| `cursor` | No | Pagination cursor for fetching the next page of reviews. Pass the `cursor` value returned in the previous response's `data.cursor`. Omit on the first request to start from the most relevant reviews. |
| `translate_reviews` | No | Whether to translate reviews to the language specified as the language parameter (defaults to false). |
| `query` | No | Return reviews matching a text query |
| `sort_by` | No | How to sort the reviews in the results. Values: `most_relevant`, `newest`, `highest_ranking`, `lowest_ranking`. Default: `most_relevant`. |
| `fields` | No | A comma separated list of review fields to include in the response (field projection). By default all fields are returned. |
| `region` | No | Query Google Maps from a particular region or country. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `language` | No | Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes*. Default: `en`. |

#### Business Review Details

`GET /review-details`

Get the details of a specific review by Google Id / Business Id or Google Place Id and Review Author Id.

| Parameter | Required | Description |
|---|---|---|
| `business_id` | Yes | The Business Id of the business for which the review belongs. Accepts `google_id` / `business_id` or `place_id`. **Examples:** `0x880fd393d427a591:0x8cba02d713a995ed` `ChIJkaUn1JPTD4gR7ZWpE9cCuow` |
| `review_author_id` | Yes | Review author id (i.e review `author_id` field). In addition, batching of up to 20 Review Author Ids is supported in a single request using a comma separated list *(e.g.review_author_id=id1,id2)*. |
| `region` | No | Query Google Maps from a particular region or country. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `language` | No | Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes*. Default: `en`. |

#### Business Photos

`GET /business-photos`

Get business photos by Business Id.

| Parameter | Required | Description |
|---|---|---|
| `business_id` | Yes | Unique Business Id. Accepts `google_id` / `business_id` or `place_id`. **Examples:** `0x880fd393d427a591:0x8cba02d713a995ed` `ChIJkaUn1JPTD4gR7ZWpE9cCuow` |
| `limit` | No | Maximum number of business photos to return. Default: `20`. |
| `cursor` | No | Specify the cursor obtained from the previous request to get the next of result page (use for pagination). |
| `is_video` | No | Only return video type media (type=video) or not. Default: `false`. |
| `region` | No | Query Google Maps from a particular region or country. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `fields` | No | A comma separated list of review fields to include in the response (field projection). By default all fields are returned. |

#### Business Photo Details

`GET /photo-details`

Get extra details about a business photo - caption, owner name and avatar, and more information. Supports batching of up to 20 Photo Ids.

| Parameter | Required | Description |
|---|---|---|
| `business_id` | Yes | The Business Id of the business for which the photo belongs. Accepts `google_id` / `business_id` or `place_id`. **Examples:** `0x880fd393d427a591:0x8cba02d713a995ed` `ChIJkaUn1JPTD4gR7ZWpE9cCuow` |
| `photo_id` | Yes | Photo Id of the photo to fetch. In addition, batching of up to 20 Photo Ids is supported in a single request using a comma separated list *(e.g. photo_id=id1,id2)*. |

#### Business Posts

`GET /business-posts`

Get all / paginate Business Owner Posts ("From the owner" section on Google Maps) by Business Id, sorted chronologically.

| Parameter | Required | Description |
|---|---|---|
| `business_id` | Yes | Unique Business Id. Accepts `google_id` / `business_id` or `place_id`. **Examples:** `0x880fd393d427a591:0x8cba02d713a995ed` `ChIJkaUn1JPTD4gR7ZWpE9cCuow` |
| `cursor` | No | Specify the cursor obtained from the previous request to get the next of result page (use for pagination). |
| `region` | No | Query Google Maps from a particular region or country. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `language` | No | Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes*. Default: `en`. |

#### Reverse Geocoding

`GET /reverse-geocoding`

Get the details of a place or address in a specific geographic location by latitude and longitude (reverse geocoding). This endpoint implements the "What's here?" functionality available on Google Maps (right click on the map).

| Parameter | Required | Description |
|---|---|---|
| `lat` | Yes | Latitude of the geographic coordinates to search near by. Default: `40.6958453`. |
| `lng` | Yes | Longitude of the geographic coordinates to search near by. Default: `-73.9799119`. |
| `region` | No | Query Google Maps from a particular region or country. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `language` | No | Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2*. Default: `en`. |
| `fields` | No | A comma separated list of business fields to include in the response (field projection). By default all fields are returned. |

#### Autocomplete

`GET /autocomplete`

Returns place/address, business and query predictions for text-based geographic queries.

| Parameter | Required | Description |
|---|---|---|
| `query` | Yes | Search query |
| `region` | No | Return results based to a particular region. For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*. Default: `us`. |
| `language` | No | Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2*. Default: `en`. |
| `coordinates` | No | Geographic coordinates of the location from which the query is applied - recommended to use so that results are biased towards this location. Defaults to some central location in the region (see the region parameter). |

### Example input

```json
{
  "endpoint": "/search",
  "query": "Hotels in San Francisco, USA"
}
```

### Example output

One dataset item per result. A Search item looks like this (trimmed):

```json
{
  "business_id": "0x8085808b287f3b3b:0xa49802f84f7ddb35",
  "google_id": "0x8085808b287f3b3b:0xa49802f84f7ddb35",
  "place_id": "ChIJOzt_KIuAhYARNdt9T_gCmKQ",
  "google_mid": "/m/06618ms",
  "phone_number": "+14154336600",
  "name": "Hilton San Francisco Financial District",
  "latitude": 37.7952284,
  "longitude": -122.40407289999999,
  "full_address": "Hilton San Francisco Financial District, 750 Kearny St, San Francisco, CA 94108",
  "review_count": 5248,
  "rating": 3.9,
  "timezone": "America/Los_Angeles",
  "opening_status": null,
  "working_hours": null,
  "website": "https://www.hilton.com/en/hotels/sfofdhf-hilton-san-francisco-financial-district/",
  "tld": "hilton.com",
  "verified": true,
  "place_link": "https://www.google.com/maps/place/data=!3m1!4b1!4m2!3m1!1s0x8085808b287f3b3b:0xa49802f84f7ddb35",
  "cid": "11860232884188994357",
  "reviews_link": "https://search.google.com/local/reviews?placeid=ChIJOzt_KIuAhYARNdt9T_gCmKQ&authuser=0",
  "owner_id": "112262189677275123944",
  "owner_link": "https://maps.google.com/maps/contrib/112262189677275123944",
  "owner_name": "Hilton San Francisco Financial District",
  "booking_link": null,
  "reservations_link": null,
  "business_status": "OPEN",
  "type": "Hotel",
  "subtypes": [
    "Hotel"
  ],
  "photos_sample": [
    {
      "photo_id": "AF1QipOZ1DmCL4eDQ1akS9x5W9nAeJGVox-e372FzjX_",
      "photo_url": "https://lh5.googleusercontent.com/p/AF1QipOZ1DmCL4eDQ1akS9x5W9nAeJGVox-e372FzjX_",
      "photo_url_large": "https://lh5.googleusercontent.com/p/AF1QipOZ1DmCL4eDQ1akS9x5W9nAeJGVox-e372FzjX_=w1023-h682-k-no",
      "video_thumbnail_url": null,
      "latitude": 37.795129599999996,
      "longitude": -122.40462550000001,
      "type": "photo",
      "photo_datetime_utc": "2025-02-12T00:00:00.000Z",
      "photo_timestamp": 1739318400
    }
  ],
  "reviews_per_rating": null,
  "photo_count": 8346,
  "about": {
    "summary": "Located in San Francisco's financial district, this upscale 27-story hotel...",
    "details": {
      "Crowd": {
        "LGBTQ+ friendly": true
      }
    }
  },
  "address": "750 Kearny St, San Francisco, CA 94108",
  "order_link": null,
  "price_level": null,
  "district": "Chinatown",
  "street_address": "750 Kearny St",
  "city": "San Francisco",
  "zipcode": "94108",
  "state": "California",
  "country": "US",
  "hotel_location_rating": null,
  "hotel_amenities": null,
  "hotel_stars": 4,
  "hotel_review_summary": null
}
```

The run's key-value store `OUTPUT` record holds the request parameters, the request id and any non-list fields of the response (for example a pagination cursor).

### Pricing

Pay per event: you pay per business, at the same rates as our API plans. A search is charged for the businesses it returns, a batch lookup for each business id, exactly as on the API.

| Apify plan | Price per 1,000 businesses |
|---|---|
| Free | $4.00 |
| Starter (Bronze) | $1.25 |
| Scale (Silver) | $0.75 |
| Business (Gold) and above | $0.50 |

A request that fails is not charged.

### Using it from code

Run it through the [Apify API](https://docs.apify.com/api/v2) or a client library, with the input above as the JSON body:

```bash
curl -X POST "https://api.apify.com/v2/acts/openweb-ninja~local-business-data/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"endpoint":"/search","query":"Hotels in San Francisco, USA"}'
```

Need higher volume or a direct REST API? Local Business Data API is also available as an API on [OpenWeb Ninja](https://www.openwebninja.com/api/local-business-data) and [RapidAPI](https://rapidapi.com/letscrape-6bRBa3QguO5/api/local-business-data).

### Support

For custom plans, high volumes or anything else:

- Email: support@openwebninja.com
- Discord: https://discord.gg/wxJxGsZgha

# Actor input Schema

## `endpoint` (type: `string`):

Which endpoint of the API to call. Each endpoint uses the parameters listed in its section below; parameters of other endpoints are ignored.

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

Search query / keyword<br>   <strong>Examples:</strong><br>  <code>Plumbers near New-York, USA</code><br>  <code>Bars in 94102, USA</code><br><br><em>Used by: Search, Area Search (Zoom Level), Area Search (Bounding Box), Area Search (Radius), Search Nearby, Business Reviews, Autocomplete. Required for Search, Area Search (Zoom Level), Area Search (Bounding Box), Area Search (Radius), Search Nearby, Autocomplete.</em>

## `limit` (type: `integer`):

Maximum number of businesses to return.<br>   <strong>Allowed values:</strong> <code>1-500</code><br><br><em>Used by: Search, Bulk Search, Area Search (Zoom Level), Area Search (Bounding Box), Area Search (Radius), Search Nearby, Business Reviews, Business Photos.</em>

## `lat` (type: `string`):

Latitude of the coordinates point from which the query is applied - recommended to use so that results are biased towards this location.<br>  Defaults to some central location in the region (see the region parameter).<br><br><em>Used by: Search, Area Search (Zoom Level), Area Search (Radius), Search Nearby, Reverse Geocoding. Required for Area Search (Zoom Level), Area Search (Radius), Search Nearby, Reverse Geocoding.</em>

## `lng` (type: `string`):

Longitude of the coordinates point from which the query is applied - recommended to use so that results are biased towards this location.<br>  Defaults to some central location in the region (see the region parameter).<br><br><em>Used by: Search, Area Search (Zoom Level), Area Search (Radius), Search Nearby, Reverse Geocoding. Required for Area Search (Zoom Level), Area Search (Radius), Search Nearby, Reverse Geocoding.</em>

## `zoom` (type: `string`):

Zoom level on which to make the search (the viewport is determined by lat, lng and zoom).<br><br><em>Used by: Search, Bulk Search, Area Search (Zoom Level). Required for Area Search (Zoom Level).</em>

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

Set the language of the results. For a list of supported language codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes*.<br><br><em>Used by: Search, Bulk Search, Area Search (Zoom Level), Area Search (Bounding Box), Area Search (Radius), Search Nearby, Business Details, Business Details Plus, Business Reviews, Business Review Details, Business Posts, Reverse Geocoding, Autocomplete.</em>

## `region` (type: `string`):

Query Google Maps from a particular region or country.<br>  For a list of supported region/country codes see *https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes (Alpha-2 code)*.<br><br><em>Used by: Search, Bulk Search, Area Search (Zoom Level), Area Search (Bounding Box), Area Search (Radius), Search Nearby, Business Details, Business Details Plus, Business Reviews, Business Review Details, Business Photos, Business Posts, Reverse Geocoding, Autocomplete.</em>

## `subtypes` (type: `string`):

Find businesses with specific subtypes, specified as a comma separated list of types (business categories).<br>  For the complete list of types, see *https://daltonluka.com/blog/google-my-business-categories*.<br><br>  <strong>Examples:</strong><br>  <code>Plumber,Carpenter,Electrician</code><br>  <code>Night club,Dance club,Bar,Pub</code><br><br><em>Used by: Search, Area Search (Zoom Level), Area Search (Bounding Box), Area Search (Radius), Search Nearby.</em>

## `verified` (type: `boolean`):

Only return verified businesses<br><br><em>Used by: Search.</em>

## `business_status` (type: `string`):

Find businesses with specific status, specified as a comma separated list of the following values:<br>  <code>OPEN, CLOSED_TEMPORARILY, CLOSED</code><br><br>  <strong>Examples:</strong><br>  <code>OPEN</code><br>  <code>CLOSED_TEMPORARILY,CLOSED</code><br><br><em>Used by: Search.</em>

## `extract_emails_and_contacts` (type: `boolean`):

Extract emails, contacts and social profiles for each business in the response.<br>  In case true, businesses will be enriched with a emails_and_contacts field with emails, phones, Facebook, LinkedIn, Instagram and other social profiles.<br><br>  <strong>Note:</strong> in case <code>true</code>, the endpoint will scrape emails and contacts from the business website (in case non-empty).<br>    For each such business, the API will charge an additional credit.<br><br><em>Used by: Search, Area Search (Zoom Level), Area Search (Bounding Box), Area Search (Radius), Search Nearby, Business Details, Business Details Plus.</em>

## `fields` (type: `string`):

A comma separated list of business fields to include in the response (field projection).<br>  By default all fields are returned.<br><br><em>Used by: Search, Area Search (Zoom Level), Area Search (Bounding Box), Area Search (Radius), Search Nearby, Business Details, Business Details Plus, Business Reviews, Business Photos, Reverse Geocoding.</em>

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

List of search queries to run in a single request (each treated like a normal Search query). Up to 20 queries per request.<br><br><em>Used by: Bulk Search. Required for Bulk Search.</em>

## `coordinates` (type: `string`):

Bias the search toward a specific location, as a "lat,lng" string.<br><br><em>Used by: Bulk Search, Business Details, Business Details Plus, Autocomplete.</em>

## `offset` (type: `integer`):

Number of businesses to skip per query, for pagination. Allowed values: 0-500.<br><br><em>Used by: Bulk Search.</em>

## `dedup` (type: `boolean`):

If true, deduplicate overlapping businesses across queries.<br><br><em>Used by: Bulk Search.</em>

## `bottom_left` (type: `string`):

The bottom-left (south-west) corner of the bounding box to search in, as a "lat,lng" string.<br><br><em>Used by: Area Search (Bounding Box). Required for Area Search (Bounding Box).</em>

## `top_right` (type: `string`):

The top-right (north-east) corner of the bounding box to search in, as a "lat,lng" string.<br><br><em>Used by: Area Search (Bounding Box). Required for Area Search (Bounding Box).</em>

## `radius` (type: `string`):

The radius (in meters) of the circular search area around the center coordinate point (lat, lng). Allowed values: 1-50000.<br><br><em>Used by: Area Search (Radius). Required for Area Search (Radius).</em>

## `business_id` (type: `string`):

Unique Business Id. Accepts <code>google_id</code> / <code>business_id</code> or <code>place_id</code>.<br>   <strong>Examples:</strong><br>  <code>0x880fd393d427a591:0x8cba02d713a995ed</code><br>  <code>ChIJkaUn1JPTD4gR7ZWpE9cCuow</code><br><br>  In addition, batching of up to 20 Business Ids is supported in a single request using a comma separated list *(e.g. business_id=id1,id2)*.<br><br><em>Used by: Business Details, Business Details Plus, Business Reviews, Business Review Details, Business Photos, Business Photo Details, Business Posts. Required for Business Details, Business Details Plus, Business Reviews, Business Review Details, Business Photos, Business Photo Details, Business Posts.</em>

## `extract_share_link` (type: `boolean`):

Whether to extract place's share link for the business.<br>  In case true, businesses will be enriched with a share_link field containing a shortened Google URL for sharing *(e.g. https://goo.gl/maps/oxndE8SVaNU5CV6p6)*.<br><br><em>Used by: Business Details, Business Details Plus.</em>

## `cursor` (type: `string`):

Pagination cursor for fetching the next page of reviews. Pass the <code>cursor</code> value returned in the previous response's <code>data.cursor</code>. Omit on the first request to start from the most relevant reviews.<br><br><em>Used by: Business Reviews, Business Photos, Business Posts.</em>

## `translate_reviews` (type: `boolean`):

Whether to translate reviews to the language specified as the language parameter (defaults to false).<br><br><em>Used by: Business Reviews.</em>

## `sort_by` (type: `string`):

How to sort the reviews in the results.<br><br><em>Used by: Business Reviews.</em>

## `review_author_id` (type: `string`):

Review author id (i.e review <code>author_id</code> field).<br>  In addition, batching of up to 20 Review Author Ids is supported in a single request using a comma separated list *(e.g.review_author_id=id1,id2)*.<br><br><em>Used by: Business Review Details. Required for Business Review Details.</em>

## `is_video` (type: `boolean`):

Only return video type media (type=video) or not.<br><br><em>Used by: Business Photos.</em>

## `photo_id` (type: `string`):

Photo Id of the photo to fetch.<br> In addition, batching of up to 20 Photo Ids is supported in a single request using a comma separated list *(e.g. photo_id=id1,id2)*.<br><br><em>Used by: Business Photo Details. Required for Business Photo Details.</em>

## Actor input object example

```json
{
  "endpoint": "/search",
  "query": "Hotels in San Francisco, USA",
  "limit": 20,
  "lat": "37.359428",
  "lng": "-121.925337",
  "zoom": "13",
  "language": "en",
  "region": "us",
  "extract_emails_and_contacts": false,
  "coordinates": "40.685219,-74.081180",
  "offset": 0,
  "dedup": true,
  "bottom_left": "40.606540,-74.013580",
  "top_right": "40.812151,-73.910522",
  "radius": "5000",
  "business_id": "0x880fd393d427a591:0x8cba02d713a995ed",
  "extract_share_link": false,
  "sort_by": "most_relevant",
  "review_author_id": "110228754725692228062",
  "is_video": false,
  "photo_id": "AF1QipMPYCqZ5Fe8a7Jc51KT9pWOS5c6tOKY_xvkCl23"
}
```

# Actor output Schema

## `results` (type: `string`):

One dataset item per result of the API call.

## `summary` (type: `string`):

Endpoint, parameters, request id, billed requests and any non-list response fields (such as a pagination cursor).

# 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": "Hotels in San Francisco, USA",
    "limit": 20,
    "lat": "37.359428",
    "lng": "-121.925337",
    "zoom": "13",
    "language": "en",
    "region": "us",
    "offset": 0
};

// Run the Actor and wait for it to finish
const run = await client.actor("openweb-ninja/local-business-data").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": "Hotels in San Francisco, USA",
    "limit": 20,
    "lat": "37.359428",
    "lng": "-121.925337",
    "zoom": "13",
    "language": "en",
    "region": "us",
    "offset": 0,
}

# Run the Actor and wait for it to finish
run = client.actor("openweb-ninja/local-business-data").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": "Hotels in San Francisco, USA",
  "limit": 20,
  "lat": "37.359428",
  "lng": "-121.925337",
  "zoom": "13",
  "language": "en",
  "region": "us",
  "offset": 0
}' |
apify call openweb-ninja/local-business-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,openweb-ninja/local-business-data"
        }
    }
}
```

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/KMmGbeuRlotD3yhdf/builds/9amAGb6cDo51nGMOo/openapi.json
