LinkedIn Company Scraper
Pricing
from $3.00 / 1,000 company scrapeds
LinkedIn Company Scraper
Scrapes public LinkedIn company pages anonymously (no cookies, no login): typed employee count and size range, followers, headquarters, locations, specialties, affiliated and similar companies — with per-field coverage and a SHA-256 provenance block. Error items are never charged.
Pricing
from $3.00 / 1,000 company scrapeds
Rating
0.0
(0)
Developer
Torchtechnology LTD
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
What does LinkedIn Company Scraper do?
LinkedIn Company Scraper extracts full, typed company-profile data from public LinkedIn company pages (linkedin.com/company/<slug>) — anonymously, with no cookies and no LinkedIn account. You get the company name, tagline, description, website, industry, company type, typed company-size range (min/max), the live employee count on LinkedIn as a number, follower count, structured headquarters (city, region, country code, postal code, street), founding year, specialties, the full locations list, affiliated pages, similar companies, and logo/cover images — plus a per-field coverage status and an audit-proof provenance block (URL, HTTP status, SHA-256 of the page) on every single item. Whether you need competitor intelligence, lead-list enrichment, or market mapping, you get clean, analysis-ready JSON that never invents a value.
The actor runs on the Apify platform, so you get API access, scheduling, integrations, proxy rotation, and run monitoring out of the box — no infrastructure to manage. Pricing is pay per company at $3 per 1,000 companies, and errors are never charged. Try it on the Apify free tier in a couple of clicks.
What makes this LinkedIn company scraper different?
Most LinkedIn company scrapers hand you a flat blob of fields with no way to tell a real value from a silent gap. This one was built for data you can defend — in a CRM import, a market report, or a pricing model.
| Capability | LinkedIn Company Scraper | harvestapi/linkedin-company | apimaestro/linkedin-company-detail |
|---|---|---|---|
| Price per 1,000 companies | $3.00 | $4.00 | $5.00 |
| No cookies / no account | ✅ | ✅ | ✅ |
| Employee count as typed number | ✅ | ✅ | ✅ |
Typed size range (min/max) | ✅ | ⚠️ start only | ❌ |
| Affiliated pages (incl. showcase pages) | ✅ | ❌ | ❌ |
| Similar companies | ✅ | ❌ | ❌ |
| Structured headquarters (city/region/country code/street) | ✅ | ⚠️ inside locations list | ⚠️ partial |
| Provenance block (URL, HTTP status, SHA-256 page hash) | ✅ on every item | ❌ | ❌ |
Per-field coverage status (obtained/absent) | ✅ on every item | ❌ silent nulls | ❌ silent nulls |
| Error items never charged (invalid URL, 404, blocked) | ✅, pushed for transparency | not documented | not documented |
| Store rating | — (new) | 4.69 | 3.16 |
Users per 30 days at research time (Apify Store API, August 2026): harvestapi/linkedin-company ~3,270, harvestapi/linkedin-company-search ~1,449, apimaestro/linkedin-company-detail ~497.
Honest data: obtained vs absent
When LinkedIn does not show a founding year on Microsoft's page, this actor reports founded: null with coverage.founded: "absent" — it does not guess, backfill, or silently drop the field. Small companies get the same discipline: if a page carries no affiliated-pages section, you get affiliatedPages: null and coverage.affiliated_pages: "absent", so your pipeline can tell "not there" from "not scraped".
How much does it cost to scrape LinkedIn company data?
The actor uses pay-per-event pricing — you pay only for delivered results (exact prices are always shown on the actor's Pricing tab in Apify Console):
company— $0.003 per company ($3 per 1,000), charged once per successfully scraped company item. Includes all fields: locations, affiliated pages, similar companies, coverage, and provenance.apify-actor-start— a one-time $0.01 per run.
Errors are never charged. Invalid URLs, non-existent companies (404), blocked requests, and transport failures produce transparency items in the dataset at zero cost.
Cost by volume (company event only, + $0.01 per run)
| Companies per run | Total price |
|---|---|
| 100 companies | $0.31 |
| 1,000 companies | $3.01 |
| 10,000 companies | $30.01 |
The Apify free tier is enough to try the actor on a handful of companies before you scale up.
Who is this LinkedIn scraper for?
| Audience | What they use it for |
|---|---|
| Sales & RevOps teams | Enrich account lists with employee count, size range, industry, HQ, and website — typed and CRM-ready. |
| Competitive intelligence | Track competitors' follower counts, locations, and affiliated pages on a schedule; the provenance hash proves what the page showed and when. |
| VC / market research | Map markets via similarCompanies, size companies by typed ranges, and spot growth signals in employee counts. |
| AI / data teams | Clean, typed, provenance-stamped company JSON for agents and RAG pipelines — with honest null semantics instead of hallucinated gaps. |
How to scrape LinkedIn company pages with LinkedIn Company Scraper
- Open the actor in Apify Store and click Try for free.
- On the Input tab, paste company URLs (
https://www.linkedin.com/company/microsoft) and/or plain slugs ("microsoft"). - Optionally set Max companies and the proxy country (defaults: 10 companies, US exits).
- Click Start, then download your results from the Output or Storage tab — or pull them via the Apify API.
Using the Apify API (JavaScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('CyprusAPI/linkedin-company').call({companySlugs: ['apify', 'microsoft'],maxCompanies: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Using the Apify API (Python)
from apify_client import ApifyClientclient = ApifyClient('<YOUR_APIFY_TOKEN>')run = client.actor('CyprusAPI/linkedin-company').call(run_input={'companyUrls': [{'url': 'https://www.linkedin.com/company/apify'}],'companySlugs': ['microsoft'],'maxCompanies': 10,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item)
Input
The actor accepts the following parameters (see the Input tab for the full form). At least one of companyUrls or companySlugs is required.
| Field | Type | Description |
|---|---|---|
companyUrls | array | LinkedIn company page URLs; the slug is extracted from each URL. Provide companyUrls and/or companySlugs. |
companySlugs | array | LinkedIn company slugs (the part after /company/, e.g. "microsoft"). Combined with URLs and deduplicated. |
maxCompanies | integer | Global cap on companies per run across both inputs. Default 10, min 1, max 1000. |
country | string | ISO alpha-2 proxy exit country (e.g. "US", "DE", "GB"). Default "US". |
proxyConfiguration | object | Optional Apify proxy settings as extra fallback tiers behind the bundled residential pool. |
proxiesByCountry | object | Optional geo-pinned custom proxies per country, e.g. {"US": ["http://user:pass@host:port"]} — always tried first. |
Output
One dataset item per scraped company. Flat overview fields (name, industry, employee count, followers, website) sit next to nested groups: companySize (typed min/max range), headquarters (city/region/country code/postal code/street), locations, affiliatedPages, similarCompanies, plus coverage and capture. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
{"name": "Apify","universalName": "apify","pageUrl": "https://www.linkedin.com/company/apify","tagline": "Thousands of Actors to automate your business, get real-time web data, and integrate your apps and agents.","website": "https://apify.com/","industry": "Technology, Information and Internet","companyType": "Privately Held","companySize": { "min": 201, "max": 500, "raw": "201-500 employees" },"employeeCount": 256,"followerCount": 31896,"headquarters": {"city": "Prague","region": null,"countryCode": "CZ","postalCode": "11100","streetAddress": "Vodickova 704/36","raw": "Prague"},"founded": 2016,"specialties": ["Web scraping", "Browser automation", "AI agents", "API integration"],"locations": [{ "line1": "Vodickova 704/36", "location": "Prague, 11100, CZ", "addressLines": ["Vodickova 704/36", "Prague, 11100, CZ"], "isPrimary": true },{ "line1": "San Francisco, CA, US", "location": null, "addressLines": ["San Francisco, CA, US"], "isPrimary": false }],"affiliatedPages": null,"similarCompanies": [{ "name": "n8n", "subtitle": "Software Development", "url": "https://www.linkedin.com/company/n8n", "pageType": "company", "slug": "n8n", "logoUrl": "https://media.licdn.com/..." }],"logoUrl": "https://media.licdn.com/dms/image/v2/.../apify_logo?...","coverImageUrl": "https://media.licdn.com/dms/image/v2/.../apify_cover?...","coverage": { "profile": "obtained", "founded": "obtained", "affiliated_pages": "absent" },"capture": {"captured_at_utc": "2026-08-20T17:25:00+00:00","url": "https://www.linkedin.com/company/apify","http_status": 200,"was_authenticated": false,"content_hash": "sha256:75c5add5..."},"scrapedAt": "2026-08-20T17:25:02+00:00"}
Fields follow a two-state discipline: a value means observed on the page, null means verifiably absent — the coverage block reports this per field group. Failed companies appear as transparency items with error and errorDescription and are never charged.
Data table
| Field | Description |
|---|---|
name, universalName, pageUrl | Company name, LinkedIn slug, canonical page URL |
tagline, description | Slogan and the full "About us" text |
website | Company website, decoded from LinkedIn's redirect wrapper |
industry, companyType | Industry label and legal type (e.g. "Privately Held", "Public Company") |
companySize | LinkedIn's size bucket, typed: min, max (null for open-ended "10,001+"), plus the raw label |
employeeCount | Members on LinkedIn, as a number (not a string) |
followerCount | Page followers at capture time, as a number |
headquarters | Structured HQ: city, region, countryCode, postalCode, streetAddress, plus the raw label |
founded | Founding year as a number — null when LinkedIn doesn't show one |
specialties | List of specialties |
locations | All rendered office locations: address lines, isPrimary flag for the HQ entry |
affiliatedPages | Affiliated LinkedIn pages (incl. showcase pages): name, subtitle, canonical URL, pageType, logo |
similarCompanies | "Similar pages" recommendations in the same shape |
logoUrl, coverImageUrl | LinkedIn CDN image URLs |
coverage | Per-field-group status: obtained / absent |
capture | Provenance: timestamp, URL, HTTP status, was_authenticated: false, SHA-256 content hash |
Known limitations
We'd rather you know these up front:
- Public pages only — some LinkedIn data is login-gated and is not included. Funding rounds (Crunchbase data), phone numbers, employee insights (growth trends, headcount by function), and verification badges are not visible anonymously; this actor does not pretend otherwise and does not charge for them. Fields like this are not silently nulled — they are simply not part of the output.
- No posts in v1. Recent company posts are a separate job — use a dedicated LinkedIn posts scraper instead of bolting a half-solution onto company profiles.
employeeCountis the LinkedIn member count, not payroll headcount. It counts profiles that list the company as their employer — typically lower than the real workforce for companies with many non-desk employees, and it lags hires/layoffs.- Followers and employee counts are snapshots. They move daily; schedule recurring runs if you need a time series — the
capture.captured_at_utctimestamp makes that audit-proof. - Logo/cover URLs live on LinkedIn's CDN and carry expiry parameters; download and re-host images you need long-term.
- One proxy country per run. Split multi-country jobs into separate runs.
- LinkedIn changes its guest-page markup from time to time. When that happens, affected fields degrade to honest
absentcoverage rather than wrong values — open an issue and we'll adapt the parser.
Tips and advanced options
- Use
maxCompaniesto cap run size and cost — it applies across both URL and slug inputs after deduplication. - Batch inputs. One run with 100 slugs is far cheaper per company than 100 runs with one slug (one
actor-startcharge total). - Proxy fallback chain. Each company is attempted in tiers: your
proxiesByCountrypool first, then the bundled residential pool, then (if enabled) Apify datacenter and Apify residential. Retries only happen on bot-detection/transport failures — a 404 is final and free. - Schedule it. For competitor tracking, schedule daily or weekly runs; every item's
captureblock (timestamp + SHA-256) doubles as evidence of what the page showed at that moment.
FAQ
Will LinkedIn block me? Do I need proxies?
LinkedIn rate-limits anonymous traffic harder than most sites, which is why this actor ships with a bundled residential proxy pool and a tiered fallback chain (your proxies → bundled pool → Apify datacenter → Apify residential). Blocked requests surface as transparency items with error / errorDescription and are never charged.
Can I bring my own proxies?
Yes. Pin geo-located proxies per country with proxiesByCountry (e.g. US exits for country: "US") — your pool is always tried first, ahead of the bundled one.
Why did some fields come back as null?
That is the honest-data design, not a bug: null means the field is verifiably absent on the page (e.g. Microsoft shows no founding year). The coverage block tells you which case applies per field group — no invented values.
Is scraping LinkedIn company data legal?
Web scraping is legal when you extract publicly available data that is not behind a login. This actor scrapes only anonymous, public company pages (was_authenticated is always false in the provenance block) — no cookies, no account, no CAPTCHA bypass. Company profiles can still reference personal data (e.g. employee counts); personal data is protected by regulations such as GDPR in the EU — you should have a legitimate reason to process it. If you are unsure, consult a lawyer. Also review LinkedIn's Terms of Service before scraping. Apify is not liable for how you use the extracted data.
Something isn't working — where do I report it?
Open the Issues tab on the actor's page in Apify Console and describe the problem, ideally with the failing company URL and run ID. Error items in the dataset (error / errorDescription) already tell you what went wrong for individual companies.
Can you build a custom LinkedIn data solution?
Yes — if you need different fields, monitoring setups, or a fully managed pipeline, reach out via the Issues tab and ask about a custom solution.