> ## Documentation Index
> Fetch the complete documentation index at: https://docs.baselayer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Customer Reviews

> Check that a business has real customers and is still open, using its review profiles on Google, Yelp, TripAdvisor and more.

Reviews discovers customer review profiles associated with a business across Google, Yelp, TripAdvisor, Trustpilot, and other platforms. It returns aggregate ratings, review volume, operational status, identity data found on each platform, and - when requested - individual review text. Review data is particularly powerful for confirming a business is real and actively operating, and for cross-referencing identity details against the submitted application.

***

### When to use it

* You want to confirm a business has an established customer-facing presence with real review history
* You need to check operational status: whether a business is currently open, temporarily closed, or permanently closed
* You are cross-referencing contact details (address, phone, website) found on review platforms against the submitted application to detect impersonation
* You are assessing a consumer-facing business (restaurant, retail, hospitality, healthcare) where review presence is expected
* You want to supplement weak website or social signals with third-party platform corroboration

> Review presence is sector-dependent. Consumer-facing businesses are expected to have reviews; B2B and professional services firms often do not. Absence of reviews is not a risk signal for sectors where reviews are uncommon. See [Sector-specific guidance](https://docs.baselayer.com/docs/web-presence-orderables.md#sector-specific-guidance) in the Online Presence: Best Practices guide.

***

### How to request it

Reviews are available on both integration paths, with two request options that control how much data is returned.

#### Via `POST /web_presence_requests`

Use `Order.ReviewSummary` for profile-level data (rating, volume, metadata, identity fields). Use `Order.ReviewFull` together with `Order.ReviewSummary` when you also need the individual review entries with text and dates.

```json theme={null}
{
  "name": "Lucali",
  "address": "575 Henry St, Brooklyn, NY 11231",
  "options": ["Order.ReviewSummary"]
}
```

To include individual review text:

```json theme={null}
{
  "name": "Lucali",
  "address": "575 Henry St, Brooklyn, NY 11231",
  "options": ["Order.ReviewSummary", "Order.ReviewFull"]
}
```

Results are returned **inline** at `found_reviews[]`.

> `Order.ReviewFull` returns everything in `Order.ReviewSummary` plus the individual `reviews[]` array. It is an add-on to `Order.ReviewSummary`, so send both.

#### Via `POST /searches` with `Order.Enhanced`

Reviews are included automatically as part of `Order.Enhanced` at `business.reviews[]`. Individual review text is not available on this path — only profile-level data (rating, volume, metadata, identity fields) is returned.

> `Order.ReviewSummary` and `Order.ReviewFull` as standalone options are not available on `POST /searches`. Use `Order.Enhanced` or switch to `POST /web_presence_requests` for review data.

***

### Response fields

#### `found_reviews[]` fields

Each entry represents one review platform profile discovered for the business.

| Field | Type | Description |
| :- | :- | :- |
| `source` | enum | Review platform: `google`, `yelp`, `trustpilot`, `tripadvisor`, `other`. |
| `url` | string | Direct URL to the review profile on that platform. |
| `confidence` | enum | Baselayer's confidence the review profile belongs to this business: `high`, `medium`, `low`. |
| `rating` | float | Average numeric rating (e.g., `4.2`). |
| `volume` | integer | Total number of reviews on that platform. |
| `summary` | string \| null | Sentiment summary of reviews, when available. |
| `address` | string \| null | Business address found on the review profile. |
| `phone_number` | string \| null | Business phone number found on the review profile. |
| `business_website` | string \| null | Business website found on the review profile. |
| `reviews[]` | array | Individual review entries - see below. Only returned when `Order.ReviewFull` is requested on `POST /web_presence_requests`. |
| `metadata` | object \| null | Platform-specific attributes — see below. Only populated for Google reviews; always `null` for Yelp, TripAdvisor, and Trustpilot. |

> On `POST /searches` with `Order.Enhanced`, reviews are returned at `business.reviews[]`. On `POST /web_presence_requests`, they are returned at `found_reviews[]`. The object structure is identical, except `reviews[]` (individual entries) is only available via `POST /web_presence_requests`.

#### `reviews[]` entry fields

Individual review entries, returned only when `Order.ReviewFull` is requested on `POST /web_presence_requests`.

| Field | Type | Description |
| :- | :- | :- |
| `date` | string | Review date (ISO 8601). |
| `rating` | integer | Individual review rating. |
| `text` | string | Review text content. |
| `username` | string | Reviewer's display name. |

#### `metadata` fields

Platform-specific data, **only populated for Google reviews** — it is always `null` on Yelp, TripAdvisor, and Trustpilot entries. It is a best-effort enrichment, so it can also be `null` on a Google review. The object has exactly five keys, all of which are optional/nullable:

| Field | Type | Description |
| :- | :- | :- |
| `open_state` | string \| null | Current operating status, in Google's own phrasing (e.g., `"Open"`, `"Open ⋅ Closes 10 PM"`, `"Temporarily closed"`, `"Permanently closed"`). The text is not normalized — match it case-insensitively, never on exact strings. |
| `operating_hours` | object \| null | Operating hours keyed by lowercase English day name (`"monday"`, `"tuesday"`, …); not all seven days are guaranteed to be present. Values are Google's free-form strings, e.g. `"11 AM–10 PM"` (en dash), `"Closed"`, or `"Open 24 hours"`. |
| `description` | string \| null | Business description from Google Maps. |
| `types` | array \| null | Business type tags from Google Maps (list of strings; can be empty). |
| `service_options` | object \| null | Snake\_case keys with **boolean** values, e.g. `{"dine_in": true, "curbside_pickup": false}`. The key set varies by business category — do not assume any particular key is present. |

A populated `metadata` object looks like this:

```json theme={null}
{
  "open_state": "Open ⋅ Closes 10 PM",
  "operating_hours": {
    "monday": "11 AM–10 PM",
    "tuesday": "11 AM–10 PM",
    "wednesday": "Closed",
    "thursday": "11 AM–10 PM",
    "friday": "11 AM–11 PM",
    "saturday": "11 AM–11 PM",
    "sunday": "11 AM–9 PM"
  },
  "description": "Brick-oven pizza restaurant known for its thin-crust pies.",
  "types": ["Pizza restaurant", "Italian restaurant"],
  "service_options": {
    "dine_in": true,
    "takeout": true,
    "delivery": false,
    "curbside_pickup": false
  }
}
```

> When consuming `metadata`, treat every key as optional, tolerate keys you don't recognize, and prefer showing nothing over guessing when a value is missing.

***

### Interpreting results

Reviews produce three types of value: **operational confirmation** (is this business currently active?), **reputation signals** (do customers engage with it?), and **identity corroboration** (do the details on review platforms match the application?).

**Always filter by `confidence: high` before using a profile in automated decisions.** Medium and low confidence profiles may belong to an unrelated business. Only `high` confidence entries should influence decisioning.

**`open_state` is the most direct operational signal available.** Check it on every Google review entry. A permanently-closed status is a high-risk flag regardless of other signals. A temporarily-closed status warrants clarification. `"Closed ⋅ Opens [time]"`-style values are normal outside business hours. Because the text is Google's own unnormalized phrasing, match it case-insensitively (e.g., look for "permanently closed" anywhere in the string) rather than comparing against exact strings. See [Reviews section](https://docs.baselayer.com/docs/web-presence-orderables.md#reviews) in the Online Presence: Best Practices guide.

**Combine `rating` and `volume`, neither is meaningful alone.** A high rating with fewer than 10 reviews is weak evidence. A rating below 3.0 with more than 20 reviews is a meaningful negative signal.

**Cross-reference identity fields against the application.** The `address`, `phone_number`, and `business_website` fields in each review entry are independently sourced from the review platform. In impersonation cases, these fields will consistently point to the real business. See [Domain Impersonation Patterns](https://docs.baselayer.com/docs/web-presence-orderables.md#domain-impersonation-patterns) in the Online Presence: Best Practices guide.

***

### Related guides

* [Online Presence: Basics](https://docs.baselayer.com/docs/online-presence-basics.md) — integration path decision guide and data model
* [Online Presence: Best Practices](https://docs.baselayer.com/docs/web-presence-orderables.md) — full decisioning framework including review signals
* [Online Presence: Response Reference](https://docs.baselayer.com/docs/online-presence-response-reference.md) — match values, match sources, and response shape by integration path
* [Social Media Profiles](https://docs.baselayer.com/docs/social-media-profiles.md) — complements reviews for consumer-facing business verification
* [Web Presence API Reference](https://docs.baselayer.com/api-reference/web-presence/post-web-presence-request.md) — full endpoint documentation


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.