Zernio
APIFor you
Zernio
APIFor you
Platforms

Google Business Profile

Overview

Publish

Posts & content typesMedia requirementsEvent & offer postsMulti-location posting

Engage

AnalyticsInbox

Manage

Business Profile managementServices & food menus

Reference

Fields, media & limits
Dashboard
OverviewPlatformsAPI ReferenceResources
Google Business Profile

Analytics

Read daily performance metrics and the search keywords that triggered impressions for a Google Business Profile location.


By the end of this page, you can read a Google Business Profile (googlebusiness) location's daily metrics and the search keywords that triggered its impressions.

The daily metrics cover impressions, website clicks, calls, direction requests, conversations, bookings and food orders.

Before you start

You need a connected Google Business Profile account (accountId). Both endpoints read location-level data going back at most 18 months.

Google Business Profile has no per-post analytics. Google deprecated the per-post insights endpoint with no replacement, so the two location-level endpoints below are all Google exposes.

Read performance metrics

Call GET /v1/analytics/googlebusiness/performance with accountId and a date range (Performance metrics).

  • startDate defaults to 30 days ago.
  • endDate defaults to today.
  • metrics narrows the response to a comma-separated list and defaults to every metric.

Google delivers the data 2 to 3 days late.

import Zernio from '@zernio/node';

const zernio = new Zernio();

const { data: performance } = await zernio.analytics.getGoogleBusinessPerformance({
  query: {
    accountId: '66b2e19d8c3f5a7e9d0b1c2d',
    startDate: '2026-08-01',
    endDate: '2026-08-31'
  }
});

console.log(performance.metrics.WEBSITE_CLICKS.total);

Response (200), one key per metric with the sum and the daily series:

{
  "success": true,
  "accountId": "66b2e19d8c3f5a7e9d0b1c2d",
  "platform": "googlebusiness",
  "dateRange": { "startDate": "2026-08-01", "endDate": "2026-08-31" },
  "metrics": {
    "WEBSITE_CLICKS": {
      "total": 42,
      "values": [
        { "date": "2026-08-01", "value": 3 },
        { "date": "2026-08-02", "value": 1 }
      ]
    },
    "CALL_CLICKS": {
      "total": 7,
      "values": [{ "date": "2026-08-01", "value": 1 }]
    },
    "BUSINESS_IMPRESSIONS_MOBILE_SEARCH": {
      "total": 156,
      "values": [{ "date": "2026-08-01", "value": 8 }]
    }
  },
  "dataDelay": "Data may be delayed 2-3 days"
}

The metrics are:

  • BUSINESS_IMPRESSIONS_DESKTOP_MAPS
  • BUSINESS_IMPRESSIONS_DESKTOP_SEARCH
  • BUSINESS_IMPRESSIONS_MOBILE_MAPS
  • BUSINESS_IMPRESSIONS_MOBILE_SEARCH
  • BUSINESS_CONVERSATIONS
  • BUSINESS_DIRECTION_REQUESTS
  • CALL_CLICKS
  • WEBSITE_CLICKS
  • BUSINESS_BOOKINGS
  • BUSINESS_FOOD_ORDERS
  • BUSINESS_FOOD_MENU_CLICKS

Read search keywords

Call GET /v1/analytics/googlebusiness/search-keywords with accountId and a month range (Search keywords).

Google aggregates keywords by month and, for keywords under an impression threshold, reports only the threshold instead of a count.

startMonth defaults to 3 months ago and endMonth to the current month.

const { data: keywords } = await zernio.analytics.getGoogleBusinessSearchKeywords({
  query: { accountId: '66b2e19d8c3f5a7e9d0b1c2d', startMonth: '2026-06', endMonth: '2026-08' }
});

for (const k of keywords.keywords) console.log(k.keyword, k.impressions);

Response (200):

{
  "success": true,
  "accountId": "66b2e19d8c3f5a7e9d0b1c2d",
  "platform": "googlebusiness",
  "monthRange": { "startMonth": "2026-06", "endMonth": "2026-08" },
  "keywords": [
    { "keyword": "restaurant near me", "impressions": 245, "impressionsThreshold": null },
    { "keyword": "best tapas barcelona", "impressions": 89, "impressionsThreshold": null },
    { "keyword": "zernio", "impressions": 34, "impressionsThreshold": null },
    { "keyword": "tapas delivery", "impressions": 0, "impressionsThreshold": 15 }
  ],
  "nextPageToken": null,
  "note": "Keywords Google reports only as below a threshold have impressions 0 and impressionsThreshold set"
}

A keyword with impressions 0 and impressionsThreshold set means Google reported only that it had fewer impressions than the threshold.

Each response holds up to 100 keywords, sorted by impressions within that page only; when nextPageToken is not null, pass it as pageToken with the same startMonth and endMonth to get the next page.

If it fails

A 400 on the performance endpoint means a metric name in metrics is not one Google supports; the response lists the valid ones:

{
  "error": "Invalid metrics: INVALID_METRIC",
  "validMetrics": [
    "BUSINESS_IMPRESSIONS_DESKTOP_MAPS",
    "BUSINESS_IMPRESSIONS_DESKTOP_SEARCH",
    "BUSINESS_IMPRESSIONS_MOBILE_MAPS",
    "BUSINESS_IMPRESSIONS_MOBILE_SEARCH",
    "BUSINESS_CONVERSATIONS",
    "BUSINESS_DIRECTION_REQUESTS",
    "CALL_CLICKS",
    "WEBSITE_CLICKS",
    "BUSINESS_BOOKINGS",
    "BUSINESS_FOOD_ORDERS",
    "BUSINESS_FOOD_MENU_CLICKS"
  ]
}

Pick names from validMetrics and retry.

On the keywords endpoint, a 400 with "Invalid startMonth format. Use YYYY-MM." means the month is not YYYY-MM.

A 403 means accountId is not one of your accounts.

Both endpoints also answer 402 when the team has no analytics access, which is the first thing a legacy plan hits:

{
  "error": "Analytics add-on required",
  "code": "analytics_addon_required"
}

Analytics is included on usage-based billing (pricing). A legacy plan needs it enabled before either endpoint returns data.

Error handling covers the envelope.

Related

  • Performance metrics: every query parameter.
  • Search keywords: the month-range parameters.
  • Business Profile Management: the listing details behind these numbers.
  • Rate limits: how often analytics refresh.
Was this page helpful?

Multi-location posting

List the locations an account manages, post to several in one request, switch the default location, and give a location its own profile.

Inbox

List Google Business Profile reviews, reply to them and read reviews across several locations in one call.

On this page

Before you startRead performance metricsRead search keywordsIf it failsRelated