Aether

Google Business

Google Business Profile OAuth connect, local posts, CTAs, events, offers, and scheduling on Aether.

Google Business Profile is supported in V1 for OAuth connect, local posts (STANDARD / EVENT / OFFER), and scheduling. Posts appear on Search and Maps. Reviews, location management, and location-level analytics are planned next.

Connect a location

  1. Generate a Connect Link with "platform": "googlebusiness"
  2. Send the url to your user — they authorize via Google OAuth
  3. Aether redirects to a location picker; the user selects a verified location
  4. The profile appears via GET /v1/profiles with platformAccountId as accounts/{accountId}/locations/{locationId}

Self-hosted deployments

Set GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET on your API server (shared with YouTube). Register redirect URI {NEXT_PUBLIC_API_URL}/v1/oauth/callback/googlebusiness on your Google Cloud OAuth client.

Scope requested: https://www.googleapis.com/auth/business.manage.

Enable Google Business Profile APIs on the project (Account Management, Business Information, My Business, Performance). The location must be verified in Google Business Profile Manager before you can publish.

Content rules

RuleLimit
Summary textMax 1,500 characters
MediaAt most one JPG/PNG image
VideoNot supported
Topic typesSTANDARD (default), EVENT, OFFER

Publish a STANDARD update

{
  "text": "New seasonal menu is live — stop by this weekend!",
  "profileIds": ["prof_gbp123"],
  "mediaUrls": ["https://cdn.example.com/menu.jpg"],
  "overrides": {
    "googlebusiness": {
      "callToAction": {
        "type": "LEARN_MORE",
        "url": "https://example.com/menu"
      }
    }
  }
}

EVENT post

{
  "text": "Join us for our grand opening weekend.",
  "profileIds": ["prof_gbp123"],
  "overrides": {
    "googlebusiness": {
      "topicType": "EVENT",
      "event": {
        "title": "Grand Opening",
        "startAt": "2026-06-01T10:00:00.000Z",
        "endAt": "2026-06-01T18:00:00.000Z"
      },
      "callToAction": {
        "type": "SIGN_UP",
        "url": "https://example.com/rsvp"
      }
    }
  }
}

OFFER post

{
  "text": "Save 20% on your next visit with this coupon.",
  "profileIds": ["prof_gbp123"],
  "overrides": {
    "googlebusiness": {
      "topicType": "OFFER",
      "offer": {
        "couponCode": "SAVE20",
        "redeemOnlineUrl": "https://example.com/redeem",
        "termsConditions": "Valid while supplies last. One per customer."
      }
    }
  }
}

Platform overrides

FieldDescription
topicTypeSTANDARD, EVENT, or OFFER
callToAction{ type, url? } — types: LEARN_MORE, BOOK, ORDER, SHOP, SIGN_UP, CALL (url required except CALL)
eventRequired for EVENT: { title, startAt, endAt } (ISO 8601)
offerOptional for OFFER: { couponCode?, redeemOnlineUrl?, termsConditions? }
languageCodeBCP 47 language code (default en)
text / mediaUrlsStandard override fields

Scheduling

Pass scheduledFor on POST /v1/posts as with any other platform. Aether's queue publishes the localPost when the schedule fires.

Limits & notes

  • Per-post insights are unavailable (deprecated by Google). Location performance metrics will ship in a later release.
  • One Aether SocialProfile maps to one GBP location. Connect multiple profiles to post to multiple locations.
  • Unverified locations are rejected at connect time with a clear error.

On this page