LinkedIn Profile Engagement Scraper (Company and Profile) avatar

LinkedIn Profile Engagement Scraper (Company and Profile)

Pricing

$10.00 / 1,000 post scrapeds

Go to Apify Store
LinkedIn Profile Engagement Scraper (Company and Profile)

LinkedIn Profile Engagement Scraper (Company and Profile)

A powerful Apify actor to extract post-engagement metrics from LinkedIn profiles. Gather likes, comments, reposts, and more for data-driven insights. Boost your social media strategy today!

Pricing

$10.00 / 1,000 post scrapeds

Rating

0.0

(0)

Developer

Ahmed Khaled Ali

Ahmed Khaled Ali

Maintained by Community

Actor stats

4

Bookmarked

258

Total users

1

Monthly active users

9 days ago

Last modified

Share

Export every post of a LinkedIn profile or company page with its engagement: reactions, comments, reposts, exact publish date and, for your own posts, impressions. Add one or many URLs and download a clean table as Excel, CSV or JSON, or pull it through the API.

What does LinkedIn Profile Engagement Scraper do?

It opens the activity feed of each profile or company page you give it, as a logged-in LinkedIn member, and saves one row per post:

  • ๐Ÿ“ˆ Engagement: reactions, comments, reposts and, for posts you wrote, impressions
  • ๐Ÿ•’ Exact publish time (postedAt), not just LinkedIn's "3mo"
  • ๐Ÿ“ Full post text, author, and whether it is a repost
  • ๐Ÿ–ผ๏ธ Media type: image, native video, external video, article or document
  • ๐Ÿ”— Post URL and ID, ready to join with your own data

Why use it?

  • Your own LinkedIn analytics, in one table. LinkedIn only shows impressions to the author, so tools that don't log in can never return them. Run this on your own profile and get your whole post history with impressions, ready for a spreadsheet or dashboard.
  • Benchmark competitors and creators. See which topics and formats get the most reactions and comments.
  • Monitor company pages for campaign and content analysis.
  • Fair billing. You pay only for posts saved to your dataset. Proxy and compute costs are included in the price.

How to use it

  1. Create a LinkedIn session just for the Actor. In Chrome open chrome://extensions, find Cookie-Editor โ†’ Details โ†’ turn on Allow in Incognito. Open an Incognito window (Ctrl/Cmd+Shift+N), log in to LinkedIn, click Cookie-Editor โ†’ Export โ†’ JSON and paste the result into LinkedIn cookies. Then close the Incognito window without signing out.
  2. Copy your user agent. In Chrome open DevTools (F12) โ†’ Console, type navigator.userAgent, press Enter and paste the text (without quotes) into Your browser's user agent.
  3. Set the proxy to RESIDENTIAL and select the country you normally use LinkedIn from.
  4. Add profile (linkedin.com/in/...) or company (linkedin.com/company/...) URLs, set Max posts per URL and click Start.

Keep your LinkedIn session safe

LinkedIn ends a session when it sees the same session used in two places at once: for example, in your browser at home and in a cloud browser at the same time. That's why the Actor works with its own session:

  • You log in once in an Incognito window, export the cookies and close the window. That session belongs to the Actor only.
  • Your everyday LinkedIn tab keeps its own separate session instead of sharing one with the Actor.
  • If LinkedIn ever ends the Actor's session, the run stops right away, keeps the posts already scraped and tells you. Just repeat the Incognito login to create a new one.

On top of that, the Actor looks like a normal browser:

What LinkedIn checksWhat the Actor does
Is it a real browser?Full cookie set (not just li_at), your user agent with a matching platform and screen size, and a full (non-headless) Chrome with automation traces hidden
Where is it?A residential IP in your country, the same IP for the whole run, and a browser clock set to that country's time zone
Does it behave like a person?Scrolls in uneven steps with natural pauses, one page at a time

Good habits:

  • โœ… Use a separate Incognito session for the Actor, never the cookies of the LinkedIn tab you use every day.
  • โœ… Use a residential proxy in your own country.
  • โœ… Keep runs moderate: a few hundred posts per run and one run at a time per account.
  • โŒ Don't sign out in the Incognito window; just close it. Signing out ends the Actor's session.

No automation can guarantee that LinkedIn will never ask you to verify your account. These settings keep the risk as low as possible, and your everyday session stays separate.

Input

FieldDescription
urlsProfile or company page URLs
maxPostsMaximum posts per URL (default 100); also caps your cost
cookieCookie export (JSON from Cookie-Editor) of a LinkedIn session made for the Actor in an Incognito window. Stored encrypted
userAgentYour browser's user agent (recommended)
proxyConfigurationProxy settings; use RESIDENTIAL in your country
debugSaves a screenshot and the page HTML per URL for troubleshooting
{
"urls": [
"https://www.linkedin.com/in/ahmed-khaled-dev/",
"https://www.linkedin.com/company/apify/"
],
"maxPosts": 50,
"cookie": "[{\"name\":\"li_at\",\"value\":\"...\",\"domain\":\".www.linkedin.com\"}, ...]",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "EG" }
}

Output

One row per post. Two table views are available in the Output tab: All post data and a compact Engagement summary.

{
"url": "https://www.linkedin.com/feed/update/urn:li:activity:7119718788698152960/",
"urn": "urn:li:activity:7119718788698152960",
"sourceUrl": "https://www.linkedin.com/in/ahmed-khaled-dev/",
"sourceType": "profile",
"authorName": "Ahmed Khaled",
"isRepost": false,
"firstParagraph": "Stands for Palestine ...",
"fullPost": "Stands for Palestine ...",
"date": "3mo",
"postedAt": "2023-10-16T16:20:37.204Z",
"likes": 139,
"comments": 17,
"reposts": 7,
"impressions": 3793,
"containImage": true,
"containLinkedinVideo": false,
"containExternalVideo": false,
"containArticle": false,
"containDocs": false
}
FieldDescription
url, urnDirect link and unique ID of the post
sourceUrl, sourceTypeProfile or company page the post was found on
authorName, isRepostPost author; isRepost is true when the source reposted someone else's post
firstParagraph, fullPostFirst 7 words and full text
date, postedAtRelative age shown by LinkedIn and exact publish time (UTC)
likes, comments, repostsEngagement counts (0 when LinkedIn shows none)
impressionsOnly for posts written by the logged-in account, otherwise null
contain*Whether the post has an image, native video, external video, article or document

Engagement Metrics Results

How much does it cost?

You pay a fixed price per post saved to the dataset; see the Pricing tab. Proxy and compute costs are included. Two ways to stay in control:

  • Max posts per URL limits how many posts are scraped from each profile.
  • Maximum cost per run (in run options) stops the run as soon as the limit is reached. You are never charged beyond it.

Integrations and API

Use the results in Google Sheets, Make, Zapier, n8n, Slack or any tool through Apify integrations, or call the Actor from code with the Apify API:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('ahmed-khaled/linkedin-engagement-scraper').call({
urls: ['https://www.linkedin.com/in/ahmed-khaled-dev/'],
maxPosts: 50,
cookie: process.env.LINKEDIN_COOKIES_JSON,
userAgent: process.env.MY_USER_AGENT,
proxyConfiguration: { useApifyProxy: true, apifyProxyGroups: ['RESIDENTIAL'], apifyProxyCountry: 'US' },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("ahmed-khaled/linkedin-engagement-scraper").call(run_input={
"urls": ["https://www.linkedin.com/in/ahmed-khaled-dev/"],
"maxPosts": 50,
"cookie": os.environ["LINKEDIN_COOKIES_JSON"],
"userAgent": os.environ["MY_USER_AGENT"],
"proxyConfiguration": {"useApifyProxy": True, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"},
})
items = client.dataset(run["defaultDatasetId"]).list_items().items

FAQ

Why does it need my cookies? Impressions and full activity feeds are only visible to logged-in members. Your cookies are used only inside your own run and are stored encrypted by Apify.

The run says my cookies expired, or that LinkedIn ended the session. Create a new session for the Actor: log in to LinkedIn in an Incognito window, export the cookies, close the window without signing out and run again. Check that the proxy is RESIDENTIAL in your own country and that you pasted your user agent.

Will the Actor log me out of LinkedIn in my browser? Give the Actor its own Incognito session and your browser's session is no longer shared with it. Logouts happen when the cookies of your everyday LinkedIn tab are used in the Actor at the same time as in your browser.

Why is impressions empty? LinkedIn shows impressions only to the author of a post. Run the Actor on your own profile with your own cookies to get them.

Some posts are missing or a field looks wrong. Open an issue in the Issues tab. When a URL returns no posts, the run saves a screenshot in the Debug snapshots section of its storage; attaching it helps fix the problem fast.

Scraping personal data may be subject to data protection laws such as the GDPR. Make sure you have a legitimate reason to collect and process the data, and respect LinkedIn's terms of service.