> For the complete documentation index, see [llms.txt](https://docs.erathos.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.erathos.com/connectors/apis/google-my-business.md).

# Google My Business

Connect your Google My Business to your data warehouse. Sync locations, reviews, media, posts, and metrics to BigQuery, Redshift, PostgreSQL, Databricks, and more.

## Using the Erathos platform

When selecting Google My Business as a new connector on the Erathos platform, you will need to name your connection and fill in the following form:

* **Client ID** — the OAuth 2.0 client ID from your Google Cloud project, used to identify the connection
* **Client Secret** — the secret that pairs with the Client ID for the OAuth 2.0 token exchange
* **Sign in with Google** — authorize the Google account that manages your Business Profiles (scope `business.manage`)

With this connection created you can seamlessly move your Google My Business data to your BigQuery, Redshift or PostgreSQL data warehouse.

### How to find my token?

Google My Business (the Google Business Profile API) uses OAuth 2.0 instead of a static token, so the connector is authenticated with a Google Cloud **Client ID** and **Client Secret** plus a one-time authorization of your Google account.

To get them, open the [Google Cloud Console](https://console.cloud.google.com/) and create (or select) a project: enable the Google Business Profile API family under **APIs & Services → Library**, configure the **OAuth consent screen** adding the scope `https://www.googleapis.com/auth/business.manage`, and create an **OAuth client ID** of type Web application under **APIs & Services → Credentials**. Copy the generated **Client ID** and **Client Secret**.

Paste the Client ID and Client Secret into the Erathos connector form, then complete the **Sign in with Google** step with the Google account that manages your Business Profiles. After Google redirects you back, click **Save and close** — Erathos stores the refresh token and renews the access token (valid for \~1 hour) automatically. Note that Google's default API quota is 0 until your Cloud project is approved for Basic API Access, with a rate limit of 300 queries/minute per API plus per-endpoint daily caps.

## Endpoints and fields

### account\_admins

Sync type availability: Full-refresh

Child of [accounts](#accounts)

| Field             | Type    |
| ----------------- | ------- |
| name              | text    |
| admin             | text    |
| account           | text    |
| role              | text    |
| pendingInvitation | boolean |

### account\_invitations

Sync type availability: Full-refresh

Child of [accounts](#accounts)

| Field          | Type |
| -------------- | ---- |
| name           | text |
| role           | text |
| targetType     | text |
| targetAccount  | json |
| targetLocation | json |

### accounts

Sync type availability: Full-refresh

Parent of [account\_admins](#account_admins), [account\_invitations](#account_invitations), [locations](#locations), [recommended\_google\_locations](#recommended_google_locations)

| Field             | Type |
| ----------------- | ---- |
| name              | text |
| accountName       | text |
| primaryOwner      | text |
| type              | text |
| role              | text |
| verificationState | text |
| vettedState       | text |
| accountNumber     | text |
| permissionLevel   | text |
| organizationInfo  | json |

### attributes

Sync type availability: Full-refresh

| Field            | Type    |
| ---------------- | ------- |
| parent           | text    |
| valueType        | text    |
| displayName      | text    |
| groupDisplayName | text    |
| repeatable       | boolean |
| valueMetadata    | json    |
| deprecated       | boolean |

### categories

Sync type availability: Full-refresh

| Field          | Type |
| -------------- | ---- |
| moreHoursTypes | json |
| name           | text |
| displayName    | text |
| serviceTypes   | json |

### customer\_media

Sync type availability: Full-refresh

Child of [locations](#locations)

| Field               | Type      |
| ------------------- | --------- |
| name                | text      |
| mediaFormat         | text      |
| locationAssociation | json      |
| googleUrl           | text      |
| thumbnailUrl        | text      |
| createTime          | timestamp |
| dimensions          | json      |
| insights            | json      |
| attribution         | json      |
| description         | text      |
| sourceUrl           | text      |
| dataRef             | json      |

### daily\_metrics\_time\_series

Sync type availability: Full and incremental refresh

[Cursor](/platform/connections/sync-types.md#understanding-cursors): `metric_date`

Child of [locations](#locations)

| Field         | Type | Cursor |
| ------------- | ---- | ------ |
| metric\_date  | date | ✓      |
| daily\_metric | text |        |
| date          | json |        |
| value         | text |        |

### followers\_metadata

Sync type availability: Full-refresh

Child of [locations](#locations)

| Field | Type |
| ----- | ---- |
| name  | text |
| count | text |

### food\_menus

Sync type availability: Full-refresh

Child of [locations](#locations)

| Field       | Type    |
| ----------- | ------- |
| menu\_index | integer |
| labels      | json    |
| sourceUrl   | text    |
| sections    | json    |
| cuisines    | json    |

### local\_posts

Sync type availability: Full-refresh

Child of [locations](#locations)

| Field                 | Type      |
| --------------------- | --------- |
| name                  | text      |
| languageCode          | text      |
| summary               | text      |
| callToAction          | json      |
| createTime            | timestamp |
| updateTime            | timestamp |
| scheduledTime         | timestamp |
| recurringInstanceTime | timestamp |
| event                 | json      |
| state                 | text      |
| media                 | json      |
| searchUrl             | text      |
| topicType             | text      |
| alertType             | text      |
| offer                 | json      |

### location\_admins

Sync type availability: Full-refresh

Child of [locations](#locations)

| Field             | Type    |
| ----------------- | ------- |
| account           | text    |
| admin             | text    |
| name              | text    |
| pendingInvitation | boolean |
| role              | text    |

### locations

Sync type availability: Full-refresh

Parent of [customer\_media](#customer_media), [daily\_metrics\_time\_series](#daily_metrics_time_series), [followers\_metadata](#followers_metadata), [food\_menus](#food_menus), [local\_posts](#local_posts), [location\_admins](#location_admins), [lodging](#lodging), [media](#media), [place\_action\_links](#place_action_links), [reviews](#reviews), [searchkeyword\_impressions\_monthly](#searchkeyword_impressions_monthly), [service\_list](#service_list), [verifications](#verifications), [voice\_of\_merchant\_state](#voice_of_merchant_state)

Child of [accounts](#accounts)

| Field                     | Type |
| ------------------------- | ---- |
| name                      | text |
| languageCode              | text |
| storeCode                 | text |
| locationName              | text |
| primaryPhone              | text |
| additionalPhones          | json |
| address                   | json |
| primaryCategory           | json |
| additionalCategories      | json |
| websiteUrl                | text |
| regularHours              | json |
| specialHours              | json |
| serviceArea               | json |
| locationKey               | json |
| labels                    | json |
| adWordsLocationExtensions | json |
| latlng                    | json |
| openInfo                  | json |
| locationState             | json |
| attributes                | json |
| metadata                  | json |
| priceLists                | json |
| profile                   | json |
| relationshipData          | json |
| moreHours                 | json |

### lodging

Sync type availability: Full-refresh

Child of [locations](#locations)

| Field            | Type |
| ---------------- | ---- |
| name             | text |
| metadata         | json |
| property         | json |
| services         | json |
| policies         | json |
| foodAndDrink     | json |
| pools            | json |
| wellness         | json |
| activities       | json |
| transportation   | json |
| families         | json |
| connectivity     | json |
| business         | json |
| accessibility    | json |
| pets             | json |
| parking          | json |
| housekeeping     | json |
| healthAndSafety  | json |
| sustainability   | json |
| commonLivingArea | json |
| guestUnits       | json |
| allUnits         | json |
| someUnits        | json |

### media

Sync type availability: Full-refresh

Child of [locations](#locations)

| Field               | Type      |
| ------------------- | --------- |
| name                | text      |
| mediaFormat         | text      |
| locationAssociation | json      |
| googleUrl           | text      |
| thumbnailUrl        | text      |
| createTime          | timestamp |
| dimensions          | json      |
| insights            | json      |
| attribution         | json      |
| description         | text      |
| sourceUrl           | text      |
| dataRef             | json      |

### place\_action\_links

Sync type availability: Full-refresh

Child of [locations](#locations)

| Field           | Type      |
| --------------- | --------- |
| createTime      | timestamp |
| isEditable      | boolean   |
| isPreferred     | boolean   |
| name            | text      |
| placeActionType | text      |
| providerType    | text      |
| updateTime      | timestamp |
| uri             | text      |

### place\_action\_type\_metadata

Sync type availability: Full-refresh

| Field           | Type |
| --------------- | ---- |
| placeActionType | text |
| displayName     | text |

### recommended\_google\_locations

Sync type availability: Full-refresh

Child of [accounts](#accounts)

| Field                 | Type |
| --------------------- | ---- |
| name                  | text |
| location              | json |
| requestAdminRightsUrl | text |

### reviews

Sync type availability: Full-refresh

Child of [locations](#locations)

| Field            | Type      |
| ---------------- | --------- |
| name             | text      |
| reviewId         | text      |
| reviewer         | json      |
| starRating       | text      |
| comment          | text      |
| createTime       | timestamp |
| updateTime       | timestamp |
| reviewReply      | json      |
| reviewMediaItems | json      |
| reviewReplyUrl   | text      |

### searchkeyword\_impressions\_monthly

Sync type availability: Full and incremental refresh

[Cursor](/platform/connections/sync-types.md#understanding-cursors): `impression_month`

Child of [locations](#locations)

| Field             | Type | Cursor |
| ----------------- | ---- | ------ |
| impression\_month | date | ✓      |
| searchKeyword     | text |        |
| insightsValue     | json |        |

### service\_list

Sync type availability: Full-refresh

Child of [locations](#locations)

| Field                 | Type    |
| --------------------- | ------- |
| service\_item\_index  | integer |
| isOffered             | boolean |
| price                 | json    |
| structuredServiceItem | json    |
| freeFormServiceItem   | json    |

### verifications

Sync type availability: Full-refresh

Child of [locations](#locations)

| Field        | Type      |
| ------------ | --------- |
| name         | text      |
| method       | text      |
| state        | text      |
| createTime   | timestamp |
| announcement | text      |

### voice\_of\_merchant\_state

Sync type availability: Full-refresh

Child of [locations](#locations)

| Field                    | Type    |
| ------------------------ | ------- |
| hasVoiceOfMerchant       | boolean |
| hasBusinessAuthority     | boolean |
| waitForVoiceOfMerchant   | json    |
| verify                   | json    |
| resolveOwnershipConflict | json    |
| complyWithGuidelines     | json    |

## Entity Relationships

```mermaid
erDiagram
    accounts ||--o{ account_admins : "name = _pk_accounts"
    accounts ||--o{ account_invitations : "name = _pk_accounts"
    accounts ||--o{ locations : "name = _pk_accounts"
    accounts ||--o{ recommended_google_locations : "name = _pk_accounts"
    locations ||--o{ customer_media : "name = _pk_locations"
    locations ||--o{ daily_metrics_time_series : "name = _pk_locations"
    locations ||--o{ followers_metadata : "name = _pk_locations"
    locations ||--o{ food_menus : "name = _pk_locations"
    locations ||--o{ local_posts : "name = _pk_locations"
    locations ||--o{ location_admins : "name = _pk_locations"
    locations ||--o{ lodging : "name = _pk_locations"
    locations ||--o{ media : "name = _pk_locations"
    locations ||--o{ place_action_links : "name = _pk_locations"
    locations ||--o{ reviews : "name = _pk_locations"
    locations ||--o{ searchkeyword_impressions_monthly : "name = _pk_locations"
    locations ||--o{ service_list : "name = _pk_locations"
    locations ||--o{ verifications : "name = _pk_locations"
    locations ||--o{ voice_of_merchant_state : "name = _pk_locations"

    accounts {
        text name PK
    }
    account_admins {
        text _pk_accounts PK
        text name PK
    }
    account_invitations {
        text _pk_accounts PK
        text name PK
    }
    attributes {
        text parent PK
    }
    categories {
        text name PK
    }
    customer_media {
        text _pk_locations PK
        text name PK
    }
    daily_metrics_time_series {
        text _pk_locations PK
        text daily_metric PK
        date metric_date PK
    }
    followers_metadata {
        text _pk_locations PK
        text name PK
    }
    food_menus {
        text _pk_locations PK
        integer menu_index PK
    }
    local_posts {
        text _pk_locations PK
        text name PK
    }
    location_admins {
        text _pk_locations PK
        text name PK
    }
    locations {
        text _pk_accounts PK
        text name PK
    }
    lodging {
        text _pk_locations PK
        text name PK
    }
    media {
        text _pk_locations PK
        text name PK
    }
    place_action_links {
        text _pk_locations PK
        text name PK
    }
    place_action_type_metadata {
        text placeActionType PK
    }
    recommended_google_locations {
        text _pk_accounts PK
        text name PK
    }
    reviews {
        text _pk_locations PK
        text name PK
    }
    searchkeyword_impressions_monthly {
        text _pk_locations PK
        date impression_month PK
        text searchKeyword PK
    }
    service_list {
        text _pk_locations PK
        integer service_item_index PK
    }
    verifications {
        text _pk_locations PK
        text name PK
    }
    voice_of_merchant_state {
        text _pk_locations PK
    }
```
