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
11 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.
๐ซ This is not a reactor scraper and it is not a lead database. LinkedIn serves no reactor identities to a logged out visitor, so this actor returns none, and it says so on every row in
reactors_status. Commenters come back at roughly ten per post. If you need every person who touched a post, no logged out tool can give you that, and any tool that claims to is holding a session cookie.
๐ก Why use LinkedIn Post Tracker and Comment Capture?
| If you need to | Read this field |
|---|---|
| Track what a list of companies and executives publishes | post_text, published_at, author_type |
| Post each new item to Slack or a CRM exactly once | post_id, which is stable across runs |
| See how a post actually landed | reaction_count, comment_count |
| Find people who engage with you repeatedly | person_profile_url on engager rows |
| Know how much of a post's comment thread you actually got | commenters_collected next to commenters_available |
๐ A stable primary key, which is the part most tools get wrong
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.
๐ What data can LinkedIn Post Tracker and Comment Capture extract?
Every row carries 30 flat fields. One dataset holds two entity types, told apart by row_type.
| Field | Type | Meaning |
|---|---|---|
row_type | string | post, engager or notice. Filter notice out before loading a table. |
post_id | string | Numeric activity URN. Stable across runs, safe as a primary key. |
post_permalink | string | Canonical post URL. |
author_name | string | The person or company that published the post. |
author_url | string | Their LinkedIn URL, the join key back to your source list. |
author_type | string | person or company. |
post_text | string | The post body as published. |
post_media_url | string | null | Media attached to the post, when there is any. |
published_at | string | ISO 8601 publication time. |
reaction_count | integer | The real reaction total, even though the reactors are not served. |
comment_count | integer | The real comment total, which is usually far above what was collected. |
commenters_collected | integer | null | How many commenter rows this post produced. null when collection was turned off. |
commenters_available | integer | How many the page said existed, so coverage is readable rather than inferred. |
person_profile_url | string | On engager rows, the commenter's public profile URL, and the dedupe key across posts. |
engaged_at | string | null | Comment timestamp. Null on roughly 30 percent of rows, see the callout below. |
reactors_status | string | Always unavailable_without_login. A permanent property of logged out LinkedIn. |
degraded | boolean | True when the row could not be produced normally. |
degradation_reason | string | null | Why, in plain words. |
โ ๏ธ
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 commenter bonus, and its measured 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.
๐ง 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.
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.
๐ ๏ธ How to track what a company or executive publishes on LinkedIn
- Put your targets in
profile_urlsorcompany_urls. Person profiles look likehttps://www.linkedin.com/in/williamhgates, company pages likehttps://www.linkedin.com/company/microsoft. Country subdomains are fine. - Set
posted_sinceto the last time you ran it. Posts older than that are skipped before anything is charged, so a scheduled run that finds nothing new costs the actor start and nothing else. - Decide whether you want commenters.
collect_commentersis on by default. Turn it off to collect posts only and pay only the post event. - Run it on a schedule and deduplicate downstream on
post_id.
๐งช 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.
๐ต How much does it cost to track LinkedIn posts?
Pay per event. You are charged for output, never for input.
| Event | Fires when | Price |
|---|---|---|
post-collected | Once per post row returned, after posted_since has filtered | $0.0020 |
engager-collected | Once per commenter row returned | $0.0010 |
apify-actor-start | Once per run, per gigabyte of memory. Set by Apify, not by us | $0.00005 |
Every event at every Apify tier, in dollars:
| Event | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
post-collected | 0.0020 | 0.0019 | 0.0018 | 0.0017 |
engager-collected | 0.0010 | 0.00095 | 0.0009 | 0.00085 |
๐ณ What you are billed for.
posted_sincefilters before anything is charged, so a scheduled run that finds nothing new costs the actor start and nothing else. Commenter rows are billed separately from posts, so settingmax_engagers_per_postto0gives you posts only at the post price. Turningcollect_reactorson charges nothing extra, because it returns nothing: it exists in the schema so the limit is visible instead of silent.
๐ธ 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.
โจ๏ธ Input
Full options are on the Input tab. These are the ones worth explaining.
| 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. |
๐ค Output
Exports to JSON, CSV, Excel, HTML or XML. 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.
๐ก Tips
- Set
posted_sinceon every scheduled run. It is the difference between paying for what is new and paying for the same 50 posts every night. - Deduplicate on
post_id, never on the permalink. The four character token at the end of a permalink changes between renders. - Read
commenters_collectedagainstcommenters_availablebefore you draw a conclusion from a comment thread. Roughly ten of four hundred is not a sample you can generalize from. - Set
max_engagers_per_postto 0 if you only want the post feed. It is the cheapest useful shape. - Leave
use_residential_proxyoff until you actually see refusals. It adds Apify bandwidth cost on top of the events.
๐ 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.
โ ๏ธ Known limits
- 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.
โ FAQ
Do I need a LinkedIn account, a cookie or a session token? No. None of the three, ever. It reads the same public pages a logged out visitor sees.
Why do I only get about ten commenters on a post with hundreds?
Because that is all LinkedIn renders to a logged out visitor. Measured coverage across a whole run
was 178 of 4,857, which is 3.7%. commenters_collected and commenters_available are on every post
row so you can read the coverage rather than guess it.
Can I get the people who reacted to a post?
No, and neither can any other logged out tool. LinkedIn serves no reactor identities without a
login. You do get the true reaction_count on every post.
Why is engaged_at null on some commenter rows?
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. Roughly 30% of rows have no unambiguous match, and
those keep their identity and text with a null timestamp rather than a guessed one.
Is post_id safe to use as a primary key?
Yes. It is the numeric activity URN and it is stable across runs, country subdomains and both
permalink spellings. The token at the end of a permalink is not.
Is this affiliated with LinkedIn? No. See the disclaimer in Support.
๐งฉ Want other GTM data?
Mamba Labs builds a fleet of GTM enrichment actors that share one flat,
Clay-ready output convention, so their rows join on company_domain with no
cleaning step:
Every actor in the suite takes a domain or a company and returns one flat row, so they stack in the same Clay table without reshaping anything.
๐ ๏ธ Need something custom built for you or your team? Tell us what you are trying to find and we will build it. Talk to Mamba Labs.
๐ Support
Questions, bugs and feature requests go in the Issues tab on the actor page.
โน๏ธ Sourcing and legal. 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. This actor is unofficial and is not affiliated with, sponsored by, or endorsed by LinkedIn or Microsoft. Commenter rows are named people, carrying a display name, a public profile URL and the text of a comment they published in public. When you run this actor you are the data controller for that personal data 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.
Built by Mamba Labs.