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 indocs/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).
GET /gmb/locations/{id}/insights
Section titled “GET /gmb/locations/{id}/insights”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 |
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.
Errors
Section titled “Errors”| 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 |
GET /gmb/locations/{id}/insights/keywords
Section titled “GET /gmb/locations/{id}/insights/keywords”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 |
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).