LinkedIn Company Insights Scraper
Pricing
Pay per event
LinkedIn Company Insights Scraper
Extract public LinkedIn company profiles and visible workforce metrics for recurring enrichment and employee or follower snapshot comparisons.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
16 days ago
Last modified
Categories
Share
Create structured snapshots of public LinkedIn company pages for recurring company enrichment and visible workforce analysis.
LinkedIn Company Insights Scraper accepts company URLs or slugs and returns profile fields, current employee and follower counts, a metric fingerprint, and optional deltas against an earlier snapshot. It works without a LinkedIn login or cookie.
What does LinkedIn Company Insights Scraper do?
The Actor turns public company pages into one normalized row per company.
It extracts:
- company name and LinkedIn identifier;
- canonical company URL and slug;
- website and public description;
- industry, company type, and employee range;
- visible employee and follower counts;
- headquarters, founding year, and specialties;
- logo URL;
- snapshot timestamp and metric fingerprint;
- employee and follower deltas when an earlier snapshot is supplied.
The default dataset contains the primary results, ready for CSV, Excel, JSON, API, webhook, or automation-platform export.
Who is it for?
Market and competitive intelligence teams
Take repeated snapshots of a known company list and identify visible workforce or audience changes.
Sales operations teams
Enrich account records with public LinkedIn company identity, size, industry, website, and headquarters fields.
Investors and analysts
Compare visible employee and follower signals across a watchlist without manually opening every company page.
Data engineers
Send normalized rows to a warehouse, spreadsheet, CRM, or monitoring pipeline on an Apify schedule.
Why use it?
- No LinkedIn cookie: the supported workflow uses public company pages.
- Real company URLs: provide slugs or full
linkedin.com/company/...URLs. - Batch input: process up to 500 unique companies per run.
- Duplicate control: repeated URLs normalize to one company request.
- Change-ready output: timestamps and
snapshotKeymake repeated runs easy to compare. - Built-in deltas: pass selected earlier metrics back through
previousSnapshots. - Fail-closed behavior: challenge pages are not reported as valid empty companies.
- Efficient HTTP extraction: no browser is launched for the supported fields.
What data does it extract?
| Field | Type | Meaning |
|---|---|---|
companyId | string | Numeric LinkedIn identifier when public, otherwise the slug |
universalName | string | Company slug from the canonical URL |
name | string | Public company display name |
linkedinUrl | string | Normalized LinkedIn company URL |
website | string or null | Public company website |
description | string or null | Public company description |
industry | string or null | Public industry label |
companyType | string or null | Public organization type |
employeeRange | string or null | Visible company-size range |
employeeCount | integer or null | Current visible employee count |
followerCount | integer or null | Current visible follower count |
foundedYear | integer or null | Public founding year |
headquarters | string or null | Public headquarters text |
specialties | string[] | Public specialty labels |
logoUrl | string or null | Public logo image URL |
snapshotAt | ISO timestamp | Time the row was produced |
snapshotKey | string | Hash of employee and follower metrics |
previousSnapshotAt | string or null | Timestamp supplied for the matched earlier row |
changes | object or null | Comparable metric deltas and changed field names |
LinkedIn controls which optional fields are public. Nullable fields are expected, not parser errors.
How to run the scraper
- Open the Actor in Apify Console.
- Add one or more company slugs or URLs under LinkedIn company URLs or slugs.
- Set Maximum companies to a safe test limit.
- Leave
previousSnapshotsempty for a current snapshot. - Click Start.
- Inspect the default dataset or export it in your preferred format.
- For monitoring, schedule the task and compare its dataset with an earlier run.
A useful first input is:
{"companyUrls": ["microsoft","https://www.linkedin.com/company/apifytech/"],"maxCompanies": 2}
Input parameters
| Input | Required | Default | Description |
|---|---|---|---|
companyUrls | yes | — | LinkedIn company URLs or slugs; up to 500 entries |
maxCompanies | no | 25 | Maximum unique companies processed, from 1 to 500 |
previousSnapshots | no | [] | Earlier URL, timestamp, employee count, and follower count values for delta calculation |
The Actor automatically uses a US residential proxy because direct LinkedIn company-page requests commonly return anti-bot status 999.
No user-supplied credentials or LinkedIn session cookies are accepted.
Output example
This shape is based on a real current run; counts naturally change over time:
{"companyId": "1035","universalName": "microsoft","name": "Microsoft","linkedinUrl": "https://www.linkedin.com/company/microsoft/","website": "https://news.microsoft.com/","industry": "Software Development","companyType": "Public Company","employeeRange": "10,001+ employees","employeeCount": 233229,"followerCount": 28806103,"headquarters": "Redmond, Washington","snapshotAt": "2026-08-07T20:22:40.000Z","snapshotKey": "80ed764994cc82da","previousSnapshotAt": null,"changes": null}
Long descriptions, specialty arrays, and logo URLs are included in the actual dataset when exposed publicly.
Compare repeated company snapshots
Run once to collect baseline rows. On a later run, pass the relevant baseline metrics back in previousSnapshots:
{"companyUrls": ["microsoft"],"maxCompanies": 1,"previousSnapshots": [{"linkedinUrl": "https://www.linkedin.com/company/microsoft/","snapshotAt": "2026-08-01T12:00:00.000Z","employeeCount": 233228,"followerCount": 28806091}]}
The output can then contain:
{"previousSnapshotAt": "2026-08-01T12:00:00.000Z","changes": {"employeeCountDelta": 1,"followerCountDelta": 12,"changedFields": ["employeeCount", "followerCount"]}}
A delta is null when either the earlier or current value is unavailable. changedFields contains only non-zero comparable metrics.
How much does it cost to scrape LinkedIn company insights?
The Actor uses pay-per-event pricing:
- a one-time $0.005 start fee per run;
- a provisional Bronze price of $0.003596 per saved company snapshot;
- no charge for duplicates, failed pages, or rejected responses.
At the Bronze rate, calculate an estimated Actor charge as the $0.005 start fee plus the number of saved snapshots multiplied by $0.003596. Subscription tiers may have lower per-snapshot event rates. Apify platform usage and proxy consumption are accounted for in the Actor's measured pricing process. The live Console price is authoritative.
Scheduling and workforce monitoring
Use an Apify Task when you monitor the same companies repeatedly:
- Save the company list as a Task.
- Add a daily, weekly, or monthly schedule.
- Send run-finished webhooks to your workflow.
- Store each dataset with its
snapshotAtvalue. - Join records on
linkedinUrl. - Compare
employeeCount,followerCount, orsnapshotKey. - Alert only when a threshold important to your analysis changes.
The Actor does not persist a hidden cross-run history. This keeps every result reproducible and lets you choose your own retention policy.
Export and integration workflows
Spreadsheet tracking
Export each dataset to CSV or Excel, then join snapshots by linkedinUrl.
CRM enrichment
Map website, industry, employeeRange, and headquarters to account fields. Keep snapshotAt as the source freshness timestamp.
Data warehouse
Append each run to a partitioned snapshot table. Use snapshotKey to identify unchanged metrics before expensive downstream processing.
Webhooks and automation
Trigger Make, Zapier, n8n, Airtable, Slack, or a custom endpoint when a scheduled run finishes.
Use the Actor through the API
Replace <APIFY_TOKEN> with your Apify API token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~linkedin-company-insights-scraper/runs?token=<APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"companyUrls":["microsoft","apifytech"],"maxCompanies":2}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/linkedin-company-insights-scraper').call({companyUrls: ['microsoft', 'apifytech'],maxCompanies: 2,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("automation-lab/linkedin-company-insights-scraper").call(run_input={"companyUrls": ["microsoft", "apifytech"], "maxCompanies": 2})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use with Apify MCP
Claude Code setup
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/linkedin-company-insights-scraper"
Claude Desktop setup
Use this JSON in Claude Desktop:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/linkedin-company-insights-scraper"}}}
Cursor setup
Add the same mcpServers.apify.url value to Cursor's MCP configuration.
VS Code setup
Add the same HTTP MCP server URL to your VS Code MCP configuration.
Example prompts:
- “Create current public company snapshots for Microsoft and Apify.”
- “Run this company watchlist and return employee and follower counts as a table.”
- “Compare these prior employee and follower values with the latest public snapshots.”
Limits
- Only public LinkedIn company pages are supported.
- Personal profiles, employees, private contact data, and authenticated Sales Navigator analytics are not extracted.
- LinkedIn may omit optional fields or change public markup.
- Direct requests are frequently blocked, so the Actor uses residential proxy routing.
- A deleted, renamed, private, or invalid company page may fail.
- Processing is sequential and conservative to reduce source blocking.
maxCompaniesis capped at 500 per run.- Results are snapshots, not audited financial or employment records.
Legality and responsible use
Use the data lawfully. Follow LinkedIn's terms, applicable privacy and database laws, and your organization's policies. Do not use output for harassment, discrimination, or unlawful profiling.
Troubleshooting
Why is a field null?
LinkedIn does not expose every profile field for every company. Null means the field was not visible in the accepted public response.
Why did the run fail with no snapshots?
The Actor fails when every requested page is invalid or blocked. Verify each URL, lower the batch size, and retry later rather than treating an anti-bot page as an empty company.
Why did two identical inputs produce different counts?
Employee and follower counts are live public signals. They may change between requests, and LinkedIn can update them independently.
Why are there no automatic historical rows?
Each run writes current results to its own default dataset. Use schedules, dataset retention, a warehouse, or previousSnapshots for the history policy you need.
FAQ
Does it require a LinkedIn account?
No. The Actor does not accept a LinkedIn login or session cookie.
Can I provide only a company slug?
Yes. microsoft normalizes to https://www.linkedin.com/company/microsoft/.
Does it return employee profiles?
No. It returns company-level public metrics, not people records.
Does it return Sales Navigator headcount history?
No. It does not claim authenticated or private Sales Navigator analytics.
Are failed companies charged?
No per-company event is emitted unless a useful normalized snapshot is saved.
Can I detect no-change runs?
Yes. Compare snapshotKey values or provide an earlier snapshot and inspect changes.changedFields.
Related automation-lab Actors
- LinkedIn Company Scraper for straightforward company profile enrichment.
- LinkedIn Company Search Scraper to discover company URLs before creating snapshots.
- LinkedIn Company Employees Scraper when the separate buyer job requires public employee profile discovery.
- LinkedIn Jobs Scraper for job-listing records rather than company-level snapshot metrics.
Start with a small real company list, inspect the current dataset, and then turn the tested input into a scheduled Task.