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 Type | Button Label | Best For |
|---|---|---|
BOOK | Book | Restaurants, salons, medical practices — any appointment-based business |
ORDER | Order online | Food delivery, ecommerce, retail with online ordering |
SHOP | Shop | Retail stores, product launches, seasonal collections |
LEARN_MORE | Learn more | Service businesses, B2B, educational content |
SIGN_UP | Sign up | Newsletter signups, event registrations, free trials |
CALL | Call | Emergency 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.
| Parameter | Type | Description |
|---|---|---|
gbp_location_id | string | Google Business location ID. Found in your GBP dashboard URL or via the Locations API. |
gbp_topic_type | string | STANDARD (default), EVENT, or OFFER. |
gbp_cta_type | string | BOOK | ORDER | SHOP | LEARN_MORE | SIGN_UP | CALL |
gbp_cta_url | string | Destination URL for the CTA button. |
gbp_event_title | string | Event title (required for EVENT type). |
gbp_event_start | string | ISO 8601 start datetime (required for EVENT type). |
gbp_event_end | string | ISO 8601 end datetime (optional, defaults to end of start day). |
gbp_offer_coupon_code | string | Coupon code displayed to customers. |
gbp_offer_redeem_url | string | URL where customers redeem the offer. |
gbp_offer_terms | string | Terms 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.
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.
# 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.
// 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.
- 1 STANDARD update per week
- 1 EVENT post before each event
- 1 OFFER post per active promotion
- Photos with every post for best visibility
- 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.
Summer special — 25% off all iced drinks this week! Use code ICED25 at checkout.
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.