Skip to main content
Back to all posts

How to Post to Google Business Profile With an API in 2026 (Step-by-Step)

·5 min read·Jonathan Geiger
google business apilocal marketingtutorial2026

Google's own Business Profile API is more work than it should be. You have to request access through an allowlist, set up OAuth, and learn a "local post" model where updates, events, and offers each have their own shape. If you just want to publish a post to a business location from your app, there's a faster way.

PostPeer gives you a single endpoint that handles updates, events, offers, call-to-action buttons, photos, and scheduling for Google Business Profile, with the allowlist-approved app and OAuth handled for you. Here's how to set it up.

What you need

  • A PostPeer account (the free tier includes 20 credits, no card required)
  • A Google account that manages at least one Business Profile location
  • Five minutes

Step 1: Get your API key

Sign up at PostPeer, open the dashboard, and copy your access key from the Access Keys page. Every request uses the x-access-key header:

-H "x-access-key: YOUR_API_KEY"

Grab your API key from the Access Keys page. Keep it secret — treat it like a password.

Step 2: Connect the Google Business Profile

PostPeer handles the OAuth flow. Hit the connect endpoint to get an authorization URL:

curl https://api.postpeer.dev/v1/connect/googlebusiness \
  -H "x-access-key: YOUR_API_KEY"

Open the returned URL, authorize access, and select the locations you want to manage. PostPeer creates one integration per location. Then list them to get your account IDs:

curl https://api.postpeer.dev/v1/connect/integrations \
  -H "x-access-key: YOUR_API_KEY"

Each connected location has an id — that's your accountId for posting. You can also connect and manage locations visually in the PostPeer dashboard.

Step 3: Post an update

A standard update is the default post type. Send the text and the location:

curl -X POST https://api.postpeer.dev/v1/posts \
  -H "x-access-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "We just extended our weekend hours — now open until 8pm on Saturdays.",
    "platforms": [
      { "platform": "googlebusiness", "accountId": "your-location-id" }
    ],
    "publishNow": true
  }'

The post appears on the location's Google Search and Maps listing. That's it — one request.

If you prefer a visual interface, the Playground lets you compose the post, pick the location, and see the exact API request being built in real time.

Adding a call-to-action button

Most Business Profile posts perform better with a button. Add callToActionType and a callToActionUrl:

curl -X POST https://api.postpeer.dev/v1/posts \
  -H "x-access-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Book your spring tune-up online in under a minute.",
    "platforms": [
      {
        "platform": "googlebusiness",
        "accountId": "your-location-id",
        "platformSpecificData": {
          "callToActionType": "BOOK",
          "callToActionUrl": "https://yourshop.com/book"
        }
      }
    ],
    "publishNow": true
  }'

Supported buttons are BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP, CALL, and GET_OFFER. A callToActionUrl is required for every type except CALL.

Posting a photo

Attach an image with a mediaItems array — PostPeer uploads it to the profile for you:

curl -X POST https://api.postpeer.dev/v1/posts \
  -H "x-access-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Fresh batch out of the oven this morning.",
    "platforms": [
      { "platform": "googlebusiness", "accountId": "your-location-id" }
    ],
    "mediaItems": [
      { "type": "image", "url": "https://your-cdn.com/croissants.jpg" }
    ],
    "publishNow": true
  }'

Posting an event

Set topicType to EVENT and pass the event title and start/end date and time:

curl -X POST https://api.postpeer.dev/v1/posts \
  -H "x-access-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Join us for a free tasting flight this Friday evening.",
    "platforms": [
      {
        "platform": "googlebusiness",
        "accountId": "your-location-id",
        "platformSpecificData": {
          "topicType": "EVENT",
          "eventTitle": "Friday Tasting Night",
          "eventStartDate": "2026-09-18",
          "eventStartTime": "18:00",
          "eventEndDate": "2026-09-18",
          "eventEndTime": "21:00"
        }
      }
    ],
    "publishNow": true
  }'

Posting an offer

Set topicType to OFFER and include the offer details — coupon code, redemption URL, and terms:

curl -X POST https://api.postpeer.dev/v1/posts \
  -H "x-access-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "This weekend only: 20% off all detailing packages.",
    "platforms": [
      {
        "platform": "googlebusiness",
        "accountId": "your-location-id",
        "platformSpecificData": {
          "topicType": "OFFER",
          "offerCouponCode": "SHINE20",
          "offerRedeemOnlineUrl": "https://yourshop.com/offer",
          "offerTermsConditions": "Valid through Sunday. One per customer."
        }
      }
    ],
    "publishNow": true
  }'

Scheduling posts

Swap publishNow for scheduledFor with an ISO timestamp (and an optional timezone) to queue a post instead of publishing immediately:

curl -X POST https://api.postpeer.dev/v1/posts \
  -H "x-access-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Now open Sundays, 10am to 4pm.",
    "platforms": [
      { "platform": "googlebusiness", "accountId": "your-location-id" }
    ],
    "scheduledFor": "2026-09-20T14:00:00Z",
    "timezone": "America/New_York"
  }'

If you'd rather not build the scheduling UI yourself, the free Google Business post scheduler does it in the browser. See the full Google Business scheduling API for the queue, edit, and cancel endpoints.

Cross-post to multiple platforms

Because it's the same /v1/posts endpoint, you can publish the same promo to Google Business, Facebook, and Instagram in one request — PostPeer applies each platform's formatting:

curl -X POST https://api.postpeer.dev/v1/posts \
  -H "x-access-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "This weekend only: 20% off all services.",
    "platforms": [
      { "platform": "googlebusiness", "accountId": "gbp-location-id" },
      { "platform": "facebook", "accountId": "fb-page-id" },
      { "platform": "instagram", "accountId": "ig-account-id" }
    ],
    "mediaItems": [
      { "type": "image", "url": "https://your-cdn.com/promo.jpg" }
    ],
    "publishNow": true
  }'

What's next

That's everything you need to post to Google Business Profile from your app. Read the Google Business posting API page for the full field reference, or the platform docs for details on locations and post types. If you're comparing providers first, here's a rundown of the best Google Business posting APIs.