InsightSocial API

Metric substitutions

Which unified fields stay null on which platform, and how to fill the ones a join can recover.

Every platform maps onto one unified schema, but no platform publishes every field in it. When a platform does not provide a value, the response carries null.

No invented values, no borrowed metrics

A unified field never holds a made-up number, and never holds a different metric under its name. When a platform has a related metric worth keeping, it goes under ext.*, so the unified field keeps its exact meaning.

This page lists those cases. If a field is listed here as always null on a platform, that is how the platform works, not a bug. Fields a platform never shows are also never listed in a response's unavailable array; that array is for fields the platform does show but this response could not fill. See Data availability.

Ratios you compute yourself

Schema 2 returns counts, not derived metrics. There is no engagement rate, reach estimate, language guess or category in the response: compute what you need from the fields that are there.

  • Engagement rate by followers: (likes + comments + shares) / followers, using post.engagement.* and the author's followers from a profile call. On X and TikTok, post rows also carry the author's follower count in post.ext.author_followers, so no second call is needed there.
  • Engagement rate by views: (likes + comments + shares) / views, where the platform shows views (video on most platforms).
  • Leave out any count that is null rather than treating it as 0, and skip the ratio when the denominator is null or 0. A null count means the platform does not show it; it is not zero.
  • Language: post.language and comment.language carry the platform's own tag when it states one, and are null otherwise. Nothing is detected for you.

Pinterest

Pinterest spreads its counts between the list endpoints and the pin itself.

  • Search rows have no counts: post.engagement.saves, likes (reactions), comments and shares are null on a plain /v1/pinterest/search call. Add include=engagement and each row is filled from the pin's own record in the same call, at 10 extra credits per row filled. /v1/pinterest/pin returns the same counts for a single pin for 10 credits.
  • post.engagement.views is null on search rows. Pinterest publishes no view count there.
  • Board rows have saves, comments and shares but no date: post.published_at is null on a plain /v1/pinterest/board call because the board data has no date. include=engagement fills the date from the pin, along with any missing reaction count.
  • post.content.text is the pin's title, or its description when there is no title. Many pins have neither, so null means the pin really has no text. Pinterest's auto-generated image caption is never used here.

LinkedIn

Two author fields are weaker on people-list rows than on the member's own profile, and a join recovers both in the same call.

  • author.followers on /v1/linkedin/search/people, /v1/linkedin/company/people and /v1/linkedin/post/reactions rows is LinkedIn's rounded display figure, not an exact count: 39,000 for a member with 39,278, or 2,000 for one with 2,344. Those rows set author.followers_approximate to true. Many rows show no figure at all, and there author.followers is null, not a guess.
  • author.following is null on every plain people-list row.
  • Send include=profile to join each row to that member's profile in the same call. author.followers becomes the exact count, author.following gets the member's connection count (on LinkedIn, following means connections), and author.location, author.joined_at, plus country, website, cover image and profile flags under author.ext, are filled where the row lacked them. Every row the join fills sets author.followers_approximate to false, including rows that had no count before, so the flag always tells you whether the figure is exact. Rows the join could not fill keep their original flag.
  • The list costs 100 credits, and the join adds 40 credits per row it fills, up to 500 credits in total. Rows served from a recent fetch and rows the join cannot fill add nothing. limit (1 to 10) caps both the rows and the extra credits. See LinkedIn.

Always-null fields by platform

These fields are null on every surface of a platform because the platform never shows them. No parameter will fill them.

PlatformAlways nullWhy
YouTubepost.engagement.shares, post.engagement.savesBoth are private to the channel owner
Redditpost.engagement.views, .shares, .savesReddit shows no view or share counts, and "saved" is a per-user flag, not a count
Redditauthor.verifiedNot shown

On every platform, a top-level comment has parent_id: null, and a reply carries its parent comment's id where the platform says which one it is.

One field has a default instead of a null: a single tweet from Twitter/X has no pinned flag, so post.flags.pinned is false.

On this page