Platform Guide12 min readApr 3, 2026

How to Post to Google Business Profile via API — Updates, Events & Offers

Google Business Profile posts appear directly in Google Search and Maps when customers search for your business. This guide covers every post type, all six CTA buttons, multi-location management, scheduling, and code examples for both the REST API and TypeScript SDK.

Why Google Business Profile matters for local SEO

When someone searches for "coffee shop near me" or "plumber in Brooklyn," Google displays a Local Pack — three business listings with reviews, hours, and photos pulled directly from Google Business Profile. Businesses that publish regular GBP posts signal freshness to Google's ranking algorithm, which correlates with higher placement in the Local Pack and Maps results.

According to Google's own documentation, businesses with complete and active profiles are 2.7x more likely to be considered reputable by customers. Posts add another engagement layer: they show up as cards below your business info, giving searchers a reason to click through before they even visit your website.

The challenge is that most businesses treat GBP as a set-and-forget listing. They fill in the address and hours, maybe upload a logo, and never touch it again. Meanwhile, competitors who post weekly updates, events, and offers consistently outrank them in local search. The solution is automation — and that starts with the API.

Local SEO impact

Businesses that publish at least one GBP post per week see 42% more profile views and 32% more website clicks compared to inactive listings. Source: BrightLocal 2025 Local Consumer Review Survey.

CodivUpload exposes Google Business Profile as one of its 12 supported platforms. You post to GBP using the same API endpoint, the same authentication, and the same scheduling system you already use for TikTok, Instagram, YouTube, and the rest. No separate integration, no Google API credentials to manage — CodivUpload handles the OAuth flow and token refresh.

Three post types: STANDARD, EVENT, OFFER

Google Business Profile supports three distinct post types, each with its own visual layout in search results. The gbp_topic_type parameter controls which template Google renders.

STANDARD — General updates

The default post type. Use it for news, announcements, menu changes, new arrivals, or any general update. Standard posts appear as cards in your business listing with text, an optional photo, and an optional CTA button.

Standard posts are visible for seven days by default. After that, they move to the "Updates" tab but no longer appear prominently in search results. Posting at least once per week keeps your listing fresh.

EVENT — Promote upcoming events

Event posts include a title, start datetime, optional end datetime, and description. Google displays them with a distinct event badge and date highlight, making them stand out in your listing.

Event posts remain visible until the event end date passes. For recurring events (e.g., weekly trivia night), schedule a new event post each week via the API — CodivUpload's scheduled_date field handles the timing.

OFFER — Time-limited promotions

Offer posts display a coupon code, redemption URL, and terms directly in search results. Google renders them with a yellow "Offer" badge that catches attention. Customers can copy the coupon code without visiting your website.

Use gbp_offer_coupon_code, gbp_offer_redeem_url, and gbp_offer_terms to configure the offer details. Pair with a SHOP or ORDER CTA button for maximum conversion.

Six CTA button types

Every GBP post can include one call-to-action button. The gbp_cta_type parameter accepts six values, each rendering a different button label in your listing.

CTA TypeButton LabelBest For
BOOKBookRestaurants, salons, medical practices — any appointment-based business
ORDEROrder onlineFood delivery, ecommerce, retail with online ordering
SHOPShopRetail stores, product launches, seasonal collections
LEARN_MORELearn moreService businesses, B2B, educational content
SIGN_UPSign upNewsletter signups, event registrations, free trials
CALLCallEmergency services, consultations — uses the phone number on file

CALL is different

The CALL CTA uses your business phone number from the GBP listing itself — you do not need to set gbp_cta_url for it. All other CTA types require a URL.

Full parameter reference

All Google Business-specific parameters accepted by the POST /v1/posts endpoint. These are sent alongside standard fields like description, media_urls, and scheduled_date.

ParameterTypeDescription
gbp_location_idstringGoogle Business location ID. Found in your GBP dashboard URL or via the Locations API.
gbp_topic_typestringSTANDARD (default), EVENT, or OFFER.
gbp_cta_typestringBOOK | ORDER | SHOP | LEARN_MORE | SIGN_UP | CALL
gbp_cta_urlstringDestination URL for the CTA button.
gbp_event_titlestringEvent title (required for EVENT type).
gbp_event_startstringISO 8601 start datetime (required for EVENT type).
gbp_event_endstringISO 8601 end datetime (optional, defaults to end of start day).
gbp_offer_coupon_codestringCoupon code displayed to customers.
gbp_offer_redeem_urlstringURL where customers redeem the offer.
gbp_offer_termsstringTerms and conditions text.

TypeScript SDK example

The codivupload npm package provides full type safety for all GBP parameters. Install with npm install codivupload and use the example below.

gbp-offer.ts
import { CodivUpload } from "codivupload";

const codiv = new CodivUpload("YOUR_API_KEY");

// Create an OFFER post with coupon code
const post = await codiv.posts.create({
  profile_name: "downtown-cafe",
  platforms: ["google_business"],
  post_type: "text",
  description: "Summer special — 25% off all iced drinks this week!",
  media_urls: ["https://cdn.example.com/iced-drinks.jpg"],
  gbp_location_id: "locations/98765",
  gbp_topic_type: "OFFER",
  gbp_cta_type: "ORDER",
  gbp_cta_url: "https://downtown-cafe.com/order",
  gbp_offer_coupon_code: "ICED25",
  gbp_offer_redeem_url: "https://downtown-cafe.com/redeem",
  gbp_offer_terms: "Valid through Apr 10, 2026. In-store and online.",
});

// post.id → "post_gbp_abc123"

REST API example

If you prefer raw HTTP, here is a curl command that creates an EVENT post for a weekly live music night. The same endpoint handles all 12 platforms — just change the platforms array and add the relevant overrides.

gbp-event.sh
# Create an EVENT post on Google Business Profile
curl -X POST \
  https://api.codivupload.com/v1/posts \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "profile_name": "live-venue",
    "platforms": ["google_business"],
    "post_type": "text",
    "description": "Live jazz every Friday at 8 PM!",
    "gbp_location_id": "locations/55555",
    "gbp_topic_type": "EVENT",
    "gbp_event_title": "Friday Night Jazz",
    "gbp_event_start": "2026-04-11T20:00:00Z",
    "gbp_event_end": "2026-04-11T23:30:00Z",
    "gbp_cta_type": "BOOK",
    "gbp_cta_url": "https://live-venue.com/reserve"  }'

Multi-location management

Franchise owners, restaurant chains, and service businesses with multiple branches face a specific challenge: each Google Business location is a separate listing that needs its own posts, photos, and engagement. Manually posting to 15 or 50 locations every week is not realistic.

CodivUpload solves this with the gbp_location_id parameter. Each API call targets one location. To publish the same offer to all your locations, iterate over your location IDs and send one request per location. The payload stays identical except for the location ID.

multi-location.ts
// Post the same offer to 3 locations
const locations = ["locations/001", "locations/002", "locations/003"];

for (const loc of locations) {
  await codiv.posts.create({
    profile_name: "chain-brand",
    platforms: ["google_business"],
    post_type: "text",
    description: "Grand opening sale — 30% off everything!",
    gbp_location_id: loc,
    gbp_topic_type: "OFFER",
    gbp_offer_coupon_code: "GRAND30",
  });
}

For businesses with dozens of locations, consider using CodivUpload's scheduling to stagger posts across locations — Google may throttle listings that receive many rapid updates simultaneously. A 30-second delay between requests is sufficient.

Scheduling GBP posts

Google Business posts are most effective when published consistently. The ideal cadence is 1-2 posts per week per location. CodivUpload's scheduled_date field lets you batch-create an entire month of GBP content in one session.

Set scheduled_date to any future ISO 8601 timestamp. CodivUpload queues the post and publishes it at the specified time. You can also combine GBP posts with other platforms in the same scheduling workflow — publish an offer to Google Business and simultaneously announce it on Instagram, Facebook, and X.

Recommended cadence
  • 1 STANDARD update per week
  • 1 EVENT post before each event
  • 1 OFFER post per active promotion
  • Photos with every post for best visibility
Best posting times
  • Tuesday-Thursday, 10 AM-12 PM local
  • Avoid weekends for B2B services
  • Post events 3-5 days in advance
  • Post offers on Monday for the week ahead

GBP posts in the CodivUpload dashboard

You do not need to use the API if you prefer a visual interface. The CodivUpload dashboard shows Google Business as a destination alongside your other connected platforms. Compose a post, select GBP from the platform selector, fill in the topic type and CTA fields, and publish.

CodivUpload Dashboard
Downtown CafeGoogle BusinessOFFER

Summer special — 25% off all iced drinks this week! Use code ICED25 at checkout.

CTA: ORDERCoupon: ICED25Location: DowntownPublished 2m ago

Cross-post GBP content to other platforms

A promotion does not stop at Google Business. The same offer should appear on Instagram, Facebook, and X to reach customers who do not search Google directly. CodivUpload's multi-platform posting makes this a single API call.

Add multiple platform slugs to the platforms array and include per-platform overrides. The GBP-specific parameters (gbp_*) are only sent to Google Business — Instagram, Facebook, and other platforms receive only their relevant fields.

For example, you could publish the same "Summer sale" message to Google Business (as an OFFER with coupon code), Instagram (as a Reel with location tag), and Facebook (as a Page post). One API call, three platforms, each with optimized formatting.

Start posting to Google Business for free

2 profiles, 10 uploads/mo on the free plan. All 12 platforms included.

Get Started Free