LinkedIn Profiles Scraper
Extract public LinkedIn profile fields from supplied URLs: name, headline, description, image link and public identifier.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
profileUrls,maxProfiles,requestTimeoutSecs(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0009 per successful public profile = $0.9 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Successful public profile | A matching public LinkedIn profile parsed from the supplied URL. | $0.0009 |
| Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.001 |
Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-04, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
profileUrls | Public URLs in the form https://www.linkedin.com/in/public-identifier/. Empty input returns one clearly labeled, uncharged sample row. | array |
maxProfiles | Maximum valid public profile URLs to request. Invalid or blocked URLs return free diagnostic rows. | integer |
requestTimeoutSecs | Timeout for one public profile page request. | integer |
What you get
A structured dataset — each result includes fields like:
fullNameheadlineprofileUrlprofileImageUrltransportExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in B2B Leads & Contact Data
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
LinkedIn Companies Scraper
Extract public LinkedIn company data from company URLs: name, description, followers, employee count, HQ, website and logo.
YouTube Channel Email Scraper
Find business emails publicly listed in YouTube channel descriptions and their linked websites. Built for creator outreach and sponsorships. No login needed.
Domain Inspector
Bulk-inspect domains: DNS records, RDAP registrar and expiry, redirects, TLS dates, security headers, robots, sitemaps and tech detection.
Google Maps Scraper
Scrape Google Maps business listings by category and city: name, phone, website, rating, reviews, lat/lng and place ID. Build local lead lists fast.
Contact Details Scraper
Extract public emails, phones, addresses, contact forms and 10 social profiles from any list of websites.
Email Verifier
Bulk email verifier at $0.60 per 1,000 addresses plus a $0.001 run-start fee. Syntax, MX, disposable and role-account checks plus optional SMTP probing.
Where this tool sits
- Categories
- B2B Leads & Contact Data
- Platforms
LinkedIn Profiles Scraper
Extract only the data LinkedIn exposes publicly on supplied profile URLs. This actor does not request a login, cookies, hidden or private endpoints, employee/contact inference, profile search, or data behind a sign-in wall.
Input
{
"profileUrls": [
"https://www.linkedin.com/in/example-public-profile/"
],
"maxProfiles": 10,
"requestTimeoutSecs": 20
}
| Field | Type | Default | Notes |
|---|---|---|---|
profileUrls | array | [] | Public URLs in the form https://www.linkedin.com/in/<public-identifier>/. Empty input returns one labelled, uncharged sample row. |
maxProfiles | integer | 10 | Cap on how many valid URLs are requested in a run. Maximum 100. |
requestTimeoutSecs | integer | 20 | Per-page request timeout, 1–60 seconds. |
Supply public URLs matching https://www.linkedin.com/in/<public-identifier>/. The actor does not resolve names, emails, or company domains into LinkedIn URLs. URLs are canonicalised before the request, so tracking parameters and trailing slashes are harmless and the same profile submitted twice is only fetched once.
Output
Every genuine row is parsed from a matching public Person JSON-LD record present on the requested page:
| Field | What it is |
|---|---|
ok | true on a real parsed profile, false on a diagnostic row. |
sourceType | public_linkedin_profile on real rows, sample on the free sample row. |
profileUrl | The canonicalised /in/ URL that was requested. |
publicIdentifier | The vanity slug from that URL, e.g. example-public-profile. |
fullName | Person.name as LinkedIn publishes it. |
headline | Person.jobTitle when present, otherwise the public description. |
description | The public "about" text, when LinkedIn exposes it. |
profileImageUrl | Public avatar URL, or null. |
sameAs | The outbound links the profile itself lists (personal site, other socials). Empty array when there are none. |
transport | direct_http — the actor never runs a browser. |
retrievedAt | ISO timestamp of the fetch. |
Missing fields are null or empty. It does not infer contact details, work history, employers, location, email addresses, or private profile attributes.
Diagnostic rows
Anything that is not a parsed profile comes back as an uncharged row with ok: false, _diagnostic: true and an errorCode:
BAD_INPUT— the URL is not alinkedin.com/in/profile URL.NO_RESULTS— the page loaded but carried no matching publicPersonrecord (private profile, or LinkedIn served an interstitial).- Transport codes — timeout, block or network failure, with the underlying message in
details.
You get a row explaining what happened for every URL you submitted, so a partial run is auditable rather than silently short.
Cost and proxy policy
The actor uses direct HTTP only. It never starts residential or SERP proxy traffic. Blocks, rate limits, invalid URLs, and public pages without a matching profile record return an uncharged diagnostic row.
Only a genuine matching public profile triggers the profile event. The row is written to the dataset before the charge call.
Empty input
Empty input returns exactly one clearly labeled _sample: true row without making a LinkedIn request. It is always uncharged.
Pricing
$0.90 per 1,000 profiles ($0.0009 each), plus $0.001 each time a run starts — against the $1.00 to $1.99 per 1,000 charged by comparable URL-driven LinkedIn profile actors on the Apify Store. Flat rate: no volume tiers, no plan gates, and you are charged only for profiles actually returned.
Billing
Two charges apply: a $0.001 run-start fee each time a run begins, and $0.0009 per successfully parsed public profile. Samples, diagnostics, duplicates, blocked look-ups and no-result runs never incur the per-result fee — a run that returns nothing costs only the $0.001 start fee. Because it is direct HTTP with no proxy, there is no proxy line on your bill either.