Bluesky
The AT Protocol. Calculated impressions, limited data, but growing fast.
Bluesky is a decentralized alternative built on the AT Protocol, growing fast — though its analytics API is still in development.
Supported Content Types
- Posts with text and optional media (maximum 4 files).
- Text limited to 300 characters.
Quirks & Gotchas
Calculated Impressions
Bluesky lacks native impression or view metrics through its API.
- Our approach: we compute impressions by totaling engagement metrics (Likes + Replies + Reposts + Quotes).
- Important caveat: actual viewership likely exceeds this figure substantially, but cannot be verified. Treat it as a minimum engagement threshold rather than true impressions.
Limited But Growing
Bluesky's API is young. As the platform and protocol mature, we expect more analytics data to become available.
Media Limits
| Constraint | Value |
|---|---|
| Files | 0–4 (images and/or videos) |
| Text | 300 characters |
Text & Field Limits
| Field | Limit |
|---|---|
text | Max 300 characters |
tags | Up to 8 tags, max 64 chars each |
externalTitle | Max 300 characters |
externalDescription | Max 1,000 characters |
externalUrl | Max 2,048 characters |
videoAlt | Max 10,000 characters |
Post Options
Bluesky-specific configuration goes in data.BLUESKY:
| Field | Type | Description |
|---|---|---|
text | string | Post text. Max 300 characters. |
uploadIds | string[] | Up to 4 uploaded media files. |
tags | string[] | Extra hashtags without #. Up to 8 tags, max 64 characters each. |
labels | enum[] | Self-labels: !no-unauthenticated, porn, sexual, nudity, graphic-media. |
quoteUri | string | AT-URI of a post to quote, e.g. at://did.../app.bsky.feed.post/<rkey>. |
externalUrl | string | URL for an external link card. |
externalTitle | string | Link card title. Max 300 characters. |
externalDescription | string | Link card description. Max 1,000 characters. |
videoAlt | string | Alt text for the video embed. Max 10,000 characters. |
{
"teamId": "team_123",
"title": "Bluesky link card",
"status": "SCHEDULED",
"postDate": "2026-06-01T15:00:00.000Z",
"socialAccountTypes": ["BLUESKY"],
"data": {
"BLUESKY": {
"text": "New release notes are live",
"tags": ["release", "product"],
"externalUrl": "https://example.com/release-notes",
"externalTitle": "Release notes",
"externalDescription": "What shipped this week."
}
}
}Analytics
Profile Analytics
Period: Snapshot.
| Metric | Description | Note |
|---|---|---|
impressions | — | Returns 0 (not available) |
impressionsUnique | — | Returns 0 (not available) |
views | — | Returns 0 (not available) |
viewsUnique | — | Returns 0 (not available) |
likes | — | Returns 0 (not available at profile level) |
comments | — | Returns 0 (not available at profile level) |
postCount | Total posts | |
followers | Followers | |
following | Following |
Post Analytics
Period: Lifetime.
| Metric | Description | Note |
|---|---|---|
impressions | Engagement sum | Calculated: Likes + Replies + Reposts + Quotes |
impressionsUnique | — | Returns 0 (not provided) |
views | — | Same as impressions (calculated) |
viewsUnique | — | Returns 0 (not provided) |
likes | Likes | |
comments | Replies | |
shares | Reposts + Quotes | Combined |
saves | — | Returns 0 (not available) |
Quirks
- True impression/view metrics are unavailable; engagement totals serve as the closest proxy.
- Profile-level engagement data is unsupported; only follower counts and post tallies are available.
- Future API enhancements will expand available metrics.