LinkedIn Post Comments Scraper (No Cookies) avatar

LinkedIn Post Comments Scraper (No Cookies)

Pricing

from $1.50 / 1,000 post comment results

Go to Apify Store
LinkedIn Post Comments Scraper (No Cookies)

LinkedIn Post Comments Scraper (No Cookies)

Extract root comments and available top replies from public LinkedIn post URLs, including commenter names, profile URLs, headlines, timestamps, reply totals, and reaction breakdowns. Batch up to 1,000 posts and export structured JSON, CSV, or Excel—no LinkedIn cookies or login required.

Pricing

from $1.50 / 1,000 post comment results

Rating

0.0

(0)

Developer

Data Slayer

Data Slayer

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Extract structured root comments and available top replies from public LinkedIn posts—including commenter profiles, timestamps, reply totals, and reaction breakdowns—without providing LinkedIn cookies or login credentials.

Watch the demo

YouTube video coming soon.

What this LinkedIn comments scraper returns

Turn one or many supported LinkedIn post URLs into analysis-ready comment records. Each dataset item represents one unique root comment and includes:

  • Comment text, LinkedIn comment URL, ID, and timestamp
  • Commenter name, headline, LinkedIn profile URL, image URL, and stable ID when available
  • Total replies and the number of top replies included in the record
  • Total reactions plus like, praise, empathy, appreciation, interest, and other-reaction counts
  • Pinned and edited status
  • The post URL, post ID, and reported root-comment count
  • Available top-reply text, authors, timestamps, reactions, and URLs in a nested array

Results are stored in an Apify dataset and can be downloaded as JSON, CSV, Excel, XML, or another supported dataset format. The default Comments view is designed for analysis, while the Commenter leads view provides a compact set of flat fields for spreadsheets and CRM workflows.

Common use cases

  • Analyze the discussion and engagement around your own or relevant industry posts
  • Find people publicly commenting on topics connected to your market
  • Export commenter profiles for research, qualification, or responsible outreach
  • Build social-listening, sentiment-analysis, and content-research datasets
  • Compare reaction and reply patterns across multiple posts
  • Feed structured comments into AI, BI, CRM, spreadsheet, or automation workflows

How to scrape LinkedIn post comments

  1. Copy one or more supported public LinkedIn post URLs.
  2. Paste them into LinkedIn Post URLs.
  3. Set Maximum comments per post, or keep the default of 100.
  4. Click Start.
  5. Open the dataset to inspect or export the comment records.

No LinkedIn account, session cookie, browser extension, or proxy configuration is requested in the input form.

Input

The input form has two fields:

FieldTypeRequiredDefaultDescription
post_urlsarray of stringsYesAdd 1–1,000 supported public LinkedIn post URLs. Duplicate URLs are normalized and removed while preserving first-seen order.
max_comments_per_postintegerNo100Maximum deduplicated root comments saved per post. Accepted range: 01,000. Use 0 to fetch all available roots, subject to a 100-page safety cap per post. Nested top replies do not count toward this limit.

Supported LinkedIn post URL formats

https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001
https://www.linkedin.com/posts/username_topic-activity-7408723748973056001-AbCd
https://www.linkedin.com/posts/username_topic-ugcPost-7408723748973056001-AbCd

Tracking parameters and fragments are removed. A comment-specific URL is normalized to its parent post; targeted single-comment scraping is not supported.

Input example

{
"post_urls": [
"https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"
],
"max_comments_per_post": 100
}

For API migration compatibility, the runtime also accepts hidden aliases: posts, postUrls, or linkedin_post_url for post_urls, and maxItems for max_comments_per_post. The visible form and new integrations should use the canonical snake_case fields above. Conflicting aliases or unknown keys fail validation before any comment requests are made.

Output fields

Each dataset item is one root comment. Every declared key is present. Unavailable strings and timestamps are null; IDs are strings to avoid precision loss; counters are non-negative integers.

FieldTypeDescription
post_urlstringCanonical input post URL.
post_idstring or nullNumeric LinkedIn activity ID stored as a string.
post_comment_countinteger or nullTotal root-comment count reported for the post when available.
comment_idstring or nullNumeric LinkedIn comment ID stored as a string.
comment_urlstring or nullDirect LinkedIn comment URL.
comment_textstring or nullRoot-comment text.
commented_atstring or nullUTC ISO 8601 timestamp derived from the numeric timestamp.
commented_at_timestampinteger or nullUnix timestamp in milliseconds.
is_pinnedbooleanWhether the root comment is pinned.
is_editedbooleanWhether the root comment is marked edited.
reply_countintegerTotal replies reported for the root comment.
top_reply_countintegerNumber of reply objects included in top_replies. This can be lower than reply_count.
total_reaction_countintegerSum of every non-negative reaction counter returned for the comment.
like_countintegerLike reactions.
praise_countintegerPraise reactions.
empathy_countintegerEmpathy reactions.
appreciation_countintegerAppreciation reactions.
interest_countintegerInterest reactions.
other_reaction_countintegerReaction counters not represented by the five named fields.
commenter_idstring or nullStable LinkedIn member or entity ID when available.
commenter_typestringprofile, company, or unknown, derived from the commenter URL.
commenter_namestring or nullCommenter display name.
commenter_headlinestring or nullPublic commenter headline or subtitle.
commenter_linkedin_urlstring or nullPublic LinkedIn profile or entity URL.
commenter_image_urlstring or nullPublic image URL returned with the commenter. LinkedIn-hosted image URLs can expire.
top_repliesarrayAvailable top replies normalized into the reply schema below.

Top-reply fields

Each object inside top_replies contains:

FieldTypeDescription
reply_idstring or nullNumeric LinkedIn reply ID stored as a string.
reply_urlstring or nullDirect reply URL.
reply_textstring or nullReply text.
replied_atstring or nullUTC ISO 8601 timestamp.
replied_at_timestampinteger or nullUnix timestamp in milliseconds.
is_pinnedbooleanWhether the reply is pinned.
is_editedbooleanWhether the reply is marked edited.
reply_countintegerNested reply count reported for this reply.
total_reaction_countintegerTotal reactions on the reply.
like_countintegerLike reactions.
praise_countintegerPraise reactions.
empathy_countintegerEmpathy reactions.
appreciation_countintegerAppreciation reactions.
interest_countintegerInterest reactions.
other_reaction_countintegerOther non-negative reaction counters.
commenter_idstring or nullReply author's stable LinkedIn ID when available.
commenter_typestringprofile, company, or unknown.
commenter_namestring or nullReply author's display name.
commenter_headlinestring or nullReply author's public headline.
commenter_linkedin_urlstring or nullReply author's LinkedIn URL.
commenter_image_urlstring or nullReply author's image URL.

Output example

{
"post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001",
"post_id": "7408723748973056001",
"post_comment_count": 445,
"comment_id": "7408723949095772161",
"comment_url": "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001?commentUrn=...",
"comment_text": "A thoughtful example comment about the post.",
"commented_at": "2025-12-22T04:23:56.899Z",
"commented_at_timestamp": 1766377436899,
"is_pinned": false,
"is_edited": false,
"reply_count": 2,
"top_reply_count": 1,
"total_reaction_count": 55,
"like_count": 45,
"praise_count": 0,
"empathy_count": 7,
"appreciation_count": 3,
"interest_count": 0,
"other_reaction_count": 0,
"commenter_id": "ACoAAAExampleCommenterId",
"commenter_type": "profile",
"commenter_name": "Example Commenter",
"commenter_headline": "Marketing leader",
"commenter_linkedin_url": "https://www.linkedin.com/in/example-commenter",
"commenter_image_url": "https://media.licdn.com/dms/image/example-profile-photo",
"top_replies": [
{
"reply_id": "7408730400212037632",
"reply_url": "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001?replyUrn=...",
"reply_text": "A useful follow-up reply.",
"replied_at": "2025-12-22T04:49:34.966Z",
"replied_at_timestamp": 1766378974966,
"is_pinned": false,
"is_edited": false,
"reply_count": 0,
"total_reaction_count": 19,
"like_count": 17,
"praise_count": 0,
"empathy_count": 0,
"appreciation_count": 0,
"interest_count": 2,
"other_reaction_count": 0,
"commenter_id": "ACoAAAExampleReplyAuthorId",
"commenter_type": "profile",
"commenter_name": "Example Reply Author",
"commenter_headline": "Research analyst",
"commenter_linkedin_url": "https://www.linkedin.com/in/example-reply-author",
"commenter_image_url": null
}
]
}

The downloadable example-output.json included with this Actor definition contains the same example with complete URLs.

Pagination, ordering, and duplicate handling

  • Pagination continues automatically until the requested root-comment limit, the end of available pages, or the 100-page safety cap.
  • Page size is not assumed and may vary.
  • max_comments_per_post is applied after duplicate removal.
  • Duplicate root comments keep their first occurrence, using post ID plus comment ID when available.
  • Results preserve input-post order and the order returned by the comment source. The Actor does not re-sort comments by timestamp.
  • Nested top replies are retained with their root comment and do not become separate dataset items.

Run summary and partial results

The Actor writes RUN_SUMMARY to the default key-value store. It includes overall counts and a per-post status with:

  • Input position and canonical post URL
  • Status: succeeded, no_results, partial, failed, or capped
  • Reported total comments, comments saved, and pages fetched
  • Sanitized error code and message when applicable

If some posts fail, successful and partial comment rows remain available and the summary status is partial. If every post request fails, the summary is written before the Actor run fails. A valid post with no returned comments produces an empty dataset and no_results, not a fabricated error row.

API example

Start the Actor through the Apify API using your Apify token:

curl -X POST \
"https://api.apify.com/v2/acts/data-slayer~linkedin-post-comments/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"post_urls": [
"https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"
],
"max_comments_per_post": 100
}'

You can also connect runs to Apify schedules, webhooks, Make, Zapier, Google Sheets, or an MCP-compatible workflow using Apify's standard integrations.

Frequently asked questions

No. The input requires supported public LinkedIn post URLs. It does not request your LinkedIn credentials or session cookies.

Does the comment limit include replies?

No. max_comments_per_post counts unique root-comment dataset items. Available top replies are nested inside those records and do not count toward the limit.

Does top_replies contain every reply?

Not necessarily. reply_count is the reported total, while top_reply_count is the number of reply objects actually included. Treat top_replies as the available top-reply sample rather than a complete reply-thread guarantee.

What does a limit of zero mean?

max_comments_per_post: 0 requests all available root comments, with a maximum of 100 pages per post. Large discussions can therefore take longer and consume more usage than a bounded run.

Can I process multiple posts in one run?

Yes. Add up to 1,000 supported post URLs. The runtime processes posts in bounded groups while preserving input-post order in the dataset.

Can I scrape one specific comment URL?

No. Comment-specific URLs are normalized to their parent post. The Actor extracts root comments from the post according to the configured limit.

Why can post_comment_count differ from the number of dataset rows?

The reported count describes available root comments at the source. Your configured limit, duplicate removal, page cap, unavailable pages, or source changes can result in fewer saved rows.

Responsible use

Use the Actor and its output responsibly and in accordance with applicable laws, platform terms, and your organization's data policies. Avoid using personal data for unsolicited, discriminatory, deceptive, or harmful activity.

This independent Actor is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation. LinkedIn is a trademark of its respective owner.

Support

If a supported public post produces an unexpected result, open an issue from the Actor's Issues tab and include the run ID, input URL format, and observed behavior. Do not include credentials or private data.