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, usingpost.engagement.*and the author'sfollowersfrom a profile call. On X and TikTok, post rows also carry the author's follower count inpost.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
nullrather than treating it as0, and skip the ratio when the denominator isnullor0. Anullcount means the platform does not show it; it is not zero. - Language:
post.languageandcomment.languagecarry the platform's own tag when it states one, and arenullotherwise. Nothing is detected for you.
Pinterest spreads its counts between the list endpoints and the pin itself.
- Search rows have no counts:
post.engagement.saves,likes(reactions),commentsandsharesarenullon a plain/v1/pinterest/searchcall. Addinclude=engagementand each row is filled from the pin's own record in the same call, at 10 extra credits per row filled./v1/pinterest/pinreturns the same counts for a single pin for 10 credits. post.engagement.viewsisnullon search rows. Pinterest publishes no view count there.- Board rows have saves, comments and shares but no date:
post.published_atisnullon a plain/v1/pinterest/boardcall because the board data has no date.include=engagementfills the date from the pin, along with any missing reaction count. post.content.textis the pin's title, or its description when there is no title. Many pins have neither, sonullmeans the pin really has no text. Pinterest's auto-generated image caption is never used here.
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.followerson/v1/linkedin/search/people,/v1/linkedin/company/peopleand/v1/linkedin/post/reactionsrows 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 setauthor.followers_approximatetotrue. Many rows show no figure at all, and thereauthor.followersisnull, not a guess.author.followingisnullon every plain people-list row.- Send
include=profileto join each row to that member's profile in the same call.author.followersbecomes the exact count,author.followinggets the member's connection count (on LinkedIn, following means connections), andauthor.location,author.joined_at, plus country, website, cover image and profile flags underauthor.ext, are filled where the row lacked them. Every row the join fills setsauthor.followers_approximatetofalse, 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.
| Platform | Always null | Why |
|---|---|---|
| YouTube | post.engagement.shares, post.engagement.saves | Both are private to the channel owner |
post.engagement.views, .shares, .saves | Reddit shows no view or share counts, and "saved" is a per-user flag, not a count | |
author.verified | Not 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.
Testing your integration
Test against the live API without surprises. What is free, what is billed, and which paths to check before launch.
Which endpoint should I use?
Side-by-side decision tables for the endpoints that look alike, with the credit price of each so you pick the one that returns what you need for the least.