LinkedIn Company Scraper — Exact Employee Count
Pricing
from $1.99 / 1,000 company-records
LinkedIn Company Scraper — Exact Employee Count
Scrape public LinkedIn company pages. Get company records with exact employee counts, HQ, funding, and featured employee IDs. Run with slugs or URLs; no login. Pricing: $0.00205 per delivered row + $0.00005 per Actor Start event on Free.
Pricing
from $1.99 / 1,000 company-records
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
8
Bookmarked
171
Total users
63
Monthly active users
8 hours ago
Last modified
Categories
Features
Share
LinkedIn Company Scraper for Exact Employee Counts
Scrape public LinkedIn company home pages for exact employee counts, firmographics, HQ details, funding, and featured employees. On the Free plan, delivered rows cost $0.00205 each; non-paying accounts get 3 companies per run, with enrichment and HTML dumps off.
- Extract exact employee counts alongside LinkedIn size ranges.
- Build sales and lead records with company type, industry, website, HQ, specialties, and tagline.
- Research funding rounds, investors, followers, and founded years.
- Resolve names and website domains to LinkedIn slugs and check
linkedin_url. - Run without a LinkedIn login or cookies; only your Apify account is required.
What you get
The Actor fetches each public LinkedIn company home page and returns one dataset row per delivered company. Core firmographics use public Organization ld+json when available; other values use the page and overview card. Nullable scalars are null; arrays and objects use the empty forms below.
| Field family | Fields | Type | Description |
|---|---|---|---|
| Company identity | company_name, slug, linkedin_url | string | Name, normalized slug, and full URL. Name falls back to slug. |
| Company profile | tagline, description, industry, company_type, company_size | string or null | Profile and firmographic details; each can be null. |
| Exact employees | employee_count, employee_count_source | integer or null; string | Exact ld+json integer or null; source is ldjson_exact or absent. Missing counts add missing_employee_count and subtract 0.15 from parse_confidence. |
| Specialties and website | specialties, website | array of strings; string or null | Specialties or []; decoded website or null. |
| Headquarters | hq_address, hq | string or null; object | Address or null; hq has street, city, region, postal, and country, or {}. Nested values can be null. |
| Company signals | logo_url, follower_count, founded_year | string or null; integer or null; integer or null | Extracted logo, followers, and founded year. |
| Funding | funding | object or null | null without a funding block. Otherwise may contain round counts, investors, last-round fields, and crunchbase_url. |
| Featured employees | featured_employee_ids, featured_employees | array of strings; array of objects | IDs or []; enriched objects or []. Featured employees are typically 1–4. Objects have full_name, headline, location, current_title, current_company, profile_url, photo_url, and followers; values can be null. Failed profiles also have error. |
| Run metadata | scraped_at, parse_source, parse_confidence, warnings | ISO 8601 string; string; number; array of strings | UTC timestamp; ldjson or html_fallback; score from 0 to 1; warning codes. |
| Fetch metadata | fetch_source | string | apify_residential or web_unlocker. |
parse_confidence starts at 1.0. A missing Organization block subtracts 0.40, adds blocked for an auth wall or layout_drift_suspected otherwise, and selects html_fallback. Missing name, employee count, or HQ subtracts 0.20, 0.15, or 0.05. A page missing the Organization block, name, and count loses another 0.10. Other warning codes include missing_company_name, missing_hq, and resolved_from_input:<value>.
Sample output
One real dataset record (long text shortened).
{"company_name": "Stripe", "slug": "stripe", "linkedin_url": "https://www.linkedin.com/company/stripe/","tagline": "Help increase the GDP of the internet.","description": "Stripe builds programmable financial services. Millions of companies—from the world’s largest enterprises to the most ambitious startups—use Stripe to accept payments, grow their revenue, and accelerate new business opportunities.","industry": "Technology, Information and Internet", "company_type": "Privately Held", "company_size": "5,001-10,000 employees","employee_count": 16694, "employee_count_source": "ldjson_exact","specialties": [], "website": "https://stripe.com", "hq_address": "354 Oyster Point Blvd, South San Francisco, California, 94080, US","hq": {"street": "354 Oyster Point Blvd","city": "South San Francisco","region": "California","postal": "94080","country": "US"},"logo_url": "https://media.licdn.com/dms/image/v2/D560BAQE2ZfJyfn-VCg/company-logo_200_200/B56ZlyKwpUKIAI-/0/1758557047806/stripe_logo?e=2147483647&v=beta&t=En4Hm6NDGbDTYCoOQ0Ko5Ne2gylx0WRb0yL2GlOeXBQ","follower_count": 1808774, "funding": null, "featured_employee_ids": ["danielalmenara", "jhorman", "binoyg", "claire-hughes-johnson-7058"], "featured_employees": [],"founded_year": 2010, "scraped_at": "2026-11-06T14:39:17.926378+00:00", "parse_source": "ldjson", "parse_confidence": 1, "warnings": [], "fetch_source": "apify_residential"}
Pricing
On the Free plan, each delivered company row costs $0.00205 (apify-default-dataset-item event). Each row is charged when added to the dataset.
The Actor Start event is charged once per GB of run memory, with a minimum of one event.
| Charge event | Free plan price |
|---|---|
apify-default-dataset-item | $0.00205 per event |
| Actor Start | $0.00005 per event |
Worked example: 1,000 delivered company rows = $2.05005 on the Free plan: 1,000 × $0.00205 + 1 × $0.00005. 10,000 delivered company rows = $20.50005 on the Free plan: 10,000 × $0.00205 + 1 × $0.00005. The default 1024 MB (1 GB) run uses 1 Actor Start event.
The Apify Free plan includes $5 of monthly platform usage credit. On the Free plan, the $5 credit covers 2,439 company rows after the Actor Start event.
You pay only for the events above. This Actor does not use Pay per event + usage, so compute, proxy traffic, and storage are not billed separately.
How to use
- Add slugs, company, school, or showcase URLs, names, or website domains to
companies. - Set
maxCompaniesto a positive integer, or leave it at0for all targets. - Enable
enrichEmployeesfor the featured employees shown on each home page. It works only on accounts Apify marks as paying. - Keep the default residential
proxyConfiguration. - Run the Actor and review delivered rows; unresolved inputs and statuses are written to
OUTPUT. - Repeat through Apify Schedules; weekly is a reasonable starting point for recurring firmographic refreshes.
- Export the dataset as JSON or CSV, or read it through the Apify dataset API.
{"companies": ["microsoft", "stripe", "https://www.linkedin.com/company/anthropic/"],"maxCompanies": 0,"enrichEmployees": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
On non-paying accounts, enrichEmployees: true has no effect and the example is limited to the first 3 companies.
Input parameters
| Parameter | What it does | Default |
|---|---|---|
companies | Company slugs, company, school, or showcase URLs, names, or website domains. Names and domains are matched to a LinkedIn slug and flagged in warnings. | No default; provide entries |
maxCompanies | Maximum companies; 0 processes all entries. Minimum 0. | 0 |
enrichEmployees | Fetches profiles for the featured employees shown on the company page, typically 1–4. | false |
proxyConfiguration | Proxy settings for company and optional profile fetches. Default uses Apify Proxy with RESIDENTIAL. | useApifyProxy: true, group RESIDENTIAL |
debugDumpHtml | Stores fetched HTML under RAW_HTML_<slug> in the key-value store. Ignored on non-paying accounts. | false |
disableUsageStats | Turns off the run summary described in Usage statistics. | false |
Limits and edge cases
| Condition | What you see | What to do |
|---|---|---|
| Only the public company home page is available | /about/ and /people/ redirect to login and are not scraped. | Use the home-page slug or URL. |
enrichEmployees is enabled on a paying account | Only the featured employees shown on the company page are enriched; the full /people/ list is inaccessible. | Treat it as limited enrichment. |
| Apify does not mark the account as paying | The first 3 valid targets are processed; enrichment and HTML dumps are off. Invalid inputs do not count. | Use a paying account or reduce the input. |
| A name or domain resolves to a LinkedIn page | A resolved_from_input:<value> warning is added. | Check linkedin_url. |
| A person URL, numeric company ID, or unsupported target is supplied | OUTPUT.results has status: invalid_input; no row is delivered. | Use linkedin.com/company/<slug>. |
| Every input is confirmed not found | After two independent HTTP 404/410 answers, the run ends Succeeded with an empty dataset and a 0 companies scraped... status message. The reason is in OUTPUT.summary, OUTPUT.notFound, and OUTPUT.results. | Check slugs or use the LinkedIn company address. |
| Zero rows result from invalid, blocked, unresolved, errored, or temporarily unreachable inputs | The run fails with a status message listing rejected inputs and reasons. | Correct inputs or re-run after the temporary problem. |
| The same LinkedIn page is supplied more than once | The later input has status: "duplicate" and pushed: false; it is not billed. | Remove duplicates. |
| Some inputs fail but others deliver rows | The run ends Succeeded; failures are in OUTPUT.failedCompanies and are not charged. | Re-run failed inputs. |
| LinkedIn or the proxy is temporarily unreachable on every retry | No row is delivered; a run with no rows and only unreachable inputs fails. | Re-run with the residential proxy configuration. |
| Run aborted, timed out, or failed mid-run | Delivered rows remain in the dataset and are charged; OUTPUT is not written. | Re-run inputs with no row. |
| LinkedIn page structure changes | parse_confidence is reduced; parse_source may be html_fallback, with warning codes for missing parts. | Review warnings and parse_confidence, then check the source page. |
debugDumpHtml is enabled on a non-paying account | It is switched off and no HTML dump is created. | Use a paying account if raw HTML is needed. |
FAQ
How much does it cost to scrape LinkedIn company pages?
On the Free plan, each delivered company row costs $0.00205 and the Actor Start event costs $0.00005. The 1,000-row example is shown in Pricing.
What happens if the dataset is empty?
If every input is confirmed not found after two independent HTTP 404/410 answers, the run ends Succeeded with an empty dataset and the reason in OUTPUT.summary, OUTPUT.notFound, and OUTPUT.results. Other zero-row outcomes fail; when rows are delivered, the run succeeds.
Why might a company not be working?
LinkedIn or the proxy can return an auth redirect, HTTP 999, or another temporary failure. The Actor retries retryable failures on fresh proxy sessions. Check the status and re-run affected inputs.
Is it legal to scrape this public data?
The Actor uses public LinkedIn company pages and does not require a login or cookies. Whether a use is allowed depends on source terms and applicable law for the use case; review those requirements before using the data.
Related actors
- Company Signal Stack — firmographics, jobs, and funding.
- Company Lookup Scraper — B2B firmographic enrichment.
- LinkedIn Profile Scraper — LinkedIn person-profile data.
Usage statistics
This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.
A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.
To opt out, set disableUsageStats to true in the input. Nothing is sent then.