LinkedIn Post Tracker and Comment Capture
Pricing
from $1.70 / 1,000 post collecteds
LinkedIn Post Tracker and Comment Capture
Tracks new posts from LinkedIn person profiles and company pages, with no cookies and no login. Returns full post data plus the commenters LinkedIn shows publicly. One flat row per post, built for Clay.
Pricing
from $1.70 / 1,000 post collecteds
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
๐ฃ What can LinkedIn Post Tracker and Comment Capture do?
Point it at LinkedIn person profiles and company pages. It returns their recent posts, as flat rows, with the real engagement counts on every one. No cookies, no LinkedIn account, no credentials of any kind.
It also returns the commenters LinkedIn shows publicly, which is a bonus on top of the post feed rather than the product. The limits on that are stated below and they are not small.
| ๐ฆ What you get | โ๏ธ Features and integrations |
|---|---|
| ๐ One row per post: text, media, permalink, author, published time ๐ Live reaction and comment counts on every post ๐ A stable post_id, so a feed posts each item exactly once๐งพ 30 flat fields, snake_case, built for Clay | ๐ช No cookies and no LinkedIn account, ever ๐ posted_since, so a scheduled run collects only what is new๐ฌ Public commenters as a labeled partial sample โฌ๏ธ Export to JSON, CSV, Excel, HTML or XML |
Bought by go to market and content teams tracking what a set of companies and executives is publishing, and how those posts are landing.
๐ What you get per post
Every post row carries post_id, post_permalink, author_name, author_url, author_type
(person or company), post_text, post_media_url, published_at, reaction_count and
comment_count.
post_id is the numeric part of LinkedIn's activity URN. It is stable across runs, across country
subdomains, and across both spellings of a permalink, so it is safe as a primary key and safe as the
"have I already posted this to Slack" check. The four-character token at the end of a permalink is
not stable and is never part of the key.
posted_since filters before anything is charged, so a scheduled run that finds nothing new costs
the actor start and nothing else.
๐ฌ The commenter bonus, and its limits
Alongside each post you get one row per commenter LinkedIn renders publicly, with their name, profile URL, comment text and the likes on that comment.
Read this before you count on it:
- You get about ten commenters per post, whatever the real total. LinkedIn renders roughly ten top-level comments to a logged-out visitor. On a post with 400 comments you get about ten.
- Measured whole-run coverage was 178 commenters out of 4,857 that existed, which is 3.7%.
- About 30% of comment rows carry no timestamp. In the same run
engaged_atwas null on 54 of 178 rows, so those rows cannot be filtered by recency. The exact timestamp only comes from the page's structured data, and it is copied across only when that entry is unambiguously the same comment. When it is not, the row keeps its identity and text and the timestamp stays null rather than being guessed. - No headline. LinkedIn does not render a commenter's headline to a logged-out visitor, so the field is declared and left null.
Every post row carries commenters_collected next to commenters_available, so the coverage on any
given post is a number you can read rather than something you have to infer.
๐ง What this actor cannot do
| What you get | |
|---|---|
| ๐ Posts | โ Complete. Text, author, media, permalink, published time, and the true reaction and comment counts. |
| ๐ฌ Commenters | โ ๏ธ Around ten per post, 3.7% coverage measured, and roughly 30% of those rows have no timestamp. |
| ๐ Reactors | โ None. LinkedIn serves no reactor identities to a logged-out visitor. Every post row carries the real reaction_count, and reactors_status says unavailable_without_login. |
| ๐ชช Commenter headline | โ Not served. The field exists and stays null rather than being guessed at. |
No row is ever an empty success. A blocked profile, a private page and a removed post each get their
own status and a plain-English notice.
โ ๏ธ
falseandnullmean different things on every row.falseis a measurement: the actor looked and the answer was no.nullis the absence of one: the actor could not look. When something it needed fails, the row comes back withdegraded: true, a plain-languagedegradation_reason, and every field it could not measure set tonullrather than to a confidentfalseor0. Filter ondegradedbefore you trust a negative.Two things that look like failures are deliberately not degraded, because both are measurements.
reactors_unavailableis a permanent property of logged-out LinkedIn, not a fault in your run.no_posts_foundon a page that loaded means the page really lists no recent activity. Turning commenter collection off is the reverse case:commenters_collectedcomes backnullrather than0, because the actor did not look.
The trade is deliberate. Getting reactors means holding a LinkedIn session cookie or paying a vendor who holds one. This actor does neither, so nothing you own is ever at risk and there is no credential to hand over.
๐ก Why use it
- Content tracking without a login. See what a list of companies and executives is publishing, with real engagement counts, on a schedule.
- A Slack or CRM feed.
post_idis stable, so a downstream system can post each item exactly once. - Warm leads as a side effect. A person who commented on three of your posts is warmer than one
who commented on one.
person_profile_urlis the deduplication key across posts.
๐ฅ Input
| Field | Type | What it does |
|---|---|---|
profile_urls | array | Person profiles, like https://www.linkedin.com/in/williamhgates. Country subdomains are fine. |
company_urls | array | Company pages, like https://www.linkedin.com/company/microsoft. |
posted_since | string | ISO date. Posts older than this are skipped before anything is charged. |
collect_commenters | boolean | Default on. Turn it off to collect posts only. |
collect_reactors | boolean | Default on, and it returns no reaction rows. It is in the schema so the limit is visible instead of silent. |
max_engagers_per_post | integer | Default 10. See below. |
use_residential_proxy | boolean | Default off. Only needed if LinkedIn starts refusing the platform's datacenter addresses. Apify bills residential bandwidth on top of this actor's events. |
๐ธ About max_engagers_per_post
This is your cost lever, and the default is set to the platform ceiling on purpose.
LinkedIn shows a logged-out visitor about ten comments per post, so ten is the most this actor can ever return. Setting the default to 10 means you are never charged for engager rows the page cannot produce, and raising it above 10 does nothing. Set it to 0 and you pay for posts only.
๐ค Output
One dataset, two entity types, told apart by row_type.
postis one row per LinkedIn post.engageris one row per person who commented, joined to the post onpost_id.noticeis a run-level or source-level message. Filter these out before loading a table.
Status values
ok, commenters_truncated, reactors_unavailable, source_unavailable, post_unavailable,
no_posts_found, fetch_failed, no_input, free_tier_exhausted, free_tier_unmetered,
sources_truncated, posts_truncated.
๐งช Using it in Clay
Add an Apify enrichment column and map your source column to profile_urls or company_urls.
The actor returns many rows for one input row, so use Write to Other Table to send post rows to a
posts table filtered to row_type = post, and commenters to a people table filtered to
row_type = engager. Clay caps a single actor run import at 5,000 records.
๐ Sending results somewhere else
You do not need this actor to do it, and it does not try. Apify has built-in run webhooks that cost nothing and need no code from us.
On this actor's page in Apify Console, open the Integrations tab and add a webhook on
ACTOR.RUN.SUCCEEDED pointing at your endpoint. Apify posts a JSON body carrying eventType and a
resource object with the run and dataset IDs, then your system reads the dataset. You configure it,
you own it, and it works on any actor including this one.
๐ Free plan
Free Apify plans get 50 posts a month. Paid plans are uncapped. When the allowance runs out the run stops and says so on a row rather than returning a quietly short result.
๐ Personal data
Commenter rows are named people. Each one carries a display name, a public LinkedIn profile URL and the text of a comment they published in public.
Everything collected is served by LinkedIn to a logged-out visitor with no account and no cookies. Nothing behind a login is read, and no private field is inferred.
When you run this actor you are the data controller for the personal data it returns, and Apify is the processor. Your lawful basis for collecting and using it is yours to establish. We do not advise on it and nothing here is legal advice.
โ๏ธ Unofficial
This actor is unofficial. It is not affiliated with, sponsored by, or endorsed by LinkedIn or Microsoft. It reads public pages the way any logged-out visitor does.
๐งฏ Known limitations
- No reactors, about ten commenters per post, and no commenter headline. Covered above. These are the main ones.
- Discovery sees a page's recent activity, not a full archive. A profile or company page
advertises its latest posts, so
posted_sincefilters what was found rather than reaching back through history. - Posts referenced without a permalink cannot be fetched. Embedded reshares appear on a page as a bare activity reference, and LinkedIn will not serve a post without its permalink token. The count is reported once per source.
- No proxy by default. Turn on
use_residential_proxyif datacenter addresses start being refused. - 200 sources per run and 50 posts per source. Both are hard caps. Neither
is silent: hitting either emits a
sources_truncatedorposts_truncatedrow saying exactly how many were left out. LinkedIn lists newest first, so what a truncated source gives you is the most recent 50. - No result cache. Every run refetches every page, which is the right
behavior for an actor whose job is to notice new posts, and it means a
scheduled run costs the same whether or not anything changed. Use
posted_sinceto keep the charge down: it filters before anything is billed.
๐ Support
Questions, bugs and feature requests go in the Issues tab on the actor page.
Built by Mamba Labs.