To scrape LinkedIn, pick the kind of page you need (company pages, job ads, posts or the Ad Library), give a scraper the URLs or search terms, and save what each public page shows. The fastest way is a set of ready-made scrapers that read LinkedIn's public, logged-out pages in the cloud, so you never put your own LinkedIn account at risk.
This guide covers the whole LinkedIn family on Scrape.ly and goes deep on company data, with a real run from 22 October 2026 on Google, Notion and Stripe: the exact input, the output, the log and the cost. It ends with the legal side, including what the hiQ v. LinkedIn case did and didn't decide.
Which LinkedIn scraping tool fits which data
LinkedIn is several data sources in one. Each scraper below reads one kind of public page and charges per saved result:
| What you want | Scraper | Price per 1,000 | Personal data? |
|---|---|---|---|
| Job ads by keyword, location or company | LinkedIn Jobs Scraper | $1.50 jobs | Job posters are people: drop them |
| Company pages by URL or name | LinkedIn Company Details | $2.00 companies | No, business data |
| Companies by keyword | LinkedIn Company Search | $2.00 companies | No, business data |
| Posts from a post link, company page or profile | LinkedIn Post Scraper | $1.00 posts | Yes, when the author is a person |
| Ads from the LinkedIn Ad Library | LinkedIn Ad Library Scraper | $1.00 ads | Mostly business |
| People by title, company, school or location | LinkedIn People Search | $3.00 profiles found | Yes, always |
| Full profiles by URL or public ID | LinkedIn Profile Scraper | see Store page | Yes, always |
Company, job and ad data is about businesses. Profiles and people search are about individuals, which changes the rules (see "Profiles and people search" below). None of these scrapers logs in, and none can see private posts, connections or anything behind LinkedIn's sign-in wall.
What data you can get from a LinkedIn company page
A public company page shows the overview, the size, the offices and related pages. The LinkedIn Company Details scraper saves one row per company with these fields:
| Field | What it holds |
|---|---|
name, universalName, linkedinUrl, id | Name, URL slug, page URL and LinkedIn's company ID |
tagline, description | Tagline and the "About" text |
website, callToActionUrl, phone | Website and contact fields, when the page publishes them |
industry, industries | Industry label and list |
headquarters | Headquarters city and region |
employeeCount, employeeCountRange | The employee count on the page and the declared company size |
followerCount | Page followers |
companyType, foundedOn | Public company, privately held and so on; founding year |
specialities | Specialties the company lists |
locations | Every office address on the page, with a headquarters flag |
similarOrganizations, affiliatedPages | Similar companies and showcase or regional pages |
jobSearchUrl | A link to the company's open jobs on LinkedIn |
Fields stay empty when the page doesn't show them. Employee lists, employee-by-location statistics and verified-page flags are not on the public page, so they are not in the data.
How to scrape LinkedIn company pages without code
- Open the LinkedIn Company Details scraper in the Scrape.ly Store.
- Pick a ready-made input. We used the preset Large companies only, 3 results. "Try this input" opens it in the console.
- Replace the URLs with the companies you want. This is the exact input of our run:
{
"companies": [
"https://www.linkedin.com/company/google",
"https://www.linkedin.com/company/notionhq",
"https://www.linkedin.com/company/stripe"
],
"minEmployees": 1000,
"minFollowers": 100000,
"maxResults": 3,
"proxyConfiguration": { "useScrapelyProxy": true, "scrapelyProxyGroups": ["DATACENTER"] }
}- Start the run. Each company is saved as soon as its page is read.
- Export the dataset as JSON, CSV or Excel.
The fields that matter most:
companies: public company URLs such ashttps://www.linkedin.com/company/stripe/. They are read first.searches: company names, if you don't have URLs. Each name returns the best public match; the Notion, Figma and Datadog by name preset shows how.maxResults: how many companies to return in total.minEmployees,maxEmployees,minFollowers,maxFollowers: drop companies outside a size or audience range. A company with a missing count is kept.
How to scrape LinkedIn with the API
Create an API token in the dashboard under Settings → API & Integrations and export it as SCRAPELY_TOKEN.
Our run took 6.6 seconds, so the synchronous endpoint works: it starts the run, waits up to 45 seconds and returns the companies as a JSON array. Add ?format=csv for CSV.
curl -X POST "https://api.scrape.ly/v2/actors/cornerledger~linkedin-company-details/run-sync-get-dataset-items" \
-H "Authorization: Bearer $SCRAPELY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companies": ["https://www.linkedin.com/company/google", "https://www.linkedin.com/company/notionhq", "https://www.linkedin.com/company/stripe"], "minEmployees": 1000, "minFollowers": 100000, "maxResults": 3}'A long list of company names runs slower than URLs, because names are looked up one at a time. If a run passes 45 seconds, the call answers 408 while the run keeps going. Don't call it again; use a client, which waits as long as it takes.
Python (pip install scrapely-client-python):
import os
from scrapely_client import ScrapelyClient
client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")
run = client.actor("cornerledger/linkedin-company-details").call(
run_input={
"companies": [
"https://www.linkedin.com/company/google",
"https://www.linkedin.com/company/notionhq",
"https://www.linkedin.com/company/stripe",
],
"maxResults": 3,
}
)
print(run.status) # SUCCEEDED, FAILED, ABORTED or TIMED-OUT
for company in client.dataset(run.default_dataset_id).iterate_items():
print(company["name"], company.get("industry"), company.get("followerCount"), len(company.get("locations", [])))Node.js (npm install scrapely-client):
import { ScrapelyClient } from 'scrapely-client';
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });
const run = await client.actor('cornerledger/linkedin-company-details').call({
companies: ['https://www.linkedin.com/company/stripe'],
maxResults: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((c) => [c.name, c.headquarters, c.employeeCountRange]));For AI agents, add the hosted MCP server to Cursor (~/.cursor/mcp.json):
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}In Claude Code, run claude mcp add --transport http scrapely https://api.scrape.ly/mcp and sign in with /mcp. Then ask: "Use scrapely to run cornerledger/linkedin-company-details for Stripe, Notion and Figma and give me a table of website, industry, headquarters and followers." See the MCP docs for every client.
A real run: Google, Notion and Stripe
We ran the "Large companies only" preset on 22 October 2026. It returned 3 companies in 6.6 seconds and was charged $0.0062.
| Company | Industry | Headquarters | Employee count | Declared size | Followers | Type | Founded |
|---|---|---|---|---|---|---|---|
| Notion | Software Development | San Francisco, California | 7,211 | 501–1,000 | 1,132,188 | Privately Held | 2016 |
| Stripe | Technology, Information and Internet | South San Francisco, California | 16,694 | 5,001–10,000 | 1,782,319 | Privately Held | 2010 |
| Software Development | Mountain View, CA | 330,447 | 10,001+ | 42,553,244 | Public Company | not shown |
These are companies, so their public page data is shown as LinkedIn shows it.
Two things in this table are worth knowing before you filter on size. The employee count and the declared size range can be far apart: Notion's page shows 7,211 employees but a 501–1,000 size range. The minEmployees filter uses the employee count, which is why Notion passed the 1,000-employee filter. Pick the field that matches your question. Also, fields are only as complete as the page: Google's page has no tagline and no founding year, and its website field is a goo.gle short link.
The records go well past the table. Google's had 48 office addresses, 62 affiliated pages and 13 specialties; Stripe's had 14 offices and Notion's 6. Each company came with 10 similar organizations, which is a quick way to grow a target list.
The log, without the platform's start-up lines:
2026-10-22T18:25:40.855Z [Scrapely] Container started (setup 1.6 s)
2026-10-22T18:25:42.482Z [scrapely.actor] INFO [Scrapely] Initializing API storage for run 6d60a9c1d50d4b5ba
2026-10-22T18:25:42.667Z [scrapely.proxy_configuration] INFO Platform proxy access check succeeded.
2026-10-22T18:25:44.931Z [scrapely.actor] INFO Finished: 3 saved, 0 not found, 0 filtered out, 0 login walls, 0 failed. datacenter_bytes=1219247 residential_bytes=0
2026-10-22T18:25:44.931Z [scrapely.actor] INFO [Status message]: 3 companies saved
2026-10-22T18:25:45.931Z [Scrapely] Container state: status=exited exitCode=0 oomKilled=falseZero login walls and 1.2 MB of datacenter traffic for three full company profiles: no residential proxy was needed.
What it costs
The LinkedIn Company Details scraper charges $0.002 per company saved, which is $2.00 per 1,000 companies. A run also pays for the platform resources it uses.
For our run: 3 companies × $0.002 = $0.006 in company fees. The total was $0.0062, because the run also used about $0.0001 of compute and $0.0001 of datacenter proxy traffic. Enriching a CRM list of 1,000 companies costs $2.00 in company fees plus usage of the same kind. URLs that return no company are not charged.
The free plan includes $5 of usage every month with no credit card, and you can set a maximum charge for any run.
Scraping LinkedIn jobs, posts and ads
- Jobs. The LinkedIn Jobs Scraper returns titles, companies, locations, posting dates, salaries and full descriptions for a keyword and location. Our LinkedIn jobs tutorial walks through a real run of data engineer jobs in Berlin, and the LinkedIn Jobs API page has the endpoints.
- Posts. The LinkedIn Post Scraper reads a post link, a company page or a profile. Start with a company: the Google company posts preset returns five posts.
- Ads. The LinkedIn Ad Library Scraper collects ad copy, creatives, call to action, payer, run dates, impressions and targeting by company, keyword or payer. The HubSpot ads from the last 30 days preset is a ready competitor check.
- Company search. When you don't know the companies yet, the LinkedIn Company Search finds them by keyword, then you feed the URLs into Company Details.
Profiles and people search: personal data
LinkedIn profiles describe people: name, headline, location, work history, education. Under the GDPR and the CCPA that is personal data, even when the profile is public. Scraping it is processing personal data, and the law asks you for a lawful basis, a clear purpose, data minimization, security and, under the GDPR, telling people you hold their data. Using scraped profiles for sales outreach can also fall under marketing and e-privacy rules.
That's why we don't show a sample of people here. If you use the LinkedIn People Search or the LinkedIn Profile Scraper, collect the fewest fields you need, keep them for the shortest time, document why you have them, and get legal advice before you build a product or a campaign on them.
What to watch out for
- Login walls. LinkedIn can answer a logged-out visitor with a sign-in wall instead of the page. The company scraper counts these in its log ("0 login walls" in our run), and a URL that returns no company is not charged. You never hand over your own LinkedIn account or cookies.
- Rate limits on name lookups. Company names resolve through LinkedIn's public guest endpoints one at a time, which sometimes answer HTTP 429. The scraper retries, so name runs are slower than URL runs. Use URLs for big lists.
- Names can miss. A company without public job posts can be missed when its URL slug isn't the obvious name. Check the
universalNameof each match. - Counts move. Follower and employee counts change as LinkedIn updates the page. Store the run date with every row if you track growth over time.
- Proxies. Datacenter proxies are the default and were enough for our run. Switch the proxy group to residential if a page only loads from a residential IP.
- Invalid URLs. A bad URL is skipped and the rest of the run continues.
Is it legal to scrape LinkedIn?
The best-known case is hiQ Labs v. LinkedIn. In April 2022, on remand from the Supreme Court, the Ninth Circuit affirmed a preliminary injunction that stopped LinkedIn from blocking hiQ's access to publicly available member profiles. It held that hiQ had raised serious questions about whether LinkedIn could use the Computer Fraud and Abuse Act against scraping of public pages. That was a preliminary ruling, not the end of the case.
Back in the district court, a November 2022 ruling found that hiQ breached LinkedIn's User Agreement, both by scraping and using the data and through contractors who created fake accounts. In December 2022 the parties settled, and the court entered a consent judgment of $500,000 against hiQ with a permanent injunction. The lesson: public data and anti-hacking law is one question, contract terms are another.
LinkedIn's User Agreement (effective 3 November 2025), section 8.2, asks members not to 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." Scrape.ly Store Actors collect only publicly available data that any logged-out visitor can see, and they never log in. Personal data stays regulated either way. This is not legal advice; ask a lawyer about your use case.
Why Scrape.ly for LinkedIn scraping
- No LinkedIn account involved. Every scraper reads public, logged-out pages, so there's no account to get restricted and no cookies to rotate.
- The whole family on one bill. Companies, jobs, posts, ads, company search and people search, each priced per saved result, from $1.00 per 1,000 posts to $3.00 per 1,000 profiles found.
- Exact costs. Our three-company run cost $0.0062, and a maximum charge per run caps any job before it starts.
- Ready for pipelines and agents. JSON, CSV or Excel exports, a REST API, Python and Node clients, schedules, and an MCP server your AI agent can call. The LinkedIn company API page has the endpoints in one place.
FAQ
How do I scrape LinkedIn without getting banned?
Don't scrape with your own logged-in account. Scrape.ly's LinkedIn scrapers read public pages without logging in and route requests through Scrape.ly proxies, so your personal or company account is never involved.
Can I scrape LinkedIn data for free?
Scrape.ly's free plan includes $5 of usage every month with no credit card. At $0.002 per company, our three-company run cost under one cent, so the credit covers a lot of company lookups.
What is the best LinkedIn scraping tool for company data?
For company pages, use LinkedIn Company Details with URLs, or with names when you don't have URLs. To find companies first, run LinkedIn Company Search by keyword and pass its URLs on.
Can I scrape LinkedIn profiles?
Technically yes, with the People Search and Profile scrapers, but profiles are personal data under the GDPR and the CCPA. You need a lawful basis and a clear purpose, and you should collect as little as possible.
Can I export LinkedIn data to Excel?
Yes. Every run's dataset exports as Excel, CSV or JSON from the console, or through the API with ?format=xlsx. Nested fields such as locations become separate columns.




