LinkedIn Profile Pro - Profile + Posts + Articles, No Cookies
Pricing
$4.00 / 1,000 linkedin profile resolveds
LinkedIn Profile Pro - Profile + Posts + Articles, No Cookies
Scrape LinkedIn profiles in depth โ name, headline, country, work history with dates, education with dates, recent posts with full text + likes, and published articles โ all in one call. No cookies, no login required.
Pricing
$4.00 / 1,000 linkedin profile resolveds
Rating
5.0
(1)
Developer
Actor stats
2
Bookmarked
19
Total users
13
Monthly active users
2 days ago
Last modified
Categories
Share
LinkedIn Profile Pro
Deep, cookie-free LinkedIn profile scraper. Hand it profile URLs (or bare slugs), get back full profile metadata plus recent posts plus published articles โ in a single call, in one dataset row per profile.
Built for Clay, n8n, and Make pipelines where you currently have to call two or three separate actors to assemble the same picture.
What you get per profile
{"url": "https://www.linkedin.com/in/williamhgates/","slug": "williamhgates","name": "Bill Gates","headline": "Creator, Top Voice","about": "Co-chair of the Bill & Melinda Gates Foundation...","photoUrl": "https://media.licdn.com/...","country": "US","city": "Seattle, Washington, United States","followers": 40000000,"connections": 8,"workHistory": [{ "company": "Gates Foundation", "companyLinkedInUrl": "...","title": null, "description": null, "location": null,"startDate": "2000", "endDate": null, "isCurrent": true },{ "company": "Breakthrough Energy", "startDate": "2015", "isCurrent": true, ... },{ "company": "Microsoft", "startDate": "1975", "isCurrent": true, ... }],"education": [{ "school": "Harvard University", "startYear": 1973, "endYear": 1975 }],"languages": [],"awards": [],"externalLinks": [],"recentPosts": [{ "urn": "7464707901635395584","url": "https://www.linkedin.com/posts/williamhgates_...","text": "I felt so powerless and scared when my dad was diagnosed with Alzheimer's...","postedAt": "2026-05-25T03:10:26.346Z","likes": 1765, "comments": 84, "shares": null,"isArticle": false, "headline": null }// up to ~10 recent posts per profile],"publishedArticles": [{ "url": "https://www.linkedin.com/pulse/every-year-2-million-...","title": "Every year, 2 million babies are stillborn.","datePublished": "2026-05-02T00:35:55.000+00:00","description": "A simple retinal scanner can change that." }// up to ~10 articles per profile (when published)],"fetchedAt": "2026-05-26T15:20:00.000Z","source": {"htmlSize": 613470,"proxyGroup": "DATACENTER","attemptsRequired": 1,"uaUsed": "facebookexternalhit"}}
Input
| Field | Type | Default | Notes |
|---|---|---|---|
profileUrls | string[] | required | Full LinkedIn URLs or bare slugs. Both work. https://uk.linkedin.com/in/... URLs accepted. /company/, /jobs/, non-LinkedIn URLs rejected silently. |
includeRecentPosts | boolean | true | Extract up to ~10 recent posts per profile. Bundled in same charge. |
includeArticles | boolean | true | Extract LinkedIn-published articles. Bundled in same charge. |
enrichEngagementFromDom | boolean | true | Parse comment + share counts (post likes already come from JSON-LD). Negligible cost. |
postedAfter | string | โ | Drop posts/articles older than this date. Accepts YYYY-MM-DD or full ISO 8601 timestamp. Leave empty for no lower bound. |
postedBefore | string | โ | Drop posts/articles newer than this date. Same format as postedAfter. Pair both for a between-range filter. Undated items are dropped when any date filter is active. |
maxRetriesPerProfile | integer | 5 | Fresh-IP attempts per profile. 1-10. |
useResidentialFallback | boolean | false | After 3 datacenter failures, retry via Apify residential proxy. Boosts success ~70% โ ~85%. Adds ~$5/1K cost on stubborn profiles only. |
concurrency | integer | 5 | Parallel profile fetches. 1-20. |
maxItems | integer | 500 | Hard cap on profiles processed. |
proxyConfiguration | object | Apify datacenter BUYPROXIES94952 | Override only if you have a specific reason โ datacenter is the validated optimum (cheaper AND higher success rate than residential for this surface). |
Pricing
$0.004 per profile resolved. That's it. Recent posts and articles bundled โ no per-post charge.
- First 10 profiles per run are FREE (per-run trial โ useful for testing).
- No charge for invalid slugs, soft-blocks, or empty responses.
- No charge for duplicate inputs (we dedupe upfront).
- Charge only fires when a Person JSON-LD block has been successfully parsed.
Compare with the alternative on the Store: profile scraper at $4/1K + profile-posts at $2/1K = $6/1K bundled. This one is $4/1K bundled, in one call, one dataset row, one charge.
How it works (high-level)
LinkedIn whitelists social-link-preview bots (facebookexternalhit/1.1, Twitterbot/1.0) and serves them rich server-rendered HTML with structured JSON-LD blocks: Person, DiscussionForumPosting, Article. We fetch each profile with that UA via Apify's datacenter proxy, parse the JSON-LD, augment with DOM-extracted engagement counts (comments, shares), and emit a normalized row.
When a profile resists datacenter IPs (rotating residential block-lists land on Apify's pool), the optional residential fallback kicks in after 3 failures. Soft-block detection is byte-precise (LinkedIn's "we noticed unusual activity" template is exactly 317,547 bytes), so we never mistake it for a real 200.
No cookies, no login, no LinkedIn account, no Voyager API impersonation. Public data only.
Why some profiles fail to resolve
If a profile fails, the warning log tells you exactly why:
| Reason in log | What it means | Can retries / residential fallback fix it? |
|---|---|---|
profile_not_found | The slug genuinely doesn't exist on LinkedIn. Probably a typo or the profile was deleted/renamed. | No โ check spelling. |
not_publicly_visible | The slug exists but the owner has disabled public-profile visibility. You can see this profile if you're logged into LinkedIn, but our cookie-free path cannot. | No โ this is a LinkedIn privacy setting, not anti-bot. Common for recruiters, executives, and privacy-conscious users. |
soft_block | LinkedIn anti-bot fired (the 317KB "unusual activity" template). | Yes โ usually clears with useResidentialFallback: true or higher maxRetriesPerProfile. |
fetch_errors | Network errors before reaching LinkedIn (proxy / DNS). | Yes โ retry or try a different proxy group. |
no_person_jsonld | Page returned content but no Person JSON-LD shape we recognize (likely a new LinkedIn rendering variant). | Worth reporting โ please open an issue with the slug. |
No charge fires for any failed profile.
Common use cases
- Clay/n8n/Make enrichment pipelines โ pipe a list of LinkedIn URLs in, get full profiles + recent activity out.
- B2B prospecting with context โ beyond just name+title, see what they've posted recently to personalize outreach.
- Investor / hedge fund headcount tracking โ re-run periodically, diff
workHistory[].isCurrentto detect hires and exits. - Competitive intel on key people โ track posts + articles to monitor what competitors' execs are talking about.
- Recruiting research โ surface candidates' recent activity, not just their static resume.
What's NOT included (cookie-free limits)
- Skills, certifications, volunteer, recommendations โ these sections aren't in the cookie-free JSON-LD. Add them in v0.2 if there's demand (DOM-extractable).
- Per-reaction breakdown (like vs love vs celebrate) โ only total likes available.
- Comment thread bodies โ only comment counts (auth-walled bodies).
- Sales Navigator, Recruiter, full activity history โ separate auth-scope, out of scope.
- Per-position job titles โ for some profiles LinkedIn doesn't include per-
worksFortitles in the JSON-LD. You'll seetitle: nulleven when the company is present. Profile-side limitation.
Expect ~95% success rate on public profiles at default settings; ~98% with useResidentialFallback: true. The remaining tail is profiles where the owner has set Public profile to off (cookie-free fundamentally cannot reach those โ see the failure-reason table above) or new LinkedIn rendering variants we haven't taught the extractor about yet. Failed profiles are NOT charged.
Heads up on "partial-public" profiles: some profile owners enable the master "Public profile" switch but disable per-section visibility (Experience, Education, Summary, etc.) in their LinkedIn privacy settings. The actor will resolve these profiles and charge $0.004 because we extract whatever LinkedIn ships โ but the row may have a redacted last name (e.g. "Dianne E."), an empty about, mostly-empty workHistory entries, and few/no posts. There is no cookie-free way around per-section privacy. If your input list includes many such profiles, factor it into your cost expectation.
License
MIT โ use the data within LinkedIn's Terms of Service and applicable scraping law (hiQ v. LinkedIn covers public data; this actor never touches authenticated surfaces).
