LinkedIn Profile Posts Scraper & Content Monitor
Pricing
$0.75 / 1,000 profile posts
LinkedIn Profile Posts Scraper & Content Monitor
Scrape recent LinkedIn posts from exact profile URLs with no-cookie public discovery, optional authenticated depth, keyword/date/content filters, engagement metrics, media links, deduplication, and resilient proxy retries. Built for content research, creator tracking, sales signals, and monitoring.
Pricing
$0.75 / 1,000 profile posts
Rating
0.0
(0)
Developer
Cracks API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
LinkedIn Profile Posts Scraper
Extract structured posts and recent activity from exact LinkedIn profile URLs for recruiting research, sales intelligence, creator analysis, content research, and CRM enrichment.
This Actor combines conservative public no-cookie collection, public search-index fallback, and optional account-authorized enrichment. It returns one dataset record per successful post with post text, URL, publication date, content type, engagement counts when exposed, media, external links, author evidence, and source mode.
Unofficial — not affiliated with LinkedIn. This independent Actor is not endorsed by, sponsored by, or connected with LinkedIn. LinkedIn is a trademark of LinkedIn Corporation.
Why use this LinkedIn profile posts scraper?
- Start from exact
https://www.linkedin.com/in/...profile URLs. - Deduplicate and normalize submitted profiles automatically.
- Collect public post and article signals without cookies where they are directly available.
- Fall back to directly visible public search-result evidence when LinkedIn's public activity page is unavailable.
- Optionally use the caller's own authorized
li_atandJSESSIONIDvalues for deeper feed responses. - Filter by date range, keywords, and content type.
- Return one clean, integration-friendly record per post.
- Capture reactions, comments, reposts, media, and external links when the selected source exposes them.
- Use stable proxy sessions, polite jitter, retries, backoff, and explicit rate-limit handling.
- Respect a local maximum charge and leave errors, empty results, limits, and dry runs uncharged.
Best use cases
Recruiting and talent intelligence
Track the public professional activity of candidates, speakers, executives, and domain experts. Use recent posts to understand topics, interests, writing style, and visible expertise before outreach or interviews.
Sales research and account planning
Collect activity from known stakeholders and analyze visible themes, launches, hiring signals, partnerships, problems, and priorities. Export structured posts to Sheets, a CRM, n8n, Zapier, Make, or a warehouse.
Creator and thought-leadership analysis
Study publishing frequency, content mix, recurring topics, engagement signals, media usage, and external links across a curated list of creators.
Content monitoring
Run the Actor on a schedule for the same profile URLs, deduplicate by postUrl or postId, and alert a team when a matching keyword or content type appears.
Collection modes
Public no-cookie
The Actor checks the public recent-activity and profile pages for directly exposed structured data, JSON-LD, and post links. If those pages do not expose usable posts, it searches public search-result pages and reports only visible result titles, snippets, and LinkedIn post URLs as public_index evidence.
Authenticated session
Provide both secret liAt and jsessionId input values from an account you are authorized to use. The Actor requests profile and feed endpoints with that session, extracts post-like entities from normalized response structures, and never writes the secret values to the dataset or logs.
Authenticated endpoints and response shapes can change. auto mode falls back to public collection if the authorized route is unavailable. authenticated mode reports an uncharged error instead of silently changing source mode.
Input
| Field | Purpose |
|---|---|
profileUrls | Required exact LinkedIn /in/ profile URLs. |
maxProfiles | Process 1-1,000 unique valid profiles. Default: 100. |
maxPostsPerProfile | Return 1-500 posts after filters. Default: 10. |
mode | public, auto, or authenticated. |
liAt, jsessionId | Optional secret values from the caller's own authorized session. |
dateFrom, dateTo | Optional ISO date or timestamp boundaries. Undated posts are excluded when date filtering is active. |
keywords | Optional case-insensitive OR filter across visible post text and links. |
contentTypes | Optional values: all, post, article, video, image, document, poll, newsletter, repost, unknown. |
requestDelaySecs | Base polite delay with automatic jitter. Default: 2 seconds. |
maxRetries | 0-5 retries for transient failures, 429, 5xx, and 999 responses. |
maxTotalCharge | Optional local USD cap. No paid result is emitted after the next result would exceed it. |
dryRun | Validate and normalize input without network requests or paid events. |
proxyConfiguration | Apify proxy settings. Residential proxies are recommended for reliable compliant runs. |
Example input
{"profileUrls": ["https://www.linkedin.com/in/satyanadella/"],"maxPostsPerProfile": 20,"mode": "public","keywords": ["AI", "cloud"],"contentTypes": ["post", "article", "video"],"requestDelaySecs": 2,"maxRetries": 2,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Output
Every successful record represents one post or article.
{"postId": "urn:li:activity:1234567890","postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:1234567890/","profileUrl": "https://www.linkedin.com/in/example/","publicIdentifier": "example","authorName": "Example Person","text": "Visible post text...","publishedAt": "2026-08-25T08:00:00.000Z","contentType": "post","reactionsCount": 120,"commentsCount": 18,"repostsCount": 4,"media": [{ "type": "image", "url": "https://..." }],"externalLinks": ["https://example.com/article"],"sourceMode": "authenticated","sourceEvidence": {"voyager": true,"authorizedSession": true},"status": "success"}
Counts and dates are null when the chosen source does not expose them. The Actor does not invent engagement, timestamps, text, or media.
Dataset views
- Successful posts: primary post fields for exports and automations.
- Engagement metrics: reactions, comments, reposts, date, and source.
- Media and external links: normalized media objects, outbound links, and source evidence.
- Errors, empty results, and limits: uncharged operational records, including dry runs.
Pricing event
A successful post is written atomically with exactly one event:
| Event key | Recommended price | Meaning |
|---|---|---|
profile-post | $0.75 / 1,000 posts | One successfully extracted post or article. |
Actor.pushData(record, "profile-post") keeps data persistence and charging together. Before charging, a post must include a valid URL, meaningful text, an author, a verified publication timestamp, and at least one rich signal from engagement counts, media, or external links. Thin indexed snippets are emitted as insufficient_data with no paid event. Error, no_results, limit_reached, and dry_run records are also uncharged. The Store price is configured in Apify Console; this repository only emits the stable event key.
Reliability and data quality
- Exact
/in/URL validation prevents broad people-search behavior. - Duplicate profile inputs and duplicate post records are removed.
- Proxy session IDs contain only safe letters, digits, and underscores.
- A profile keeps one proxy session across public, search-index, and authorized requests.
- Retries use
Retry-Afterwhen available and otherwise use increasing backoff plus jitter. - Search-index results are labeled
public_indexand include the search engine and visible evidence. - A hard paid-quality gate rejects undated or evidence-thin snippets as uncharged
insufficient_datarecords. - Date filters exclude undated posts instead of assuming a date.
- Keyword and content filters run after normalization and before charging.
maxTotalChargeis checked before every paid event. Apify's platform charge limit remains authoritative.
Scheduling and deduplication
For monitoring, schedule the Actor daily or weekly and store seen postUrl or postId values in your workflow or destination. A new-post alert can then trigger only when the current run contains a previously unseen ID.
API and integrations
Run this Actor from Apify Console, REST API, JavaScript/Python clients, schedules, webhooks, n8n, Zapier, Make, Google Sheets, or a custom CRM pipeline. The default dataset API exposes JSON, CSV, XML, Excel, HTML, and RSS-compatible export options supported by Apify.
Limitations and responsible use
Public pages, public search indexes, authorized endpoints, and response shapes vary by account, region, profile privacy, and time. Some profiles expose no recent posts; public-index snippets can be incomplete; engagement counts can be absent or stale; and authenticated endpoints can change without notice.
The Actor does not bypass CAPTCHA, authentication walls, access controls, or platform restrictions. Use only data you are permitted to collect and process. Follow applicable law, privacy requirements, LinkedIn's terms, and your organization's policies. Do not use the output for spam, harassment, discrimination, invasive profiling, or other harmful activity.
Local validation
npm installnpm run check