LinkedIn Company Scraper — Public Pages, No Login
Pricing
$1.50 / 1,000 per company returneds
LinkedIn Company Scraper — Public Pages, No Login
Bulk-scrape public logged-out LinkedIn company pages: industry, company size band, HQ and postal address, founded year, specialties, website, company type, followers and employees-on-LinkedIn. Companies, not people. No account and no cookie. $1.50 per 1,000 companies — the cheapest in the lane.
Pricing
$1.50 / 1,000 per company returneds
Rating
0.0
(0)
Developer
Scrapers Delight
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Paste LinkedIn company URLs or slugs, get structured company records back: companyName, industry, companySize, employeesOnLinkedIn, headquarters, streetAddress, addressLocality, addressRegion, postalCode, addressCountry, foundedYear, specialties, website, companyType, followerCount, tagline, description, logoUrl and the stable numeric companyId.
Three things define this Actor, and they are the first thing on the page on purpose:
- It reads only the public, logged-out company page. Exactly what a signed-out
browser is served at
https://www.linkedin.com/company/<slug>/. There is no LinkedIn account, no member cookie, noli_at, no session token anywhere in this Actor — not as a required field, not as an optional field, not as a documented "advanced" path. Nothing of yours can be rate-limited, restricted or banned, because nothing of yours is used. - It returns companies, not people. No employee names, no profiles, no staff rosters.
companySizeis the published band LinkedIn renders (1,001-5,000 employees). LinkedIn localises to the proxy exit IP, so the band andindustryoccasionally come back in another language (11-50 працівників) — filter on the numericcompanySizeMin/companySizeMax, never on the band string.employeesOnLinkedInis the count LinkedIn shows a signed-out visitor ("View all 2,942 employees"). Those are two numbers. They are not a list of humans. - It does not search or discover LinkedIn. You supply the companies. A multi-word
company name is rejected by the input, because resolving a name means running LinkedIn
search — the auth-gated part of the site, and the part that carries the real risk. Note
that a one-word entry cannot be told apart from a slug and is fetched as one: typing
twiliogets you whoever holds thetwiliovanity slug, which may not be the company you meant. Paste the URL from the company's own LinkedIn page when you want certainty.
{"companies": ["stripe","https://www.linkedin.com/company/shopify/","hubspot","notionhq","figma"]}
Click Try for free and hit Start — that block is literally the input this Actor ships with. It returned 5 of 5 companies and cost $0.0075.
$0.0015 per company returned — $1.50 per 1,000. A company that 404s, that fails every proxy rung, or that duplicates a company already in your results is never billed.
Read this before you buy rows
Five things that would otherwise turn into a refund request.
- LinkedIn's
robots.txtdisallows this path, and every other path. Quoted verbatim below. It is not ambiguous and this page does not pretend otherwise — read it and make your own call before you run anything. foundedYearis present on about 56% of companies andspecialtieson about 82% — andfoundedYearcollapses to 26% on a list of mega-caps (see the footnote below the table). These are optional fields a company fills in or does not. The full measured fill table is further down — it is sorted so the gaps are impossible to miss.websiteis whatever the company typed into LinkedIn's Website box, not their corporate domain. Figma's currently readshttps://figma.bot/Config2026Recap— a campaign link. Most companies put their homepage there; some do not. Same fordescription: it is the About text as written, and some companies use it for a campaign line rather than a company blurb.employeesOnLinkedInandcompanySizedisagree, and both are correct.companySizeis the self-declared band;employeesOnLinkedInis how many LinkedIn members currently list that company. Anthropic reads501-1,000 employeeswith 5,700 members. Use the band for firmographics and the count for reach.- A retired vanity slug follows LinkedIn's redirect — check what it lands on. When
LinkedIn 301s a slug and then answers HTTP 999, this Actor re-fetches under the slug it
was sent to and records the original in
redirectedFromSlug. Sometimes that is a true rename (/company/mailchimp→intuitmailchimp,/company/monzo-bank→monzo). Sometimes the vanity slug now belongs to an unrelated company:/company/gitlablands ondomifyio("Domify", 2-10 employees),/company/basecamponbasecamppt(a Portuguese agency),/company/uberonubercreativedigitalagency. Any row with a non-nullredirectedFromSlugis billed and should be reviewed before you trust it — filter on that field. Use the exact slug from the company's own LinkedIn URL to avoid this entirely. A slug that simply does not exist returns a logged 404 and no charge.
robots.txt — the actual lines, unedited
Fetched from https://www.linkedin.com/robots.txt on 2026-08-15 (HTTP 200, 120,190
bytes). The file contains one User-agent: * group. It is the last group in the file, and
this is it in full:
User-agent: *Disallow: /# Notice: If you would like to crawl LinkedIn,# please email whitelist-crawl@linkedin.com to apply# for white listing.
Disallow: / covers /company/<slug>/, the only path this Actor requests. That
User-agent: * group contains no Allow: line at all, so nothing carves the path back out.
The file's only company-specific rules are Disallow: /companyDir*,
Disallow: /pages-extensions/FollowCompany* and a single Allow: /companyDir* — all of them
sit in other, named crawler groups, none of them names a path this Actor touches, and none
of them applies to a generic client, which falls into the catch-all group above.
So, stated plainly: this Actor requests a path that LinkedIn's robots.txt disallows for any crawler that is not on their whitelist. It fetches only pages LinkedIn serves publicly to a signed-out visitor, it does not log in, and it does not defeat any challenge — but it is not robots-compliant, and LinkedIn's User Agreement prohibits automated collection regardless of technical access. Whether that is acceptable is your decision, in your jurisdiction, for your use case. Do not run this if the answer is no.
What you get
One row per unique company. scrapedAt is a full UTC timestamp.
| Group | Fields | Example |
|---|---|---|
| Identity | companyName, companyUrl, companySlug, companyId, inputSlug, redirectedFromSlug | Stripe · https://www.linkedin.com/company/stripe/ · 2135371 |
| Positioning | tagline, description, industry | Help increase the GDP of the internet. · Technology, Information and Internet |
| Size | companySize, companySizeMin, companySizeMax, employeesOnLinkedIn | 5,001-10,000 employees · 5001 · 10000 · 17163 |
| Location | headquarters, streetAddress, addressLocality, addressRegion, postalCode, addressCountry | South San Francisco, California · 354 Oyster Point Blvd · 94080 · US |
| Firmographics | foundedYear, companyType, website, specialties, specialtiesCount | 2010 · Privately Held · https://stripe.com |
| Reach | followerCount, logoUrl | 1,663,354 |
companySizeMin / companySizeMax are the band parsed into numbers so you can filter
without string-matching (10,001+ employees gives min 10001, max null).
The dataset ships with a saved table view — Companies — so you do not have to configure columns.
Field fill — measured on 66 live companies
Every company this Actor has returned on the Apify platform: 66 distinct companyIds
across 55 runs, Apify datacenter proxies, 2026-08-15 → 2026-08-27. Sorted by fill, so
the sparse fields are impossible to miss.
| Field | Fill | Notes |
|---|---|---|
companyName | 100% | |
companyUrl / companySlug | 100% | |
companyId | 100% | the numeric urn:li:organization: id — stable across renames |
logoUrl | 100% | 200×200 CDN URL |
industry | 100% | LinkedIn's own taxonomy string |
companySize / companySizeMin | 100% | the published band |
employeesOnLinkedIn | 98.5% | members listing this employer |
website | 98.5% | see caveat 3 above |
companyType | 98.5% | Public Company, Privately Held, Nonprofit, … |
followerCount | 98.5% | |
description | 97.0% | |
addressCountry | 95.5% | |
headquarters | 93.9% | city + region as LinkedIn prints it |
addressLocality | 93.9% | |
specialties | 81.8% | averaged 9.4 entries where present |
streetAddress | 80.3% | |
postalCode | 78.8% | |
addressRegion | 77.3% | |
foundedYear | 56.1% | optional field; many companies leave it blank |
tagline | 53.0% | the one-line strapline under the company name |
companySizeMax | 47.0% | null for 10,001+ bands by definition |
Uniqueness: companyId is unique in every dataset — 27/27, 27/27, 18/18 on the largest
three runs. Nothing was double-billed.
Fill depends on company size — read this before you budget for the optional fields.
The table above spans a mix of company sizes. The optional profile fields are the ones the
biggest companies most often leave blank, so an enterprise-only list fills far thinner than
that overall average. Measured on a 27-company mega-cap run (2026-08-19): foundedYear
25.9% (vs 56.1% overall) and tagline 14.8% (vs 53.0% overall). companySizeMax is
null on 100% of them, because 10,001+ employees has no upper bound to extract.
The always-present fields — name, id, url, logo, industry, size band, type, followers,
employees-on-LinkedIn — are unaffected: 100% on that same mega-cap run.
How it works, and what it does not do
The signed-out company page server-renders everything above, in three places on the same document:
- the About us
<dl>— industry, size band, headquarters, type, founded, specialties, website; - a JSON-LD
Organizationnode — description, slogan, the full postal address, logo, employee count; - the top card — name, tagline, follower count, and the employee count.
That is one HTTP GET per company on the happy path — up to four retries with a rotated session, plus one capped residential pass, when LinkedIn serves the sign-in wall instead. No browser, no Chromium, no JavaScript execution, no CAPTCHA solving, no challenge bypass — and no login, which is the point.
/company/<slug>/about/ is not used: for a signed-out visitor it 302s to
/uas/login (verified 2026-08-15 on stripe, ibm and hubspot). Everything this Actor
returns comes off the base page instead. If a page will not serve without signing in, the
Actor logs it and returns nothing for that company rather than reaching for a credential.
Transport, measured through Apify proxies (not a home IP)
| Rung | Sample | Result |
|---|---|---|
| Apify DATACENTER, rotating session | 60 slugs queued, 2026-08-20 (runs 6CQI5yHkcVYszpaob, ieITTQwtuuYNNW5CF) | every company attempted inside the run's time budget returned a row; the runs stopped on the wall clock at 29 and 18 of 60 attempted, not on blocks |
| Apify RESIDENTIAL, one sticky session per company | bounded fallback only — never exercised on any billed run to date | — |
Residential is not the default: it exists only as a bounded fallback for the day LinkedIn
walls the shared datacenter pool, capped at max(3, 10% of your list) per run, and every
run logs how much of the cap it used.
Pricing, and how it compares
$0.0015 per company returned. $1.50 per 1,000. Nothing else is charged — no run-start fee, no per-dataset-item fee.
Checked live against the Apify Store on 2026-08-15:
| Actor | Price per company |
|---|---|
| This Actor | $0.0015 |
datadoping/linkedin-company-scraper | $0.00155 |
automation-lab/linkedin-company-scraper | $0.00345 + $0.005 per run |
harvestapi/linkedin-company (lane leader) | $0.004 + run-start |
data-slayer/linkedin-company-scraper | $0.004 + run-start |
unseenuser/LinkedIn-Company-Scraper | $0.004 |
scraper-engine/linkedin-company-about-scraper | $0.00499 + run-start |
scrapeverse/linkedin-company-profile-scraper-pay-per-event | $0.006 + run-start |
An honest note on "no cookies": most of the company-detail Actors in this lane also run
without a member cookie — it is table stakes here, not a unique feature, and you should
discount anyone selling it as one (including this page). What is not table stakes is the
rest of it: a published per-field fill table measured on 66 live companies, every redirect
disclosed in redirectedFromSlug, de-duplication on the numeric company id before
anything is billed, and the robots.txt above quoted in full rather than summarised.
Cookie-based tooling (browser extensions, PhantomBuster-style session hijacking) is a different category and does carry account risk. This Actor is not in that category.
Input
| Field | What it does |
|---|---|
companies | One company per line: a slug (stripe), a full company or showcase URL, a country-subdomain URL (uk.linkedin.com/company/…), or the bare linkedin.com/company/x form. |
startUrls | Bulk path: paste many URLs, upload a .txt/.csv, or link a Google Sheet. Entries must be full LinkedIn company URLs. Merged with companies and de-duplicated. |
proxyConfiguration | Leave on the default (Apify datacenter + capped residential fallback). |
requestConcurrency | Default 5. Measured on the platform at this setting: 12 companies in 8.9 s (run Fd9jLQe6qMfI9gfpZ), 5 companies in 6.9 s. |
requestDelayMs | Default 400 ms per worker. |
Both input fields are merged and de-duplicated before any request is made, so pasting
stripe and https://www.linkedin.com/company/stripe/ in the same run costs you one row,
not two.
Output
Every company that returns is one dataset item, pushed and charged in the same call, so a charge cap can never leave you with unpaid rows.
If you start the Actor with no input at all, it scrapes the documented 5-company sample above so you can see the output shape, and says so in the run status — you are billed for those 5 rows and nothing else. If a run returns nothing (every company 404'd or every proxy rung was walled), it ends with a status message asking you to re-run, and nothing is billed.
Limits
- Public company pages only. Anything a signed-out visitor cannot see is out of scope, permanently.
- No employees, no people, no posts, no jobs, no follower lists.
- No search, no discovery, no enumeration — you bring the companies.
- Optional profile fields (
specialties,foundedYear,streetAddress,tagline) are blank when the company left them blank. See the fill table. - LinkedIn's robots.txt disallows this path. See the section above; it is your call.