On 8 September 2026 we sent four plain HTTP requests at four LinkedIn profile URLs. No cookies, no proxy, no browser, 25 seconds between each one. Two came back HTTP 200 with a readable page. Two came back HTTP 999, which is LinkedIn's own non-standard code for a refusal.
That split is the entire economics of LinkedIn profile scraping. Parsing a profile page is a morning's work. Getting the page to arrive is the product, and it is what every vendor on this list is actually charging you for.
This page covers what a profile URL gives up, what stays behind the login, and what eight tools charge per 1,000 profiles. Every price was read off the vendor's own pricing page on 8 September 2026. WizLeads is ours, and its section says plainly which half of this job it does not do.
What a logged-out profile actually returns
Take the two requests that succeeded. Reid Hoffman's public page came back at 814 KB carrying his name, headline, country, follower count, a connection band of "500+", a truncated About section, his current company, one school, his published articles and his recent public posts.
Then it gets strange. The Experience and Education block at the top renders the company and job title as rows of asterisks, gated behind a link reading "View Reid's full experience. See their title, tenure and more." Further down the same HTML, board roles came through with real employers and real dates, including "Nov 2016 to Dec 2025, 9 years 2 months". Skills and Languages appear nowhere in the document.
The logged-out page is a partially redacted profile, redacted inconsistently, and any parser you write against it has to cope with a field being present, masked or absent depending on where on the page it sits.
| Field | Logged out | Needs a session |
|---|---|---|
| Name, headline, location | Yes | |
| Follower count, connection band | Yes | |
| About text | Truncated | Full text |
| Current company, one school | Yes | |
| Job titles and tenure | Masked with asterisks | Yes |
| Full position history | Partial | Yes |
| Skills, languages, endorsements | Absent | Yes |
| Contact info | Link only | Yes |
| Work email | Never present | Never present |
The last row is the one that costs people money. No LinkedIn profile carries a work email in a readable field, logged in or out, so every tool that hands you one has run a separate lookup against the name and the company domain. That is a different product with a different hit rate, and it is priced separately by every vendor that offers it.
Why "no cookies" has a price tag
Four of the tools below advertise cookie-free scraping. Read that as: not your cookies.
The Apify actor ranking third for this term returns skills, languages, certifications, publications, recommendations and mobile numbers. None of that exists in the logged-out HTML we pulled. Those requests are reaching LinkedIn through somebody's authenticated session, over residential IPs, retrying against the 999s and against a fraud score that Scrapfly's engineers describe as combining IP reputation, JA3 TLS fingerprint, header chains and device fingerprint. The vendor runs the account pool, wears the bans, and rebuilds the parsers when LinkedIn moves a field.
That is the service. The $1.50 to $65.98 spread below tracks how much of it each vendor absorbs, and how much structured output you get at the end.
Eight tools, priced per 1,000 profile URLs
The criterion is the same for all eight: you hold a list of LinkedIn profile URLs, you want structured rows back, and you are comparing the cost of 1,000 of them alongside whose account absorbs the risk. Each entry gives what it returns, the verified price, the cost per 1,000, whose session runs the request, and the limitation that matters.
They fall into three architectures. A LinkedIn profile scraper API takes a URL and returns parsed JSON on the vendor's own account and proxies, which covers Bright Data, Scrapingdog, Captain Data and the no-cookie Apify actors. A general-purpose scraping API fetches the page and hands you raw markup, cheaper per page but you own every field-name change LinkedIn ships, which is Scrapfly. And your own logged-in browser, meaning an extension, a phantom or a Python script holding your cookie, which is cheapest and the only architecture where a restriction lands on your account.
| Tool | Whose session | Entry price | Per 1,000 profiles |
|---|---|---|---|
| Bright Data | Theirs | Free, 5,000 records/mo | $1.50 |
| Scrapfly | Theirs | $30/mo, 200,000 credits | $3.75, HTML only |
| Scrapingdog | Theirs | $40/mo, 200,000 credits | $10.00, or $4.50 on the $90 plan |
| Apify (dev_fusion) | Theirs | Free plan, $5 usage | $10.00 plus the platform plan |
| Captain Data | Theirs | $165/mo, 2,500 credits | $65.98 |
| PhantomBuster | Yours | $69/mo, 20 execution hours | Metered in hours, not rows |
| joeyism/linkedin_scraper | Yours | Free, licence contested | $0 |
Bright Data
Takes profile URLs through a Web Scraper API endpoint and returns ID, name, city, country code, position, About, posts and current company. Pay as you go is $1.50 per 1,000 records, the Scale plan is $499 a month with 384,000 records included and $1.30 per 1,000 after that, and the free tier is 5,000 records a month with no card. The pricing page defines a record as one extracted item and uses one LinkedIn profile as its own example. Failed deliveries are not charged.
That is the cheapest verified per-record price on this page, a third of what Scrapingdog costs at its best rate and a fraction of anything else that returns parsed JSON. The field list is also the shallowest of the vendor APIs: no skills, no certifications, no email. Bright Data is selling volume and a compliance posture rather than depth.
Scrapfly
Fetches the page and hands back HTML. Credits scale with what the request needs: 1 for plain HTTP on a datacenter IP, 5 with JavaScript rendering or anti-scraping-protection mode, 25 with residential proxies, 60 for a full-page screenshot. The $30 plan carries 200,000 credits at $0.15 per 1,000 and charges nothing for failures. At 25 credits a residential fetch, 1,000 profiles is 25,000 credits, or $3.75.
Every field in the table above is then your problem, including the asterisk masking. Budget engineering time against that $3.75, not only money.
Scrapingdog
Its Profile Scraper API takes a profile identifier rather than a full URL and returns full name, public identifier, headline, location, followers, connections, About, position history with dates and durations, education, awards and certifications. Each request costs 50 credits, or 100 if the profile is protected. The $40 plan carries 200,000 credits, which is $10.00 per 1,000 profiles; the $90 plan carries 1,000,000 and drops that to $4.50. Signup gives 200 free credits, which at 50 credits a request is four profiles, thin enough that you are really evaluating on your own money.
Apify
A marketplace rather than a single tool. The actor ranking for this term is dev_fusion's Mass LinkedIn Profile Scraper with Email, at $10.00 per 1,000 results on top of an Apify plan that starts free with $5 of usage and moves to $19 a month. It states no LinkedIn cookies required, returns skills, languages, certifications, publications and recommendations alongside the basics, attempts email discovery on every profile, and adds mobile number lookup for paying accounts. Free accounts are capped at 10 profiles per run.
It carries a 3.6 rating across 159 reviews, the lowest of anything here, and its published issue response time is 54 days. The marketplace cuts both ways: curious_coder's cookie-driven actor for the same job warns in its own description that scraping more than 300 to 400 profiles a day will produce a LinkedIn account warning. Two actors, one search result, opposite risk models.
Captain Data
Bills 1 credit per record for a complete profile from a LinkedIn URL, company profiles at the same rate, name-plus-company resolution at 2 credits. The floor is 2,500 credits a month at $65.98 per 1,000, so $165 a month, and the rate falls with committed volume; the pricing page points anyone chasing roughly $5 per 1,000 credits toward a sales conversation. A hundred credits come free with an API key.
At entry volume that is 44 times the Bright Data rate for the same unit. Captain Data is priced for teams buying an integration layer and an SLA, and the per-profile figure only turns competitive several hundred thousand records in.
PhantomBuster
Its LinkedIn Profile Scraper takes a list of profile URLs and a LinkedIn cookie, occupies one automation slot, and returns 44 data points including name, headline, location, company name and industry. Monthly plans are $69 for 20 execution hours, $159 for 80 and $439 for 300, with annual billing at $56, $128 and $352 a month. The free trial allows 2 hours and caps exports at 10 rows.
There is no per-1,000 figure here because PhantomBuster meters execution time rather than rows, and throughput depends on your account's own limits. The page also states this phantom skips profile pictures, skills and endorsements, reads only the two most recent positions, and points you at a second phantom for the rest, so a complete profile costs two passes. The email column needs your own Dropcontact, Hunter or Snov.io key, or PhantomBuster's separate email credits, and without one it does not appear at all.
joeyism/linkedin_scraper
The GitHub repository that has ranked second or third for this term across every variant we checked. Version 3.1.2 shipped on 10 April 2026, it is async, built on Playwright, and it scrapes profiles, companies and jobs against your own logged-in session. Free, 4,482 stars, 985 forks.
Two constraints travel with it. GitHub reports the licence as GPL-3.0 while the README states Apache 2.0, and those two answers point in opposite directions for anything you plan to ship commercially, so settle it before you build. And 144 open issues on a library whose job is tracking a hostile, frequently changing DOM tells you what the maintenance curve looks like once you are past the demo.
Reconciling the daily limits, which look like they contradict each other
Read across the pages ranking for this term and you get six different ceilings on LinkedIn profile scraping, each published as if it were the answer.
| Source | Stated ceiling |
|---|---|
| Scrapfly's tutorial | A sign-in prompt after roughly 3 to 5 profiles anonymously |
| Our own logged-out test | 2 refusals in 4 requests at 25-second spacing |
| curious_coder's Apify actor | 300 to 400 profiles a day before an account warning |
| PhantomBuster | 1,500 profiles a day |
| Scrapingdog | Millions a day |
They only look contradictory because the limit is not a property of LinkedIn on its own. It is a property of the identity attached to the request.
An anonymous IP with no session gets single digits, because there is nothing to throttle except the IP, so LinkedIn shuts the IP out. Your own logged-in account gets somewhere between three hundred and fifteen hundred a day, because LinkedIn is measuring one member against normal member behaviour and a warning is the cheap first response. A vendor running thousands of residential IPs and its own account fleet gets millions a day, because that same per-identity ceiling is spread across thousands of identities. Nobody raised the limit. They bought more of the thing the limit applies to.
So you are not really comparing scrapers on speed. You are choosing whose account the daily ceiling gets charged to.
Two other things break on the way up. HTTP 999 appears in no specification, so naive retry logic treats it as a transport hiccup and quietly writes blanks into your dataset instead of raising. And the asterisk masking on that Experience block is the kind of change that ships without notice, breaks one field, and leaves the other forty looking healthy. Raw HTML absorbs that as your bug. Parsed JSON absorbs it as an outage while the vendor catches up.
If your list came from a search rather than from URLs you already hold, none of this is your first wall anyway. LinkedIn caps a people search at 2,500 results and a company search at 1,000, and the workarounds are in Sales Navigator export limits.
The rules, and the vendor that stopped existing
Section 8.2.2 of the LinkedIn User Agreement prohibits any attempt to "Develop, support or use software, devices, scripts, robots or any other means or processes (such as crawlers, browser plugins and add-ons or any other technology) to scrape or copy the Services, including profiles and other data from the Services". Section 8.2.4 goes further and covers using information obtained from the Services through third parties such as data aggregators or brokers. Those clauses bind you the moment you hold an account, and they are what makes LinkedIn profile scraping a contract question before it is a technical one.
The case everybody cites is narrower than the headlines. hiQ Labs v LinkedIn concerned the Computer Fraud and Abuse Act, and the Ninth Circuit ruling was about a preliminary injunction rather than a final judgment on the merits. The contract claim went the other way. On 8 December 2022 the parties entered a consent judgment and permanent injunction of $500,000 against hiQ, requiring it to stop scraping LinkedIn and destroy the data it had collected.
Which brings up the vendor missing from every listicle written before last year. Proxycurl was the default LinkedIn data API for developers for most of a decade. LinkedIn sued it in January 2025 and its founder shut the API down on 4 July 2025, writing that he had grown it to roughly $10M in revenue before closing it to comply with the settlement, and that fighting a Microsoft-owned opponent under the American Rule on legal fees was not winnable.
The useful conclusion there is about durability rather than legality. Vendor-side scraping is an ongoing relationship with a company doing the risky part for you, and that relationship can end on a court's timetable rather than yours. Keep your exports, and avoid building anything whose only data path is one vendor's API.
Where WizLeads fits, and where it does not
WizLeads is ours, so here is the boundary before anything else. WizLeads takes a Sales Navigator search URL. It does not take a CSV of arbitrary profile URLs. If you already hold 40,000 profile links from somewhere else and want them enriched, nothing on this page's WizLeads section applies and you want one of the vendor APIs above.
It covers the step before that, which is where most lists actually come from. You paste a Sales Navigator search, it runs server-side, and 5,000 leads land as CSV in 15 to 20 minutes with 35 fields per lead. Account-less mode costs 2 credits per lead and uses no LinkedIn credentials, cookies or session of yours, so nothing ties the run to your account; connecting an account drops it to 1 credit. Email enrichment is 3 credits per email actually found, verification included, nothing charged for a miss, at a find rate of 50 to 60 percent. Smart Link Splitting on Agency and above breaks a search past the 2,500-result people cap. There is a REST API and connectors for Clay, n8n, Make and Zapier.
Plans are $39 for 10,000 credits, $99 for 40,000, $199 for 100,000 and $499 for 300,000. Account-less on the $39 plan is 5,000 leads, or $7.80 per 1,000; on the $99 plan, 20,000 leads at $4.95 per 1,000. Against the table above that sits between Scrapfly and Scrapingdog per row, with the list-building and the email attached rather than sold separately. New accounts pay $1 for the first month and keep 20 percent off for life at wizleads.io.
For getting a clean search out of Sales Navigator in the first place, exporting leads from Sales Navigator covers the filter work, and Evaboot alternatives compares the extension-based tools.
Picking one
Start from what you already hold. Profile URLs plus a need for depth points at Scrapingdog or the Apify actor, which return skills, certifications and dated positions that Bright Data does not. The same list at high volume and shallow depth points at Bright Data on price alone. Engineering capacity and tolerance for maintenance points at Scrapfly, or at the GitHub library once you have settled its licence and accepted the account exposure.
Having no list yet is a different job, and the 2,500-result search cap will shape that decision more than any per-profile price on this page.
Frequently asked questions
Can you scrape LinkedIn profiles without an account?
Not from your own machine at any useful volume. A plain logged-out request returns HTTP 999 on most profile URLs, and the ones that do return HTTP 200 give you a stub with the job titles masked out. Bright Data, Scrapingdog, Captain Data and several Apify actors advertise themselves as cookie-free, and what that means is that your cookies are not involved. The requests still reach LinkedIn through residential proxy pools and accounts the vendor runs and absorbs the bans for.
Will LinkedIn ban you for scraping profiles?
Only if the traffic is attached to your account. Anything driven by your session, a Chrome extension, a PhantomBuster phantom or a Python script logged in as you, carries that exposure, and the vendors publish their own ceilings: 300 to 400 profiles a day on one popular Apify actor, 1,500 a day on session-driven tools like PhantomBuster. A vendor-side API moves the exposure to the vendor's account pool instead.
Is it legal to scrape LinkedIn profiles?
The Ninth Circuit's hiQ Labs v LinkedIn ruling addressed the Computer Fraud and Abuse Act, not LinkedIn's contract. The case ended on 8 December 2022 with a consent judgment of $500,000 against hiQ and a permanent injunction requiring it to stop scraping and destroy the data. Section 8.2.2 of the LinkedIn User Agreement prohibits using software, scripts, robots, crawlers or browser plugins to scrape or copy profiles, and it binds anyone holding an account. LinkedIn sued Proxycurl in January 2025 and Proxycurl shut its API down on 4 July 2025. None of this is legal advice.
How much does it cost to scrape 1,000 LinkedIn profiles?
Between $1.50 and $65.98, depending on how much parsing the vendor does for you. Bright Data charges $1.50 per 1,000 records pay as you go. Scrapfly works out at $3.75 per 1,000 pages at 25 credits a residential fetch on its $30 plan, but returns HTML you parse yourself. Scrapingdog bills 50 credits per profile, which is $10.00 per 1,000 on its $40 plan and $4.50 on the $90 plan. Apify's dev_fusion actor charges $10.00 per 1,000 results. Captain Data runs 1 credit per record at $65.98 per 1,000 credits at its 2,500-credit minimum. All checked 8 September 2026.
Do LinkedIn profile scrapers return email addresses?
No profile carries a work email in a field a scraper can read. Contact info stays gated even on the profiles that render logged out. Tools that hand you an email have run a separate enrichment step against the name and company domain after the scrape, which is why they price it separately and why the hit rate lands nearer 50 to 60 percent than 100. In our 1,000-lead enrichment benchmark, seven tools ranged from 25.9 to 67.0 percent verified-valid on the same list.
Can ChatGPT scrape LinkedIn profiles?
No. LinkedIn's robots.txt disallows the crawlers, and a browsing request from a model hits the same HTTP 999 wall a plain curl does. What works is pointing a model at output a scraper already produced, or calling a scraping API as a tool from inside an agent. The retrieval still runs through a vendor with a proxy pool.
What is the best free LinkedIn profile scraper?
For a zero-cost run, joeyism/linkedin_scraper on GitHub, 4,482 stars, driving Playwright against your own logged-in session. The licence is contested between the README and the repository listing, and the account risk is entirely yours. For a small free allowance without that exposure, Bright Data gives 5,000 records a month free and Scrapingdog gives 200 credits on signup, which is four profiles at 50 credits each.