LinkedIn Company Scraper - Profile, Size, Posts avatar

LinkedIn Company Scraper - Profile, Size, Posts

Pricing

from $1.50 / 1,000 companies

Go to Apify Store
LinkedIn Company Scraper - Profile, Size, Posts

LinkedIn Company Scraper - Profile, Size, Posts

[💵 $2.9 / 1K · no start fee] Full LinkedIn company profile from a slug or URL, no login: industry, size band, headcount, followers, founded year, specialties, website, every office, the numeric company id and recent posts with engagement. You only pay for companies that parse.

Pricing

from $1.50 / 1,000 companies

Rating

0.0

(0)

Developer

WebData Labs

WebData Labs

Maintained by Community

Actor stats

1

Bookmarked

5

Total users

1

Monthly active users

21 days ago

Last modified

Share

LinkedIn Company Scraper

Turn a list of LinkedIn company slugs into a clean firmographic table: industry, size, headcount, followers, founded year, specialties, website, every office, the numeric company id and recent posts with engagement.

You have a list of companies and a spreadsheet with three useful columns. Enriching it by hand means opening every LinkedIn page, squinting at the About block, copying the industry, the size band and the website, and pasting them into the right row. Do that for 400 accounts and you have burned two days on transcription. This Actor reads the same public company pages and hands the whole About block back as flat rows, with the fields LinkedIn shows but nobody bothers to copy: the numeric company id, every office address, and whether the page has posted anything this year.

✅ What you get / ❌ what this isn't

✅ What you get❌ What this isn't
35 fields per company, including the numeric LinkedIn company idNot the 15-field name-industry-size stub most company scrapers stop at
The whole office list, one entry per location with street, city and countryNot just the single HQ line printed at the top of the About block
Post activity: last post date, recent post bodies, reaction and comment countsNot a static profile snapshot that treats a dead page and a daily poster the same
Affiliated and similar pages, as slugs you can feed straight back inNot a dead end that leaves you hand-hunting the rest of the competitive set
A row for every input, including dead slugs, with the reason attachedNot a silently short dataset where you have to diff the output against your input
You are only charged for companies that parsedNot per-row billing where 404s and auth walls cost the same as real data
No login, no cookies, no LinkedIn account at riskNot a session-cookie scraper that can get an account restricted

🔎 Why use this Actor

  • The numeric company id. Every row carries LinkedIn's internal organization id (Stripe is 2135371). It is the key LinkedIn Ads, Sales Navigator and the partner APIs join on, it is not printed anywhere on the page, and unlike the slug it survives a company renaming its URL.
  • Size band and headcount, kept apart. companySize is the band the company selected ("5,001-10,000 employees"), parsed into employeeCountMin and employeeCountMax so you can filter numerically. employeeCount is the separate, much larger number LinkedIn derives from profiles listing that employer. Mixing the two is the single most common error in company data; here they are three distinct fields.
  • Post activity as a qualification signal. lastPostAt, postsSampled and avgReactionsPerPost tell you whether a page is alive before you spend a rep's time on it. A company that last posted in 2023 is a different lead from one that posted yesterday to 4,000 reactions.
  • Every office, not just the HQ. locations holds one entry per address LinkedIn lists, so territory assignment and "do they have a European entity" questions get answered from the same row.
  • List expansion built in. affiliatedPages gives you subsidiaries, regional and brand pages; similarPages gives you LinkedIn's own set of comparable companies. Both come back as slugs, so a run over 20 seed accounts feeds the next run over their whole neighbourhood.
  • Paste whatever you have. Full URLs, country URLs (au.linkedin.com/...), showcase pages, /about/ URLs with tracking parameters, or bare slugs. The same company arriving in three shapes is deduplicated and billed once.
  • Dead inputs are answered, not dropped. A renamed slug returns a not_found row explaining that LinkedIn merges and renames company pages constantly. A personal profile URL returns a row saying so. Neither is charged.

👥 Who it's for

Sales, revops, recruiting and market-research teams who already have a list of target companies and need it enriched into something a CRM or an ICP filter can act on.

  • Enrich an account list with industry, size band, headcount and HQ country before territory planning.
  • Score inbound signups by company size and industry without asking the user a single extra question.
  • Build a competitor set from three seed companies by following similarPages and affiliatedPages.
  • Qualify a partner or vendor list by page activity, so nobody pitches a company that went quiet two years ago.
  • Match a LinkedIn Ads or Sales Navigator export back to your own records on the numeric company id.
  • Pull every office of a multinational for territory or compliance mapping.

Example tasks

⚙️ How to enrich a list of companies

  1. Paste your LinkedIn company URLs or slugs into Company URLs or slugs. One per line, in any of the accepted shapes; a column pasted straight out of a spreadsheet works.
  2. Set Max companies to bound the run. It defaults to 100 so a first run is cheap; set 0 for unlimited when you are ready to run the whole list.
  3. Leave Include recent posts and Include affiliated and similar pages on unless you want a narrower row. They do not change the price.
  4. Pick a Language if you want the industry and size labels in something other than English.
  5. Click Start. Results stream into the dataset as each page is parsed, so you can watch the first rows before the run finishes, and export to CSV, Excel, JSON or straight into an integration from the Storage tab.

Expanding a seed list into a full market map

Run 10 companies you know. Open the dataset, take the similarPages and affiliatedPages slugs from those rows, and paste them into a second run. Two rounds of this typically turns a handful of accounts into a few hundred comparable companies, all with the same fields, and LinkedIn's own similarity model does the selection for you.

📥 Input

{
"companyUrls": [
"https://www.linkedin.com/company/stripe",
"shopify",
"https://au.linkedin.com/company/atlassian",
"https://www.linkedin.com/showcase/microsoft-azure"
],
"maxCompanies": 100,
"includePosts": true,
"maxPostsPerCompany": 10,
"includeRelatedCompanies": true,
"language": "en"
}
  • companyUrls - the companies to scrape. Full URLs, country URLs, showcase pages, /about/ URLs with tracking parameters, or bare slugs. Duplicates across shapes are merged. Numeric company ids do not work as input, because LinkedIn only serves those behind the login wall; use the slug from the page URL.
  • maxCompanies - cap on how many companies from the list get scraped. Default 100, 0 means unlimited. There is no hard ceiling.
  • includePosts - attach recent public posts with text, timestamps and engagement counts, plus lastPostAt. Default true.
  • maxPostsPerCompany - how many posts to attach per company. Default 10, which is roughly what a logged-out page exposes.
  • includeRelatedCompanies - attach affiliatedPages and similarPages. Default true.
  • language - language for the industry name, size band and organization type. The company's own name and description always come back as the company wrote them. Default en.

Proxying, pacing and retries are handled internally and there is nothing to configure.

📤 Output

nameindustrycompanySizeemployeeCountfollowerCountheadquarterswebsitecompanyIdlastPostAt
StripeTechnology, Information and Internet5,001-10,000 employees171411631601South San Francisco, Californiahttps://stripe.com21353712026-08-07T16:15:36.101Z
AtlassianSoftware Development10,001+ employees169392608860Sydney, NSWhttps://atlassian.com226882026-08-13T22:22:44.517Z
ShopifySoftware Development10,001+ employees296961102266Ottawa, ONhttps://www.shopify.com7846522026-08-13T14:14:16.600Z

Every row also carries slug, linkedinUrl and sourceInput (the exact string you pasted, so joins back to your list never guess); tagline and description as the company wrote them; foundedYear, companyType and specialties as an array; employeeCountMin / employeeCountMax parsed out of the size band; logoUrl; the address split into street, city, state, postalCode and country, plus locations holding every office LinkedIn lists; postsSampled, firstSampledPostAt, avgReactionsPerPost and recentPosts (each with postUrl, postedAt, text, isRepost, reactions and comments); affiliatedPages and similarPages as {name, slug, industry, linkedinUrl} objects; and status / statusMessage, which say ok on a real company and explain themselves on the rows that are not.

💵 How much does it cost?

$2.90 per 1,000 companies on the free tier, dropping to $0.70 per 1,000 on higher Apify plans, and there is no Actor start fee. You are charged per company that actually parsed: a dead slug, a personal-profile URL or a page LinkedIn refused to serve still lands in your dataset as an explained row, but it costs nothing. Turning the posts or related-pages blocks off does not change the price, because a company is one charge either way. A typical 500-account enrichment run costs about $1.45 and finishes in a couple of minutes.

🔁 Run it on the Apify platform

Schedule the Actor to re-run your account list monthly and watch headcount, size band and follower count drift over time; that delta is a decent growth signal. Every run is reachable from the API, and the dataset exports to CSV, Excel, JSON, XML or RSS. Webhooks fire on finish, and the Make, Zapier and n8n integrations push rows straight into HubSpot, Salesforce, Airtable or a Google Sheet without any glue code.

⚠️ Limits and caveats

  • Public company pages only. Everything here comes from the page LinkedIn serves to logged-out visitors. Tabs behind the login wall (/people/, /jobs/, /insights/) are not read, and no LinkedIn account is used, so nothing here can get an account restricted.
  • No named employees. This Actor returns organization data. It does not collect employee names, titles or personal profiles.
  • employeeCount is LinkedIn's associated-member count, not a payroll number. It counts profiles listing the company as their employer, so it runs well above the self-reported companySize band for well-known employers and it includes alumni-style stragglers. Treat the band as the company's own claim and the count as LinkedIn's, and expect them to disagree.
  • Some About rows are simply empty. Founding year, specialties and the address block are optional on LinkedIn, and plenty of large companies leave them blank. Those fields come back null rather than guessed.
  • About 10 posts, not the full archive. The logged-out page renders roughly the last ten updates, so lastPostAt and avgReactionsPerPost are exact while postsSampled is a window, not a lifetime count.
  • Showcase pages are thinner. /showcase/ pages parse fine but often carry no organization type, founding year or address, because LinkedIn does not ask for them.
  • University and school pages are not covered. LinkedIn serves /school/ pages to logged-in visitors only, Harvard included, so those inputs come back as an explained row rather than data. A handful of company slugs quietly redirect onto a school page; those are flagged school_page and are not charged.
  • Numeric company ids cannot be used as input. LinkedIn resolves /company/<number> only for logged-in visitors. The id comes back in the output; it does not work going in.
  • Follower counts are rounded by LinkedIn at the top of the page but exact in the metadata this Actor reads, so expect small disagreements with what you see in a browser.
  • Website Contact Extractor - feed the website column from these rows in to pull emails and phone numbers off each company site.
  • Website Tech Stack Detector - same website column, returns the technologies each company runs, for technographic targeting.
  • Company Career Page Jobs API - turns the same company list into their live open roles, which is the strongest hiring-intent signal there is.
  • LinkedIn Ads Library Scraper - shows which of these companies are actively running paid campaigns.
  • Lead List Deduplicator - clean and merge the enriched list against your existing CRM export before import.
  • Google Maps Business Scraper API - matches these companies to their physical locations, ratings and phone numbers.

❓ FAQ

Do I need a LinkedIn account or cookies? No. The Actor reads the public company page LinkedIn serves to logged-out visitors. There is nothing to log into and no session to supply.

Am I charged for slugs that do not exist? No. Dead slugs, personal-profile URLs and pages LinkedIn refused to serve are written to the dataset as explained rows with a status other than ok, and those rows carry no charge.

Can I pass a company name or a website domain instead of a slug? Not yet. LinkedIn's company search is behind the login wall, so the Actor needs the slug or the page URL. The slug is the last path segment of the company page URL.

Why is employeeCount so much bigger than the size band? They measure different things. The band is what the company selected on its own page; the count is how many LinkedIn profiles list that company as their employer. Both are in every row so you can pick the one your model wants.

Which countries and languages does it cover? Any company page on any LinkedIn country domain. The language input controls the labels LinkedIn renders (industry, size band, organization type); company names and descriptions always come back as written.

How do I get a fresh snapshot every month? Save your input as a Task and put it on a schedule. Each run writes a new dataset, so comparing headcount, followers and lastPostAt across runs gives you a growth and activity trend per account.

🛠️ Support

Something wrong or missing? Open an issue on the Actor's Issues tab with the run URL, the input you used and what you expected. Bug reports with a run URL get fixed fastest.

⭐ Rate this Actor

If this saved you an afternoon of copy-pasting, please leave a review on the Reviews tab. Reviews are the main trust signal buyers use on the Store, and they are also how we decide what to build and fix next. If something is broken, please open an issue first so we can fix it, rather than rating it low with no way to reach you.