Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
LinkedIn Companies Scraper icon

LinkedIn Companies Scraper

Get public LinkedIn company data from company URLs. You get name, description, followers, employee count, HQ, website and logo. $0.90 per 1,000, flat rate.

106 runs on Apify $0.0009 per public company profile ($0.9 / 1,000)
Run this in the cloudRun on Apify →

B2B Leads & Contact Data

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust companyUrls, maxCompanies, requestTimeoutSecs (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0009 per public company profile = $0.9 per 1,000

You are charged forWhenPrice
Public company profileOne successfully parsed public LinkedIn company profile. Samples and diagnostics are free.$0.0009

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-04, and they are what you are actually charged.

Inputs

FieldWhat it doesType
companyUrlsPublic URLs in the form https://www.linkedin.com/company/company-slug/. Empty input returns one clearly labeled, uncharged sample row.array
maxCompaniesMaximum valid public company URLs to request. Invalid inputs return free diagnostic rows.integer
requestTimeoutSecsTimeout for one company page request.integer

What you get

A structured dataset — each result includes fields like:

namefollowerCountemployeeCountwebsiteheadquarterscompanyUrltransport

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in B2B Leads & Contact Data

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

YouTube Channel Email Scraper iconYouTube & Creator Tools

YouTube Channel Email Scraper

Find the business emails creators publish in their YouTube channel description, plus their linked site's contact pages. $1.50 per 1,000 channels.

Ready to run — no setup

Domain Inspector iconDeveloper & Research Tools

Domain Inspector

Check many domains at once. Get DNS, WHOIS registrar and expiry, TLS dates, redirects, security headers, robots and tech. $1.50 per 1,000.

Ready to run — no setup

Google Maps Scraper iconMaps & Local Lead Generation

Google Maps Scraper

Scrape Google Maps places and reviews. Business name, category, address, rating, GPS coordinates and place ID. $0.27 per 1,000 rows.

28 use cases

Contact Details Scraper iconB2B Leads & Contact Data

Contact Details Scraper

Get emails, phones and addresses from any list of websites. Also contact forms and 10 social profiles. $1.50 per 1,000 sites, flat rate.

Ready to run — no setup

Email Verifier iconB2B Leads & Contact Data

Email Verifier

Verify emails in bulk: syntax, MX records, disposable domains, role accounts, optional SMTP check. No mail is sent. No API key, no login.

2 use cases

Shopify Store Leads iconB2B Leads & Contact Data

Shopify Store Leads

Check domains for Shopify, then get public emails, phones, socials, currency, theme and tech. $4.50 per 1,000 confirmed stores.

1 use cases

See all B2B Leads & Contact Data →

LinkedIn Companies Scraper: public company page data from the URLs you have

Paste a list of linkedin.com/company/... URLs and get back what each page publishes: the company name, the About text, follower count, employee count, the headquarters address broken into parts, the website it links to and the logo. No account, no cookie, nothing to paste in.

It reads the public version of the page, the one LinkedIn writes for search engines. So the fields are the ones a logged-out visitor can see, and no more: there is no industry tag, no specialties list and no employee directory in here.

InputPublic /company/ URLs
OutputOne row per company
Ceiling100 companies per run
Account neededNone
Price$0.90 per 1,000 companies, flat on every plan

🏢 What LinkedIn Companies Scraper does

You bring the company URLs. This fills in the page behind each one.

A public company page carries a structured block that LinkedIn puts there for search engines: the name, the About text, the employee count, the postal address, the outbound links and the logo. The follower count is read off the page's own description line, the one that reads "N followers on LinkedIn". Each URL becomes one row.

The slug in the structured data 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.

📥 What you give it

{
  "companyUrls": [
    "https://www.linkedin.com/company/microsoft/",
    "https://www.linkedin.com/company/apify/"
  ],
  "maxCompanies": 10
}
FieldDefaultWhat it is
companyUrlsemptyUp to 100 public /company/ URLs. Country subdomains like ca.linkedin.com are normalised to www, and a URL you list twice is fetched once. Leave it empty and you get one labelled sample row, free.
maxCompanies101 to 100. How many of those URLs the run actually fetches.
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 and nothing for the other 40, not even a row saying they were skipped. The same goes for a duplicate URL: it is fetched once and you get one row, so the row count will not always match the line count you pasted.

A long list needs a longer run. Pages are fetched one at a time and the run ends at the timeout on the actor's Settings tab, 180 seconds unless you raise it. A hundred URLs at a 60-second page timeout can outlast that.

📤 What you get back

A real row from a recent run. The About text and the logo link are long, so they are cut short here with ...:

{
  "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": 29087688,
  "employeeCount": 232078,
  "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/...",
  "transport": "direct_http",
  "retrievedAt": "2026-09-14T05:45:25.226Z"
}
FieldWhat it is
companySlugThe slug after /company/. The 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.
headquartersThe address as one comma-joined line, for when you just want a string.
addressThe same address split into street, locality, region, postcode and country.
websiteThe first outbound link the page lists. Note 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".
logoUrlA direct link to the hosted logo image.

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

🧾 Reading the output

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

RowHow to spot itCharged
A companysourceType: "public_company_profile"yes
The sample row_sample: true, and it only appears when you run with 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.

A diagnostic row carries an errorCode:

CodeWhat it means
BAD_INPUTNot a /company/ slug URL. Numeric company IDs, showcase pages and school pages are refused here. Nothing was requested for it.
NO_RESULTSThe page came back without the structured block, or the block described a different company. A renamed company whose old URL now redirects lands here.
BLOCKEDLinkedIn answered with a challenge page instead of the company page. Try again later.
RATE_LIMITEDToo many pages too close together. Space your runs out.
SERVER_ERRORLinkedIn returned an error of its own.
NETWORKThe page did not arrive inside requestTimeoutSecs, or LinkedIn answered with something this actor could not use. A company URL that no longer exists at all shows up here rather than under a "not found" code.

Neither a sample nor a diagnostic row fails the run.

▶️ How to run it

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

💰 How much does it cost?

$0.90 per 1,000 companies. Flat on every Apify plan, no volume tiers.

One charge per company row. Sample rows and diagnostic rows are never charged, and a duplicate URL is billed once because it is only fetched once. Be aware that a page which 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 people use it for

  • Putting size and location against a list of target accounts before a sales push.
  • Checking whether the companies in an old list still have a live page, and under which slug.
  • Pulling logos and About text for a partner directory or a pitch deck.
  • Watching follower and employee counts move over time by re-running the same list on a schedule.

🚧 What it does not do

  • No employee list. Company pages do not publish one. The employees actor below does that job.
  • No posts, jobs, funding, revenue, industry tag or specialties. None of that is in the public

block.

  • No lookup by name or domain. You bring the URLs.
  • Slug URLs 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.

  • URLs past maxCompanies get no row at all. They are dropped, silently.
  • No retries. A URL that fails, fails for that run.

🧭 Which LinkedIn scraper do you need?

If you wantUse
Company pages when you already have the URLsThis one
Everyone who works at one companyLinkedIn Company Employees Scraper
What a company has been postingLinkedIn Company Posts Scraper
People by title, company or schoolLinkedIn Profile Search Scraper
One person's profile from their URLLinkedIn Profiles Scraper

❓ Questions people ask

Do I need a LinkedIn account? 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.

What happens if I run it with nothing in the input? You get one sample row, clearly labelled, and you are not charged for it.

Is scraping LinkedIn legal? This reads only pages LinkedIn publishes to the open web for search engines. Apify's write-up on scraping and the law 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.