DEV Community

The AI Entrepreneur
The AI Entrepreneur

Posted on

I Scraped 10,000 LinkedIn Employees Without Login — Here's How

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:

  1. Log in with your LinkedIn account
  2. Export cookies/session tokens
  3. 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"
Enter fullscreen mode Exit fullscreen mode

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}`;
}
Enter fullscreen mode Exit fullscreen mode

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;
}
Enter fullscreen mode Exit fullscreen mode

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']}")
Enter fullscreen mode Exit fullscreen mode

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)