LinkedIn Profiles Scraper - $0.90/1k, No Login avatar

LinkedIn Profiles Scraper - $0.90/1k, No Login

Pricing

from $0.90 / 1,000 successful public profiles

Go to Apify Store
LinkedIn Profiles Scraper - $0.90/1k, No Login

LinkedIn Profiles Scraper - $0.90/1k, No Login

Scrape public LinkedIn profiles from their URLs. Every public profile has a public identifier in its URL. Everything else comes from that identifier. You get the full name, headline, profile image link and the social links the profile lists. No login needed. $0.90 per 1,000 profiles.

Pricing

from $0.90 / 1,000 successful public profiles

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

44 minutes ago

Last modified

Share

LinkedIn Profiles Scraper: public profile data from URLs you already have

Paste a list of linkedin.com/in/... URLs and get back what LinkedIn publishes on each of those pages: full name, headline, the long "about" text, a link to the photo and whatever outbound links the person lists. No account, no cookie, nothing to paste in and nothing that expires on you.

What it reads is the public version of the page, the one LinkedIn writes for search engines to index. A profile that is private or has opted out of public visibility comes back empty, and there is no keyless way around that.

InputPublic /in/ profile URLs
OutputOne row per URL
Ceiling100 profiles per run
Account neededNone
Price$0.90 per 1,000 profiles, flat on every plan

👤 What LinkedIn Profiles Scraper does

You already have the URLs. This fills in the person behind each one.

A public profile page carries a block of structured data that LinkedIn puts there for search engines: the name, the headline, the "about" text, the photo and the links the person chose to list. That block is what this reads, one page per URL, in the order you gave them.

Two checks happen before a row is written. The page's own canonical URL has to match the URL you asked for, and the structured data has to describe that same profile. Vanity URLs redirect more often than you would think, and without those checks you would get somebody else's details filed under your URL. When the match fails you get a row saying so instead of a confident wrong answer.

📥 What you give it

{
"profileUrls": [
"https://www.linkedin.com/in/reidhoffman/",
"https://www.linkedin.com/in/williamhgates/"
],
"maxProfiles": 10
}
FieldDefaultWhat it is
profileUrlsemptyUp to 100 public /in/ URLs. Tracking parameters and country subdomains are cleaned off, and the same profile is fetched only once however many times you list it. Leave it empty and you get one labelled sample row, free.
maxProfiles101 to 100. The number of URLs the run will actually fetch.
requestTimeoutSecs205 to 60 seconds. How long to wait for one page before giving up on it.

The cap bites quietly, so set it. maxProfiles starts at 10. Paste 40 URLs and leave it there and you get 10 rows and nothing at all for the other 30, not even a row explaining why. Set it to the number of profiles you want.

Long lists need a longer run. Pages are fetched one after another, and the run ends when it reaches the timeout on the actor's Settings tab, 180 seconds unless you change it. A hundred URLs with a 60-second page timeout can outlast that. Raise the run timeout or split the list.

📤 What you get back

A real row from a recent run. The headline, the about text and the image link are long, so they are cut short here with ...:

{
"ok": true,
"_sample": false,
"sourceType": "public_linkedin_profile",
"profileUrl": "https://www.linkedin.com/in/reidhoffman",
"publicIdentifier": "reidhoffman",
"fullName": "Reid Hoffman",
"headline": "Co-Founder, Executive Board Chair | Co-Founder, Board Member | Partner | Chair | ...",
"description": "My current priority is investing in and building with AI to benefit humanity. Recently, I've co-founded Inflection.AI and ManasAI.co. <br><br>I am active in all facets of the consumer internet ...",
"profileImageUrl": "https://media.licdn.com/dms/image/v2/D5603AQHW7wKzPb3DAg/profile-displayphoto-shrink_200_200/...",
"sameAs": [],
"transport": "direct_http",
"retrievedAt": "2026-09-14T05:45:41.433Z"
}
FieldWhat it is
publicIdentifierThe slug after /in/. The stable key to join on across runs.
fullNameThe name as the page publishes it.
headlineThe line under the name. Long ones read as a pipe-separated list because that is how the page itself publishes them.
descriptionThe "about" text, exactly as published, <br> tags included. Strip them yourself if you want clean text.
profileImageUrlA direct link to the hosted photo, or null when the profile has none.
sameAsThe outbound links the profile lists. An empty list on most profiles, because most people list none.

Nothing is guessed or padded. A field the page does not publish comes back null or empty rather than filled in from somewhere else.

🧾 Reading the output

Three kinds of row, and only real profiles cost anything.

RowHow to spot itCharged
A profilesourceType: "public_linkedin_profile"yes
The sample row_sample: true, and it only appears when you run with empty inputno
A diagnosticok: false and _diagnostic: trueno

There is no charged field on these rows. sourceType is what tells a real profile apart from a sample or a diagnostic, so filter on that and you have your people.

A diagnostic row carries an errorCode:

CodeWhat it means
BAD_INPUTNot a /in/ URL, or a slug written with characters this actor will not accept. Nothing was requested for it.
NO_RESULTSThe page loaded but carried no profile data matching the URL you asked for. Usually a vanity URL that now redirects to somebody else.
BLOCKEDLinkedIn answered with a challenge page instead of the profile. A URL for a profile that no longer exists lands here too, because LinkedIn answers both the same way.
RATE_LIMITEDToo many pages too close together. Space your runs out.
SERVER_ERROR, NETWORKLinkedIn errored, or the page did not arrive inside requestTimeoutSecs. Worth re-running that URL on its own.

Neither a sample nor a diagnostic row fails the run.

▶️ How to run it

  1. Open LinkedIn Profiles Scraper and click Try for free.
  2. Paste your URLs into Public LinkedIn profile URLs, one per line.
  3. Set Maximum profiles to at least the number of URLs you pasted.
  4. Click Start.
  5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.90 per 1,000 profiles. Flat on every Apify plan, no volume tiers.

One charge per profile row. Sample rows and diagnostic rows are never charged, a URL you listed twice is fetched and billed once, and a run where nothing comes back costs you nothing for results.

💡 What people use it for

  • Putting names, headlines and photos against a column of profile URLs exported from a CRM.
  • Checking an old list is still good before a campaign. Dead and redirected URLs show up as diagnostic rows instead of quietly going missing.
  • Reading how a set of people describe their own work, in their own words, before writing to them.
  • Collecting photo links and headlines for a speaker page or an internal directory.

🚧 What it does not do

  • No email addresses and no phone numbers. They are not on the public page, so they are not here.
  • No work history, education, location, skills or connection count. The published block does not carry them. Name, headline, about text, photo and listed links is the whole of it.
  • No search. It cannot turn a name or a company into a URL. You bring the URLs.
  • Private and unindexed profiles are invisible, however the URL is written.
  • Slugs with accents, underscores or percent-encoded characters are refused as BAD_INPUT, even when the profile is perfectly real.
  • A profile that does not exist reads as BLOCKED, not as "not found". LinkedIn gives the same answer for a deleted profile and a refused request, so the two cannot be told apart from outside.
  • URLs past maxProfiles get no row at all. They are dropped, silently.
  • No retries. A URL that fails, fails for that run. Re-run it.

🧭 Which LinkedIn scraper do you need?

If you wantUse
Profiles when you already have the URLsThis one
To find the profiles in the first place, by title, company or schoolLinkedIn Profile Search Scraper
Everyone who works at one companyLinkedIn Company Employees Scraper
What a person has been postingLinkedIn Profile Posts Scraper
Company pagesLinkedIn Companies Scraper

❓ Questions people ask

Do I need a LinkedIn account? No, and there is no cookie field either. Nothing to paste and nothing to renew.

Will my own account get restricted? Yours is never used, so there is nothing to restrict.

Can I give it a name or a company instead of a URL? Not here. Use the search actor above to find profiles, then feed the URLs it returns into this one.

Why did some of my URLs come back with no data? Read the errorCode on the row. Most of the time it is a vanity URL that has been changed since your list was made.

What happens if I run it with nothing in the input? You get one sample row, clearly labelled, and you are not charged for it.

Is scraping LinkedIn legal? This reads only pages LinkedIn publishes to the open web for search engines. Rows still contain personal data, which GDPR and similar laws cover, so have a lawful reason for collecting it. Apify's write-up on scraping and the law is a reasonable starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and one of the URLs that went wrong. The errorCode on the diagnostic row usually says what happened on its own.