Metrics and coverage
Inklate tracks five metrics on a contract where null ≠ 0 — a metric a platform doesn't report is unknown, not zero. Coverage varies by network and scope.
Inklate normalizes every network onto the same five metrics, and is honest about what each one reports. A metric a platform doesn’t expose comes back as null (unknown), never 0, so a total is blank only when nothing reported it — never a misleading zero.
The five metrics
Every placement reports up to five numbers:
- Impressions — how many times the post was seen.
- Reactions — likes and equivalents.
- Comments — replies on the post.
- Shares — reposts, retweets, and quotes.
- Clicks — link/entity clicks.
Engagement is a derived headline: reactions + comments + shares — the three interactions every live platform reports, so it stays comparable across networks. Impressions and clicks are deliberately left out of engagement because only some platforms expose them, which would bias the number toward those platforms. Engagement rate is engagement ÷ impressions, and is null (not 0) whenever impressions are unknown, so a post with no impressions data has no misleading rate.
Why null ≠ 0
A null means “this platform never told us,” and a 0 means “the platform reported zero.” Keeping them distinct matters through aggregation: when Inklate rolls placements up into an org total or a per-provider split, the total is null only when no placement reported that metric — one real zero doesn’t get lost, and one silent gap doesn’t get invented as a zero. In the UI, null renders as an em-dash; the tiles even say how many of a window’s channels are actually reporting impressions.
Per-provider coverage
The four live networks — LinkedIn, X, Instagram, and Facebook — differ in what their APIs expose. LinkedIn splits further: a company page post reports all five metrics, while a member profile post reports only reactions and comments (LinkedIn has no member-post impressions, shares, or clicks API, so those are honestly null). On X, impressions, reactions, comments, and shares (retweets + quotes) come through, but clicks are never reported. Instagram always reports reactions and comments; impressions and shares come from the insights API and need the instagram_manage_insights scope. Facebook Page posts report reactions, comments, and shares directly, while impressions and clicks come from Page-level insights.
| Metric | LinkedIn (page) | LinkedIn (profile) | X | Facebook (Page) | |
|---|---|---|---|---|---|
| Impressions | Yes | — | Yes | Scope | Insights |
| Reactions | Yes | Yes | Yes | Yes | Yes |
| Comments | Yes | Yes | Yes | Yes | Yes |
| Shares | Yes | — | Yes | Scope | Yes |
| Clicks | Yes | — | — | — | Insights |
”—” means the network has no API for that metric, so it stays null. “Scope” and “Insights” mean the metric is available only when the extra permission is granted.
Scope degradation
Some metrics ride on permissions beyond the basics. When those aren’t granted — for example an Instagram connection without instagram_manage_insights, or a Facebook post without Page-insights access — Inklate does not fail the whole sync. It records the metrics it can (reactions and comments) and degrades the gated fields to null. Reconnecting the channel with the fuller permission set lets the next sync fill them in. See Channels for what each network can connect and grant.
Analytics — the three altitudes
Inklate measures at three altitudes — the operations dashboard, the analytics overview, and per-post metrics — over one shared, null-aware metric contract.
Syncing metrics
Inklate refreshes post metrics on a background cadence that decays as a post ages, and every published post has a "Sync now" to pull fresh numbers on demand.