Blog/Sales & enrichment
5 min read

Scrape LinkedIn Without Getting Banned: Keep Your Account Out

Account bans come from tools that drive your logged-in session. Read public LinkedIn profiles by URL through endpoints that never touch your account.

Scrape LinkedIn Without Getting Banned: Keep Your Account Out

Read a public LinkedIn profile from its URL without logging in as you. Paste this into your agent:

Set up https://monid.ai/SKILL.md, and then use Monid to read the public LinkedIn profile at https://www.linkedin.com/in/williamhgates/ without any login or cookie, and give me the name, headline, current role and the titles of the latest posts.

One prompt reads a profile, no session involved. 1 min setup · 20-45 hrs saved.

You want LinkedIn data, and you do not want to lose the account you network from. The worry is fair, because "scraping LinkedIn" covers two very different things: tools that act as you inside a logged-in session, and calls that read a public page from somebody else's servers. This guide separates the two, shows how to get a profile with no login and no cookie, and lists what that route cannot give you. We ran it live on 2026-10-16. It runs through Monid, the OpenRouter for agent tools: one key, one balance, every tool priced per call.

What is the easiest way to scrape LinkedIn without risking your account?

Call a profile endpoint that takes a URL and nothing else, through Monid. Install it once, add a key, and your agent reads a public profile with no cookie, no browser extension and no login of yours anywhere in the request.

  • Pay per call. A profile read is billed on its own, at $0.008 on one endpoint and $0.01 on another (Verified 2026-10-16 on the LinkedIn tools page). Buy calls as you need them: no monthly plan and no minimum top-up. Discovery and inspection are free; only a run bills.
  • One install, every API. The same key and balance read profiles, companies, jobs and posts, and any other tool on Monid. Nothing asks for a LinkedIn password or session, and neither profile endpoint has a field where one could go.
  • Lives inside your agent. Install the CLI, add your key, run the prompt above, and the tools are there whenever your agent needs them, with nothing to keep running. Your agent reads SKILL.md and learns the rest, so setup is about a minute.

At that price, checking 100 profiles costs about $0.80 (Verified 2026-10-16).

What actually gets a LinkedIn account banned when you scrape?

Anything that makes requests as your account. That is the whole model, and everything else follows from it.

A scraper that uses your login is your account, as far as LinkedIn can tell. Browser extensions and desktop tools click through pages while you are signed in, so every request carries your identity. Cloud tools that ask you to paste your session cookie, which is the token your browser holds after login (called li_at), act as you from their own servers, at their own pace, on their own schedule. You hand over the ability to be you and keep every consequence.

LinkedIn's help centre states the rule on its own page. We read it on 2026-10-16: it says LinkedIn does not allow third-party software that scrapes the site or automates activity on it, and it names crawlers, bots and browser plug-ins or extensions. It says members who use such tools risk having their accounts restricted or shut down. The page is about tools used on a member's account, which is the case this guide is built around.

Why does a read-only tool still put the account at risk?

Because the risk follows the identity, not the intent. A tool that only reads pages is still sending a stream of requests attributed to your account. Reading fast, reading in bulk or reading at three in the morning from a data centre looks nothing like you browsing.

What changes when no account is involved?

There is nothing to attribute the request to. A public profile endpoint is a call from a provider's infrastructure for a page that does not need a login to view. Your account does not sign anything, so nothing on it is exposed to that call. That is a statement about your account's safety only. It does not make an activity permitted, which the last sections come back to.

The corollary is the habit that matters most: never paste your session cookie into anything, and treat a tool that asks for it as a tool that will act as you. The same rule covers extensions that ask to run on your logged-in tab.

📖 See also The Best LinkedIn Scraper API in 2026

How do you scrape a LinkedIn profile without logging in?

Pass the profile URL to an endpoint that reads public pages. Both endpoints below take url and nothing else.

For agents

Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:

set up https://monid.ai/SKILL.md

It learns the whole discover, inspect, run workflow itself. More in the agent quickstart.

For humans

npm install -g @monid-ai/cli
monid keys add -k <your-api-key> -l main

Read one profile

monid run -p tikhub -e /api/v1/linkedin/web_v2/get_user_profile --query '{"url": "https://www.linkedin.com/in/<slug>/"}'

This is the tikhub profile lookup. It returns the profile plus the person's recent posts and activity. A second route with a different field set:

monid run -p ploid -e /linkedin/profile --query '{"url": "https://www.linkedin.com/in/<slug>/"}'

Its documented summary is "Read one public LinkedIn profile without cookies or proxies", and its input schema allows only url. It also accepts a bare slug or an @handle.

Search when you do not have the URL

People search is a separate endpoint family, apify/harvestapi/linkedin-profile-search-by-name and ploid/linkedin/search. We inspected both on 2026-10-16 and did not run them. The first takes firstName, lastName and filters, and its schema has no field for a cookie. Both bill per result, so set the limit on purpose before a batch. One integration for LinkedIn profiles and emails shows name search used in a worked flow.

Or hand the whole job to an agent

Give this to your agent

$Set up https://monid.ai/SKILL.md, and then use Monid to read the public LinkedIn profiles at these 50 URLs and tell me which ones have posted in the last 30 days.

Neither profile call asks for anything from your account. The only thing an agent can leak here is a URL.

📖 See also Proxycurl Shut Down: LinkedIn Data Alternatives

Can you scrape LinkedIn yourself with Python and stay safe?

You can write it, but staying safe is the hard part, and it depends on one choice you make on day one.

The usual DIY route is Selenium or Playwright driving a browser. To get past the login wall, the script logs in as you or loads your li_at cookie. From that moment it is an automated session on your account, which is the exact case LinkedIn's help page says puts an account at risk. A throwaway account moves the risk to the throwaway, and a lost account takes your connections and history with it.

The cookie-free alternative is to fetch only what a logged-out visitor sees. That is safer for your account, and then everything else is on you: a proxy pool, retries, a parser for markup that changes, and a repair each time it does. A working version takes hours before the first useful row, and upkeep does not stop.

The Monid route is the choice for anything you will run more than once. The fetch layer and the parser are maintained for you, the output is typed JSON instead of HTML you parse, and the call never involves a login of yours. A profile is $0.008 (Verified 2026-10-16). Free browser extensions and open source scrapers are quicker for one page, but they are built around a person's session, which is the risk this guide is about.

What does a profile read without a session contain?

A lot of the public profile, in a flat typed record. We ran both endpoints against a long-public profile (Bill Gates) on 2026-10-16, so the fields below are what came back.

The tikhub record

{ "id": "williamhgates",
  "name": "Bill Gates",
  "city": "Seattle, Washington, United States",
  "country_code": "US",
  "position": "Chair, Gates Foundation and Founder, Breakthrough Energy",
  "about": "Chair of the Gates Foundation. Founder of Breakthrough Energy. …",
  "posts": [ { "title": "…", "link": "…", "created_at": "2026-10-12T00:00:00.000Z",
               "interaction": "3,73 - 591 Comments", "id": "…" } ],
  "experience": [ { "title": "Co-chair", "company": "Gates Foundation", "start_date": "2000", "end_date": "Present" } ],
  "education": [ { "title": "Harvard University", "start_year": "1973", "end_year": "1975" } ],
  "followers": 40731241, "connections": 8 }

It returned 10 posts, 3 experience entries, 2 education entries, 15 items of recent activity, and two lists of related profiles (10 each, with their links). The url field came back as a country subdomain of linkedin.com, so match on the profile slug, not on the full string.

The ploid record

The second endpoint returned fullName, headline, summary, location, countryCode, followerCount, connectionCount, currentPosition, a positions array with dates, education, and the flags isOpenToWork and isPremium. The fields industry, connectionDegree and coverPictureUrl were present and null. There are no posts in this one, so the two routes are complementary, not duplicates.

What you can build with it

  • A role check before outreach. Confirm the person still holds the job before you write, from position or currentPosition. Run the check before every send, not once per list.
  • A recent-activity filter. Keep the people who have posted in the last 30 days, using created_at on the posts.
  • A lead sheet that never touches your inbox limits. Collect through endpoints, then send from your own account by hand, at your own pace.

What goes wrong when you read LinkedIn profiles without an account?

Four things showed up in two calls. None of them involves your account.

Why do the same profile's counts disagree between endpoints?

The two endpoints returned different follower counts for the same profile: 40,731,241 from tikhub and 40,719,122 from ploid, about 14 seconds apart. Each endpoint reads its own copy of the public page at its own moment. Treat a follower count as approximate and never compare counts across providers.

Why does the interaction field look broken?

Because it is a display string, not a number. The interaction value on each post came back like 3,73 - 591 Comments, where the first part looks truncated. Parse the comment count if you need it and ignore the reactions part, or pull the reaction count from another source.

Why is connections 8 for a profile with 40 million followers?

Because the public page shows what it shows. Both endpoints returned connections: 8 / connectionCount: 8 for this profile. Do not use the connection count as a size signal; use followers for broadcast reach and the number of posts for activity.

How slow is it, and what does a list cost?

The speeds differ a lot. ploid returned in the first response in about 1.3 seconds. tikhub first showed a running status and finished after about 14.6 seconds, so poll for the result rather than assume it arrives in the first reply. The two calls billed $0.008 and $0.01 (Verified 2026-10-16), $0.018 together. A hundred profiles through tikhub is about $0.80 and a few minutes if you run several at once.

Which endpoint should I use for which job?

EndpointWhat it doesInputBillingPrice (Verified 2026-10-16)
tikhub/api/v1/linkedin/web_v2/get_user_profileOne profile with posts and activityurlPer call$0.008
ploid/linkedin/profileOne profile with full position history and flagsurl, slug or handlePer call$0.01
ploid/linkedin/searchPeople by keyword, title, company, schoolfilters, limitPer result$0.01
apify/harvestapi/linkedin-profile-search-by-namePeople by name and filtersfirstName, lastName, filtersPer result$0.01

Prices Verified 2026-10-16 with monid inspect. The first row is the cheapest for a single read, and the second adds a fuller career history. The two search rows were inspected and not run.

One catalogue endpoint deserves a warning. apify/harvestapi/linkedin-job-search has an optional cookie field labelled as your LinkedIn cookies, next to userAgent and proxy. Leave all three empty. The endpoint works without them, and filling the cookie field is the one place in the catalogue where you could hand over a session by accident. For the whole range of LinkedIn endpoints, the full list and its prices are on the LinkedIn tools page and at monid.ai/tools.

When is another route a better fit?

You need data behind the login. Mutual connections, degrees of connection, who viewed your profile and anything limited to signed-in members exist only inside a session. A cookie-free endpoint cannot return them, and a route that does return them is acting as an account.

You need an email address. Profile endpoints return the profile, not a contact address. Email lookup is a separate step against a different source.

You need the rules to say yes. Taking your account out of the request protects the account. It does not turn LinkedIn's rules into permission: the help page we read says third-party scraping is not allowed, whoever's servers do it. Rules also differ by country and by use, and personal data stays personal data once you hold it. Check the rules that apply to you before you build; Is web scraping legal lays out the practical options.

You need guaranteed completeness. A public profile shows what the person chose to share. An empty about is a normal answer, so check the fields you depend on, not that the call returned.

And the disclosure: we resell the endpoints above. The most useful thing in this post is free and holds whoever you buy from: keep your session cookie out of every tool, and do your own sending by hand.

Conclusion

The way to scrape LinkedIn without risking your account is to keep the account out of the request: read public profiles by URL through endpoints with no login, one call each through Monid, at $0.008 or $0.01 a call (Verified 2026-10-16). One key and one balance cover everything else, setup takes about a minute, and the tools are ready inside your agent whenever you need them.

Two habits matter more than the endpoint you pick. Never paste a session cookie into a tool, and never leave a cookie field filled, including the optional one on the job search endpoint. And keep outreach separate from collection: collect through endpoints, send from your own account yourself.

How we estimated the time saved: building and running your own session-safe LinkedIn collector is roughly 12 to 25 hours for fetching, proxies and parsers, plus 8 to 20 hours for the first month of upkeep as the page changes. That is 20 to 45 hours. The 1 minute is the install, key and first call once you already have a Monid key.

Free next step: run monid inspect -p ploid -e /linkedin/profile, read the input schema to see that only url is accepted, then make one call on a public profile and read the fields.

FAQ

Can you scrape LinkedIn without logging in?

Yes, for public profiles: endpoints such as the tikhub and ploid profile lookups on Monid take a profile URL and return the public record with no login or cookie. They cannot return anything that exists only for signed-in members.

Does LinkedIn allow scraping?

LinkedIn's help centre says it does not allow third-party software that scrapes the site or automates activity, and that members who use such tools risk restriction of their account. A route that keeps your account out of the request protects the account, and the rules still apply to the activity, so check the rules that apply to you.

Is it safe to give a scraper my li_at cookie?

No. The cookie is your logged-in session, so anything that holds it can act as you from its own servers. Use endpoints that take only a URL, and treat any tool that asks for the cookie as one that will act as your account.

Is there a free way to scrape LinkedIn profiles?

Free browser extensions and open source scripts exist, and they work through your own login, which is the risk this guide describes. Through Monid a profile read is $0.008 (Verified 2026-10-16), with no monthly plan and no minimum, and discovery and inspection cost nothing.

Which endpoint has a cookie field I should leave empty?

The LinkedIn job search from apify/harvestapi has an optional cookie field, plus userAgent and proxy. Leave them empty. The profile endpoints in this guide have no such field.

Published September 2026.

scrape linkedin without getting bannedlinkedin scraping banli_at cookiescrape linkedin without loginlinkedin scraper