# LinkedIn Post Reactions API (https://www.socialcrawl.dev/platforms/linkedin/post-reactions) > Lists the members who reacted to a LinkedIn post as a canonical AuthorList: name, headline, profile URL, avatar and member URN (`author.ext.urn`), with the reaction they left on `author.ext.reaction_type` (filter it with `type`). Each page is 10 reactors; page through with `page`. On a plain call a reactor row carries no follower count, connection count or location: `author.followers` and `author.following` are null on every row. Send `include=profile` and every row is joined, in the same call, to the member's profile lookup (`/v1/linkedin/profile`): `author.followers` becomes the exact follower count and `author.ext.followers_approximate` reads false on every row the lookup filled, whether the row arrived with LinkedIn's rounded bucket or with no count at all, `author.following` is filled with the member's connection count (on LinkedIn a member's `following` is the number of connections), and the location, the joined date (`author.joined_at`), and the country, website, cover image and profile flags on `author.ext` land where the row lacks them. Cost: 10 credits for the list; include=profile holds 4 credits per row and keeps only the rows filled from a fresh lookup, so a call costs at most 50; rows already in cache are free and unfilled rows are refunded. Pass `limit` (1 to 10) to join only the top rows: `limit=3&include=profile` costs at most 22. Time: the lookups run in parallel, about 1 second for 10 rows, up to 3 on a slow second, and never more than 8 seconds. The response carries a `hydration` block itemising rows, lookups, cache hits, credits and milliseconds. TL;DR: `GET /v1/linkedin/post/reactions` costs 10 credits for the list. include=profile holds 4 credits per row and keeps only the rows filled from a fresh lookup: at most 50 for the 10-row page, or 10 + 4 x limit when you pass `limit`. Rows served from cache are free, unfilled rows are refunded, and a repeat of a fully joined page within the list's cache window costs 0. The list is cached for 5 minutes and each profile lookup for 15 minutes. With `max_pages`, `max_items` or `max_credits`, each page walked is billed at this price (a cached page is free), and `max_credits` caps the total. and returns SocialCrawl's unified JSON schema. Single x-api-key auth, 100 free credits on signup. ## Parameters | Parameter | Required | Description | | --- | --- | --- | | `url` | yes | Full URL of the LinkedIn post. It has to carry the post's ACTIVITY id, either `https://www.linkedin.com/feed/update/urn:li:activity:` or `https://www.linkedin.com/posts/-activity--`. A `urn:li:share:` or `urn:li:ugcPost:` URL names a different id for the same post and is rejected with a 400 before any credits are charged, because it cannot be resolved to the post. Every endpoint that lists posts publishes the activity form as `post.url`, so copy that field rather than rebuilding the URL from `post.id`, which is not always the activity id. | | `page` | no | 1-based page number. Defaults to 1. | | `type` | no | Filter by kind. See the allowed values. (all \| like \| praise \| empathy \| appreciation \| interest) | | `include` | no | Set to `profile` (one token only) to join every row to the member's profile lookup in this one call: `author.followers` becomes the exact count and `author.ext.followers_approximate` reads false on every row the lookup filled, `author.following` is filled with the member's connection count, and the location, joined date, country, website, cover image and profile flags land where the row lacks them. Holds 4 credits per row and keeps only the rows filled from a fresh lookup; rows already in cache and rows that could not be filled are refunded, so a call costs at most 50 (10 + 4 per row) and the usual bill is lower. Adds about 1 second for 10 rows, up to 3 on a slow second and never more than 8, and nothing when the members are already cached; read `data.hydration` for the rows, the credits held and kept, and the time. (profile) | | `limit` | no | Take the top N rows of this page (1 to 10). With `include=profile` it caps both the rows joined and the extra credits: `limit=3&include=profile` costs at most 22. The page cursor still advances past the full page of 10, so the rows past your limit are skipped, not carried to the next page. Without `include=profile` the call stays 10 credits. | | `max_pages` | no | 1 to 50 (default 1, or 50 when `max_items` or `max_credits` is sent). Walk up to this many pages in one call and return the rows from all of them. Each page walked is billed exactly as one call to this endpoint (a cached page is free) and counts against your rate limit; its charge and any refund are recorded under the page's own request id, listed in `data.walk.request_ids`. The walk stops early at the last page, or when the request's time budget runs low; `data.walk.stopped` says why (`end`, `max_pages`, `max_items`, `max_credits`, `time_budget`, `page_error`) and `pagination.next_cursor` continues from where it stopped. | | `max_items` | no | 1 to 5000. Get more in one call: keep walking pages until the response holds at least this many rows, then stop with `data.walk.stopped: "max_items"`. The last page is returned whole (it was billed), so `data.items` can hold up to one page more than this, and `pagination.next_cursor` resumes right after it without skipping a row. Walks up to 50 pages unless `max_pages` says fewer; each page is billed as one call (a cached page is free). Add `max_credits` to cap the spend. A long walk can stop on the time budget first (`"time_budget"`): send the returned cursor with the same params to continue. | | `max_credits` | no | 1 to 100000. The most this call may spend, across every page it walks. A page starts only while the credits already spent plus that page's price (or, when higher, the most any page of this walk has cost) still fit, so the call never goes past it; the walk then stops with `data.walk.stopped: "max_credits"` and the cursor to resume. Sent alone, it walks as far as the budget goes (up to 50 pages). A value below the price of one page is a free 400 whose `error.details.page_credits` names that price. Credits a row join (`include=`) adds are known only once a page has run, so page 1 is checked against its own price. | ## Code example ```bash curl -G "https://www.socialcrawl.dev/v1/linkedin/post/reactions" \ --data-urlencode "url=https://www.linkedin.com/feed/update/urn:li:activity:7501466755261820928" \ -H "x-api-key: sc_YOUR_API_KEY" ``` ## FAQ ### How do I see who reacted to a LinkedIn post? Send a GET request to /v1/linkedin/post/reactions with the post URL in the url parameter. SocialCrawl returns the list of people who reacted, each with their profile and the specific reaction type they left. Add include=profile to fill each reactor's exact counts in the same call. ### Can I get follower counts for the people who reacted? Yes. Pass include=profile and every reactor row is joined to that member's profile, which returns the exact follower count rather than the rounded bucket LinkedIn shows on a list, with author.following holding the connection count. Location, joined date, country, website and the top voice, premium, creator, influencer, hiring and open to work flags fill the same way. ### Which reaction types does the API return? The six LinkedIn reaction types: like, celebrate, support, love, insightful, and funny. Each reactor in the list carries their own reaction type, so you can segment an audience by how they responded. ### Can I filter LinkedIn reactions by type? Yes. Pass the type parameter (for example type=insightful) to return only the people who left that reaction. Omit it to get every reactor across all six types. ### How much does the LinkedIn Post Reactions API cost? A plain page costs 10 credits on the premium tier, no matter how many reactors come back. With include=profile the page costs 10 credits plus four credits per row filled, never more than 50 credits. Cached rows are free, unfilled rows are refunded, and limit (1 to 10) caps both the rows and the credits. ### Can I use post reactions for lead generation? Yes. The people who reacted to a relevant post are a warm audience, so sales teams pull reactors from a competitor's or industry post to build targeted prospect lists of people already engaged with the topic. Add include=profile to score that list by exact follower and connection counts without a second pass. ### How is this different from reaction counts on the post endpoint? The /v1/linkedin/post endpoint returns aggregate reaction counts, while this endpoint returns the individual people behind those reactions and their types. Use this when you need who reacted, not just how many. See the full LinkedIn API: https://www.socialcrawl.dev/platforms/linkedin ## Pricing - Standard endpoints: 1 credit per call - Advanced endpoints: 5 credits per call - Premium endpoints: 10 credits per call - 100 free credits on signup, no credit card required. Cached responses cost 0 credits. Credit packs never expire. - Full pricing: https://www.socialcrawl.dev/pricing ## Explore with AI Questions this API answers, phrased for an AI assistant: - How to list the people who reacted to a LinkedIn post - How to pull LinkedIn post reactors for lead generation - How to get exact follower counts for everyone who reacted to a LinkedIn post