Scrape LinkedIn without logging in

What actually works without an account, and what hits the wall.

No login, no cookie Public pages only Free to try
tldr.txt
a signed-out visitor can see name, headline, jobs, schools, location
CrustAPI reads only those public pages and hands you clean JSON
no LinkedIn login, no session cookie, so there is no account to get limited
a public profile came back in about a second (796ms server time, tested)
email is behind the login wall, so no method here returns it
→ the catch: DIY works for a handful of pages, then LinkedIn walls you

I am Dawson Young, the founder of CrustAPI. I ran every call on this page against our live endpoint on July 15, 2026, pasted the real timings and JSON below, and where DIY is genuinely fine, I say so.

THE HARD PART

Why doing it yourself breaks

Fetching one public profile with curl works. Fetching the fiftieth in a row usually does not. Here is what goes wrong, in the order most people hit it.

The auth wall after a few views

Browse a handful of profiles signed out and LinkedIn starts redirecting you to a sign-in or sign-up screen. The page you wanted stops loading and you get a login prompt instead.

IP blocks at any volume

Run the requests from one address and LinkedIn flags and throttles it at any real volume, so you end up spending your time on blocks and retries instead of on the data.

The HTML keeps moving

LinkedIn changes its public markup constantly. The selectors you wrote work until a layout change ships, then your parser returns nulls and you are debugging again.

You own it forever

A scraper is not a one-time build. LinkedIn changes, blocks evolve, and every fix lands back on you. You end up running a scraping system instead of building your own product.

THE LINE THAT MATTERS

What's public without a login?

A logged-out visitor can still see the core of a public profile. The table below is the actual field split from a live call. The left column is what came back; the right is what stays behind the sign-in gate.

Public, logged outLogin-gated
Name and headlineYesVisible signed out
Current title and companyYesVisible signed out
Location, follower countYesVisible signed out
Full work history with datesYesVisible signed out
Education and datesYesVisible signed out
Skills, languages, awardsWhen the profile lists themSome detail gated
Photo, banner, public URLYesVisible signed out
Email addressNot on the public pageBehind login
Who viewed you, private connectionsNot publicBehind login

Field split from a live type=profile call on July 15, 2026. Skills can be empty on some profiles, so we do not promise they are always there.

ONE SMALL DETAIL

Signed out, LinkedIn hands guest visitors a placeholder connection value of 8. We drop that and report the real public number instead. On the test profile that was a capped connectionsCount: 500, not the fake 8. Some tools pass the 8 straight through, which is a quick way to spot a thin scrape.

THE WORKING WAY

The no-cookie way

Instead of building and babysitting your own scraper, point one GET request at CrustAPI with a public profile URL. No LinkedIn login, no session cookie, no browser extension. Here is the exact call I ran.

# one public profile, by its logged-out URL curl "https://crustapi.com/v1/linkedin?type=profile&url=https://www.linkedin.com/in/satyanadella" \ -H "x-api-key: YOUR_KEY"

The response is clean JSON, the same shape every time. This is the real body from July 15, 2026, trimmed for length where arrays repeat.

{ "type": "profile", "url": "https://www.linkedin.com/in/satyanadella", "tookMs": 796, "profile": { "name": "Satya Nadella", "headline": "Chairman and CEO at Microsoft", "currentTitle": "Chairman and CEO", "currentCompany": "Microsoft", "location": "Redmond, Washington, United States, US", "followerCount": 12068716, "connectionsCount": 500, "publicIdentifier": "satyanadella", "experience": [ /* 5 roles: position, companyName, companyLinkedinUrl, location, startDate, endDate */ ], "education": [ /* 3 schools: schoolName, schoolLinkedinUrl, dates */ ], "skills": [ /* present when the profile lists them */ ], "honorsAndAwards": [ ], "languages": [ ] // no email field: it is not on the public page } }

Five profile surfaces run the same way: type=profile, type=company, type=posts, type=jobs, and type=search for people by keyword (beta). You are billed the applicable price per successful call; a private or empty result returns a normal 200 and costs nothing. Full field docs are at the LinkedIn docs.

Try it on a real profile, free
Free to try. No card, no LinkedIn account.
Try for free
WHOSE ACCOUNT IS ON THE LINE

No cookie vs cookie scrapers

This is the split that matters most, and it is easy to miss. A lot of popular LinkedIn tools do not scrape public pages. They run through a real LinkedIn login, which means the account carrying the risk is yours.

Cookie tools use your login

PhantomBuster asks for your LinkedIn session cookie and runs through your account, with a cap around 1,500 profiles a day. Unipile connects your own accounts and the data rides your real sessions. Lix connects through an account too. If LinkedIn flags that activity, the account that gets restricted is yours.

No cookie means no account to lose

CrustAPI reads only public, logged-out pages. There is no LinkedIn login in the loop and no session cookie of yours anywhere. Nothing of yours can get limited, because there is nothing of yours involved. That is the whole point of the no-cookie method.

WHERE COOKIE TOOLS WIN

To be fair, a connected-account tool can reach things the public page never shows: your own network, private connection details, or actions like sending connection requests. If you need signed-in-only data and accept the risk to your own account, a cookie tool is the right pick. The no-cookie method is for public data at volume with no account on the line.

MEASURED JULY 15, 2026

Speed, measured

Server processing time from live calls, reported as tookMs. Wall-clock is a bit higher because it includes the network hop to you. Profiles and companies come back in about a second.

Profile (1 person)
server796ms · wall 1.38s
Company (1 page)
server793ms · wall 1.00s
Posts (16 returned)
server1.45s · wall 1.80s
Jobs (10 returned)
server486ms · wall 0.77s

People search (beta) is the slower surface, usually about 1 to 3 seconds, because it runs a discovery pass and returns name, headline, location, and URL. Add enrich=true and each person comes back as a full profile in the same call.

Start with the method, because the method is what the cases turn on. CrustAPI reads public pages, signed out, with no accounts, no fake profiles, and no CAPTCHA solving. It only reads what any signed-out visitor sees.

In hiQ Labs v. LinkedIn, the Ninth Circuit held in 2019, and reaffirmed on April 18, 2022, that scraping data from a public website is not access "without authorization" under the Computer Fraud and Abuse Act.

The caveat: hiQ ultimately lost on contract, not on hacking. A court found it had breached the User Agreement it had signed, including by using fake accounts, and it settled for $500,000 and shut down.

Two more recent rulings point the same way for logged-off data. On January 23, 2024, in Meta v. Bright Data, a federal court ruled that the Facebook and Instagram terms do not bar logged-off scraping of public data.

On May 9, 2024, in X Corp. v. Bright Data, the court dismissed X's claims, finding attempts to block copying of public data preempted by federal copyright law.

The way to hold all of this in your head is the gate. Reading a public, logged-out page walks through an open door; logging in, or faking accounts to log in, crosses an authorization gate. That is why the account-based approach carries risk that public reading does not.

READ THIS BEFORE YOU QUOTE ANY OF THE ABOVE

The Bright Data rulings are district-court decisions, so they are persuasive, not nationwide binding precedent, and the X ruling was on a motion to dismiss. They turned on those platforms' specific terms. The fair way to say it is that logged-out, public-only collection has repeatedly defeated computer-fraud and contract claims, not that scraping is legal or that the law is settled. This is background, not legal advice; check your own use with a lawyer.

WHAT IT COSTS

How much does LinkedIn scraping cost?

You can run real work on the free tier before you pay anything, and paid funds do not expire on you.

FREE TO TRY
$0 to start

No card. Resets each month; it does not stack. Enough to test on real profiles for real.

WHEN YOU SCALE
$1.96 per 1k, and down

LinkedIn Person, Company and Posts cost $6.00 per 1,000 successful requests at standard prices, down to $1.50 for the largest deposit. Work email lookup is included. People with Full profiles uses that rate per full profile returned. Empty and inaccessible results are free. Paid funds never expire.

DepositGoogle Search / 1,000 requestsMaps / 1,000 businessesLinkedIn reads / 1,000 requestsPeople, Jobs, Refresh / 1,000 units
$10+$1.00$1.96$6.00$1.96
$149+$0.76$1.49$4.50$1.49
$549+$0.56$1.10$3.30$1.10
$1,999+$0.41$0.80$2.45$0.80
$6,500+$0.33$0.65$1.95$0.65
$27,500+$0.28$0.55$1.65$0.55
$50,000+$0.26$0.50$1.50$0.50
$100,000+$0.20$0.40$1.50$0.40

Every eligible account gets $6 of free usage monthly. Each deposit keeps its prices until spent; paid funds never expire. People and Jobs bill per successful search, Refresh per accessible profile. Full profiles in People use the read rate per full profile. See all billing details.

Larger deposits unlock lower endpoint prices. Each deposit keeps its prices until spent. See the full deposit table on the pricing page. Prices in USD, ex-tax.

Pay only for results at the applicable endpoint rate. Google Search bills per successful request and Maps per business returned. LinkedIn reads bill per successful request, People and Jobs per successful search, Refresh per accessible profile, and enriched People per full profile. Empty and failed requests are free. The pricing page lists every rate.

WHO IT'S FOR

Who uses this?

START IN THREE STEPS

How do you get started?

  1. Sign up. a free plan, no card, no LinkedIn account to connect.
  2. Copy a public profile URL, the linkedin.com/in/... kind, and pass it as url to crustapi.com/v1/linkedin?type=profile with your key in x-api-key.
  3. Read the JSON. Then swap in type=company, type=posts, type=jobs, or type=search (beta) as you need them.
BEFORE YOU ASK

Common questions

You can read public, logged-out profile pages without an account, and that is what CrustAPI does. The catch with doing it yourself is that LinkedIn walls signed-out browsing after a handful of profile views and throttles by IP at volume. CrustAPI handles the public pages and hands you clean JSON, with no LinkedIn login and no session cookie in the loop.

From a public profile you can get name, headline, current title and company, location, follower count, the public connection count, full work history with dates, education with dates, photo, banner, and the public URL. Skills, languages, and awards come through when the profile lists them. Email is not on the public page, so no logged-out method returns it, including ours.

No. CrustAPI does not use any LinkedIn login or session cookie. It reads only public, logged-out pages. That is different from tools like PhantomBuster, Unipile, or Lix, which run through your own LinkedIn account and can put that account at risk.

There is no account to ban, because the no-cookie method never logs in. Nothing of yours is in the loop, so nothing of yours can be restricted. Cookie-based tools are different: they run through your real session, so the account carrying the risk is yours.

Logged-out, public-only collection has repeatedly defeated computer-fraud and contract claims, and that is the lane this method sits in. In hiQ v. LinkedIn the Ninth Circuit held that scraping a public website is not access without authorization under the CFAA, and district courts in Meta v. Bright Data and X Corp. v. Bright Data ruled for the scraper on those platforms' terms. Those rulings turned on specific terms, so this is not the same as scraping being settled law. This is background, not legal advice; check your own use with a lawyer.

On July 15, 2026 a public profile returned in 796ms of server time, with wall-clock around 1.38 seconds including the network hop. A company page was similar at 793ms. Jobs came back in 486ms and posts in about 1.45 seconds. People search (beta) is slower, usually about 1 to 3 seconds, because it runs a discovery pass first.

LinkedIn Person, Company and Posts cost $6.00 per 1,000 successful requests at standard prices, down to $1.50 for the largest deposit. Work email lookup is included. People with Full profiles uses that rate per full profile returned. Empty and inaccessible results are free. Paid funds never expire.

No. A signed-out LinkedIn profile does not show an email, so the endpoint does not return one. If a tool claims a work email from a public profile alone, treat that claim with caution.

Five: type=profile for a person by URL, type=company for a company page, type=posts for recent public posts, type=jobs for a keyword job search or a single job, and type=search for people by keyword (beta). Add enrich=true on people search to get each person's full profile in the same call.

# the whole thing, one line, no cookie curl "https://crustapi.com/v1/linkedin?type=profile&url=https://www.linkedin.com/in/USERNAME" -H "x-api-key: YOUR_KEY"
WORKS WITH YOUR STACK

The LinkedIn data API, no login

Point one GET request at a public profile and get clean JSON back. No cookie, no account, no proxy pool to babysit. Test it free and see the receipt for yourself.

Try for free
No credit card required