<!-- BusyBot node reference — https://busybot.net/tools/google-business-profile/ -->

> Node: Google Business Profile (`google_business_profile`) · Action · v1
> Category: Marketing · Credentials: Google Business Profile OAuth2 API (`googleBusinessProfileOAuth2Api`)
> Updated: 2026-08-16

# Google Business Profile

> Manage posts and reviews on Google Business Profile.

## Overview

Google Business Profile tool manages local posts and customer reviews via the Google My Business API. Post operations: create (STANDARD/EVENT/OFFER/ALERT types with date/time/CTA fields), delete, get by resource name, get all with pagination, update with auto-generated updateMask. Review operations: get a review by resource name or ID, get all reviews with pagination, reply to a review, delete a reply. Uses three different API domains: mybusiness.googleapis.com/v4 for posts/reviews, mybusinessaccountmanagement.googleapis.com/v1 for accounts, mybusinessbusinessinformation.googleapis.com/v1 for locations.

**Category:** Marketing  
**Tool Name:** `google_business_profile`  
**Version:** 1

**Appearance:** Icon: `lucide-Target` | Color: `#4285F4`

## Node Type

**Action** — processes input items and produces output

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **Google Business Profile OAuth2 API** credentials.
See the [Credentials Guide](https://busybot.net/credentials/google-business-profile-oauth2-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Post | `post` |
| Review | `review` |

### Operations

Each resource has its own Operation list, and both reuse `get` and `getAll`. Pick the resource first, then the operation.

| Resource | Operation | Value | Description |
|----------|-----------|-------|-------------|
| Post | Create | `create` | Create a new post on Google Business Profile. |
| Post | Delete | `delete` | Delete an existing post. |
| Post | Get | `get` | Retrieve details of a specific post. |
| Post | Get Many | `getAll` | Retrieve multiple posts for a business location. |
| Post | Update | `update` | Update an existing post. |
| Review | Delete Reply | `deleteReply` | Delete a reply to a review. |
| Review | Get | `get` | Retrieve details of a specific review. |
| Review | Get Many | `getAll` | Retrieve multiple reviews for a business location. |
| Review | Reply | `reply` | Reply to a customer review. |

### Parameters

Everything is addressed by Google resource name: an account is `accounts/{accountId}`, a location is `accounts/{accountId}/locations/{locationId}`, and a post is `accounts/{accountId}/locations/{locationId}/localPosts/{postId}`. Account, Location, Post, Review, Summary, Title and Reply all accept expressions.

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Authentication | `options` | No | `oAuth2` | Authentication method to use. |
| | | | | Options: `oAuth2` (OAuth2, recommended), `serviceAccount` |
| Google Account (`credentialId`) | `credential` | No | — | Connect or select your Google account. _(shown when Authentication is `oAuth2`)_ |
| Service Account Email | `string` | Yes | — | The email address of the Google service account. _(shown when Authentication is `serviceAccount`)_ |
| Private Key (`serviceAccountPrivateKey`) | `string` | Yes | — | The private key from the service account JSON key file. Paste the whole PEM block, BEGIN and END lines included. _(shown when Authentication is `serviceAccount`)_ |
| Max Concurrency | `number` | No | `5` | Maximum number of items to process concurrently (1–20). |

#### Post: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Account | `string` | Yes | — | The Google Business Profile account resource name (e.g. accounts/0123456789). |
| Location | `string` | Yes | — | The specific location resource name (e.g. accounts/0123456789/locations/0123456789). |
| Post Type (`postType`) | `options` | Yes | `STANDARD` | The type of post to create. It decides which of the fields below appear. |
| | | | | Options: `STANDARD` (text and optional CTA), `EVENT` (title plus start/end date-time), `OFFER` (event, CTA and optional coupon), `ALERT` |
| Summary | `string` | Yes | — | The main text of the post. |
| Title | `string` | Yes | — | The event or offer title. _(shown when Post Type is `EVENT`, `OFFER`)_ |
| Start Date and Time (`startDateTime`) | `dateTime` | Yes | — | The start date and time of the event (ISO 8601). Converted to Google nested date+time format. _(shown when Post Type is `EVENT`)_ |
| End Date and Time (`endDateTime`) | `dateTime` | Yes | — | The end date and time of the event (ISO 8601). Converted to Google nested date+time format. _(shown when Post Type is `EVENT`)_ |
| Start Date (`startDate`) | `string` | Yes | — | The start date of the offer (YYYY-MM-DD). _(shown when Post Type is `OFFER`)_ |
| End Date (`endDate`) | `string` | Yes | — | The end date of the offer (YYYY-MM-DD). _(shown when Post Type is `OFFER`)_ |
| Alert Type (`alertType`) | `options` | Yes | `COVID_19` | The sub-type of the alert. _(shown when Post Type is `ALERT`)_ |
| | | | | Options: `COVID_19` |
| Additional Options (`additionalOptions`) | `collection` | No | `{}` | Optional additional fields for the post. |
| — Language (`languageCode`) | `string` | No | — | The language code of the post content. |
| — Call to Action Type (`callToActionType`) | `options` | No | `ACTION_TYPE_UNSPECIFIED` | The type of call to action (not applicable to OFFER posts). |
| | | | | Options: `ACTION_TYPE_UNSPECIFIED`, `BOOK`, `CALL`, `LEARN_MORE`, `ORDER`, `SHOP`, `SIGN_UP` |
| — Call to Action URL (`callToActionUrl`) | `string` | No | — | The URL that users are sent to when clicking through the promotion. |
| — Coupon Code (`couponCode`) | `string` | No | — | The coupon code for the offer (OFFER posts only). |
| — Redeem Online URL (`redeemOnlineUrl`) | `string` | No | — | Link to redeem the offer (OFFER posts only). |
| — Terms and Conditions (`termsConditions`) | `string` | No | — | The terms and conditions of the offer (OFFER posts only). |

#### Post: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Account | `string` | Yes | — | The Google Business Profile account resource name. Used for context only; the post resource name is specified in Post below. |
| Post (`post`) | `string` | Yes | — | The full post resource name in the format accounts/{accountId}/locations/{locationId}/localPosts/{postId}. |

#### Post: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Account | `string` | Yes | — | The Google Business Profile account resource name. Used for context only; the post resource name is specified in Post below. |
| Post (`post`) | `string` | Yes | — | The full post resource name in the format accounts/{accountId}/locations/{locationId}/localPosts/{postId}. |

#### Post: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Account | `string` | Yes | — | The Google Business Profile account resource name (e.g. accounts/0123456789). |
| Location | `string` | Yes | — | The specific location resource name (e.g. accounts/0123456789/locations/0123456789). |
| Return All | `boolean` | No | `false` | Whether to return all results or limit to a maximum number. |
| Limit | `number` | No | `20` | Maximum number of results to return. _(shown when Return All is `false`)_ |

#### Post: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Account | `string` | Yes | — | The Google Business Profile account resource name. Used for context only; the post resource name is specified in Post below. |
| Post (`post`) | `string` | Yes | — | The full post resource name in the format accounts/{accountId}/locations/{locationId}/localPosts/{postId}. |
| Fields to Update (`additionalFields`) | `collection` | No | `{}` | The fields to update. An updateMask is auto-generated from the keys you provide, so only the fields you add are changed. |
| — Summary (`summary`) | `string` | No | — | The main text of the post. |
| — Language (`languageCode`) | `string` | No | — | The language code of the post content. |
| — Call to Action Type (`callToActionType`) | `options` | No | `ACTION_TYPE_UNSPECIFIED` | The type of call to action. |
| | | | | Options: `ACTION_TYPE_UNSPECIFIED`, `BOOK`, `GET_OFFER` (deprecated — use the OFFER post type instead), `LEARN_MORE`, `ORDER`, `SHOP`, `SIGN_UP` |
| — Call to Action URL (`url`) | `string` | No | — | The URL that users are sent to when clicking through the promotion. |
| — Start Date and Time (`startDateTime`) | `dateTime` | No | — | The start date and time of the event. |
| — End Date and Time (`endDateTime`) | `dateTime` | No | — | The end date and time of the event. |
| — Title (`title`) | `string` | No | — | The event or offer title. |
| — Start Date (`startDate`) | `string` | No | — | The start date of the offer. |
| — End Date (`endDate`) | `string` | No | — | The end date of the offer. |
| — Coupon Code (`couponCode`) | `string` | No | — | The coupon code for the offer. |
| — Redeem Online URL (`redeemOnlineUrl`) | `string` | No | — | Link to redeem the offer. |
| — Terms and Conditions (`termsConditions`) | `string` | No | — | The terms and conditions of the offer. |

#### Review: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Account | `string` | Yes | — | The Google Business Profile account resource name. |
| Location | `string` | Yes | — | The specific location resource name. |
| Review (`review`) | `string` | Yes | — | The full review resource name or the review ID portion after "reviews/". |

#### Review: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Account | `string` | Yes | — | The Google Business Profile account resource name. |
| Location | `string` | Yes | — | The specific location resource name. |
| Return All | `boolean` | No | `false` | Whether to return all results or limit to a maximum number. |
| Limit | `number` | No | `20` | Maximum number of results to return. _(shown when Return All is `false`)_ |

#### Review: Reply

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Account | `string` | Yes | — | The Google Business Profile account resource name. |
| Location | `string` | Yes | — | The specific location resource name. |
| Review (`review`) | `string` | Yes | — | The full review resource name or the review ID portion after "reviews/". |
| Reply (`reply`) | `string` | No | — | The body of the reply (up to 4096 characters). |

#### Review: Delete Reply

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Account | `string` | Yes | — | The Google Business Profile account resource name. |
| Location | `string` | Yes | — | The specific location resource name. |
| Review (`review`) | `string` | Yes | — | The full review resource name or the review ID portion after "reviews/". |

## Output Data

Results are **merged onto the input item's JSON** at the top level — the fields the item already carried survive, and a result field with the same name overwrites the item's value. **Binary data on the input item is not forwarded**: if a downstream node needs a file from further upstream, branch around this node rather than through it.

| Operation | Output |
|-----------|--------|
| Post Get Many, Review Get Many | **One output item per post or review.** With Return All on, the node keeps paging until Google runs out of records. |
| Post Create, Post Get, Post Update, Review Get, Review Reply | One output item carrying the returned post or review. |
| Post Delete, Review Delete Reply | One output item carrying `success: true` — Google answers these with no content. |

A listing that comes back empty still emits the input item unchanged, so an empty result reads as an item with no post or review fields on it rather than a missing item. Post Update with no fields selected also returns `success: true` without calling Google at all.

## Usage Examples

- Create a standard post on a business location
- Create an event post with start and end date/time
- Create an offer post with coupon code
- Delete a post by its resource name
- Get a post by resource name
- List all posts for a business location
- Update a post summary or call-to-action
- Get a customer review by resource name
- List all reviews for a business location
- Reply to a customer review
- Delete a reply to a review

## Example Configuration

Publish a standard post with a Learn More button:

```json
{
  "type": "google_business_profile",
  "parameters": {
    "resource": "post",
    "operation": "create",
    "account": "accounts/123456789",
    "location": "accounts/123456789/locations/987654321",
    "postType": "STANDARD",
    "summary": "{{ $json.announcement }}",
    "additionalOptions": {
      "languageCode": "en-US",
      "callToActionType": "LEARN_MORE",
      "callToActionUrl": "https://example.com/news"
    }
  }
}
```

Publish an event post with a start and end time:

```json
{
  "type": "google_business_profile",
  "parameters": {
    "resource": "post",
    "operation": "create",
    "account": "accounts/123456789",
    "location": "accounts/123456789/locations/987654321",
    "postType": "EVENT",
    "summary": "Join us for our grand opening celebration!",
    "title": "Grand Opening Event",
    "startDateTime": "2026-06-15T10:00:00Z",
    "endDateTime": "2026-06-15T18:00:00Z",
    "additionalOptions": {
      "languageCode": "en-US",
      "callToActionType": "LEARN_MORE",
      "callToActionUrl": "https://example.com/event"
    }
  }
}
```

Publish an offer post with a coupon code:

```json
{
  "type": "google_business_profile",
  "parameters": {
    "resource": "post",
    "operation": "create",
    "account": "accounts/123456789",
    "location": "accounts/123456789/locations/987654321",
    "postType": "OFFER",
    "summary": "Limited time offer - 20% off all items!",
    "title": "Summer Sale",
    "startDate": "2026-06-01",
    "endDate": "2026-06-30",
    "additionalOptions": {
      "languageCode": "en-US",
      "couponCode": "SUMMER20",
      "redeemOnlineUrl": "https://example.com/redeem",
      "termsConditions": "Valid until June 30. Cannot be combined with other offers."
    }
  }
}
```

Publish an alert post:

```json
{
  "type": "google_business_profile",
  "parameters": {
    "resource": "post",
    "operation": "create",
    "account": "accounts/123456789",
    "location": "accounts/123456789/locations/987654321",
    "postType": "ALERT",
    "summary": "We are following all safety protocols for your protection.",
    "alertType": "COVID_19",
    "additionalOptions": {
      "languageCode": "en-US"
    }
  }
}
```

Change a post's text and call-to-action:

```json
{
  "type": "google_business_profile",
  "parameters": {
    "resource": "post",
    "operation": "update",
    "account": "accounts/123456789",
    "post": "accounts/123456789/locations/987654321/localPosts/abc123",
    "additionalFields": {
      "summary": "Updated post content with new information",
      "callToActionType": "ORDER",
      "url": "https://example.com/order"
    }
  }
}
```

List a location's posts, one item each:

```json
{
  "type": "google_business_profile",
  "parameters": {
    "resource": "post",
    "operation": "getAll",
    "account": "accounts/123456789",
    "location": "accounts/123456789/locations/987654321",
    "returnAll": false,
    "limit": 10
  }
}
```

Pull every review for a location:

```json
{
  "type": "google_business_profile",
  "parameters": {
    "resource": "review",
    "operation": "getAll",
    "account": "accounts/123456789",
    "location": "accounts/123456789/locations/987654321",
    "returnAll": true
  }
}
```

Reply to the review an upstream node just produced:

```json
{
  "type": "google_business_profile",
  "parameters": {
    "resource": "review",
    "operation": "reply",
    "account": "accounts/123456789",
    "location": "accounts/123456789/locations/987654321",
    "review": "{{ $json.name }}",
    "reply": "Thank you for your feedback! We're glad you enjoyed your visit."
  }
}
```

Remove a reply:

```json
{
  "type": "google_business_profile",
  "parameters": {
    "resource": "review",
    "operation": "deleteReply",
    "account": "accounts/123456789",
    "location": "accounts/123456789/locations/987654321",
    "review": "xyz789"
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Create, update, delete posts and manage customer reviews on Google Business Profile.

- **Location includes the account prefix.** Enter the full `accounts/{accountId}/locations/{locationId}` resource name; the node works out the relative path it needs.
- **Review accepts either form.** Give the full review resource name or just the ID that follows `reviews/` — both work.
- **Post Type changes the required fields.** EVENT needs a title plus start and end date-time; OFFER needs a title plus start and end dates; ALERT needs an alert type. Switching type after filling the fields leaves the unused ones behind, and they are ignored.
- **Update only touches what you list.** The fields you add to Fields to Update are the only ones sent, and adding none returns success without calling Google.
- **A review has one reply.** Reply writes the reply text for that review, and Delete Reply removes it again.
- **Two ways to authenticate.** OAuth2 connects an account interactively; the service account option takes an email and PEM private key instead, which suits unattended runs.