LinkedIn Company Scraper avatar

LinkedIn Company Scraper

Pricing

from $3.00 / 1,000 company scrapeds

Go to Apify Store
LinkedIn Company Scraper

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

Torchtechnology LTD

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

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.

CapabilityLinkedIn Company Scraperharvestapi/linkedin-companyapimaestro/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 transparencynot documentednot documented
Store rating— (new)4.693.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 runTotal 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?

AudienceWhat they use it for
Sales & RevOps teamsEnrich account lists with employee count, size range, industry, HQ, and website — typed and CRM-ready.
Competitive intelligenceTrack competitors' follower counts, locations, and affiliated pages on a schedule; the provenance hash proves what the page showed and when.
VC / market researchMap markets via similarCompanies, size companies by typed ranges, and spot growth signals in employee counts.
AI / data teamsClean, 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

  1. Open the actor in Apify Store and click Try for free.
  2. On the Input tab, paste company URLs (https://www.linkedin.com/company/microsoft) and/or plain slugs ("microsoft").
  3. Optionally set Max companies and the proxy country (defaults: 10 companies, US exits).
  4. 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 ApifyClient
client = 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.

FieldTypeDescription
companyUrlsarrayLinkedIn company page URLs; the slug is extracted from each URL. Provide companyUrls and/or companySlugs.
companySlugsarrayLinkedIn company slugs (the part after /company/, e.g. "microsoft"). Combined with URLs and deduplicated.
maxCompaniesintegerGlobal cap on companies per run across both inputs. Default 10, min 1, max 1000.
countrystringISO alpha-2 proxy exit country (e.g. "US", "DE", "GB"). Default "US".
proxyConfigurationobjectOptional Apify proxy settings as extra fallback tiers behind the bundled residential pool.
proxiesByCountryobjectOptional 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

FieldDescription
name, universalName, pageUrlCompany name, LinkedIn slug, canonical page URL
tagline, descriptionSlogan and the full "About us" text
websiteCompany website, decoded from LinkedIn's redirect wrapper
industry, companyTypeIndustry label and legal type (e.g. "Privately Held", "Public Company")
companySizeLinkedIn's size bucket, typed: min, max (null for open-ended "10,001+"), plus the raw label
employeeCountMembers on LinkedIn, as a number (not a string)
followerCountPage followers at capture time, as a number
headquartersStructured HQ: city, region, countryCode, postalCode, streetAddress, plus the raw label
foundedFounding year as a number — null when LinkedIn doesn't show one
specialtiesList of specialties
locationsAll rendered office locations: address lines, isPrimary flag for the HQ entry
affiliatedPagesAffiliated LinkedIn pages (incl. showcase pages): name, subtitle, canonical URL, pageType, logo
similarCompanies"Similar pages" recommendations in the same shape
logoUrl, coverImageUrlLinkedIn CDN image URLs
coveragePer-field-group status: obtained / absent
captureProvenance: 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.
  • employeeCount is 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_utc timestamp 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 absent coverage rather than wrong values — open an issue and we'll adapt the parser.

Tips and advanced options

  • Use maxCompanies to 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-start charge total).
  • Proxy fallback chain. Each company is attempted in tiers: your proxiesByCountry pool 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 capture block (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.

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.