๐ฌ LinkedIn Comment Thread: Replies + Reactors [No Login] โ
Pricing
from $5.00 / 1,000 results
๐ฌ LinkedIn Comment Thread: Replies + Reactors [No Login] โ
Pull every reply and every reactor for a single LinkedIn comment thread, in one run. Built for community managers, journalists, and crisis-monitoring teams. No login, no cookies, no upsell. Every URL returns rows with a clear reason - never a silent zero-result run.
Pricing
from $5.00 / 1,000 results
Rating
5.0
(5)
Developer
Unseen User
Maintained by CommunityActor stats
5
Bookmarked
55
Total users
12
Monthly active users
2 days ago
Last modified
Categories
Share
๐ฌ LinkedIn Comment Scraper - Every Reply, Every Reactor, Deduplicated + AI-Scored (No Login)
The most complete LinkedIn comment scraper on Apify: pull every reply AND every reactor for a single LinkedIn comment, deduplicate them into unique engagers, and optionally score each against your ICP with AI. Built for community managers, sales teams, journalists, and crisis-monitoring teams who need full per-comment context.
This Actor combines two HarvestAPI endpoints in a single run - saving you the work of calling two separate actors and merging the results. One input, one structured output, one Apify run.
Free plan limit
Free Apify users get up to 5 results per run. Paying users are not affected and receive results normally.
This limit was set by the Actor developer, not by Apify. To remove it and receive unlimited results, upgrade to any paid Apify plan: https://apify.com/pricing
When a free plan run hits the cap, the Actor finishes successfully (status SUCCEEDED) and the run's status message explains what happened. No error is raised, so the first 5 results are fully usable as normal.
What's new
2.0
- Breaking:
reaction_typesandonly_replies_after_daysinput fields removed. These two client-side filters were rarely used and cluttered the input form. Any saved task or API call that includes either field will get a schema-validation error on next run. Migration: filter reaction types and reply dates in your downstream dataset processor instead - the raw output still carriesreaction_typeon every reaction row andcreated_at/created_at_timestampon every reply row, so the filtering logic moves out one layer without losing any information. - Two published task pages built on these fields (
lcd-positive-reactions-only,lcd-recent-replies-7-days) have been deleted alongside the removal. - Minor:
max_repliesandmax_reactionsinput titles now include(0 = all replies)/(0 = all reactions)so the sentinel behavior is visible in the Console form.
1.6
- Free plan cap reduced from 50 rows to 5 per run. The free tier is now a strict "see the output shape" demo. Any run with
APIFY_USER_IS_PAYINGunset stops after 5 rows and finishes withSUCCEEDED. Paying plans are entirely unaffected. Upgrade to any paid Apify plan to remove the cap and receive unlimited results.
1.5
- Clearer LLM enrichment output docs. Every LLM output field (
icp_score,icp_rationale,seniority_level,is_decision_maker,intent_score,intent_type,sentiment,sentiment_confidence) now has a proper reference table in the Engager rows section explaining what it means and how to use it. Special focus onsentiment_confidence: it is the model's confidence in its ownsentimentlabel based on how much evidence was available - use it to filter out sentiment labels derived from reaction-only rows (typically <0.4 confidence) from those derived from clear reply text (typically >0.8). The scoring rubric is also spelled out in the model's system prompt so it returns meaningful confidence values consistently. - Minor:
emit_engagersinput title no longer says "(sub-dataset)" - stale wording from before 1.3.
๐ฏ Use Cases
- Community management - drill into a controversial or important comment to understand the full thread
- Crisis monitoring - when one comment goes negative on your CEO's post, get the full picture instantly
- Journalism - investigate viral threads or contested statements at depth
- Academic research - analyze conversation dynamics around a specific comment
- Customer-feedback intelligence - surface comments on your product posts that drove the most response
- Influencer analysis - identify which of your commenters drove the most secondary engagement
- Warm-lead prospecting from viral comments - use AI ICP scoring to find your ideal customers among people who engaged with a competitor's post
- B2B intent detection at the thread level - flag replies that read as buying signals across your team's LinkedIn posts, so sales gets a shortlist instead of scrolling
- Legal evidence preservation - capture the full state of a thread (replies + reactors) for litigation hold
Example tasks
Ready-to-run presets for common jobs. Click any of the below to open the task with the input already filled in - just paste your Anthropic key (if the task uses AI enrichment) and hit Start.
- Find warm leads on LinkedIn with AI ICP scoring - score every engager on a viral comment against your ideal customer profile.
- Deduplicate engagers on a LinkedIn comment (no AI) - one row per unique person who engaged, ready for CRM import.
- LinkedIn comment buying intent detection - flag replies with buying signals and rank engagers by intent score.
- LinkedIn comment thread sentiment analysis with AI - score every engager as positive, neutral, or negative with a confidence rating.
Related actors
Same LinkedIn cluster, complementary use cases. These pair naturally as a pipeline before and after this deep-dive:
- LinkedIn Posts Scraper - Keyword & Hashtag search - find the viral or high-engagement LinkedIn posts worth deep-diving in the first place.
- LinkedIn Post Comment & Reaction Extractor (no cookies) - pull every top-level comment and every post-level reactor on a whole post. Use this Actor after it to zoom into one specific comment's replies and reactors.
- LinkedIn User Comments & Reactions Scraper - flip the perspective: given a specific person, get everything they have commented on and reacted to across LinkedIn.
- LinkedIn Profile Extractor & Enricher - enrich individual repliers or reactors this Actor surfaces with full profile data (headline, current company, past experience, email where available).
- LinkedIn Company Scraper - Bulk Data - resolve the companies named in engager positions for account-level lead intelligence and ICP roll-ups.
๐ Quick Start
- Click Try for free on this Actor's page
- Enter one or more LinkedIn comment URLs in
comment_urls(one per line) - Run the Actor
- Download the combined output as JSON, CSV, or XLSX, or pull via Apify API
โ๏ธ Inputs
Required
- LinkedIn comment URLs (
comment_urls) - One LinkedIn comment URL per line. Each URL must contain acommentUrnparameter. Tip: on LinkedIn, click the timestamp of the specific comment you want to analyze - the URL in your browser then containscommentUrn=.... Duplicates are removed automatically. One dataset row per URL.
Filters (defaults are fine for most users)
- Fetch replies (
include_replies) - Defaulttrue. - Fetch reactions (
include_reactions) - Defaulttrue. - Max number of replies per comment (
max_replies) - Default0(fetch every direct reply the underlying API returns). Set a positive integer to cap. - Max number of reactions per comment (
max_reactions) - Default0(fetch every reactor the underlying API returns). Set a positive integer to cap. - Sort replies by (
sort_replies_by) -date(default) orrelevance. Hint only; underlying API uses token-based pagination.
Engager aggregation (optional, off by default - see the "Engager rows" section further down)
- Emit deduplicated engager rows (
emit_engagers) - Defaultfalse. When true, emits one row per unique person who engaged with the queried comment (deduplicated across replies and reactions) into the same default dataset as replies/reactions, tagged withtype: "engager". Bills asengagerat $1/1,000 rows. - Enrich engagers with ICP scoring (
enrich_engagers) - Defaultfalse. When true, runs each deduplicated engager through Claude Haiku to attach ICP fit score, seniority, buying intent, and sentiment. Impliesemit_engagers=true. Bills asenriched_engagerat $5/1,000 rows. Requires you to supply your own Anthropic API key below. - Anthropic API key (
anthropic_api_key, secret) - Your own Anthropic key. Only used when enrichment is on. Never stored, never logged. Get one at https://console.anthropic.com/settings/keys. - Your ideal customer profile (
icp_description) - Free-text ICP description used verbatim by the ICP-scoring layer. Example:B2B SaaS CTOs at 50-500 person Series A companies in North America.
๐บ Demo video
New to Apify? Schedule this actor to run automatically:
Connect this actor to your stack (Zapier, Make, Airtable, and more):
๐ฐ Pricing
Pay-per-event on Apify. Each row you receive is billed independently:
- Reply, reactor, or error row: $5.00 / 1,000 (
resultevent) - Deduplicated engager row: $1.00 / 1,000 (only billed if you turn on "Emit deduplicated engager rows")
- AI-scored engager row: $5.00 / 1,000 (only billed if you turn on "Enrich engagers with ICP scoring")
Platform usage is free. You pay Anthropic directly for LLM enrichment on your own API key (typically well under $1 per 1,000 engagers). Each comment consumes at least 2 HarvestAPI calls (one for replies, one for reactions, plus extra calls per page when paginating). In bulk mode each URL is billed independently.
๐ฆ Output Structure
One dataset row per result. Every reply and every reactor is its own row. A type field tells you what kind of row it is.
type: "reply" (one per reply)
{"type": "reply","comment_url": "https://www.linkedin.com/feed/update/...","parent_reply_id": null,"id": "urn:li:comment:(...)","linkedin_url": "https://www.linkedin.com/feed/...","text": "Great point!","created_at": "2026-05-20T10:23:00Z","author_name": "Jane Doe","author_position": "Engineer at Acme","author_linkedin_url": "https://linkedin.com/in/janedoe","author_picture_url": "https://...","is_post_author": false,"num_sub_comments": 0,"pinned": false,"edited": false,"reaction_type_counts": [{ "type": "LIKE", "count": 5 }],"scraped_at": "2026-05-25T12:34:56.789Z"}
Nested replies: LinkedIn's "N replies" count on a comment includes sub-replies (replies-to-replies). The Actor fetches them too: top-level replies have parent_reply_id: null, sub-replies have parent_reply_id: "<id of the reply they nest under>". Build the tree client-side by joining on id -> parent_reply_id.
type: "reaction" (one per reactor)
{"type": "reaction","comment_url": "https://www.linkedin.com/feed/update/...","id": "urn:li:fsd_reaction:...","reaction_type": "LIKE","reactor_name": "Om More","reactor_position": "PM at Acme","reactor_linkedin_url": "https://linkedin.com/in/ACoAA...","reactor_picture_url": "https://...","scraped_at": "2026-05-25T12:34:56.789Z"}
type: "error" (one per invalid input)
If a URL fails validation, the run does not crash. A single row with the structured error is written and processing continues with the remaining URLs.
{"type": "error","comment_url": "https://example.com/foo?commentUrn=bar","error_type": "invalid_input","error_code": "NOT_LINKEDIN_URL","error_description": "URL must be a linkedin.com URL (got hostname: example.com).","error_how_to_fix": "Use a URL from linkedin.com. This Actor only supports LinkedIn comments.","scraped_at": "2026-05-25T12:34:56.789Z"}
Stable error codes: MISSING_COMMENT_URL, MALFORMED_URL, NOT_LINKEDIN_URL, MISSING_COMMENT_URN, NOTHING_TO_FETCH, MISSING_API_KEY.
type: "fetch_error" (one per failed upstream call)
If HarvestAPI fails for one part of a comment but the other part succeeds, a fetch_error row is emitted for the failed part. The successful part's rows are still pushed.
{"type": "fetch_error","source": "replies","comment_url": "https://www.linkedin.com/feed/update/...","error": {"type": "upstream","code": "REPLIES_FETCH_FAILED","description": "HarvestAPI /linkedin/post-comment-replies returned 500 ...","how_to_fix": "Re-run the Actor."},"scraped_at": "2026-05-25T12:34:56.789Z"}
Engager rows (optional)
Turn on emit_engagers to get one row per unique person who engaged with the queried comment (deduplicated across replies and reactions), emitted into the same default dataset as replies and reactions and distinguished by type: "engager" (or type: "enriched_engager" when enrichment is on). Existing consumers that filter to type=reply|reaction are unaffected - engagers are additive.
Turn on enrich_engagers (which also implies emit_engagers=true) to attach LLM-derived intelligence to each engager: ICP fit against your description, seniority level, decision-maker flag, buying intent, intent type, and sentiment. Enrichment uses Claude Haiku 4.5 on your own Anthropic API key.
Dedup-only engager row (type: "engager", billed as engager at $1/1,000):
{"type": "engager","comment_url": "https://www.linkedin.com/feed/update/...","actor_id": "urn:li:fsd_profile:ACoAA...","name": "Jane Doe","position": "Head of Growth at Acme","linkedin_url": "https://www.linkedin.com/in/jane-doe","picture_url": "https://media.licdn.com/...","picture": { "url": "...", "width": 400, "height": 400 },"is_replier": true,"is_reactor": true,"reactions_given": ["CELEBRATE"],"reply_ids": ["7409554959530110976"],"reply_texts": ["Great point!"],"first_seen_at": "2025-12-24T11:26:05.227Z","scraped_at": "2026-09-09T14:22:11.041Z"}
Enriched engager row (type: "enriched_engager", billed as enriched_engager at $5/1,000): same shape as above plus the LLM output:
{...(all dedup-only fields above)..."icp_score": 82,"icp_rationale": "Growth leader at a Series A SaaS company, exact ICP match.","seniority_level": "senior","is_decision_maker": true,"intent_score": 65,"intent_type": "buying_signal","sentiment": "positive","sentiment_confidence": 0.88}
What each LLM field means:
| Field | Type | Meaning |
|---|---|---|
icp_score | int 0-100 | How well this engager matches the icp_description you supplied. 0 = clearly not your ICP, 100 = perfect match. |
icp_rationale | string (<= 25 words) | Short natural-language justification for the icp_score - what tipped the model toward high or low. Handy for spot-checks. |
seniority_level | enum: entry / mid / senior / executive / unknown | Job seniority inferred from position. unknown when the position is blank, "--", or too vague to place. |
is_decision_maker | boolean | Whether the engager can plausibly authorize a purchase (typically founders, C-suite, VPs, and heads of function). |
intent_score | int 0-100 | How likely this engager is a warm sales lead right now, based on what they wrote. 0 = pure reaction with no signal, 100 = explicit buying question. Independent of icp_score - someone can be a strong ICP with zero current intent (e.g. LIKE-only reactors), or weak ICP with strong intent (e.g. a student asking to buy). |
intent_type | enum: buying_signal / question / praise / criticism / other / none | What kind of engagement this is. none for reaction-only rows with no reply text. |
sentiment | enum: positive / neutral / negative | Overall emotional tone of the engager toward the queried comment/post. neutral for reaction-only rows and matter-of-fact replies. |
sentiment_confidence | float 0-1 | How much to trust the sentiment label, based on how much evidence the model had to work with. 1.0 = the reply text is unambiguous (clear praise, clear criticism, direct question - the sentiment is obvious). 0.5-0.8 = there is text but the tone is mixed, brief, or subtle. 0.0-0.4 = little to no text to judge from (reaction-only rows fall here; the sentiment is a weak inference from just the reaction emoji type). Use this to filter: e.g. drop sentiment values with confidence below 0.5 if you only want reliable labels, or trust them freely above 0.8. |
If enrichment is enabled but the Anthropic call fails or the key is missing, the row still ships with the dedup-only shape plus an enrichment_error field explaining the failure. The dedup part is not lost.
Where to find them: engager rows appear directly in the run's Output tab alongside replies and reactions. In JSON exports, filter by type == "engager" or type == "enriched_engager" to isolate them. No separate storage location, no hidden sub-dataset - one dataset per run, easy to see in the Console preview.
Cost breakdown for one typical run (10 replies, 30 reactors, ~36 unique engagers after dedup):
| Mode | result rows | engager rows | enriched_engager rows | Buyer pays Apify | Buyer's own Anthropic cost |
|---|---|---|---|---|---|
| Default (no engagers) | 40 ร $0.005 | - | - | $0.200 | $0 |
emit_engagers=true | 40 ร $0.005 | 36 ร $0.001 | - | $0.236 | $0 |
enrich_engagers=true | 40 ร $0.005 | - | 36 ร $0.005 | $0.380 | ~$0.011 |
๐ง Technical Details
- Endpoints: 2 HarvestAPI endpoints called in parallel per run
GET /linkedin/post-comment-replies- token-based paginationGET /linkedin/comment-reactions-pageparameter pagination
- Concurrency: 2 (both endpoints in parallel)
- Retries: 3 with exponential backoff (1s, 2s, 4s) on
429,502,503,504. Non-retryable HTTP errors (e.g.401,404) fail immediately with no retries. - Output: streamed via Apify dataset
- Format: JSON, CSV, XLSX, or via Apify API
๐ Schemas
This Actor ships with the schemas Apify uses to present inputs and outputs:
| Schema | File | Purpose |
|---|---|---|
| Input | .actor/INPUT_SCHEMA.json | Drives the input form. Grouped into "What to fetch" and "Advanced settings". |
| Dataset | .actor/dataset_schema.json | Documents every field returned and its type. |
| Key-value store | .actor/key_value_store_schema.json | Declares the standard INPUT / OUTPUT keys. This Actor writes substantive results to the dataset, not the key-value store. |
| Live-view OpenAPI | (not applicable) | This Actor does not run an embedded web server, so no live-view OpenAPI schema is provided. |
โ FAQ
Q: Why combine two endpoints into one actor? A: For workflows where you always want both data sources together. If you want only ONE of these endpoints, use the dedicated single-purpose actor for that endpoint instead.
Q: Do I need a HarvestAPI account? A: No. UnseenUser holds the HarvestAPI credentials. You only need an Apify account.
Q: What if LinkedIn sends a cease-and-desist? A: Notify UnseenUser within 48 hours via the Apify profile contact form (apify.com/UnseenUser) and cease using this Actor immediately.
Q: Can I use this data to train AI? A: No. LinkedIn's Terms explicitly prohibit AI training on LinkedIn data, and post authors retain copyright. See Section G of the Actor-Specific Addendum.
Q: Why are reactor profile URLs in opaque ID format? A: This is by LinkedIn's design - the Reactions pop-up does not expose readable slugs. The reactor's name, position, and pictureUrl are still returned. To get a readable URL for a specific reactor, resolve it one at a time via the Profile endpoint (not in bulk - see Addendum Section F).
Q: Is there a LinkedIn comments API? Why use this Actor instead? A: LinkedIn's official Marketing Developer Platform exposes engagement metrics at the post level but does not expose the full list of replies and reactors on a specific comment - and access is gated behind a partnership application. This Actor pulls the same data via HarvestAPI without any LinkedIn API access, per-event pricing you can inspect on this page, and no partnership review to wait through.
Q: How do I see everyone who replied to a LinkedIn comment?
A: Paste the comment's URL (the one with commentUrn=... in it - click the comment's timestamp on LinkedIn to get that URL) into comment_urls and run. Every direct reply comes back as its own row with type: "reply", including the replier's name, position, LinkedIn URL, and reply text.
Q: How do I export the list of people who reacted to a LinkedIn comment?
A: Same input as above. Every reactor comes back as a row with type: "reaction", plus their name, position, opaque LinkedIn URL, and the reaction type (LIKE, CELEBRATE, SUPPORT, LOVE, INSIGHTFUL, FUNNY). Export the dataset as JSON, CSV, or XLSX.
Q: Can I use this to find warm leads from a competitor's viral post?
A: Yes - this is the strongest lead-gen use case. Turn on emit_engagers to get one row per unique person who engaged with the comment (deduplicated across replies and reactions). Turn on enrich_engagers too and paste your Anthropic API key to auto-score each engager against your ICP, seniority, buying intent, and sentiment via Claude Haiku.
Q: How do I do sentiment analysis on a LinkedIn comment thread?
A: Turn on enrich_engagers with an Anthropic API key. Each engager row gets a sentiment field (positive / neutral / negative) plus a sentiment_confidence score (0-1) so you can filter out low-confidence labels derived from reaction-only rows and trust the ones derived from clear reply text.
Q: How much does this cost vs LinkedIn's official API? A: LinkedIn's official Marketing API is free but comes with a partnership approval process and rate limits, and does not expose per-comment reply/reactor detail at all. This Actor charges pay-per-event on Apify (see the Pricing section above) - a small viral-comment scrape typically comes in well under $1 total, billed only on rows you actually receive.
Q: Is there a free version? A: Yes. Free Apify users get up to 5 result rows per run - enough to see the output shape and confirm the Actor works on your target URL. See the "Free plan limit" section at the top. Upgrade to any paid Apify plan to lift the cap.
Q: Can I run this on many comments at once?
A: Yes - put one comment URL per line in comment_urls. The Actor processes them concurrently (concurrency 3 by default) and streams rows to a single dataset. Each URL is billed independently.
Q: Will LinkedIn ban me for scraping comments with this Actor? A: This Actor pulls data via HarvestAPI, a third-party data provider. Your LinkedIn account is not part of the request flow - no login, no cookie, no browser automation on your side - so it cannot be flagged for activity you did not perform. Your responsibility is complying with LinkedIn's Terms and applicable law in how you use the data. Full policy in the Actor's Terms of Service section below.
Q: Is LinkedIn comment scraping allowed by LinkedIn's official policy? A: LinkedIn's Terms restrict automated data collection by your own account. This Actor does not use your account - HarvestAPI runs its own infrastructure. What matters for you is downstream use: no unsolicited outreach without a CAN-SPAM/GDPR-compliant basis, no reselling the raw data, no training AI on it. Full ground rules in the Terms of Service section below.
Q: How do I export LinkedIn comment replies to a CSV or Google Sheets? A: Every run's dataset exports as CSV, XLSX, or JSON directly from the Apify Console's Storage tab. Push to Google Sheets via the built-in Apify integration, or stream to Zapier, Make, or a webhook (see the Apify integrations walkthrough above).
Q: Which LinkedIn comment scraper is best for lead generation from a viral post?
A: For lead-gen you need three things: (1) every reactor with name and position, not just the slice LinkedIn shows you; (2) deduplication across replies and reactions, so someone who both replied and reacted counts once; (3) ICP scoring to rank engagers by fit. This Actor does all three - turn on emit_engagers and enrich_engagers for a ranked warm-lead list per comment URL. A small viral scrape typically comes in well under $1 total.
Limitations
Honest list of what this Actor cannot do today, so you can decide before you run.
- Nested sub-replies are not returned. LinkedIn's "N replies" count on a comment includes both direct replies and nested replies-to-replies. The underlying API only returns direct children of the queried comment, and observation shows nested sub-replies are not surfaced even when the reply URN is queried separately. Expect roughly 30-40% of what LinkedIn's UI counts on viral comments.
- Reactor profile URLs are in opaque ID format (e.g.
linkedin.com/in/ACoAA...). This is by LinkedIn's design, not a bug. The reactor's name, position, and picture are returned normally. A readable slug requires a separate Profile lookup per reactor, which this Actor does not perform - see Addendum Section F for why. - Approximately 5-7% of reactors may be missing on high-volume comments. The upstream API sometimes reports
totalElements=56but returns 52 - the missing four are usually reactors whose profiles became private or deleted after they reacted, and cannot be resolved anymore. Not something the Actor can recover from its side. - No server-side date filter yet. Every reply row carries a
created_atISO timestamp; filter downstream in your dataset processor. - No server-side reaction-type filter yet. All types (LIKE, CELEBRATE, SUPPORT, LOVE, INSIGHTFUL, FUNNY, and any new type LinkedIn adds) are returned; filter downstream on
reaction_type. - One comment per URL, not one post. This Actor scopes to a single specific comment identified by
commentUrn. To pull every top-level comment on a post, use one of the related scrapers listed below.
Worked example
End-to-end run so you can copy this and see results in about 30 seconds.
Input (paste this into the Console or POST it to the API):
{"comment_urls": ["https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7408723748973056001%2C7408723949095772161%29"],"include_replies": true,"include_reactions": true}
Everything else uses defaults: max_replies=0, max_reactions=0 (unlimited on both), sort_replies_by="date".
Log tail (what you should see):
INFO Processing 1 URL (concurrency=3). include_replies=true (max unlimited per comment, sort=date), include_reactions=true (max unlimited per comment).INFO Reconstructed commentUrn from dashCommentUrn: urn:li:comment:(activity:...,7408723949095772161)INFO reactions page 1: +52 items, total_collected=52/Infinity, harvest_totalElements=56, harvest_totalPages=1, harvest_pageSize=100INFO replies page 1: +10 items, total_collected=10/Infinity, harvest_totalElements=0, harvest_totalPages=0, harvest_pageSize=100, next_token=noINFO Fetched 10 replies in 1 page(s) and 52 reactions in 2 page(s).INFO All done. Pushed 62 rows from 1 URL.
One reply row in the dataset:
{"type": "reply","comment_url": "https://www.linkedin.com/feed/update/...","parent_reply_id": null,"id": "7409554959530110976","author_name": "Jane Doe","author_position": "Head of Community at Acme","author_linkedin_url": "https://www.linkedin.com/in/jane-doe","text": "Great point about climate resilience!","created_at": "2025-12-24T11:26:05.227Z","is_post_author": false,"num_sub_comments": 0,"edited": false,"scraped_at": "2026-09-09T14:22:11.041Z"}
One reaction row in the same dataset:
{"type": "reaction","comment_url": "https://www.linkedin.com/feed/update/...","id": "urn:li:fsd_reaction:(urn:li:fsd_profile:...,urn:li:activity:...,0)","reaction_type": "CELEBRATE","reactor_name": "Om More","reactor_position": "VP of Product","reactor_linkedin_url": "https://www.linkedin.com/in/ACoAAFsSba4B...","scraped_at": "2026-09-09T14:22:11.221Z"}
Sort or filter these rows by the type field to split replies vs reactors in your processor.
How to run
This Actor does not require a personal Apify token or elevated permissions. The LIMITED_PERMISSIONS token that the platform injects into every run is sufficient. Every trigger path below works out of the box.
- Apify Console: click Try for free on the Actor page, paste your
comment_urls, click Start. - Apify API:
POST https://api.apify.com/v2/acts/unseenuser~Comment-reactions-and-replies/runs?token=<your_token>with a JSON body matching the Worked example above. Full request/response spec is on the Actor's API tab. - Scheduled runs: Console > Schedules > Create schedule, pick this Actor, set a cron, save. No token gymnastics.
- n8n: use the community Apify node, point it at
unseenuser/Comment-reactions-and-replies, paste the input JSON, done. - Zapier / Make: same pattern - the Apify integration in either platform runs this Actor with no extra permission setup.
- Saved Tasks: for repeat runs with the same input (or ready-to-run recipes), use the Actor's Saved tasks tab - see the Example tasks section below for one-click starting points.
Because the Actor does not need account-level API access, none of these integrations require you to swap tokens, whitelist an IP, or install a bootstrapper.
Output field reference
Every dataset row carries type, comment_url, and scraped_at. The rest of the fields depend on type. Field names are stable - do not rename or drop keys, per the versioning policy in the Changelog section.
type = reply (one row per direct reply to the queried comment)
| Field | Type | Example |
|---|---|---|
parent_reply_id | string | null | null for top-level; "7409554959530110976" for a nested reply |
id | string | LinkedIn URN of the reply |
linkedin_url | string | Direct URL to the reply |
text | string | Reply body |
created_at | string (ISO) | 2025-12-24T11:26:05.227Z |
author_name | string | "Jane Doe" |
author_position | string | "Head of Community at Acme" |
author_linkedin_url | string | "https://www.linkedin.com/in/jane-doe" |
author_picture_url | string | CDN URL to author's profile photo |
author_picture | object | Full picture object with url, width, height, expiresAt (numeric Unix ms). Use this when you need image dimensions or the pre-signed URL's expiry |
author_id | string | LinkedIn actor URN of the reply author. Stable identifier for pipelines that dedupe across runs |
is_post_author | boolean | true if the replier is the post's original author |
num_sub_comments | integer | LinkedIn's count of sub-replies on this reply (often 0 due to upstream limitation) |
num_impressions | integer | null | LinkedIn's view count for the reply, when available |
num_shares | integer | null | Share count for the reply, when available |
contributed | boolean | LinkedIn's "contributed" / top-contributor flag on the reply author, when available |
pinned | boolean | Whether the reply is pinned |
edited | boolean | Whether the reply has been edited |
reaction_type_counts | array | Per-reply reaction breakdown, e.g. [{"type":"LIKE","count":5}] |
post_id | string | Bare numeric LinkedIn post id, e.g. "7408723748973056001". Ready to concat into a URL or use as a join key. Parsed from post_id_raw; pass-through when the upstream string is not parseable |
post_urn | string | Canonical URN form, e.g. "urn:li:activity:7408723748973056001". Use this when calling the LinkedIn API directly. Absent when post_id_raw is not parseable |
post_id_raw | string | The unmodified upstream value from HarvestAPI (replies: "activity:<id>"; reactions: "urn:li:comment:(activity:<id>,<cid>)"). Kept so nothing is lost by the parser |
created_at_timestamp | integer (Unix ms) | Numeric millisecond timestamp of the reply, when the upstream API returns it. Handy when you want to sort or filter by time in Python or JS without parsing the ISO string in created_at |
type = reaction (one row per reactor on the queried comment)
| Field | Type | Example |
|---|---|---|
id | string | Short unique reaction id, "<reactor_id>_<comment_id>", e.g. "ACoAACxPDi88GoVK1fvlmSOA2PotbkJIBVJbHzY_7408723949095772161". Derived because LinkedIn does not give reactions a standalone id - the (reactor, comment) tuple identifies them |
id_raw | string | The unmodified upstream reaction URN, "urn:li:fsd_reaction:(urn:li:fsd_profile:<x>,urn:li:comment:(activity:<y>,<z>),0)". Kept for anyone who prefers the URN form |
reaction_type | string | One of LIKE, CELEBRATE, SUPPORT, LOVE, INSIGHTFUL, FUNNY (or a new LinkedIn type - the field is open) |
reactor_name | string | "Om More" |
reactor_position | string | "VP of Product" |
reactor_linkedin_url | string | Opaque ID format by LinkedIn design |
reactor_picture_url | string | CDN URL to reactor's profile photo |
reactor_picture | object | Full picture object with url, width, height, expiresAt (numeric Unix ms). Same shape as author_picture |
reactor_id | string | LinkedIn actor URN of the reactor. Especially useful as a stable primary key because the reactor URL is opaque |
post_id | string | Bare numeric LinkedIn post id. Same shape as on reply rows so you can join them together |
post_urn | string | Canonical URN form, "urn:li:activity:<id>" |
post_id_raw | string | Unmodified upstream value (usually "urn:li:comment:(activity:<id>,<cid>)" for reactions) |
type = error (one row per invalid input URL, the run continues on remaining URLs)
| Field | Type | Example |
|---|---|---|
error_type | string | "invalid_input" or "auth" |
error_code | string | See Troubleshooting section for full list |
error_description | string | Human-readable explanation |
error_how_to_fix | string | Concrete next step for the user |
type = fetch_error (one row per upstream API failure; the other endpoint's data is still pushed)
| Field | Type | Example |
|---|---|---|
source | string | "replies" or "reactions" |
error | object | {"type":"upstream","code":"REPLIES_FETCH_FAILED","description":"...","how_to_fix":"..."} |
Troubleshooting
Every error surfaces in your dataset as a type=error or type=fetch_error row with an error_code and an error_how_to_fix string. You do not need this section if you read that field on the row. It is here for reference when doc-scanning before the first run.
| Code | Cause | Fix |
|---|---|---|
MISSING_COMMENT_URL | The comment_urls array was empty or absent | Provide at least one LinkedIn comment URL |
MALFORMED_URL | The URL failed to parse (no https:// prefix, wrapped, truncated) | Paste the URL exactly as it appears in the browser bar |
NOT_LINKEDIN_URL | The URL hostname is not linkedin.com | Use a URL from linkedin.com |
MISSING_COMMENT_URN | Neither commentUrn nor dashCommentUrn present in the URL | On LinkedIn, click the timestamp of the specific comment - the URL then contains commentUrn=urn:li:comment:(...). Copy that full URL |
NOTHING_TO_FETCH | Both include_replies and include_reactions set to false | Turn on at least one |
MISSING_API_KEY | Publisher-side configuration issue - the Actor does not have its upstream key | Contact UnseenUser via https://apify.com/UnseenUser |
REPLIES_FETCH_FAILED | Upstream API returned a non-retryable error on the replies endpoint | Re-run; if it persists, report via the Actor's Issues tab |
REACTIONS_FETCH_FAILED | Upstream API returned a non-retryable error on the reactions endpoint | Re-run; if it persists, report via the Actor's Issues tab |
Transient errors (429, 502, 503, 504) are retried up to 3 times with exponential backoff (1s, 2s, 4s) before they surface as a fetch_error row - no configuration needed.
When to use this vs related scrapers
This Actor deep-dives a single comment. If you need something broader or narrower, use one of the portfolio siblings listed in the Related scrapers section below.
| What you want | Use this Actor? | Use instead |
|---|---|---|
| Every reply and every reactor for one specific comment | Yes | - |
| The same, but across a list of many comment URLs in one run | Yes (paste them all into comment_urls) | - |
| Every top-level comment on a whole post, plus the post's reactors | No - this Actor scopes to comments, not posts | LinkedIn Post Comments & Reactions Scraper |
| Enrich each reply or reactor with their full profile (email, headline, current company, past companies) | No - this Actor returns what the comment/reaction endpoint returns, not a profile lookup | LinkedIn Profile Scraper + Email Enrichment |
| What else a specific replier / reactor has posted or engaged with elsewhere on LinkedIn | No | LinkedIn User Activity Scraper |
Pipeline pattern: run the Post Comments Scraper first to find the interesting comment (viral, controversial, or high-engagement), then run this Actor on that comment's URN for the deep-dive. Then optionally run the Profile Scraper on the individual repliers or reactors you want to enrich.
๐ Apify Actor - Terms of Service
Version: 4.0 Effective Date: May 5, 2026
0. ACCEPTANCE BY USE - IMPORTANT
Read this section first.
These Terms of Service ("Terms") form a binding legal agreement between you ("User," "you," "your") and UnseenUser, the Publisher of this Apify actor ("UnseenUser," "the Publisher," "we," "us," "our").
0.1 How You Accept These Terms
You accept these Terms by any of the following actions, each of which constitutes a clear, affirmative act of acceptance:
- (a) Running the Actor - Initiating any execution of the Actor on the Apify platform
- (b) Using any output returned by the Actor for any purpose
- (c) Continuing to access the Actor's listing or documentation after these Terms are visible
0.2 Continuing Acceptance
Each time you run the Actor or use its outputs, you reaffirm your acceptance of the then-current Terms. If you do not agree to these Terms or any subsequent update, you must stop using the Actor immediately.
0.3 No Anonymous Acceptance
You cannot disclaim acceptance by:
- Failing to read these Terms before running the Actor
- Running the Actor through automated systems
- Sharing your Apify account with others who may not have read these Terms
By the act of running the Actor on Apify, you bind yourself, your organization (if applicable), and any individuals or systems acting on your behalf or under your authority.
0.4 If You Do Not Accept
If you do not agree to these Terms, you must not run the Actor. No use is authorized without acceptance.
PREAMBLE - UNDERSTANDING THE ARCHITECTURE
Before using the Actor, please understand the technical architecture of the service:
The Data Flow
You (User) -> Apify Platform -> Actor (software) -> Third-Party API -> Source Platform|You (User) <- Apify Platform <- Actor (software) <- Third-Party API
What Each Party Does
- You (the User): Run the Actor on the Apify platform with input parameters you choose.
- Apify: Operates the cloud infrastructure that hosts and executes Actors. Apify is a Czech-incorporated company (Apify Technologies s.r.o.) governed by its own Terms of Service.
- The Publisher (us): Publishes software code (the Actor) on Apify's platform. The Actor is a thin wrapper that translates your input into requests to a third-party API and returns the API's responses to you. The Publisher does not operate scraping infrastructure. The Publisher does not store or retain data returned by the Actor. The Publisher does not see, log, or process the personal data of any individuals returned in the Actor's outputs beyond what is incidental to passing the data through.
- Third-Party API Provider: HarvestAPI (https://harvest-api.com) or Scrape Creators (https://scrapecreators.com). These are independent third-party companies that operate scraping infrastructure and return data from source platforms.
- Source Platform: LinkedIn, TikTok, YouTube, Reddit, Linktree, etc. These are the platforms whose publicly visible data is accessed by the Third-Party API Providers.
Why This Matters
Your relationship with the Publisher is that of a software user to a software vendor. The Publisher has the responsibilities of a software vendor (functional code, accurate documentation) and the limits of one (the Publisher is not responsible for how you use the data you obtain).
These Terms operate alongside but do not replace:
- Apify's Terms of Service and Acceptable Use Policy (governing your relationship with Apify)
- HarvestAPI Terms of Service and Scrape Creators Terms of Service (governing the underlying data infrastructure)
- Source Platform terms (LinkedIn, TikTok, etc.) governing the public data accessed
- Applicable law in your jurisdiction and the jurisdictions of data subjects
These Terms incorporate the actor-specific addendum published in each Actor's individual listing ("Addendum"). In the event of a conflict, the more restrictive provision applies.
1. NATURE OF THE SERVICE
1.1 What the Actor Is
The Actor is a software program published on the Apify platform. Each Actor:
- (a) Accepts structured input from you on the Apify platform
- (b) Translates that input into HTTP requests to a third-party API operated by HarvestAPI or Scrape Creators
- (c) Receives HTTP responses from that third-party API
- (d) Returns the response data to you in a structured format on the Apify platform
The Actor's source code is hosted on Apify's infrastructure. The Actor runs in Apify's cloud, not on the Publisher's servers. The Publisher operates no servers running the Actor.
1.2 What the Actor Is Not
The Actor is not:
- (a) A scraping tool - the Publisher does not operate scraping infrastructure, proxies, headless browsers, or fake accounts
- (b) A direct connection to any source platform - connections to source platforms are made by HarvestAPI / Scrape Creators
- (c) A data storage or data retention service - the Publisher does not maintain a database of any data the Actor returns
- (d) A licensed access channel to LinkedIn, TikTok, YouTube, Reddit, X (Twitter), Meta, Linktree, or any other source platform
- (e) Affiliated with, endorsed by, sponsored by, or authorized by any source platform
1.3 The Publisher's Limited Role
The Publisher's role is limited to:
- (a) Designing and writing the Actor's source code
- (b) Publishing the Actor on the Apify Store
- (c) Maintaining the Actor (updating it when API providers change schemas)
- (d) Providing documentation and customer support via Apify's contact mechanism
The Publisher is a software vendor, similar to a developer who publishes an app on the Apple App Store or Google Play Store. The Publisher is not a data provider, data broker, data processor, or data controller for purposes of GDPR, CCPA, Israel's Privacy Protection Law, or equivalent.
1.4 The Third-Party API Providers' Role
HarvestAPI (https://harvest-api.com) and Scrape Creators (https://scrapecreators.com) are independent third-party companies. They:
- (a) Operate the actual data scraping infrastructure
- (b) Maintain relationships with source platforms (or accept the operational risk of accessing public data without such relationships)
- (c) Are themselves Apify publishers (HarvestAPI publishes 9+ actors directly; Scrape Creators publishes 10+)
- (d) Provide their own Terms of Service governing their operations
- (e) Are responsible for compliance obligations relating to the data collection itself
The Publisher is a customer of these providers. The Publisher is not their agent, partner, or representative.
2. WHO MAY USE THE ACTOR
2.1 Eligibility
You may use the Actor only if:
- (a) You are at least 18 years old or the age of majority in your jurisdiction
- (b) You have legal capacity to enter into binding contracts
- (c) You are not located in or resident of a country subject to comprehensive sanctions by the United States, European Union, United Kingdom, or Israel
- (d) You are not on any prohibited persons list
2.2 User Representations
By using any Actor, you represent and warrant that:
- (a) Truthful identity: Information you provide about your identity and intended use is accurate
- (b) Lawful intent: Your intended use complies with applicable law in your jurisdiction
- (c) Source platform compliance: You will independently comply with the Terms of Service of any source platform whose data you obtain through the Actor
- (d) Data subject rights: Where Actor outputs include personal data, you will respect data subject rights under applicable law
- (e) No prohibited use: You will not use the Actor for any of the purposes prohibited in Section 4
These representations are continuous - they must remain true throughout your use.
3. PERMITTED USES
The Actor may be used for any lawful purpose, including:
- Market research and competitive analysis
- Academic research
- Journalism and investigative reporting
- Internal business intelligence
- Brand monitoring
- Recruitment research where consistent with applicable employment law
- Building products that further process publicly available information lawfully
Specific permitted uses for each Actor are described in that Actor's individual listing and Addendum.
4. PROHIBITED USES
You may not use the Actor for any of the following:
4.1 Illegal Activity
Activity illegal under the law of your jurisdiction, the User's jurisdiction, or the jurisdiction of any data subjects.
4.2 Harassment, Stalking, and Personal Targeting
- Compiling profiles for harassment, stalking, or doxxing
- Tracking individuals' movements or activities without their knowledge
- Building profiles of journalists, activists, dissidents, or vulnerable populations for retaliatory purposes
4.3 Discrimination
- Using outputs for discriminatory employment, lending, housing, or insurance decisions based on protected characteristics
- Building lists for discriminatory purposes
4.4 Spam and Unsolicited Commercial Communication
- Sending unsolicited marketing in violation of CAN-SPAM, CASL, GDPR, PECR, Israeli Anti-Spam Law (ืกืขืืฃ 30ื ืืืืง ืืชืงืฉืืจืช), or equivalent laws
- Building "lead lists" from scraped contacts without proper consent infrastructure
- Reselling contact data for spam purposes
4.5 Fraud and Deception
- Identity theft or impersonation
- Generation of fake reviews, testimonials, or coordinated inauthentic behavior
- Election interference or political disinformation
- Securities fraud
4.6 Source Platform Abuse
- Using outputs to circumvent technical protection measures of source platforms
- Creating fake accounts on source platforms based on Actor outputs
- Vote manipulation, engagement manipulation, or platform algorithm gaming
- Building services that competitively substitute for source platforms
4.7 Reselling the Actor's Service
- Reselling raw Actor outputs as your own data product or scraping-as-a-service
- Sharing your Apify credentials to provide third parties indirect access
- Building competing API services using Actor outputs
4.8 AI Training Without Authorization
Using Actor outputs as training data for commercial AI/ML models without separate licensing authority from the source platform.
4.9 Sensitive Targeting
- Specifically targeting or profiling based on health conditions, sexual orientation, religious beliefs, political opinions, or other sensitive characteristics
- Targeting children under 16 (or local age of consent for data processing)
4.10 Privacy Law Violations
- Processing personal data of EU/UK/California/Israeli residents without complying with applicable privacy law
- Failing to honor data subject access, deletion, or objection requests
- Processing data for purposes incompatible with its publication context
5. SOURCE PLATFORM TERMS - YOUR RESPONSIBILITY
5.1 Acknowledgment
The Actor accesses publicly visible data on third-party platforms ("Source Platforms") through the Third-Party API Providers (HarvestAPI / Scrape Creators). Source Platforms include LinkedIn, TikTok, YouTube, Reddit, X (Twitter), Meta/Facebook, Linktree, Komi, Pillar, Linkbio, Linkme, and Amazon.
5.2 Your Sole Responsibility
You acknowledge:
- (a) You are solely responsible for ensuring your downstream use of data obtained through the Actor complies with the Source Platform's Terms of Service
- (b) The Publisher makes no representation that any specific use is permitted under any Source Platform's terms
- (c) The Third-Party API Providers, not the Publisher, bear responsibility for the lawfulness of the data collection itself
- (d) You should review Source Platform terms before commercial use:
- LinkedIn: https://www.linkedin.com/legal/user-agreement
- TikTok: https://www.tiktok.com/legal/page/global/terms-of-service/en
- YouTube: https://www.youtube.com/static?template=terms
- X: https://twitter.com/en/tos
- Reddit: https://www.redditinc.com/policies/user-agreement
- Meta: https://www.facebook.com/legal/terms
- Linktree: https://linktr.ee/s/terms/
5.3 Cease-and-Desist Compliance
If you receive a cease-and-desist letter or other legal demand from a Source Platform regarding your use of Actor outputs, you must:
- (a) Cease the contested use immediately
- (b) Notify UnseenUser within 48 hours via UnseenUser's Apify profile contact form (https://apify.com/UnseenUser)
- (c) Cooperate with the Publisher as needed to mitigate
- (d) Not assert against the Publisher any claim arising from your inability to use the Actor for that Source Platform
6. DATA PROTECTION - REFLECTING ACTUAL ARCHITECTURE
6.1 Roles Under Privacy Law
For purposes of GDPR, UK GDPR, CCPA, Israel's Privacy Protection Law (PPL) including Amendment 13, and equivalents:
- You (the User) are the Data Controller of any personal data you obtain through the Actor and subsequently process for your own purposes
- HarvestAPI and Scrape Creators are the entities that collect data from source platforms - they bear the responsibilities of data processors or controllers (depending on context) for the collection itself
- The Publisher acts solely as a software vendor, not as a data controller or processor, because the Publisher does not store, retain, or substantively process personal data - the Actor merely passes API responses through
6.2 No Data Retention by the Publisher
The Publisher confirms:
- (a) The Publisher does not maintain a database of personal data obtained through the Actor
- (b) The Actor passes data from the Third-Party API directly to you on the Apify platform - data does not flow through the Publisher's infrastructure
- (c) Apify's standard execution and operational logging may include limited information about Actor runs (input parameters, run duration, data volume) - this is governed by Apify's own privacy practices
- (d) The Publisher does not access, view, or analyze your Actor outputs except as needed for technical support if you specifically share them with the Publisher
6.3 Your Obligations as Data Controller
Where your use of the Actor involves processing personal data, you are responsible for:
- (a) Establishing a lawful basis for your processing (consent, legitimate interest with documented balancing test, contract, etc.)
- (b) Providing transparent notice to data subjects as required by applicable law
- (c) Honoring data subject access, rectification, erasure, restriction, and portability requests
- (d) Implementing appropriate security measures
- (e) Conducting Data Protection Impact Assessments where required
- (f) Appointing a Data Protection Officer if your operations require one
- (g) Registering databases with applicable supervisory authorities
- (h) Honoring opt-out requests for direct marketing
- (i) Cross-border transfer safeguards where data crosses borders
6.4 Israel's Amendment 13 - User Compliance
If your use of the Actor involves Israeli residents' personal data, you must comply with the Privacy Protection Law as amended (Amendment 13, effective August 14, 2025). These obligations are yours as the data controller, not the Publisher's as the software vendor.
6.5 Sensitive Data Targeting Restrictions
You will not use the Actor to specifically target, profile, or build datasets focused on:
- Health or medical conditions
- Religious beliefs
- Political opinions
- Sexual orientation or gender identity
- Genetic or biometric data
- Criminal history
- Children under 16
7. INTELLECTUAL PROPERTY
7.1 Actor Code
The Actor's source code, schemas, documentation, and branding are owned by the Publisher. You receive a limited, non-exclusive, non-transferable, revocable license to use the Actor for permitted purposes during your active subscription/run with Apify.
7.2 Output Data
The Publisher claims no ownership over the public data the Actor returns. Source Platforms may have copyright, database rights, or other rights in their data; data subjects may have copyright in user-generated content. Your use of output data must respect these rights independently.
7.3 Restrictions
You may not reverse engineer, decompile, or reuse the Actor's code in a competing actor.
7.4 Feedback
Feedback you provide may be used by the Publisher to improve products without compensation to you.
8. PRICING AND PAYMENT
8.1 Apify Platform Billing
Pricing is administered through Apify's pricing models. Apify processes all payments. Apify's payment terms govern refunds and disputes.
8.2 Pricing Changes
The Publisher may change Actor pricing with at least 14 days' notice via the Actor's Apify listing.
8.3 No Refunds for Misuse
If your access is suspended or terminated for breach of these Terms, you forfeit any unused balance and are not entitled to refunds.
9. SERVICE AVAILABILITY AND CHANGES
9.1 No Uptime Guarantee
The Actor depends on:
- (a) The Apify platform
- (b) Underlying API providers (HarvestAPI, Scrape Creators)
- (c) Source Platforms' continued public accessibility
Any of these may change behavior, restrict access, or become unavailable without notice. The Publisher makes no uptime guarantees.
9.2 Service Discontinuation
The Publisher may discontinue any Actor at any time. Reasonable notice will be provided when feasible.
10. DISCLAIMERS
10.1 "AS IS" Service
THE ACTOR IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTIES OF ANY KIND, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR PURPOSE, NON-INFRINGEMENT, OR ACCURACY OF DATA.
10.2 No Representation of Lawfulness
The Publisher makes no representation that your specific use of the Actor or the data it returns is lawful in your jurisdiction or under any Source Platform's terms. The burden of determining lawfulness for your use case is yours.
10.3 No Endorsement of Source Content
Content returned by the Actor was created by third parties. The Publisher does not endorse, verify, or take responsibility for it.
11. LIMITATION OF LIABILITY
11.1 Aggregate Liability Cap
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL THE AGGREGATE LIABILITY OF THE PUBLISHER FOR ALL CLAIMS RELATING TO THE ACTOR EXCEED THE GREATER OF:
- (a) ONE HUNDRED U.S. DOLLARS (US $100), OR
- (b) THE AMOUNTS YOU PAID THROUGH APIFY FOR USE OF THE ACTOR IN THE THREE (3) MONTHS IMMEDIATELY PRECEDING THE EVENT
11.2 Excluded Damages
THE PUBLISHER IS NOT LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES, OR FOR LOSS OF PROFITS, REVENUE, OR DATA, EVEN IF ADVISED OF THE POSSIBILITY.
11.3 Time Limit
Any claim must be brought within one (1) year of the event.
12. INDEMNIFICATION
12.1 Your Indemnification of the Publisher
You agree to defend, indemnify, and hold harmless the Publisher from any:
- Claims arising from your use of the Actor
- Claims arising from your violation of these Terms
- Claims arising from your violation of any law (including privacy law)
- Claims arising from your violation of any Source Platform's Terms of Service
- Claims arising from your processing of personal data obtained through the Actor
- Reasonable attorneys' fees and costs of defending such claims
12.2 Defense
The Publisher may assume defense at your expense. You will cooperate with the Publisher's defense.
12.3 Scope
The indemnification covers reasonable, foreseeable third-party claims arising from your use. It does not extend to:
- Claims arising from the Publisher's gross negligence or willful misconduct
- Claims regarding the Actor's source code itself (those are the Publisher's responsibility)
- Claims regarding the Third-Party API Provider's data collection (those are their responsibility)
13. SUSPENSION AND TERMINATION
13.1 Termination by the Publisher
The Publisher may terminate your access for material breach, illegal use, breach of warranty, or upon credible legal demand.
13.2 Effects of Termination
Your license ends, you must cease use, and applicable provisions survive.
13.3 Termination by You
You may stop using the Actor at any time on Apify.
14. DISPUTE RESOLUTION
14.1 Informal Resolution First
Send a detailed written description of the dispute via UnseenUser's Apify profile contact form (https://apify.com/UnseenUser) and wait 60 days for resolution attempt before any formal claim.
14.2 Governing Law
These Terms are governed by the substantive laws of the State of Israel, without regard to conflict of law principles.
14.3 Exclusive Jurisdiction
Any dispute shall be brought exclusively in the competent civil courts of Tel Aviv-Jaffa, Israel.
14.4 No Class Actions
You agree to bring claims only in your individual capacity.
14.5 Attorneys' Fees
The prevailing party recovers reasonable attorneys' fees.
15. MISCELLANEOUS
15.1 Entire Agreement
These Terms (with Addendum and incorporated documents) are the entire agreement.
15.2 Severability
Unenforceable provisions are reformed to the minimum extent or severed.
15.3 Assignment
You may not assign without the Publisher's consent. The Publisher may assign to affiliates, successors, or acquirers.
15.4 Force Majeure
Neither party is liable for failure due to events beyond reasonable control, including changes by Source Platforms or Third-Party API Providers, or actions by Apify.
15.5 Third-Party Beneficiaries
Apify, HarvestAPI, and Scrape Creators are intended third-party beneficiaries of Sections 4 (Prohibited Uses), 5 (Source Platform Compliance), and 12 (Indemnification).
15.6 Survival
Sections 0 (Acceptance), 4, 5, 6, 7, 10, 11, 12, 14, and 15 survive termination.
15.7 Language
English controls. Translations are for convenience only.
15.8 Publisher Identification for Legal Process
The Publisher operates on the Apify platform under the username UnseenUser (apify.com/UnseenUser). The Publisher is a registered legal entity. Upon receipt of valid legal process (subpoena, court order, or equivalent) directed through Apify's official channels, the Publisher's full legal identity may be disclosed as required by law. This Section ensures that you have a valid path to legal recourse if needed.
16. ACKNOWLEDGMENT
By using any Actor, you acknowledge that:
- (a) You have read these Terms
- (b) You understand the architecture: you are using software (the Actor) on Apify's platform that calls third-party APIs
- (c) You accept responsibility for your use, including for compliance with Source Platform terms
- (d) Your indemnification obligations cover third-party claims arising from your use
- (e) Disputes are resolved in Israeli courts
- (f) The Publisher's identity, while not publicly disclosed in this listing, can be obtained through valid legal process via Apify
For questions, use UnseenUser's Apify profile contact form (https://apify.com/UnseenUser) before running the Actor.
APPENDIX - Document Version History
| Version | Date | Summary |
|---|---|---|
| 1.0 | May 5, 2026 | Initial publication |
| 2.0 | May 5, 2026 | Hardened (over-broad - treated User as data broker) |
| 3.0 | May 5, 2026 | Architecturally accurate - Publisher as software vendor |
| 4.0 | May 5, 2026 | Anonymous Publisher. All personally identifying information removed. Acceptance-by-Use mechanism formalized. |
These Terms reflect best practices for anonymous Apify actor publishing as of May 2026. Not a substitute for legal advice. Consult qualified Israeli commercial counsel before deploying.
๐ก๏ธ Actor-Specific Terms of Service Addendum
This addendum supplements the Master Terms of Service V4.0. By running this Actor, you accept both the Master ToS and this addendum.
A. Architectural Disclosure
This Actor is a software wrapper. It accepts your input parameters, calls TWO HarvestAPI endpoints in parallel (/linkedin/post-comment-replies + /linkedin/comment-reactions), combines the results into a structured output, and returns the combined data to you on the Apify platform. UnseenUser does not store, log, or substantively process the data returned. The data flows from HarvestAPI through Apify's runtime directly to you.
B. Nature of Data Returned
This Actor returns: all replies to a specific LinkedIn comment (with full author info, reply timestamps, nested reaction counts) + the complete reactor list for the same comment (LIKE, CELEBRATE, SUPPORT, LOVE, INSIGHTFUL, FUNNY with reactor identity).
Where the Actor's output includes individual people's names, photos, contact details, or content authored by them, that data constitutes personal data subject to GDPR, CCPA, Israeli Privacy Protection Law, and equivalent privacy laws in your downstream processing - but only in your hands as the data controller, not in UnseenUser's hands as the software vendor.
C. Permitted Use Cases
- Community management - drill into a controversial or important comment to understand the full thread
- Crisis monitoring - when one comment goes negative on your CEO's post, get the full picture instantly
- Journalism - investigate viral threads or contested statements at depth
- Academic research - analyze conversation dynamics around a specific comment
- Customer-feedback intelligence - surface comments on your product posts that drove the most response
- Influencer analysis - identify which of your commenters drove the most secondary engagement
- Legal evidence preservation - capture the full state of a thread (replies + reactors) for litigation hold
D. Specifically Prohibited Uses
In addition to Master ToS Section 4 prohibitions, you may NOT:
- Build cold-DM tools targeting commenters who engaged with sensitive content
- Republish individuals' replies outside the original LinkedIn context for commercial purposes
- Build "who reacted to this comment" databases for sale
- Use reaction data to identify and harass individuals whose views you disagree with
- Track reactions to bereavement, illness, or layoff comments to identify vulnerable people for commercial targeting
- Aggregate reply/reactor data across many comments to profile individuals without consent
- Use sensitive engagement (e.g., LOVE on a layoff post by HR personnel) to make inferences for hiring or commercial decisions about named individuals
E. Platform Terms of Service Considerations
LinkedIn restricts engagement-data extraction more aggressively than profile data - reactions and comments are "real-time pulse" data LinkedIn considers strategic. The Reactions endpoint specifically returns profile URLs in opaque profile ID format (e.g. linkedin.com/in/ACoAAA8BYqEBCGLg...) rather than human-readable slugs - this is by LinkedIn's design and not a bug. If LinkedIn issues a cease-and-desist, notify UnseenUser within 48 hours via the Apify profile contact form (apify.com/UnseenUser).
F. Reactor Identity - Opaque IDs by LinkedIn Design
Per LinkedIn's design, the Comment Reactions endpoint returns profile URLs in opaque profile ID format (e.g., https://linkedin.com/in/ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc). The reactor's name, position, and pictureUrl are still returned, but the readable profile URL slug is NOT available from this endpoint alone.
You may NOT resolve these opaque IDs to readable profile URLs at scale by calling the Profile endpoint for every reactor. This pattern:
- Drives up costs significantly (additional API call per reactor)
- Creates the type of aggregation profile that LinkedIn specifically targets in litigation
- Risks tripping LinkedIn's anti-scraping detection
- May violate GDPR data minimization principles
If you need readable URLs for a specific reactor (e.g., for journalism or due diligence), resolve them one at a time as needed, not in bulk.
G. Comment-Thread Copyright
Each reply is independently copyrighted by its author. The same fair-use / non-republication rules apply as with parent comments:
- Quote with attribution: typically fair use
- Aggregate metrics: no copyright issue
- Republish verbatim in commercial products: NOT permitted
- Use for AI training without proper licensing: NOT permitted
H. Reactor Lists - Heightened Privacy Concern
A reactor list tied to a specific comment is PERSONAL DATA mapping individuals to their expressed opinions. This is more sensitive than a like-count because it names individuals. Use with care:
- Don't aggregate reactor lists across many comments to profile individuals
- Don't sell or share reactor lists as a commodity
- Don't use reactor lists for cold outreach in jurisdictions requiring prior opt-in (EU, Israel, Canada, Germany particularly)
- A "list of people who reacted with LOVE to a CEO's controversial comment" is intelligence - but using it for commercial outreach without compliant consent is non-compliant under GDPR/Israeli/CCPA frameworks
I. Sensitive-Engagement Patterns
Some comments attract particularly sensitive engagement:
- Replies disagreeing with layoff announcements - repliers may be the laid-off employees themselves
- Comments on illness disclosures - repliers often share their own health situations
- Crisis-comment threads - repliers reveal political/social views in heated discussion
- Bereavement-post comments - replies contain intimate emotional content
Do NOT use this Actor to harvest engagement on such threads for downstream commercial use without explicit consent of the engagers. Public visibility on LinkedIn does NOT equal lawful basis for downstream commercial processing under GDPR/CCPA/Israeli Privacy Law.
J. Reaction-Type Semantic Sensitivity
LinkedIn reaction types each carry meaning beyond a binary like:
LIKE- neutral acknowledgmentCELEBRATE- strong positive endorsementSUPPORT- emotional/moral solidarityLOVE- strong personal connectionINSIGHTFUL- intellectual agreementFUNNY- humor reaction (can be inappropriate on serious posts)
The reaction type itself is meaningful behavioral data. Aggregating these patterns to label individuals (e.g., "always reacts FUNNY to layoff posts" โ flagged as a problematic employee) is high-sensitivity automated decision-making under GDPR Article 22, requiring specific lawful basis.
K. Litigation Evidence Use
This Actor's combined output (replies + reactors) is useful for litigation evidence preservation. If you use it for this purpose:
- Document chain of custody (when scraped, by whom, parameters used)
- Preserve the raw JSON output, not just summaries
- Note that LinkedIn data is not authoritative evidence by itself - you may need to authenticate via LinkedIn's compliance team or a forensic process for court use
- Be aware that retaining personal data for litigation purposes still requires GDPR Article 6(1)(f) lawful basis (legitimate interest in establishing/defending legal claims under Article 6(1)(f) and Recital 47)
L. Cross-Endpoint Aggregation Limit
While this Actor combines two endpoints in one run (replies + reactors for one comment), do NOT aggregate the combined output across many comments to build broader profiles. Specifically:
- A list of repliers + reactors for ONE comment: bounded, useful
- A list of repliers + reactors across MANY comments by the same author: profile-building, high risk
- A list of repliers + reactors across MANY comments by MANY authors involving the same individuals: data broker territory
The line between "comment-thread analysis" (permitted) and "people search database" (prohibited) is drawn around aggregation across multiple comment threads involving the same individuals.
For full Master Terms of Service, see UnseenUser's Apify profile: https://apify.com/UnseenUser
Related scrapers
Build the complete LinkedIn engagement intelligence pipeline:
- LinkedIn Post Comments & Reactions Scraper - top-level commenters (use this first to find viral comments)
- LinkedIn Profile Scraper + Email Enrichment - enrich the replies with verified emails
- LinkedIn User Activity Scraper - research what each replier engages with elsewhere
See all 18 scrapers by unseenuser ->
Topics
linkedin comment replies scraper, linkedin comment thread scraper, linkedin comment reactions, scrape linkedin replies, linkedin thread analysis, viral comment scraper, b2b warm leads linkedin, linkedin sentiment analysis, deep engagement scraper
Example tasks
Pre-built input recipes you can run with one click:
- Find Who Reacted to a LinkedIn Comment (No Login) - pull the full reactor list with reaction types for one comment.
- Get Every Reply to a LinkedIn Comment Thread - every direct reply, with author name, position, and profile URL.
- Bulk Scrape Multiple LinkedIn Comment Threads - many comment URLs in one run, one dataset row per result.
- Investigate a Viral LinkedIn Comment Thread - every reply and every reactor in one run, for journalists and crisis teams.