Business Profile Management
Manage location details, attributes, services, menus, media, reviews, and verifications
Business Profile Management
Beyond posting, you can manage your Google Business Profile listing directly through the API. Each subsection below covers a specific management feature.
Food Menus
Manage food menus for locations that support them (restaurants, cafes, etc.). Menu items support price (with currency code), dietaryRestriction (VEGETARIAN, VEGAN, GLUTEN_FREE), allergen (DAIRY, GLUTEN, SHELLFISH), spiciness, servesNumPeople, and preparationMethods.
// Get menus
const menus = await zernio.gmbfoodmenus.getGoogleBusinessFoodMenus('YOUR_ACCOUNT_ID');
console.log('Food menus:', menus);
// Update menus
await zernio.gmbfoodmenus.updateGoogleBusinessFoodMenus('YOUR_ACCOUNT_ID', {
menus: [{
labels: [{ displayName: 'Lunch Menu', languageCode: 'en' }],
sections: [{
labels: [{ displayName: 'Appetizers' }],
items: [{
labels: [{ displayName: 'Caesar Salad', description: 'Romaine, parmesan, croutons' }],
attributes: {
price: { currencyCode: 'USD', units: '12' },
dietaryRestriction: ['VEGETARIAN']
}
}]
}]
}],
updateMask: 'menus'
});See the GMB Food Menus API Reference for full schema details.
Location Details
Read and update your business information including hours, special hours, description, phone numbers, and website. Use readMask to request specific fields and updateMask to update them. Available fields include regularHours, specialHours, profile.description, websiteUri, and phoneNumbers.
// Get location details
const details = await zernio.gmblocationdetails.getGoogleBusinessLocationDetails('YOUR_ACCOUNT_ID', {
readMask: 'regularHours,specialHours,profile,websiteUri'
});
// Update business hours
await zernio.gmblocationdetails.updateGoogleBusinessLocationDetails('YOUR_ACCOUNT_ID', {
updateMask: 'regularHours',
regularHours: {
periods: [
{ openDay: 'MONDAY', openTime: '09:00', closeDay: 'MONDAY', closeTime: '17:00' },
{ openDay: 'TUESDAY', openTime: '09:00', closeDay: 'TUESDAY', closeTime: '17:00' }
]
}
});See the GMB Location Details API Reference for the full schema.
Verification
Check a location's verification status and drive the verification flow programmatically. GET /gmb-verifications returns the location's Voice of Merchant state plus its verification history. hasVoiceOfMerchant tells you whether the listing is verified and published; when it is false, verify.hasPendingVerification tells you whether a verification is already in progress (so you can distinguish "pending" from "not started").
To verify a location: call POST /gmb-verifications/options to see which methods Google offers, POST /gmb-verifications to start one (Google then mails a postcard, calls, or texts the business), and POST /gmb-verifications/{verificationId}/complete with the PIN to finish.
Reviews, edits, and other listing data only surface once a location is matched to a published Google Maps place (it has a placeId, visible via Location Details) and has Voice of Merchant. If GET /gmb-reviews returns an empty array for a listing that has reviews on Google, check hasVoiceOfMerchant here first: the connected location is usually not yet verified or not yet matched to its Maps place.
POST /gmb-verifications is a real-world action: it triggers Google to send a postcard, call, or SMS to the business. Service-area businesses must include a context (service address) when fetching options, otherwise Google returns a 400.
// 1. Check verification state
const { data: state } = await zernio.gmbverifications.getGoogleBusinessVerifications({
path: { accountId: 'YOUR_ACCOUNT_ID' }
});
// 2. See which methods are available
const { data: options } = await zernio.gmbverifications.fetchGoogleBusinessVerificationOptions({
path: { accountId: 'YOUR_ACCOUNT_ID' },
body: { languageCode: 'en-US' }
});
// 3. Start a verification (e.g. by SMS)
const { data: started } = await zernio.gmbverifications.startGoogleBusinessVerification({
path: { accountId: 'YOUR_ACCOUNT_ID' },
body: { method: 'SMS', languageCode: 'en-US', phoneNumber: '+14155550123' }
});
// 4. Complete it with the PIN Google sent
await zernio.gmbverifications.completeGoogleBusinessVerification({
path: { accountId: 'YOUR_ACCOUNT_ID', verificationId: 'VERIFICATION_ID' },
body: { pin: '123456' }
});See the GMB Verification API Reference for the full schema.
Media (Photos)
Upload, list, and delete photos for your Google Business Profile listing. Photo categories: COVER, PROFILE, LOGO, EXTERIOR, INTERIOR, FOOD_AND_DRINK, MENU, PRODUCT, TEAMS, ADDITIONAL.
// List photos
const media = await zernio.gmbmedia.listGoogleBusinessMedia('YOUR_ACCOUNT_ID');
// Upload a photo
await zernio.gmbmedia.createGoogleBusinessMedia('YOUR_ACCOUNT_ID', {
sourceUrl: 'https://example.com/photos/interior.jpg',
description: 'Dining area with outdoor seating',
category: 'INTERIOR'
});See the GMB Media API Reference for full details.
Attributes
Manage amenities and services like delivery, Wi-Fi, outdoor seating, and payment types. Available attributes vary by business category. Common ones include has_dine_in, has_takeout, has_delivery, has_wifi, has_outdoor_seating, and pay_credit_card_types_accepted.
// Get attributes
const attrs = await zernio.gmbattributes.getGoogleBusinessAttributes('YOUR_ACCOUNT_ID');
// Update attributes
await zernio.gmbattributes.updateGoogleBusinessAttributes('YOUR_ACCOUNT_ID', {
attributes: [
{ name: 'has_delivery', values: [true] },
{ name: 'has_outdoor_seating', values: [true] }
],
attributeMask: 'has_delivery,has_outdoor_seating'
});See the GMB Attributes API Reference for full details.
Place Actions
Manage booking, ordering, and reservation buttons that appear on your listing. Action types: APPOINTMENT, ONLINE_APPOINTMENT, DINING_RESERVATION, FOOD_ORDERING, FOOD_DELIVERY, FOOD_TAKEOUT, SHOP_ONLINE.
// List place actions
const actions = await zernio.gmbplaceactions.listGoogleBusinessPlaceActions('YOUR_ACCOUNT_ID');
// Create a place action
await zernio.gmbplaceactions.createGoogleBusinessPlaceAction('YOUR_ACCOUNT_ID', {
uri: 'https://order.ubereats.com/mybusiness',
placeActionType: 'FOOD_ORDERING'
});See the GMB Place Actions API Reference for full details.
Update an existing place action
Use PATCH /v1/accounts/{accountId}/gmb-place-actions to update an existing action link (change uri and/or placeActionType). Only fields included in the request body are updated.
await zernio.gmbplaceactions.updateGoogleBusinessPlaceAction('YOUR_ACCOUNT_ID', {
name: 'locations/123/placeActionLinks/456',
uri: 'https://order.doordash.com/joespizza'
});Services
Get and manage the services offered by a Google Business Profile location. Services can be structured (using a predefined serviceTypeId) or free-form (custom label), with an optional price.
Note: Google's API requires full replacement of the service list. Use
PUT /v1/accounts/{accountId}/gmb-servicesto replace the entire list.
// Get services
const services = await zernio.gmbservices.getGoogleBusinessServices('YOUR_ACCOUNT_ID');
console.log('Services:', services);
// Replace services (full replacement)
await zernio.gmbservices.updateGoogleBusinessServices('YOUR_ACCOUNT_ID', {
serviceItems: [
{
freeFormServiceItem: {
category: 'categories/gcid:plumber',
label: {
displayName: 'Pipe Repair',
description: 'Emergency and scheduled pipe repair'
}
},
price: { currencyCode: 'USD', units: '150' }
}
]
});