Install
openclaw skills install @azeemkafridi/bulkpublish-get-analyticsPull analytics, engagement metrics, and performance data from BulkPublish. Use when the user asks about post performance or engagement.
openclaw skills install @azeemkafridi/bulkpublish-get-analytics| Tool | Use for | Key params |
|---|---|---|
get_analytics | Overall summary for a date range | from, to (ISO dates); optional channelIds, platforms, labelIds, postFormat, mediaType, compare |
get_post_metrics | Single post engagement | postId |
get_quota_usage | Plan limits and current usage | none |
list_posts | Find posts to analyze | status, approvalStatus, from, to, channelId, search |
Returns: total posts, status breakdown (any of the 7 post statuses: draft, scheduled, publishing, published, processing, failed, partial), per-platform counts, daily post counts for the range.
Posts also carry approvalStatus (none default | pending | approved | rejected), which is separate from status — filter list_posts with approvalStatus: "pending" to see the team approval queue. Pending and rejected posts never publish on their own.
Returns per-platform: likes, comments, shares, impressions, reach, clicks, saves, videoViews, engagementRate.
Plus linkClicks (and totals.linkClicks / totalLinkClicks): clicks on
bulkpubli.sh short links, measured by BulkPublish rather than reported by the
platform.
supportedMetrics firstEvery platform entry carries two support fields:
metricsSupported — false when the platform has no per-post statistics API at all.supportedMetrics — the list of metric keys that platform can populate.All metric columns are stored as integers defaulting to 0, so a metric the
platform never reports is indistinguishable from a real zero unless you read
supportedMetrics. A key that is not in that list is not a measurement —
say "not reported by " or show a dash. Reporting it as 0 tells the
user their post got zero engagement when the platform simply has no such metric.
linkClicks is the one metric every platform haslinkClicks is measured by BulkPublish, not the platform, so it is populated
even for the platforms in the "reports nothing" row below, and supportedMetrics
always contains it. Two rules when reporting it:
clicks/totalClicks. Those are the platform's own click
figures. One visit can register in both, so summing them double-counts.| Platform | Reports | Never reports |
|---|---|---|
| X | impressions, likes, comments, shares, saves (bookmarks) | reach, clicks, video views |
| YouTube | impressions, video views, likes, comments | reach, shares, saves, clicks |
| impressions, reach, likes, comments, shares, saves | clicks, video views | |
| likes, comments, shares + impressions, reach, clicks¹ | saves, video views | |
| LinkedIn (company pages) | impressions, reach, likes, comments, shares, clicks | saves, video views |
| TikTok | impressions, video views, likes, comments, shares | reach, saves, clicks |
| Threads | impressions, likes, comments, shares | reach, saves, clicks, video views |
| impressions, clicks, saves, likes, comments, video views | reach | |
| Bluesky | likes, comments, shares, saves (bookmarks) | impressions, reach, clicks, video views |
| Mastodon | likes, comments, shares | everything else |
| Discord | likes (reaction counts), comments (thread replies) | everything else |
| Snapchat | impressions, reach, likes, comments, shares, clicks, video views | saves |
| Google Business, Telegram, Tumblr | nothing | — |
| LinkedIn personal profiles | nothing | — |
¹ Facebook's impressions/reach/clicks come from Page Insights and need the
read_insights permission. Without it they stay 0 — "may not be readable",
which is neither a dash nor a trustworthy figure.
engagementRate is derived from impressions, so it exists only where
impressions do — it is always 0 for Bluesky and Mastodon.
metricsDisabledChannels; until the user enables it on the
Channels page, every X figure stays 0 and refreshing cannot change that.Returns: plan name, limits (channels, posts/day, storage, API calls), current usage for each, subscription status.
get_analytics with last 7 dayslist_posts (status: "published") then get_post_metrics for eachget_quota_usage