LinkedIn Companies Scraper - Company Size, Followers & HQ avatar

LinkedIn Companies Scraper - Company Size, Followers & HQ

Pricing

from $0.87 / 1,000 public company profiles

Go to Apify Store
LinkedIn Companies Scraper - Company Size, Followers & HQ

LinkedIn Companies Scraper - Company Size, Followers & HQ

LinkedIn companies scraper for public company pages from their URLs, with no login or cookies. Each row holds the company name, About text, follower count, employee count, headquarters address, website and logo. $0.90 per 1,000 companies.

Pricing

from $0.87 / 1,000 public company profiles

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

17 hours ago

Last modified

Security

Limited permissions

Share

LinkedIn companies scraper for company page URLs or names, what each public page publishes: the company name, the About text, industry, size band, specialties, follower count, employee count, the headquarters address broken into parts, office locations, the website it links to and the logo. No account, no cookie, nothing to paste in.

The fields are the ones a signed-out visitor can see, and no more: no people, no employee directory and no funding on the row. And website is the first link the page lists, which is not always the company's main domain.

InputPublic /company/ URLs or page names, or exact company names
OutputOne row per company: name, About text, industry, size, specialties, followers, employee count, headquarters, offices, website, logo
Ceiling1,000 companies per run
Account neededNone
Price$0.90 per 1,000 companies on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 5,500

🔍 What LinkedIn Companies Scraper does

You bring the companies. This fills in the page behind each one, one row per company. The follower count is read off the page's own line, the one that reads "N followers on LinkedIn".

The company described on the page has to match the slug you asked for before a row is written. That check is there because company URLs get renamed, and without it you would get the new company's numbers filed under the old name.

Names work the same way, strictly. For each name it tries at most two page addresses made from it (Stripe, Inc. tries stripe-inc, then stripe) and keeps a page only when the page's own name is the name you gave, case, punctuation and a closing Inc, Ltd, LLC or GmbH aside. "Delta" never becomes Delta Air Lines.

A field the page does not publish comes back null. Nothing is filled in from elsewhere.

📋 What data you get from each LinkedIn company page

What you getField
The company page link and its slugcompanyUrl, companySlug
Company namename
The About textdescription
Industry, size band and company typeindustry, companySize, companyType
Specialties, as a listspecialties
Year founded and tagline, when the page shows themfoundedYear, tagline
Followers on LinkedInfollowerCount
LinkedIn's employee figureemployeeCount
Headquarters, as one line, as an object and as separate fieldsheadquarters, address, hqStreet, hqCity, hqRegion, hqPostalCode, hqCountry
Every office the page listsofficeLocations
The first outbound link the page listswebsite
The logologoUrl
The name you asked for, on rows found by nameinputName
When the row was readretrievedAt

▶️ How to scrape LinkedIn company pages

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

Run it with nothing in the input and you get one labelled sample row, free.

💰 How much does it cost to scrape LinkedIn company pages?

$0.90 per 1,000 companies on the Free plan. Paid plans pay a little less: $0.89 on Starter, $0.88 on Scale and $0.87 on Business. On the free plan, the $5 Apify gives you each month covers about 5,500 companies.

One charge per company row. Sample rows and diagnostic rows are never charged, a name with no exact match costs nothing, and a company you list twice is billed once because it is only read once. A page that publishes no follower or employee count still counts as a company row and is still charged: you paid for the lookup, and the answer is that the page does not say.

📥 What you give it

{
"companyUrls": [
"https://www.linkedin.com/company/microsoft/",
"apify"
],
"companyNames": ["Stripe, Inc."],
"maxCompanies": 10
}
FieldDefaultWhat it is
companyUrlsnoneUp to 1,000 public /company/ URLs, or just the page name from the URL (apify). Country addresses like ca.linkedin.com are normalised to www. Numeric company ids are not supported. The form opens with one example filled in.
companyNamesnoneUp to 1,000 company names, matched exactly as described above.
maxCompanies101 to 1,000. How many companies the run reads, URLs first, then names.
maxConcurrency31 to 5. How many pages are read at the same time.
requestTimeoutSecs205 to 60 seconds. How long to wait for one page.

Set maxCompanies to match your list. It starts at 10. Paste 50 URLs and leave it and you get 10 rows, plus a free OVER_MAX_COMPANIES row for each of the other 40.

A long list needs a longer run. The run ends at the timeout on the actor's Settings tab, 180 seconds unless you raise it, which is room for about 60 companies. It stops reading 30 seconds before the end, keeps what it found, and adds a free TIME_LIMIT row listing what it did not get to.

📤 What you get back

A real row from a real run, with one internal field left out. The About text, the logo link and the lists are long, so they are cut short (Microsoft lists 23 specialties and 45 offices):

{
"ok": true,
"_sample": false,
"sourceType": "public_company_profile",
"companyUrl": "https://www.linkedin.com/company/microsoft",
"companySlug": "microsoft",
"name": "Microsoft",
"description": "Every company has a mission. What's ours? ...",
"followerCount": 29306405,
"employeeCount": 231136,
"headquarters": "1 Microsoft Way, Redmond, Washington, 98052, US",
"address": {
"type": "PostalAddress",
"streetAddress": "1 Microsoft Way",
"addressLocality": "Redmond",
"addressRegion": "Washington",
"postalCode": "98052",
"addressCountry": "US"
},
"website": "https://news.microsoft.com/",
"logoUrl": "https://media.licdn.com/dms/image/v2/D560BAQH32RJQCl3dDQ/company-logo_200_200/...",
"retrievedAt": "2026-10-17T03:30:52.277Z",
"industry": "Software Development",
"companySize": "10,001+ employees",
"companyType": "Public Company",
"specialties": ["Business Software", "Developer Tools", "Home & Educational Software", "Tablets"],
"foundedYear": null,
"tagline": null,
"hqStreet": "1 Microsoft Way",
"hqCity": "Redmond",
"hqRegion": "Washington",
"hqPostalCode": "98052",
"hqCountry": "US",
"officeLocations": [
{ "address": "1 Microsoft Way, Redmond, Washington 98052, US", "primary": true },
{ "address": "1 Denison Street, North Sydney, NSW 2060, AU", "primary": false }
]
}
FieldHow to read it
companySlugThe key to join on across runs.
followerCountA number, or null when the page does not state one.
employeeCountLinkedIn's own figure for staff with a profile, not a headcount from an annual report. null when the page does not publish it.
companySizeThe band as the page writes it, like 10,001+ employees.
specialtiesSplit at the commas the page uses. A line with no comma stays one item.
foundedYear, taglinenull when the page does not show them, which is common.
officeLocationsEach office's address as one line, and primary: true on the one the page tags Primary.
websiteNote the row above: Microsoft's first link is its newsroom, not microsoft.com. Treat it as "a site this company links to", not "the corporate domain".

🧾 Reading the output

Three kinds of row, and only real company rows cost anything.

RowHow to spot itBilled
A companysourceType: "public_company_profile"yes
The sample row_sample: true, only on an empty inputno
A diagnosticok: false and _diagnostic: trueno

There is no charged field on these rows. sourceType is what separates a real company row from a sample or a diagnostic, so filter on it.

CodeWhat it means
BAD_INPUTNot a /company/ URL or page name. Numeric company ids, showcase pages and school pages are refused here. Nothing was requested for it.
NOT_FOUNDNo page at the addresses tried for a name carries exactly that name. tried lists them.
OVER_MAX_COMPANIESNot read, because the run's maxCompanies was reached first. Raise it to read this one.
NO_RESULTSThe page came back without the company details, or they described a different company. A renamed company whose old URL now redirects lands here.
NOT_SERVEDThis company was not served this run. Re-run it later. Runs before 13 October 2026 wrote BLOCKED here.
RATE_LIMITEDLinkedIn limited the run. Try again later. When it keeps happening, the companies not yet read get this row too.
SERVER_ERRORLinkedIn returned an error of its own.
NETWORKThe page did not arrive inside requestTimeoutSecs, or LinkedIn answered with something unusable. A company URL that no longer exists at all shows up here rather than under a "not found" code.
TIME_LIMITThe run reached its time limit first. notRead lists what it did not get to. The run still ends as succeeded, with an amber status message, even when nothing came back at all.

A sample or diagnostic row never fails the run.

💡 What people use it for

  • Putting size, industry and location against a list of target accounts.
  • Turning a spreadsheet of company names into LinkedIn pages, keeping only the exact matches.
  • Checking whether the companies in an old list still have a live page, and under which slug.
  • Watching follower and employee counts move over time by re-running the same list on a schedule.

From a list of accounts to the ones worth a closer look, in two steps:

  1. Run this actor on your list and keep the companies whose industry, employeeCount and hqCountry fit.
  2. Put their companyUrl values into LinkedIn Company Posts Scraper to see what each one has announced lately.

🚧 What it does not do

  • No people. No employee list and nothing about who works there.
  • No e-mail addresses or phone numbers. For the contact page on a company's own website, use Contact Details Scraper.
  • No posts, jobs, funding or revenue on the row.
  • No lookup by domain, and no loose name search. A name matches exactly or not at all.
  • Slug URLs and page names only. A numeric /company/12345/ URL, a showcase page or a school page is refused as BAD_INPUT.
  • A renamed company reads as NO_RESULTS, because the page that answers is about a different slug than the one you asked for. Look the company up again and use the new URL.
  • A page that fails is not read again in that run, except once after LinkedIn asks the run to slow down.
  • It is not an official LinkedIn tool. Dami's Studio is independent and is not affiliated with or endorsed by LinkedIn, or by any other company named on this page.

🧭 Which LinkedIn scraper do you need?

If you wantUse
Size, industry, followers, headquarters and website for company pagesThis one
Recent posts from a company pageLinkedIn Company Posts Scraper
Job postings by keyword and locationLinkedIn Jobs Scraper
The ads a company runs, from LinkedIn's Ad LibraryLinkedIn Ads Scraper

❓ Questions people ask

Do I need a LinkedIn account to scrape company pages?

No, and there is no cookie field. Nothing to paste, nothing to renew.

Is employeeCount the real headcount?

It is LinkedIn's count of people who list that company on their profile. Close to headcount for most firms, wrong for some, and never an audited figure.

Why is website not the company's main domain?

Because the page lists it that way. It is the first link the page publishes, which is sometimes a newsroom or a careers site.

Why do the numbers differ from what I see on LinkedIn?

LinkedIn rounds big counts on the page ("29M followers") and the row does not. Counts also move day to day. If a field is missing, open the page in a private browser window: what a signed-out visitor sees there is what this actor reads.

Can I call it from code or connect it to an AI assistant?

The API tab has code for Python, JavaScript and the CLI. MCP clients like Claude and ChatGPT use https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/linkedin-companies-scraper; coding assistants can load our skill file. All three bill your Apify account at the same price.

This reads public company pages only, never anything behind a login. Apify's write-up on the legality of web scraping 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 explains it on its own.