Skip to main content

LinkedIn Company Posts API

Written by Kadri - RichAPI Support Team

POST /linkedin_company_posts • Credits: 0.2 credits per returned post

LinkedIn Company Posts returns the recent posts that one LinkedIn company published. Each post in the elements array holds the post text, the media, the author, the date and the engagement counts. One POST call costs 0.2 credits per returned post and no base fee.

What does LinkedIn Company Posts do?

Sales and marketing teams need to know what a target account says in public. LinkedIn Company Posts reads the post feed of one company page and returns it as JSON. Identify the company by its LinkedIn URL, by its numeric ID, or by its universal name. Two date parameters cut the feed down to a recent window. The data source is LinkedIn. One call returns one page of posts and a pagination object with the total count and the page count.

Which endpoint does LinkedIn Company Posts use?

  • Method:POST

  • URL:https://api.richapi.ai/api/v1/linkedin_company_posts

  • Authentication:x-api-key header

  • Request format: JSON request body

  • Response: Synchronous JSON

  • Page size: 25 posts

  • Credits: 0.2 credits per returned post

LinkedIn Company Posts accepts the POST method only. Every parameter goes in the JSON request body. If you send GET, the API returns 405 with the message linkedin_company_posts only supports POST.

How to send a LinkedIn Company Posts request

  1. Copy your API key from the RichAPI dashboard.

  2. Choose one company identifier: linkedin_company_url, linkedin_company_id, or linkedin_company_universal_name.

  3. Set that parameter in the JSON request body.

  4. Set posted_limit to 24h, week, or month to limit the feed to a recent window.

  5. Set page to 1 for the first page.

  6. Send a POST request to https://api.richapi.ai/api/v1/linkedin_company_posts.

  7. Send the API key in the x-api-key header.

  8. Read the posts from the elements array in the response.

  9. Read pagination.totalPages to find how many pages the feed holds.

CAUTION: Each LinkedIn Company Posts call costs 0.2 credits per returned post. A full page of 25 posts costs 5 credits. RichAPI reserves 5 credits for every call and refunds the unused part.

cURL

curl -X POST https://api.richapi.ai/api/v1/linkedin_company_posts   
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json"
-d '{
"linkedin_company_url": "https://www.linkedin.com/company/microsoft/",
"posted_limit": "week",
"page": 1
}'

Python

import requests

response = requests.post(
"https://api.richapi.ai/api/v1/linkedin_company_posts",
headers={"x-api-key": "YOUR_API_KEY"},
json={
"linkedin_company_url": "https://www.linkedin.com/company/microsoft/",
"posted_limit": "week",
"page": 1,
},
timeout=60,
)
response.raise_for_status()
print(response.json())

Node.js

const response = await fetch("https://api.richapi.ai/api/v1/linkedin_company_posts", {
method: "POST",
headers: {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
linkedin_company_url: "https://www.linkedin.com/company/microsoft/",
posted_limit: "week",
page: 1,
}),
});

const data = await response.json();
console.log(data);

What parameters does LinkedIn Company Posts accept?

LinkedIn Company Posts accepts six parameters. Every parameter is optional. Send one company identifier so that the API knows which company page to read.

Parameter

Type

Required

Default

Description

linkedin_company_url

string

No

""

LinkedIn company URL, for example https://www.linkedin.com/company/microsoft/. Send this parameter, linkedin_company_id, or linkedin_company_universal_name.

linkedin_company_id

string

No

""

LinkedIn company numeric ID, for example 123456. This is the fastest lookup.

linkedin_company_universal_name

string

No

""

The last path segment of the company LinkedIn URL, for example microsoft.

posted_limit

string

No

""

Pre-filter posts by recency on the LinkedIn side. Accepted values: 24h, week, month.

scrape_posted_limit

string

No

""

Read posts until this recency threshold is met. Accepted values: 1h, 24h, week, month, 3months, 6months, year.

page

integer

No

1

Page number for pagination. The count starts at 1.

Which parameter names does the request body reject?

The request body accepts the six parameter names above and no others. If the body holds any other key, the API returns 400 with the message Unknown input field(s): <name>.

How do I filter LinkedIn company posts by date?

LinkedIn Company Posts has two date parameters, and they work at different stages.

Parameter

Stage

Accepted values

Effect

posted_limit

LinkedIn applies the filter before the scrape.

24h, week, month

The scrape reads fewer posts. The pagination counts become approximate.

scrape_posted_limit

The read stops at the threshold.

1h, 24h, week, month, 3months, 6months, year

The scrape continues until a post is older than the threshold.

Set posted_limit to cut cost, because LinkedIn returns fewer posts and RichAPI bills per returned post. Set scrape_posted_limit for an exact date boundary on the returned set.

curl -X POST https://api.richapi.ai/api/v1/linkedin_company_posts   
-H "x-api-key: YOUR_API_KEY"
-H "Content-Type: application/json"
-d '{
"linkedin_company_universal_name": "microsoft",
"posted_limit": "month",
"scrape_posted_limit": "week"
}'

How does LinkedIn Company Posts pagination work?

LinkedIn Company Posts returns one page of up to 25 posts per call. Set page to 1 for the first page. To read the next page, send the same request body again with page set to 2. Keep every other parameter the same, so that the feed and the order stay stable. Read pagination.totalPages to find how many pages the feed holds. Read pagination.totalElements to find the total number of posts.

The response also holds pagination.paginationToken. The request body does not accept a pagination token. Use page for every page after the first.

What does LinkedIn Company Posts return?

The example below shows one element of a page. A full page holds up to 25 elements.

{
"query": {
"page": "1",
"companyIds": ["76136784"],
"profileIds": [],
"postedLimit": "past-week",
"authorsCompanyIds": [],
"companyUniversalName": "microsoft"
},
"status": 200,
"elements": [
{
"id": "7458081860720689153",
"author": {
"id": "76136784",
"urn": "76136784",
"info": "2,288 followers",
"name": "Microsoft",
"type": "company",
"avatar": {
"url": "https://media.licdn.com/dms/image/v2/D560BAQExme8rEtP5QA/company-logo_400_400/0/1771309440256/microsoft_logo",
"width": 400,
"height": 400
},
"website": null,
"linkedinUrl": "https://www.linkedin.com/company/microsoft/posts",
"websiteLabel": null,
"universalName": "microsoft",
"publicIdentifier": null
},
"header": {
"text": null
},
"content": "Our founder Alex Mercer explains what shipped this month. Turn the sound on and watch to the end.\n\n#api #gtm",
"comments": [],
"entityId": "7458081860720689153",
"postedAt": {
"date": "2026-05-07T09:14:40.056Z",
"timestamp": 1778145280056,
"postedAgoText": "1 month ago • Edited • Visible to anyone on or off LinkedIn",
"postedAgoShort": "1mo"
},
"shareUrn": "urn:li:ugcPost:7458081859688669184",
"postVideo": {
"videoUrl": "https://dms.licdn.com/playlist/vid/v2/D4D10AQEu4yscPORhAQ/mp4-720p-30fp-crf28/0/1778145278116",
"thumbnailUrl": "https://media.licdn.com/dms/image/v2/D4D10AQEu4yscPORhAQ/ads-video-thumbnail_720_1280/0/1778145187867"
},
"engagement": {
"id": "7458081859688669184",
"likes": 22,
"shares": 1,
"comments": 1,
"reactions": [
{ "type": "LIKE", "count": 17 },
{ "type": "EMPATHY", "count": 3 },
{ "type": "PRAISE", "count": 2 }
]
},
"postImages": [],
"linkedinUrl": "https://www.linkedin.com/posts/microsoft_api-gtm-activity-7458081860720689153-a72A",
"socialContent": {
"shareUrl": "https://www.linkedin.com/posts/microsoft_api-gtm-activity-7458081860720689153-a72A?",
"hideSendAction": true,
"hideViewsCount": false,
"hideReactAction": false,
"hideShareAction": true,
"hideRepostsCount": false,
"showSocialDetail": true,
"hideCommentAction": false,
"hideCommentsCount": false,
"hideReactionsCount": false,
"trustInterventionBanner": null,
"hideSocialActivityCounts": false,
"showContributionExperience": false
},
"shareLinkedinUrl": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7458081859688669184",
"contentAttributes": [
{
"type": "PROFILE_MENTION",
"start": 12,
"length": 11,
"profile": {
"id": "ACoAADSlaZgBSwytnwyWSoHJGmT0LGmDG8twWnU",
"lastName": "Mercer",
"firstName": "Alex",
"linkedinUrl": "https://www.linkedin.com/in/alexmercer",
"publicIdentifier": "alexmercer"
},
"textLink": null,
"hyperlink": "https://www.linkedin.com/in/ACoAADSlaZgBSwytnwyWSoHJGmT0LGmDG8twWnU"
}
]
}
],
"pagination": {
"pageSize": 25,
"pageNumber": 1,
"totalPages": 4,
"totalElements": 87,
"paginationToken": "1758430021-1781853930031-c1cf744f67f08d85017b7d298576af27",
"previousElements": 0
}
}

Which top-level fields does the LinkedIn Company Posts response hold?

Field

Type

Description

elements

array

The posts on this page. RichAPI bills 0.2 credits per element.

pagination

object

The pagination data for the feed.

query

object

The search that RichAPI ran.

status

integer

The status of the data request.

pagination.pageSize

integer

The number of posts on this page.

pagination.pageNumber

integer

The current page number. The count starts at 1.

pagination.totalPages

integer

The total number of pages in the feed.

pagination.totalElements

integer

The total number of posts in the feed.

pagination.paginationToken

string

A cursor for the feed. The request body does not accept it.

pagination.previousElements

integer

The number of posts on the earlier pages.

query.page

string

The page number that RichAPI requested.

query.companyIds

array

The company IDs resolved from the request.

query.profileIds

array

The profile IDs in the query. This array is empty for a company feed.

query.postedLimit

string

The recency filter that was applied, for example past-week.

query.authorsCompanyIds

array

The author company IDs in the query.

query.companyUniversalName

string

The company universal name that was resolved.

Which fields does each LinkedIn company post hold?

Each object in the elements array holds the fields below.

Field

Type

Description

elements[].id

string

The post identifier.

elements[].content

string

The post text. Line breaks appear as \n.

elements[].linkedinUrl

string

The public LinkedIn URL of the post.

elements[].entityId

string

The LinkedIn entity identifier of the post.

elements[].shareUrn

string

The LinkedIn share URN, for example urn:li:ugcPost:7458081859688669184.

elements[].shareLinkedinUrl

string

The LinkedIn feed URL that the share URN points to.

elements[].header

object

The repost or promotion header of the post.

elements[].header.text

string

The header text. The value is null for a normal post.

elements[].comments

array

The comments returned with the post.

elements[].postImages

array

The images attached to the post. Each image holds url, width and height.

elements[].postVideo

object

The video attached to the post. The value is null for a post with no video.

elements[].postVideo.videoUrl

string

The video playlist URL.

elements[].postVideo.thumbnailUrl

string

The video thumbnail image URL.

elements[].author

object

The author of the post.

elements[].author.id

string

The author identifier.

elements[].author.urn

string

The author URN.

elements[].author.name

string

The author name, for example Microsoft.

elements[].author.type

string

The author type. The value is company for a company page post.

elements[].author.info

string

The follower text of the author, for example 2,288 followers.

elements[].author.linkedinUrl

string

The LinkedIn URL of the author.

elements[].author.universalName

string

The company universal name of the author.

elements[].author.publicIdentifier

string

The public identifier of the author. The value is null for a company.

elements[].author.website

string

The author website.

elements[].author.websiteLabel

string

The label text for the author website.

elements[].author.avatar

object

The author logo image.

elements[].author.avatar.url

string

The logo image URL.

elements[].author.avatar.width

integer

The logo image width in pixels.

elements[].author.avatar.height

integer

The logo image height in pixels.

elements[].postedAt

object

The publication time of the post.

elements[].postedAt.date

string

The ISO 8601 publication date.

elements[].postedAt.timestamp

integer

The Unix timestamp in milliseconds.

elements[].postedAt.postedAgoText

string

The full relative time text from LinkedIn.

elements[].postedAt.postedAgoShort

string

The short relative time text, for example 1mo.

elements[].socialContent

object

The LinkedIn display flags for the post.

elements[].socialContent.shareUrl

string

The share URL of the post.

elements[].socialContent.hideSendAction

boolean

true means that LinkedIn hides the send action.

elements[].socialContent.hideShareAction

boolean

true means that LinkedIn hides the share action.

elements[].socialContent.hideReactAction

boolean

true means that LinkedIn hides the react action.

elements[].socialContent.hideCommentAction

boolean

true means that LinkedIn hides the comment action.

elements[].socialContent.hideViewsCount

boolean

true means that LinkedIn hides the view count.

elements[].socialContent.hideRepostsCount

boolean

true means that LinkedIn hides the repost count.

elements[].socialContent.hideCommentsCount

boolean

true means that LinkedIn hides the comment count.

elements[].socialContent.hideReactionsCount

boolean

true means that LinkedIn hides the reaction count.

elements[].socialContent.hideSocialActivityCounts

boolean

true means that LinkedIn hides every social count.

elements[].socialContent.showSocialDetail

boolean

true means that LinkedIn shows the social detail row.

elements[].socialContent.showContributionExperience

boolean

true means that LinkedIn shows the contribution experience.

elements[].socialContent.trustInterventionBanner

string

The trust banner text on the post.

elements[].contentAttributes

array

The mentions and the links inside the post text.

elements[].contentAttributes[].type

string

The attribute type, for example PROFILE_MENTION.

elements[].contentAttributes[].start

integer

The character offset of the attribute in content.

elements[].contentAttributes[].length

integer

The character length of the attribute in content.

elements[].contentAttributes[].hyperlink

string

The target URL of the attribute.

elements[].contentAttributes[].textLink

string

The display link text of the attribute.

elements[].contentAttributes[].profile

object

The mentioned profile.

elements[].contentAttributes[].profile.id

string

The LinkedIn identifier of the mentioned profile.

elements[].contentAttributes[].profile.firstName

string

The first name of the mentioned profile.

elements[].contentAttributes[].profile.lastName

string

The last name of the mentioned profile.

elements[].contentAttributes[].profile.linkedinUrl

string

The LinkedIn URL of the mentioned profile.

elements[].contentAttributes[].profile.publicIdentifier

string

The public identifier of the mentioned profile.

Which engagement fields does each post hold?

Field

Type

Description

elements[].engagement

object

The engagement counts for the post.

elements[].engagement.id

string

The activity identifier that carries the counts.

elements[].engagement.likes

integer

The total number of reactions on the post.

elements[].engagement.comments

integer

The number of comments on the post.

elements[].engagement.shares

integer

The number of reposts of the post.

elements[].engagement.reactions

array

The count for each reaction type.

elements[].engagement.reactions[].type

string

The reaction type, for example LIKE, EMPATHY or PRAISE.

elements[].engagement.reactions[].count

integer

The number of reactions of that type.

How do I find engagement signals with LinkedIn Company Posts?

A company that posts about a hiring push, a funding round, or a product launch gives a sales team a reason to reach out. LinkedIn Company Posts turns that feed into structured data for a score.

  1. Send one request per target account with posted_limit set to week.

  2. Read content for each element and match it against your trigger keywords.

  3. Read engagement.likes, engagement.comments and engagement.shares to rank the posts.

  4. Read contentAttributes[].profile to collect the people that the post mentions.

  5. Read postedAt.timestamp to keep only the posts inside your outreach window.

  6. Send the post linkedinUrl to your sales team as the opening reference.

To find the people who reacted to a post, send the post URN to the RichAPI Post Activities endpoint. Build the URN from the post id: add the prefix urn:li:activity: to it.

How much does LinkedIn Company Posts cost?

LinkedIn Company Posts costs 0.2 credits per returned post and no base fee. One credit costs $0.02 on the 1,000 and 5,000 credit packs. Larger packs cost less per credit. A full page of 25 posts costs 25 x 0.2 = 5 credits. That is $0.10.

This rate is 0.2 credits per result. That is double the 0.1 credit rate of LinkedIn Company Search and most other per-result search endpoints.

Cost of one call, by the number of posts returned:

Posts returned

Credits

Cost

0

0

$0.00

1

0.2

$0.004

5

1

$0.02

10

2

$0.04

25 (one full page)

5

$0.10

Cost of many calls, with a full page of 25 posts per call:

Calls

Posts

Credits

Cost

1

25

5

$0.10

10

250

50

$1.00

40

1,000

200

$4.00

100

2,500

500

$10.00

400

10,000

2,000

$40.00

RichAPI reserves 5 credits before each call, because a page holds up to 25 posts. RichAPI then charges for the real number of elements and returns the rest of the reservation. RichAPI refunds the full reservation for any response outside the 200 range.

How does LinkedIn Company Posts differ from Post Keyword Search and Profile Activities?

The three endpoints read LinkedIn posts, and each one starts from a different input.

Endpoint

Input

Returns

Credits

LinkedIn Company Posts

One company URL, ID, or universal name

The recent posts of that one company page

0.2 per result

Post Keyword Search

A keyword

Matched posts from across LinkedIn, from any author

0.1 per result

Profile Activities

One person profile

The recent posts, comments and reactions of that person

2 per result

Read the article for each endpoint for the full pricing detail.

If you already know the account and you want its own feed, use LinkedIn Company Posts. If you do not know the author and you search by topic, use Post Keyword Search. If you track one buyer or one champion instead of a company page, use Profile Activities.

Which errors can LinkedIn Company Posts return?

Status

Meaning

What to do

400

The request body failed validation. An unknown body key or a wrong value type causes this failure.

Correct the parameter that the error message names. Use the six names in the parameter table.

401

The API key is missing or wrong.

Send a valid key in the x-api-key header.

402

The organization has no credits left, or the team reached its monthly spend limit.

Buy credits in the RichAPI dashboard.

403

The API key has no access, or LinkedIn Company Posts is not on the plan.

Check the plan and the endpoint access in the RichAPI dashboard.

405

The request used a method other than POST.

Send the request again with the POST method.

429

Too many requests.

Read the Retry-After header. Wait that many seconds, then send the request again.

500

The API failed.

Send the request again. If the failure repeats, write to [email protected].

Frequently asked questions

Is LinkedIn Company Posts a GET or a POST endpoint?

LinkedIn Company Posts is a POST endpoint at https://api.richapi.ai/api/v1/linkedin_company_posts. Every parameter goes in the JSON request body. A GET request returns 405.

How do I identify the company for LinkedIn Company Posts?

Send one of three parameters: linkedin_company_url, linkedin_company_id, or linkedin_company_universal_name. The numeric ID in linkedin_company_id gives the fastest lookup.

How many posts does one LinkedIn Company Posts page return?

One LinkedIn Company Posts page returns up to 25 posts in the elements array. Read pagination.totalPages in the response to find how many pages the feed holds.

How do I get the second page of LinkedIn company posts?

Send the same request body again with page set to 2. Keep every other parameter the same, so that the feed and the order stay stable.

Can I send the paginationToken value back to LinkedIn Company Posts?

No. The request body accepts page only, and it rejects paginationToken with a 400 error. The pagination.paginationToken field is a response field.

How much does a LinkedIn Company Posts call cost for zero posts?

A LinkedIn Company Posts call that returns zero posts costs 0 credits, because the endpoint has no base fee. RichAPI returns the full 5 credit reservation.

What engagement data does LinkedIn Company Posts return?

Each post holds an engagement object with likes, comments, shares and a reactions array. The reactions array holds one count per reaction type, for example LIKE, EMPATHY and PRAISE.

What is the difference between posted_limit and scrape_posted_limit?

LinkedIn applies posted_limit before the scrape, and it accepts 24h, week or month. scrape_posted_limit stops the read once posts are older than the threshold, and it accepts 1h, 24h, week, month, 3months, 6months or year.

Related articles

Did this answer your question?