Skip to content

Google Business insights — daily metrics and search keywords

How a business performs on Google: impressions, calls, direction requests, website clicks and the search terms that surfaced it. The data comes from Google’s Business Profile Performance API; MauKirim passes it through in a flat shape and does not store it. Each call is one metered Google call. Both endpoints are reads: scope read or gmb.

This API may need enabling and approval. The Performance API is a separate Google API from the ones that list and edit businesses. It must be enabled for the Google project MauKirim runs under, and Google may require its own access approval for it. If it is not available the call answers 503 gmb_api_unavailable; that is an operator-side problem, not a fault in your account. See the operator notes in docs/gmb.md. Google also decides how fresh its numbers are, and may report a search term below a privacy threshold instead of a count (see below).

Daily metrics, with a total and a per-day series for each.

Query param Default Rule
metrics all A comma-separated list of the metrics below; an unknown name is 400 invalid_input
from 29 days before today YYYY-MM-DD, a real date
to today (UTC) YYYY-MM-DD; not in the future, not before from; the range may be at most 550 days (about 18 months)
Metric What it counts
BUSINESS_IMPRESSIONS_DESKTOP_MAPS, BUSINESS_IMPRESSIONS_DESKTOP_SEARCH, BUSINESS_IMPRESSIONS_MOBILE_MAPS, BUSINESS_IMPRESSIONS_MOBILE_SEARCH Times the listing was shown, by surface and device
BUSINESS_CONVERSATIONS Messages started from the listing
BUSINESS_DIRECTION_REQUESTS Requests for directions
CALL_CLICKS Taps on the call button
WEBSITE_CLICKS Clicks to the website
BUSINESS_BOOKINGS, BUSINESS_FOOD_ORDERS, BUSINESS_FOOD_MENU_CLICKS Bookings, food orders and menu clicks, where the business offers them
Terminal window
curl "https://app.maukirim.com/api/v1/gmb/locations/gml_8f3kq2x1ab/insights?metrics=CALL_CLICKS,WEBSITE_CLICKS&from=2026-10-01&to=2026-10-05" \
-H "Authorization: Bearer mk_live_…"
const query = new URLSearchParams({ metrics: "CALL_CLICKS,WEBSITE_CLICKS", from: "2026-10-01", to: "2026-10-05" })
const response = await fetch(`https://app.maukirim.com/api/v1/gmb/locations/${id}/insights?${query}`, {
headers: { Authorization: `Bearer ${process.env.MAUKIRIM_KEY}` },
})
const { metrics } = await response.json()
$query = http_build_query(['metrics' => 'CALL_CLICKS,WEBSITE_CLICKS', 'from' => '2026-10-01', 'to' => '2026-10-05']);
$curl = curl_init("https://app.maukirim.com/api/v1/gmb/locations/$id/insights?$query");
curl_setopt_array($curl, [
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('MAUKIRIM_KEY')],
CURLOPT_RETURNTRANSFER => true,
]);
$metrics = json_decode(curl_exec($curl), true)['metrics'];
{
"ok": true,
"from": "2026-10-01",
"to": "2026-10-05",
"metrics": [
{
"metric": "CALL_CLICKS",
"total": 54,
"days": [ { "date": "2026-10-01", "value": 10 }, { "date": "2026-10-02", "value": 11 }, "…" ]
}
]
}

total is the sum of the days values. A metric Google has no data for may be missing from metrics.

HTTP Code Condition
400 invalid_input An unknown metric, a bad or impossible date, from after to, to in the future, or a range over 18 months
402 gmb_plan_required The package does not include the connector
403 api_key_scope_denied Neither read nor gmb
403 gmb_forbidden Google says the connected account may not read this business’s performance
404 gmb_location_not_found Not your business, no such business, or it left Google
409 gmb_reconnect_required / gmb_location_disabled See Errors
429 gmb_rate_limited No budget now (Retry-After)
502 gmb_upstream_error Google failed
503 gmb_api_unavailable The Performance API is not enabled or approved for the deployment’s Google project

The search terms that showed the business, with monthly impressions.

Query param Default Rule
from two months before this month A month, YYYY-MM
to this month A month, YYYY-MM, not before from
pageToken — nextPageToken from the previous page
Terminal window
curl "https://app.maukirim.com/api/v1/gmb/locations/gml_8f3kq2x1ab/insights/keywords?from=2026-08&to=2026-10" \
-H "Authorization: Bearer mk_live_…"
{
"ok": true,
"keywords": [
{ "keyword": "kopi enak", "impressions": 120, "belowThreshold": null },
{ "keyword": "coffee near me", "impressions": null, "belowThreshold": 15 }
],
"nextPageToken": null
}

For a rare term Google reports only that the count is below a threshold instead of a number: then impressions is null and belowThreshold holds the threshold (a number you should read as “fewer than this”). Errors are the same as for insights (a bad month is 400 invalid_input).