Skip to main content
LinkedIn is unique because it strictly separates Personal Profiles (Members) from Organization Pages (Companies). The API treats them very differently, and this affects analytics significantly.

Quirks & Gotchas

Personal vs. Organization

This is the biggest source of confusion.
  • Personal Profile (Member): Limited API. Cannot import post history. Limited analytics. No profile views data.
  • Organization (Company Page): Full API power. Richer analytics. Supports historical import. Has page view data.

Article / Link Preview

When you send a post with data.LINKEDIN.link and no media uploads, bundle.social fetches the URL, scrapes its Open Graph metadata, and builds a LinkedIn article content block with a title, description, and preview image automatically.
  • link is the URL to preview, max 2048 characters.
This is the correct way to build link posts on LinkedIn. A link can’t be combined with media uploads: such a post is rejected with 400 and LinkedIn link preview posts cannot include media uploads.

Polls

Send data.LINKEDIN.poll to publish a LinkedIn poll. The post text is shown above the poll.
  • A poll can’t have media or a link. Such a post is rejected with 400 (A LinkedIn poll cannot be combined with media. / ...with a link preview.).
  • Validation errors point at the exact field, for example data.LINKEDIN.poll.options.2 with Max 30 characters per poll option.
  • LinkedIn doesn’t let you edit a poll after it’s published.
  • Poll results (votes per option) aren’t available in analytics.

The URN Nightmare

LinkedIn uses “URNs” (Uniform Resource Names) to identify everything.
  • Organization: urn:li:organization:12345
  • Person: urn:li:person:abcde
If you are constructing raw text mentions, you need to use this format. Our API handles basic text automatically, but if you’re getting fancy, keep this in mind.

Media Limits

Video max size is 2 GB (not 200 MB - that was an old API limitation). Documents must be PDF format, max 100 MB. GIFs are supported-upload animated GIFs like other image media for LinkedIn posts. See Platform Limits for the full breakdown.

Text & Field Limits


Post Options


Mentions And Published Post Actions

Resolve Mentionable People And Organizations

Endpoint: GET /api/v1/misc/linkedin/mentions/tags Provide teamId and either a search query (q) or LinkedIn profile/company url. scope can be people, organizations, or all.
Person mention lookup is available when the selected LinkedIn channel is an organization. URL lookup accepts linkedin.com/in/... for people and linkedin.com/company/... for organizations. displayName is optional and controls the text shown for a person resolved by URL. Use POST /api/v1/misc/linkedin/mentions/builder to combine returned URNs with text:

Reshare A LinkedIn Post

Endpoint: POST /api/v1/misc/linkedin/post/reshare
commentary is required and limited to 3,000 characters. The response includes the new LinkedIn ID, activity URN, and permalink when LinkedIn returns them.

Edit Or Delete Published Content

These operations act on content already published to LinkedIn. They do not change the original scheduled payload stored in bundle.social.

Analytics

For general analytics concepts (refresh rates, data retention, what “Returns 0” means), see the Analytics Overview.

Profile Analytics

Personal (Member)

Period: Rolling window (30 days).

Organization (Company)

Period: Rolling window (30 days).

Post Analytics

Personal Posts

Period: Rolling window (30 days).

Organization Posts

Period: Rolling window (30 days).
Only recent posts. Organization analytics only cover posts published within the last 30 days. Posts authored by members (not the organization/brand itself) are excluded from organization analytics.

Raw Analytics

Raw analytics for LinkedIn retain reaction breakdowns from the platform (per reaction type) where available. Our standard post schema still exposes a single aggregated likes/reactions-style metric; use raw data when you need the full split. Organization video posts also get:
  • videoAnalytics with LinkedIn’s VIDEO_VIEW, VIEWER and TIME_WATCHED_FOR_VIDEO_VIEWS elements exactly as LinkedIn returns them (lifetime totals; watch time in milliseconds). A type is null when LinkedIn didn’t answer for it.
  • In metrics: isVideo (on every organization post), videoWatchTimeSeconds and videoAvgWatchTimeSeconds (in seconds), and viewsSource / viewsUniqueSource, which say where the numbers came from: videoAnalytics (read now), carriedForward (LinkedIn didn’t answer, the last stored value is kept), unavailable or unsupportedUrn.
  • Video views are read for posts with a urn:li:ugcPost: ID. Older video posts with a urn:li:share: ID get 0.

Post Raw Example

Page (Organization) Raw: Follower Demographics

Profile raw analytics for a LinkedIn Page include followerStatistics, the Page’s lifetime follower breakdowns as LinkedIn returns them:
  • Each breakdown is limited to the top 100 entries.
  • Values are LinkedIn URNs (geo, industry, seniority, function). Resolve them to names with LinkedIn’s standardized data, or map them on your side.
  • LinkedIn doesn’t expose follower age or gender to apps, so those aren’t available.
  • Only Pages have follower demographics. Personal profiles don’t, and followerStatistics is null if LinkedIn doesn’t return it.

Quirks

  • Personal accounts do NOT have views analytics for profiles - only organizations get page views.
  • Organization accounts have page views for profile analytics. For individual posts, views exist only on video posts (video views); other posts return 0.
  • Post count and following count are not provided through the LinkedIn API for either account type.
  • Organization post analytics only include posts from the last 30 days.