LinkedIn Company Employees Scraper + Email Finder
Pricing
Pay per usage
LinkedIn Company Employees Scraper + Email Finder
Extract employees from LinkedIn companies and find their verified email addresses. Perfect for lead generation, recruitment, and B2B sales outreach.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
The Profesor Baltazar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Turn a list of company names into a lead list of their publicly visible employees from LinkedIn, with work-email discovery for cold outreach, recruitment, and market research.
No login. No cookies. No account risk. The actor only reads pages that are already public to logged-out visitors โ the same pages Google indexes.
๐งญ How it works
| Step | What happens | Source |
|---|---|---|
| 1. Company resolution | Fetches the public linkedin.com/company/<slug> page and parses its schema.org JSON-LD (name, description, website) | Public company page |
| 2. Employee discovery | Finds public linkedin.com/in/<profile> URLs tied to the company via search-engine results (site:linkedin.com/in "Company" + your job-title/location terms) | Public SERP |
| 3. Profile scraping | Each public profile page โ name, headline, job title, location, employer (JSON-LD Person) | Public profile page |
| 4. Email finding | Extracts emails the company publishes on its own website (contact/team pages), infers the company's email format, generates candidates per name | Public company website |
| 5. Email labeling | Domain MX check; optional SMTP probe. Statuses are honest: listed_on_profile, verified, pattern_match, mx_ok, invalid_domain, not_found | DNS / SMTP |
โ ๏ธ Honesty note: LinkedIn does not expose emails to logged-out visitors. Emails returned are either publicly listed on a profile/company page or pattern-generated candidates. A
pattern_matchemail is a best guess that has not been proven deliverable โ verify before sending at scale. Onlyverifiedmeans the mail server accepted the mailbox on a live probe.
๐ฅ Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
companies | string[] | โ | โ | One per line: LinkedIn slug (stripe), company URL (https://www.linkedin.com/company/stripe), or domain (stripe.com) |
maxEmployees | integer 1โ200 | โ | 50 | Cap per company |
findEmails | boolean | โ | true | Pattern + public-email discovery from the company site |
verifyEmails | boolean | โ | false | SMTP RCPT probe per candidate (slower, +status verified) |
jobTitles | string[] | โ | โ | Filter, e.g. ["CFO", "VP Finance"] |
locations | string[] | โ | โ | Filter, e.g. ["San Francisco", "London"] |
department | string | โ | any | Keyword filter on title/headline |
decisionMakersOnly | boolean | โ | false | Keep only C-Level / Director / Manager |
proxyConfiguration | object | โ | Apify Proxy | RESIDENTIAL recommended โ LinkedIn aggressively blocks datacenter IPs |
Example
{"companies": ["stripe", "https://www.linkedin.com/company/plaid"],"maxEmployees": 30,"findEmails": true,"verifyEmails": false,"jobTitles": ["engineer"],"decisionMakersOnly": false,"proxyConfiguration": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}}
๐ค Output โ one row per employee
| Field | Example | Meaning |
|---|---|---|
fullName | Jane Smith | From public profile |
jobTitle | Staff Software Engineer | Headline / jobTitle JSON-LD |
companyName | Stripe | Matched public company |
companyDomain | stripe.com | From company page website field |
linkedinUrl | https://www.linkedin.com/in/... | Source profile |
location | San Francisco Bay Area | Public profile location |
seniority | Senior | Classified from title: C-Level/Director/Manager/Senior/Mid/Other |
email | jane.smith@stripe.com | Best candidate (or listed email) |
email_status | pattern_match | See honesty note above |
email_confidence | 60 | listed_on_profile=99, verified=95, pattern_match=60 |
email_candidates | [...] | Up to 4 generated candidates |
dataSource | public linkedin wayback | How the profile was fetched (direct/proxy/wayback) |
scrapedAt | ISO UTC |
Export as JSON / CSV / Excel from the Output tab, or pull the dataset via API. Failed pages are skipped (not billed, not returned).
๐ Run it
- Console โ open the actor, paste companies, Start, watch the run log, export the dataset.
- API
curl -X POST "https://api.apify.com/v2/acts/sitcod3.lab~linkedin-company-email-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"companies":["stripe"],"maxEmployees":10}'
- Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("sitcod3.lab/linkedin-company-email-scraper").call(run_input={"companies": ["stripe"], "maxEmployees": 10})items = client.dataset(run["defaultDatasetId"]).list_items().items
โ๏ธ Compliance
This actor reads only public, logged-out-visible pages. You are the data controller for anything you collect. Bulk personal data falls under GDPR/CCPA โ establish a lawful basis and honor opt-outs before outreach. Output may not be resold as a database. The tool is not affiliated with or endorsed by LinkedIn. Respect applicable laws and terms when using the data.
๐ Troubleshooting
| Problem | Fix |
|---|---|
no profiles discovered | Search-engine result blocked this IP โ re-run (proxy group rotates) or check RESIDENTIAL is selected |
| Profile rows missing email | findEmails off, or company domain has no MX โ status tells you which |
pattern_match only, never verified | Target mail servers reject RCPT probes (common, by design) โ set verifyEmails:false to save time |
| Slow runs | verifyEmails costs 5โ15 s/contact; disable unless deliverability matters |