Everyone thinks you need LinkedIn cookies or Sales Navigator to scrape employee data. You don't. Here's how to extract names, titles, and profile URLs from any company — using only Google Search.
The Myth: "You Need LinkedIn Cookies"
Most LinkedIn scrapers work like this:
- Log in with your LinkedIn account
- Export cookies/session tokens
- Make requests to LinkedIn's internal API using those cookies
Problems:
- LinkedIn bans accounts that scrape (permanently)
- Cookies expire every few days
- LinkedIn's anti-bot detection is sophisticated
- You're violating LinkedIn's ToS with your personal account
The Reality: Google Already Has the Data
Google indexes millions of public LinkedIn profiles. Search for:
site:linkedin.com/in/ "software engineer" "google"
You'll get hundreds of results like:
John Smith - Software Engineer at Google | LinkedIn
San Francisco Bay Area · 500+ connections · Software Engineer at Google...
That snippet alone gives you: name, title, location, company, and profile URL.
The Technical Approach
Step 1: Build Google SERP URLs
function buildSearchUrl({ companySlug, keywords, location, start }) {
let query = `site:linkedin.com/in/ "${companySlug}"`;
if (keywords) query += ` "${keywords}"`;
if (location) query += ` "${location}"`;
return `https://www.google.com/search?q=${encodeURIComponent(query)}&start=${start * 10}`;
}
Step 2: Parse Profiles from HTML
function extractProfilesFromSerp(html, companySlug) {
const profiles = [];
const urlRegex = /linkedin\.com\/in\/([a-zA-Z0-9_%.-]{3,100})/gi;
let match;
while ((match = urlRegex.exec(html)) !== null) {
const slug = match[1].toLowerCase();
profiles.push({
profileUrl: `https://www.linkedin.com/in/${slug}/`,
fullName: parsedName,
headline: parsedHeadline,
company: companySlug,
});
}
return profiles;
}
Results: What You Actually Get
| Field | Example |
|---|---|
| fullName | Jan Curn |
| headline | VP of Engineering at Apify |
| profileUrl | linkedin.com/in/jancurn/ |
| location | Prague, Czech Republic |
You get ~100 profiles per company per run.
The Easy Way: Use the Hosted Version
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("george.the.developer/linkedin-employee-scraper").call(run_input={
"companies": ["https://www.linkedin.com/company/google/"],
"searchQuery": "VP Sales",
"location": "United States",
"maxEmployees": 100,
})
for emp in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{emp['fullName']} — {emp['headline']}")
Cost: ~$3 per 1,000 profiles.
Why This Matters for Sales Teams
| Method | Cost/1K leads | Risk | Data depth |
|---|---|---|---|
| This approach | $3 | None | Name, title, URL |
| Sales Navigator | $99/mo | Medium | Full profile |
| Cookie scrapers | $10-50 | Account ban | Full profile |
Source Code
Full implementation: github.com/the-ai-entrepreneur-ai-hub/linkedin-employee-scraper
Run it now: apify.com/george.the.developer/linkedin-employee-scraper
Also available as an API on RapidAPI.
Have you tried scraping LinkedIn without cookies? What approach worked for you?
Top comments (0)