# Local Business Reviews API (`listingsapi/local-business-reviews-api`) Actor

Read, monitor and reply to customer reviews across Google, Facebook and 30 plus review sites. Pull reviews and rating analytics into a dataset, rank locations by unanswered reviews, and publish, edit or archive replies.

- **URL**: https://apify.com/listingsapi/local-business-reviews-api.md
- **Developed by:** [Local Business Listings Submission API](https://apify.com/listingsapi) (community)
- **Categories:**
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Local Business Reviews API

Read, monitor and reply to customer reviews across Google, Facebook and the other review sites connected to your Listings API account.

Reviews are the second thing a customer looks at after the map pin. This Actor wraps the review endpoints of the [Listings API](https://www.listingsapi.com) so you can pull review data into a dataset, track ratings and response rates over time, and publish replies without writing an integration yourself.

### What this Actor does

- Pulls every review for a location with rating, author, body text, date and source site
- Fetches full detail for specific reviews by ID
- Returns a review analytics overview for a location: average rating, review volume, response rate and rating distribution
- Returns rollup review counts across your whole account, so you can rank locations by rating or by unanswered reviews
- Lists which review sources are switched on for a location and which are available on your plan
- Posts a reply to a review, edits that reply, or archives it

Read operations write one dataset row per review, so the result exports cleanly to JSON, CSV or Excel and feeds straight into a sheet, a warehouse or a reporting tool.

Write operations act on live profiles. A reply published through this Actor appears publicly on the review site.

### Who this is for

- Agencies reporting on review volume and sentiment for a book of local clients
- Multi location brands that need one queue of unanswered reviews across every store
- Franchise systems checking that individual franchisees are replying inside an agreed window
- Teams building review response workflows on top of a scheduled run

### What you need

A Listings API account and an API key. Create one at [listingsapi.com](https://www.listingsapi.com/pricing).

| Access level | Covers |
| --- | --- |
| Read | Every list and get operation below |
| Write | `respondToReview`, `editReviewResponse`, `archiveReviewResponse` |

Replying to a Google or Facebook review also needs that profile connected and matched to the location. Use the [Create Google Listing API](https://apify.com/listingsapi/create-google-listing-api) Actor to link the accounts and confirm the matches before you run anything here.

Keys are managed in the API Keys section of your dashboard. The key you paste into this Actor is stored as a secret input.

### Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `apiKey` | string | Yes | Your Listings API key. Stored as a secret. |
| `operation` | string | Yes | Which endpoint to call. See the operations table. |
| `pathParams` | object | No | Values for placeholders in the path, for example `{ "locationId": "123" }`. |
| `query` | object | No | Query string values such as `limit`, `after`, `siteId` or date filters. |
| `body` | object | No | JSON payload for the respond, edit and archive operations. |
| `paginate` | boolean | No | Keep requesting pages while `pageInfo.hasNextPage` is true. Default `false`. |
| `maxItems` | integer | No | Stop after this many dataset items. `0` means no limit. |

### Operations

| Operation | Method and path | Returns |
| --- | --- | --- |
| `allLocations` | `GET /locations` | Your locations, used to look up location IDs |
| `searchLocations` | `GET /locations/search` | Locations matching a search term |
| `reviewsOfLocation` | `GET /locations/{locationId}/reviews` | Reviews for one location |
| `reviewDetails` | `GET /reviewDetails` | Full detail for a set of review IDs |
| `rollupInteractions` | `GET /rollup_interactions` | Review counts rolled up across locations |
| `reviewAnalyticsOverview` | `GET /locations/{locationId}/review-analytics-overview` | Rating average, volume and response rate |
| `reviewSettingsOfLocation` | `GET /locations/{locationId}/reviews/settings` | Review sources enabled for the location |
| `reviewSiteConfig` | `GET /reviews/site-config` | Review sources available on the account |
| `respondToReview` | `POST /locations/reviews/respond` | Publishes a reply |
| `editReviewResponse` | `POST /locations/reviews/respond/edit` | Updates a published reply |
| `archiveReviewResponse` | `POST /locations/reviews/respond/archive` | Archives a reply |

Field level request and response detail for each endpoint is at [docs.listingsapi.com/docs/reviews](https://docs.listingsapi.com/docs/reviews).

### Examples

Pull every review for one location, following pagination:

```json
{
  "apiKey": "<your key>",
  "operation": "reviewsOfLocation",
  "pathParams": { "locationId": "123" },
  "query": { "limit": 50 },
  "paginate": true
}
```

Get the rating and response rate summary for a location:

```json
{
  "apiKey": "<your key>",
  "operation": "reviewAnalyticsOverview",
  "pathParams": { "locationId": "123" }
}
```

Rank every location in the account by review activity:

```json
{
  "apiKey": "<your key>",
  "operation": "rollupInteractions",
  "query": { "limit": 100 },
  "paginate": true
}
```

Reply to a review:

```json
{
  "apiKey": "<your key>",
  "operation": "respondToReview",
  "body": {
    "input": {
      "locationId": "123",
      "reviewId": "gmb-8f2c41",
      "response": "Thanks for taking the time to write this. Glad the new evening hours worked for you."
    }
  }
}
```

Check which review sites are switched on before you start collecting:

```json
{
  "apiKey": "<your key>",
  "operation": "reviewSiteConfig"
}
```

### Output

Each item in the response list becomes one dataset row. A review row looks roughly like this:

```json
{
  "id": "gmb-8f2c41",
  "locationId": "123",
  "site": "GOOGLE",
  "rating": 4,
  "authorName": "Priya S.",
  "content": "Quick service and the staff actually knew the product.",
  "postedAt": "2026-08-14T09:12:00Z",
  "responded": false,
  "responseText": null
}
```

Exact fields follow the API response, so anything the Listings API returns for a review is present in the row. Download the dataset as JSON, CSV, Excel or XML, or read it from the Apify API.

The run also writes a `SUMMARY` record to the key value store with the operation, the number of pages fetched and the number of items pushed.

### Running it on a schedule

Set an Apify schedule to run `reviewsOfLocation` or `rollupInteractions` every morning. Point a webhook at the run to push new reviews into Slack, a helpdesk or your own queue. Reviews already in the dataset from earlier runs are kept, so you can diff against the previous run to find what came in overnight.

### Rate limits and pagination

The Actor sends one request at a time and reads `pageInfo.hasNextPage` before asking for the next page. On a 429 it waits for the `retry_after_seconds` value from the response and retries, up to five times. Server errors are retried with a backoff.

Plan limits are 10 requests per minute on Launch and 50 on Growth. See [rate limits](https://docs.listingsapi.com/docs/rate-limits).

### Errors

A non success response stops the run and logs the status, the URL and the response body, including the `correlation_id` you can quote to support. Codes are listed at [docs.listingsapi.com/docs/error-codes](https://docs.listingsapi.com/docs/error-codes).

### Cost

You pay Apify for platform usage of the run. Review data itself is billed by your Listings API plan, which starts at 99 dollars a month with a 14 day trial.

### Related Actors

- [Create Google Listing API](https://apify.com/listingsapi/create-google-listing-api) for linking Google and Facebook profiles to your locations, which reply operations depend on
- [Local Business Listings Submission API](https://apify.com/listingsapi/local-business-listings-submission-api) for creating and syncing locations
- [Create Bulk GBP Listings API](https://apify.com/listingsapi/create-bulk-gbp-listings-api) for creating Google listings across hundreds of locations in one run
- [Local Business Posts API](https://apify.com/listingsapi/local-business-posts-api) for publishing to Google, Facebook, Instagram and X
- [Local SEO Analytics API](https://apify.com/listingsapi/local-seo-analytics-api) for publisher performance and listing coverage

### Links

- Documentation: [docs.listingsapi.com](https://docs.listingsapi.com/docs)
- Review endpoints: [docs.listingsapi.com/docs/reviews](https://docs.listingsapi.com/docs/reviews)
- SDKs: [docs.listingsapi.com/sdks](https://docs.listingsapi.com/sdks)
- MCP server: [listingsapi.com/mcp](https://www.listingsapi.com/mcp)
- Support: support@listingsapi.com

# Actor input Schema

## `apiKey` (type: `string`):

Your Listings API key. Create one at https://listingsapi.com. Read access covers every GET operation. Write access is needed to respond to, edit or archive a review response.

## `operation` (type: `string`):

Which review endpoint to call.

## `pathParams` (type: `object`):

Values for placeholders in the endpoint path, for example { "locationId": "123" }.

## `query` (type: `object`):

Query string values such as limit, after, siteId, rating or date filters.

## `body` (type: `object`):

JSON payload for the respond, edit and archive operations.

## `paginate` (type: `boolean`):

Keep requesting pages while pageInfo.hasNextPage is true. Pages are fetched one at a time so you stay inside your plan rate limit.

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

Stop after this many dataset items. Set 0 for no limit.

## Actor input object example

```json
{
  "operation": "reviewsOfLocation",
  "pathParams": {},
  "query": {},
  "body": {},
  "paginate": false,
  "maxItems": 0
}
```

# Actor output Schema

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

Every review, review source or rollup record returned by the operation you ran.

# 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("listingsapi/local-business-reviews-api").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("listingsapi/local-business-reviews-api").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 listingsapi/local-business-reviews-api --silent --output-dataset

```

## MCP server setup

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

```

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/Xsx81hBEXLCbcioOV/builds/xjmQKc96EDYmM1Bnz/openapi.json
