v1Resources/Profile Analytics

Profile Analytics

Read a location's profile performance analytics.

Returns profile view/action metrics for one location over a date range, aggregated per connected source (Google, Facebook, Apple, Bing).

Get profile analytics

get/api/v1/analytics
analytics:read
Query parameters
locationIdstringrequired
The location to look up.
clientIdstringrequired
The location's client.
fromstringoptional
Start date (YYYY-MM-DD) of the range. Optional — defaults to the source's standard window.
tostringoptional
End date (YYYY-MM-DD) of the range. Optional.
Response
dataobjectoptional
connectedSourcesarray of string (google | facebook | apple | bing)optional
Which platforms this location has connected: google, facebook, apple, bing.
summarystringoptional
A short human-readable summary of performance, or null.
syncedAtstringoptional
When this data was last synced, as an ISO 8601 timestamp, or null.
latestDataDaystringoptional
Most recent day with data, as YYYY-MM-DD, or null.
profileViewsobjectoptional
Profile view counts over time.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
allActionsobjectoptional
All customer actions (calls, direction requests, website visits, button clicks) combined, over time.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
websiteVisitsobjectoptional
Website visit counts over time.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
phoneCallsobjectoptional
Phone call counts over time.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
directionRequestsobjectoptional
Direction request counts over time.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
buttonClicksobjectoptional
Other profile button click counts over time.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
followersobjectoptional
Facebook follower counts over time.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
postEngagementobjectoptional
Facebook post engagement over time.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
searchKeywordsarray of objectoptional
Search terms that surfaced this listing, Google only.
keywordstringoptional
The search term.
impressionsnumberoptional
Number of impressions for this term.
keywordMonthsobjectoptional
Date range the search keywords cover, or null.
fromstringoptional
tostringoptional
impressionSplitobjectoptional
Breakdown of impressions by surface, Google only, or null.
mapsnumberoptional
Impressions on Google Maps.
searchnumberoptional
Impressions on Google Search.
desktopnumberoptional
Impressions on desktop.
mobilenumberoptional
Impressions on mobile.
Errors
400The request is missing a required parameter or is otherwise malformed.
401Missing, invalid, expired, or revoked API key.
403The key lacks the required scope, or isn't authorized for this client/location.
404The resource wasn't found, or doesn't belong to your agency.
429Too many requests. Retry after the number of seconds in the Retry-After header.
get/api/v1/analytics
Your API key
locationId *
clientId *
from
to
{
  "data": {
    "connectedSources": [
      "google"
    ],
    "summary": "Profile views are up 12% this month.",
    "syncedAt": "2026-02-01T00:00:00.000Z",
    "latestDataDay": "2026-01-31",
    "profileViews": {
      "metric": "Profile Views",
      "total": 1200,
      "previousTotal": 1050,
      "labels": [
        "2026-01-01",
        "2026-01-31"
      ],
      "bySource": {
        "google": [
          40,
          42
        ]
      }
    },
    "allActions": {
      "metric": "All Actions",
      "total": 300,
      "previousTotal": 280,
      "labels": [],
      "bySource": {}
    },
    "websiteVisits": {
      "metric": "Website Visits",
      "total": 150,
      "previousTotal": 140,
      "labels": [],
      "bySource": {}
    },
    "phoneCalls": {
      "metric": "Phone Calls",
      "total": 60,
      "previousTotal": 55,
      "labels": [],
      "bySource": {}
    },
    "directionRequests": {
      "metric": "Direction Requests",
      "total": 90,
      "previousTotal": 85,
      "labels": [],
      "bySource": {}
    },
    "buttonClicks": {
      "metric": "Button Clicks",
      "total": 20,
      "previousTotal": 18,
      "labels": [],
      "bySource": {}
    },
    "followers": {
      "metric": "Followers",
      "total": null,
      "previousTotal": null,
      "labels": [],
      "bySource": {}
    },
    "postEngagement": {
      "metric": "Post Engagement",
      "total": null,
      "previousTotal": null,
      "labels": [],
      "bySource": {}
    },
    "searchKeywords": [
      {
        "keyword": "dentist near me",
        "impressions": 320
      }
    ],
    "keywordMonths": {
      "from": "2026-01-01",
      "to": "2026-01-31"
    },
    "impressionSplit": {
      "maps": 600,
      "search": 900,
      "desktop": 500,
      "mobile": 1000
    }
  }
}
v1Resources/Profile Analytics/getGet a profile analytics summary

Profile analytics aggregated across a client's locations — profile views, all actions, website visits, phone calls, direction requests, button clicks, followers, and post engagement, plus a per-location leaderboard. Scope to a single tag with tagId, or omit for all of the client's locations. Backed by the same rollup as the Listings → All locations → Profile Analytics view.

Get a profile analytics summary

get/api/v1/analytics/summary
analytics:read
Query parameters
clientIdstringrequired
The client to roll up. Required.
tagIdstringoptional
A location tag id (from GET /api/v1/locations/tags with withId=1) — scope the rollup to that tag's locations. Omit for all of the client's locations.
fromstringoptional
Window start (ISO date). Defaults to 30 days ago.
tostringoptional
Window end (ISO date). Defaults to now.
sourcesstringoptional
Comma-separated publishers to include: google, facebook, apple, bing. Defaults to all.
comparisonstring (none | previous_period)optional
Compare totals against a prior window of the same length.
granularitystring (daily | weekly | monthly)optional
Time bucket for the underlying series.
leaderboardLimitintegeroptional
Top-N locations in the leaderboard (1-100). Default 25.
leaderboardSearchstringoptional
Filter the leaderboard by location name.
Response
dataobjectoptional
connectedSourcesarray of string (google | facebook | apple | bing)optional
Publishers connected on at least one location in scope.
locationsnumberoptional
Number of locations in scope.
coverageobjectoptional
How many of the in-scope locations reported any data in the window.
withDatanumberoptional
Locations that reported data.
totalnumberoptional
Locations in scope.
summarystringoptional
Client-level AI summary — not populated for this rollup (always null).
syncedAtstringoptional
When the underlying aggregation last ran.
latestDataDaystringoptional
The most recent day with data, across the scope.
profileViewsobjectoptional
Profile views, summed across the scope.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
allActionsobjectoptional
All customer actions, summed across the scope.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
websiteVisitsobjectoptional
Website visits, summed across the scope.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
phoneCallsobjectoptional
Phone calls, summed across the scope.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
directionRequestsobjectoptional
Direction requests, summed across the scope.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
buttonClicksobjectoptional
Button clicks, summed across the scope.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
followersobjectoptional
Follower KPI series, summed across the scope.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
postEngagementobjectoptional
Post engagement, summed across the scope.
metricstringoptional
Name of the metric.
totalnumberoptional
Total for the selected range, or null.
previousTotalnumberoptional
Total for the prior comparable range, or null.
labelsarray of stringoptional
Date labels for each point in the series.
bySourceobjectoptional
Per-day values broken out by connected source.
searchKeywordsarray of objectoptional
Always empty for this rollup — per-location keyword data is on GET /api/v1/analytics.
keywordstringoptional
impressionsnumberoptional
keywordMonthsobjectoptional
Always null for this rollup.
fromstringoptional
tostringoptional
followersTotalobjectoptional
Facebook followers gauge, as of the window end.
totalnumberoptional
Current follower count.
previousTotalnumberoptional
Follower count at the end of the prior window (when comparison is requested).
locationsnumberoptional
Locations contributing to the gauge.
leaderboardobjectoptional
Per-location ranking by profile views.
rowsarray of objectoptional
One row per location, ranked by profile views.
locationIdstringoptional
Location id.
namestringoptional
Location name.
citystringoptional
Location city.
profileViewsnumberoptional
Profile views for this location.
allActionsnumberoptional
All actions for this location.
phoneCallsnumberoptional
Phone calls for this location.
directionRequestsnumberoptional
Direction requests for this location.
deltaPctnumberoptional
Change vs the prior window, on profile views.
sparkarray of numberoptional
Profile views per period across the window, for a sparkline.
totalnumberoptional
Total matching locations (for pagination).
pagenumberoptional
Current leaderboard page (0-based).
pageSizenumberoptional
Leaderboard page size.
Errors
400The request is missing a required parameter or is otherwise malformed.
401Missing, invalid, expired, or revoked API key.
403The key lacks the required scope, or isn't authorized for this client/location.
404The resource wasn't found, or doesn't belong to your agency.
429Too many requests. Retry after the number of seconds in the Retry-After header.
get/api/v1/analytics/summary
Your API key
clientId *
tagId
from
to
sources
comparison
granularity
leaderboardLimit
leaderboardSearch
{
  "data": {
    "connectedSources": [
      "google",
      "facebook"
    ],
    "summary": null,
    "syncedAt": "2026-02-01T00:00:00.000Z",
    "latestDataDay": "2026-01-31",
    "profileViews": {
      "metric": "Profile Views",
      "total": 4800,
      "previousTotal": 4300,
      "labels": [
        "2026-01-01",
        "2026-01-31"
      ],
      "bySource": {
        "google": [
          160,
          168
        ]
      }
    },
    "allActions": {
      "metric": "All Actions",
      "total": 1100,
      "previousTotal": 980,
      "labels": [],
      "bySource": {}
    },
    "websiteVisits": {
      "metric": "Website Visits",
      "total": 600,
      "previousTotal": 540,
      "labels": [],
      "bySource": {}
    },
    "phoneCalls": {
      "metric": "Phone Calls",
      "total": 210,
      "previousTotal": 195,
      "labels": [],
      "bySource": {}
    },
    "directionRequests": {
      "metric": "Direction Requests",
      "total": 340,
      "previousTotal": 300,
      "labels": [],
      "bySource": {}
    },
    "buttonClicks": {
      "metric": "Button Clicks",
      "total": 80,
      "previousTotal": 70,
      "labels": [],
      "bySource": {}
    },
    "followers": {
      "metric": "Followers",
      "total": null,
      "previousTotal": null,
      "labels": [],
      "bySource": {}
    },
    "postEngagement": {
      "metric": "Post Engagement",
      "total": null,
      "previousTotal": null,
      "labels": [],
      "bySource": {}
    },
    "searchKeywords": [],
    "keywordMonths": null,
    "impressionSplit": {
      "maps": 0,
      "search": 0,
      "desktop": 0,
      "mobile": 0
    },
    "followersTotal": {
      "total": 812,
      "previousTotal": 790,
      "locations": 4
    },
    "coverage": {
      "withData": 4,
      "total": 5
    },
    "locations": 5,
    "leaderboard": {
      "rows": [
        {
          "locationId": "cl_a1b2c3",
          "synupLocationId": "os_9f8e7d6c",
          "name": "Acme Dental — Downtown",
          "city": "Austin",
          "profileViews": 1900,
          "allActions": 420,
          "phoneCalls": 90,
          "directionRequests": 140,
          "deltaPct": 0.12,
          "spark": [
            58,
            61,
            64,
            60,
            66
          ]
        }
      ],
      "total": 5,
      "page": 0,
      "pageSize": 25
    }
  }
}