Analytics

Get post analytics

Returns analytics for posts. With postId, returns a single post. Without it, returns a paginated list with overview stats. Accepts both Zernio Post IDs and External Post IDs (auto-resolved). fromDate defaults to 90 days ago if omitted, max range 366 days. Single post lookups may return 202 (sync pending) or 424 (all platforms failed). For follower stats, use /v1/accounts/follower-stats.

LinkedIn personal accounts: Analytics are only available for posts published through Zernio. LinkedIn's API only returns metrics for posts authored by the authenticated user. Organization/company page analytics work for all posts.

Facebook Page stories: stories on a connected Page, published through Zernio or natively, are collected while they are live and returned like any other post (platformPostUrl points to the story). Their lifetime metrics refresh about hourly, with a final reading shortly before the story expires at 24 hours; after that the values stay at that last reading. Mapping: impressions = story impressions, reach = story reach, views = story media views, likes = story reactions, comments = story replies, shares = story shares. Meta exposes no link-click metric for stories, so clicks is always 0. Metrics for a story published through Zernio are available on its Zernio post ID.

get/v1/analytics

Query parameters

postIdstring

Returns analytics for a single post. Accepts both Zernio Post IDs and External Post IDs. Zernio IDs are auto-resolved to External Post analytics.

platformstring

Filter by platform (default "all")

profileIdstring

Filter by profile ID (default "all")

accountIdstring

Filter by account ID

source'all' | 'late' | 'external'

Filter by post source: late (posted via Zernio API), external (synced from platform), all (default)

fromDatestring date

Inclusive lower bound (YYYY-MM-DD). Defaults to 90 days ago if omitted. Max range is 366 days.

toDatestring date

Inclusive upper bound (YYYY-MM-DD). Defaults to today if omitted.

limitinteger

Page size (default 50)

pageinteger

Page number (default 1)

sortBy'date' | 'engagement' | 'impressions' | 'reach' | 'likes' | 'comments' | 'shares' | 'saves' | 'clicks' | 'views' | 'follows' | 'ig_reels_avg_watch_time' | 'ig_reels_video_view_total_time' | 'reposts' | 'reels_skip_rate' | 'completion_rate' | 'profile_views' | 'website_clicks'

Sort by date, engagement, or a specific metric. Platform-specific metrics (follows, reposts, reels_skip_rate, ig_reels_*, completion_rate, profile_views, website_clicks) sort a null value as 0.

order'asc' | 'desc'

Sort order

Response

Analytics result

OR

Example response

{
  "analytics": {
    "reelsSkipRate": 48.8,
    "impressionSources": {
      "forYou": 0.84,
      "follow": 0.05,
      "search": 0.06,
      "personalProfile": 0.03,
      "sound": 0.01,
      "directMessage": 0,
      "other": 0.01
    },
    "audienceTypes": {
      "follower": 0.1,
      "nonFollower": 0.9,
      "newViewer": 0.99,
      "returnViewer": 0.01
    },
    "audienceCountries": {
      "US": 0.62,
      "GB": 0.11,
      "CA": 0.07,
      "DE": 0.05,
      "other": 0.15
    },
    "videoDurationSeconds": 30,
    "engagementRate": 6.59
  },
  "platformAnalytics": [
    {
      "analytics": {
        "reelsSkipRate": 48.8,
        "impressionSources": {
          "forYou": 0.84,
          "follow": 0.05,
          "search": 0.06,
          "personalProfile": 0.03,
          "sound": 0.01,
          "directMessage": 0,
          "other": 0.01
        },
        "audienceTypes": {
          "follower": 0.1,
          "nonFollower": 0.9,
          "newViewer": 0.99,
          "returnViewer": 0.01
        },
        "audienceCountries": {
          "US": 0.62,
          "GB": 0.11,
          "CA": 0.07,
          "DE": 0.05,
          "other": 0.15
        },
        "videoDurationSeconds": 30,
        "engagementRate": 6.59
      }
    }
  ]
}

Changes