Get a company's public posts with titles, dates, engagement and numeric activity IDs, from the company's public landing page. LinkedIn does not serve the full posts feed to anonymous requests, so this is the public landing-page harvest and the response always labels it with source: company_landing_page. post_count is what the landing page carried. is_truncated is always true, not a measurement: the landing page only ever renders a preview subset, and the full feed is unreachable for anonymous requests on every path rather than under any particular condition. upstream_calls reports the number of real upstream requests made; it exceeds 1 only when a request was refused and retried, which is not a fan-out and not an extra charge. No post is fetched in detail here — use the LinkedIn Post Transcript endpoint for a single post's comments. The Errors section lists the common cases rather than every code: any failed request carries an error_code, and none of them is billed.
Run this endpoint
Endpoint
Parameters
Start with the required fields, then add optional filters only when your use case needs them.
Runnable path
1 required parameter needed before sending a request.
string
Required
LinkedIn company slug, e.g. tesla-motors. Use the slug, not the brand name: /company/tesla/ does not exist while /company/tesla-motors/ does.
microsoft
Request Examples
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrappa.co/api/linkedin/company/posts?slug=microsoft",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: YOUR_API_KEY_HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
<?php
use Illuminate\Support\Facades\Http;
$response = Http::timeout(30)
->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
->get('https://scrappa.co/api/linkedin/company/posts?slug=microsoft');
if ($response->successful()) {
echo $response->body();
} else {
echo "Error: " . $response->status();
}
const options = {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE'
}
};
fetch('https://scrappa.co/api/linkedin/company/posts?slug=microsoft', options)
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.text();
})
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
const axios = require('axios');
const options = {
method: 'GET',
url: 'https://scrappa.co/api/linkedin/company/posts?slug=microsoft',
headers: {
x-api-key: 'YOUR_API_KEY_HERE',
}
};
try {
const response = await axios(options);
console.log(response.data);
} catch (error) {
console.error('Error:', error.message);
}
require 'net/http'
require 'uri'
uri = URI.parse("https://scrappa.co/api/linkedin/company/posts?slug=microsoft")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'
begin
response = http.request(request)
puts response.body
rescue => e
puts "Error: #{e.message}"
end
import http.client
import json
conn = http.client.HTTPSConnection("scrappa.co")
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
conn.request("GET", "/api/linkedin/company/posts?slug=microsoft", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
except Exception as e:
print(f"Error: {e}")
finally:
conn.close()
import requests
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
response = requests.get('https://scrappa.co/api/linkedin/company/posts?slug=microsoft', headers=headers)
response.raise_for_status()
print(response.text)
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class ApiExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://scrappa.co/api/linkedin/company/posts?slug=microsoft")
.addHeader("x-api-key", "YOUR_API_KEY_HERE")
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
System.out.println(response.body().string());
} else {
System.out.println("Error: " + response.code());
}
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://scrappa.co/api/linkedin/company/posts?slug=microsoft", nil)
if err != nil {
fmt.Println("Error creating request:", err)
return
}
req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error making request:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Println(string(body))
}
#!/bin/bash
curl -X GET \
-H "x-api-key: YOUR_API_KEY_HERE" \
"https://scrappa.co/api/linkedin/company/posts?slug=microsoft"
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");
try
{
var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/linkedin/company/posts?slug=microsoft"));
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
import axios from 'axios';
async function run(): Promise<void> {
try {
const response = await axios({
method: 'GET',
url: 'https://scrappa.co/api/linkedin/company/posts?slug=microsoft',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE',
},
});
console.log(response.data);
} catch (error) {
console.error('Error:', error);
}
}
void run();
use reqwest::Client;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let response = client
.get("https://scrappa.co/api/linkedin/company/posts?slug=microsoft")
.header("x-api-key", "YOUR_API_KEY_HERE")
.send()
.await?;
println!("{}", response.text().await?);
Ok(())
}
Response Schema
Example response fields are illustrative; inspect the JSON before integrating.
Example response fields
Scan these fields before integrating.
success
source
company
posts
post_count
is_truncated
upstream_calls
Common posts fields
title
url
activity_id
date
{
"success": true,
"source": "company_landing_page",
"company": {
"name": "Microsoft",
"slug": "microsoft",
"url": "https://www.linkedin.com/company/microsoft/",
"logo": null
},
"posts": [
{
"title": "Our FY26 Q2 results",
"url": "https://www.linkedin.com/posts/microsoft_our-fy26-q2-results-activity-7123456789012345678",
"activity_id": "7123456789012345678",
"date": "2026-01-22T08:00:00+00:00",
"likes": 1062
}
],
"post_count": 1,
"is_truncated": true,
"upstream_calls": 1
}
Errors
Handle these documented responses before retrying or showing customer-facing failures.
Validation Error
The slug parameter is missing or is not a valid company slug.
{
"message": "The request validation failed",
"errors": {
"slug": [
"The slug field is required."
]
}
}Company Not Found
No public company page matched this slug. Not billed.
{
"success": false,
"message": "Company not found",
"status_code": 404,
"error_code": "linkedin_company_posts_not_found"
}Invalid Slug
The slug was not a LinkedIn company slug. Rejected before anything was fetched, so nothing was billed.
{
"success": false,
"message": "A valid LinkedIn company slug is required.",
"status_code": 422,
"error_code": "linkedin_company_slug_invalid"
}Request Not Dispatched
Scrappa could not send this request to LinkedIn at all, so no data was retrieved. Please try again in a moment. Failed requests are never billed.
{
"success": false,
"message": "LinkedIn company posts are temporarily unavailable. Please try again.",
"status_code": 503,
"error_code": "upstream_unavailable"
}LinkedIn Temporarily Unavailable
The request never reached LinkedIn, for example because the connection failed on every attempt. Failed requests are never billed.
{
"success": false,
"message": "LinkedIn company posts are temporarily unavailable. Please try again.",
"status_code": 503,
"error_code": "linkedin_company_posts_transport_failed"
}LinkedIn Refused The Request
LinkedIn refused the request on every attempt. Retrying usually succeeds. Failed requests are never billed.
{
"success": false,
"message": "LinkedIn company posts are temporarily unavailable. Please try again.",
"status_code": 503,
"error_code": "linkedin_company_posts_upstream_blocked"
}Upstream Error
LinkedIn answered with a non-success status that is neither a refusal nor a missing company. Failed requests are never billed.
{
"success": false,
"message": "LinkedIn company posts are temporarily unavailable.",
"status_code": 503,
"error_code": "linkedin_company_posts_upstream_failed"
}No Posts Found
LinkedIn returned a company landing page with no extractable posts. This company may genuinely have nothing public, or the page may have been served without its posts — the two are indistinguishable here, which is how this sub-surface refuses a request. A real answer rather than an outage, and not retried. Not billed.
{
"success": false,
"message": "LinkedIn returned a company landing page with no extractable posts.",
"status_code": 404,
"error_code": "linkedin_company_posts_empty"
}Upstream Route Changed
LinkedIn no longer serves the route company pages are fetched from, so they cannot be fetched at all. Not billed, and not reported as "company not found" because that would be untrue about your data.
{
"success": false,
"message": "LinkedIn\u2019s public company page route is unavailable upstream.",
"status_code": 502,
"error_code": "linkedin_company_upstream_drift"
}Generate Code with AI
Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.
Related LinkedIn API docs
LinkedIn Profile API
Get public profile identity, headline, experience, education, skills, activity, and similar profiles.
LinkedIn Company API
Enrich profile and recruiting workflows with company page details and metadata.
LinkedIn API overview
Browse profile, company, search, jobs, job details, and post endpoints from one hub.
Try It Live
Test this endpoint in our interactive playground with real data.