Get an analytics dashboard
Everything an analytics dashboard needs in one call: window totals, follower growth, a per-day series, top posts, recent posts and, optionally, the same figures for the previous period.
Daily and total metrics use received attribution: each day holds the engagement that arrived that day, on any post, so totals is always the sum of daily.
topPosts and recentPosts list posts published in the window with their lifetime metrics. A post cross-posted to several platforms appears once per platform.
All dates are UTC days. Requires the Analytics add-on.
Authorization
bearerAuth API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.
In: header
Query Parameters
Profile ID, or "all" for every profile you can access.
"all"Platform to cover (e.g. "instagram"), or "all".
"all"First day of the window (YYYY-MM-DD, inclusive).
dateLast day of the window (YYYY-MM-DD, inclusive). May equal fromDate. The window covers at most 366 days.
dateSet to "previous_period" to also return previousTotals and previousFollowers for the window of the same length that ends the day before fromDate.
Value in
- "previous_period"
How many top posts to return, ranked by engagement (likes, comments, shares and saves, the same sum as daily engagement).
0 <= value <= 255How many of the most recently published posts to return.
0 <= value <= 2510Response Body
application/json
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.analytics.getAnalyticsDashboard({ query: { fromDate: '2026-09-01', toDate: '2026-09-30', },});console.log(data);{ "dateRange": { "fromDate": "2026-09-01", "toDate": "2026-09-02" }, "totals": { "impressions": 5400, "reach": 4100, "likes": 320, "comments": 41, "shares": 18, "saves": 25, "clicks": 60, "views": 2200, "engagementRate": 7.48 }, "followers": { "current": 12840, "gained": 96, "byAccount": [ { "accountId": "64e1f0a9c2b4d5e6f7a8b9c0", "platform": "instagram", "current": 12840, "gained": 96 } ] }, "daily": [ { "date": "2026-09-01", "impressions": 2900, "reach": 2200, "engagement": 210, "views": 1200, "followersGained": 0 }, { "date": "2026-09-02", "impressions": 2500, "reach": 1900, "engagement": 194, "views": 1000, "followersGained": 96 } ], "topPosts": [ { "postId": "65f1c0a9e2b4d5f6a7b8c9d0", "platform": "instagram", "publishedAt": "2026-09-01T15:00:00.000Z", "metrics": { "impressions": 3100, "reach": 2600, "likes": 210, "comments": 22, "shares": 9, "saves": 14, "clicks": 30, "views": 1500, "engagementRate": 8.23 } } ], "recentPosts": [], "dataAsOf": "2026-09-02T23:10:00.000Z"}Get Google Business Profile search keywords
Returns search keywords that triggered impressions for a Google Business Profile location. Data is aggregated monthly. Keywords below a minimum impression threshold set by Google are excluded. Max 18 months of historical data. Requires the Analytics add-on.
List conversation analytics
Per-conversation listing with per-row totals + first/last message timestamps. The inbox analog of GET /v1/analytics (posts listing): same filter shape, same pagination, same sort/order semantics. Use as the entry point for the per-conversation analytics drawer at /v1/analytics/inbox/conversations/{conversationId}. Rows are enriched with the conversation's participant info (`participantName`, `participantUsername`, `participantPicture`) and last-message preview by joining the Conversation document scoped to the caller's team. Max date range is 365 days.