linkedinb2blead genscrapingenrichment

How to Scrape LinkedIn Profiles and Companies at Scale in 2026

Extract public LinkedIn profile and company data programmatically using Seek API workers. No browser automation required.

S
Seek API Team
·

LinkedIn is the world’s largest professional database. Names, titles, companies, skills, email signals, funding history, employee counts — it’s all there, publicly visible, and enormously valuable for B2B sales and recruiting.

Extracting that data in bulk, without violating LinkedIn’s terms or getting your IP blocked, is the challenge.

What public LinkedIn data looks like

LinkedIn distinguishes between:

  • Public profile data: name, headline, location, current company, skills, education (visible to anyone, logged in or not)
  • Contact info: sometimes visible on profiles
  • Company pages: name, size, industry, website, description, employee count — fully public

Workers on Seek API only target this public-facing data — the same data any logged-in user sees on a profile or company page.

Profile enrichment use case

The most common use case is enrichment: you have a list of LinkedIn profile URLs (or names + companies), and you want structured data back for each one.

curl -X POST https://api.seek-api.com/v1/workers/linkedin-enricher/jobs \
  -H "X-Api-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "profileUrl": "https://linkedin.com/in/example-username"
  }'

Result:

{
  "name": "Marc Dupont",
  "headline": "Head of Growth at Clarabridge",
  "location": "Paris, France",
  "currentCompany": "Clarabridge",
  "currentTitle": "Head of Growth",
  "skills": ["B2B SaaS", "Demand Generation", "HubSpot", "SQL"],
  "education": [{ "school": "HEC Paris", "degree": "MSc Management" }],
  "connections": "500+"
}

Batch enrichment with async jobs

For lists of 100+ profiles, you can submit one job per profile and poll in parallel — or use a batch worker that accepts an array of URLs.

const profiles = [
  "https://linkedin.com/in/profile-a",
  "https://linkedin.com/in/profile-b",
  // ...
];

const jobUuids = await Promise.all(
  profiles.map(async (url) => {
    const res = await fetch(
      'https://api.seek-api.com/v1/workers/linkedin-enricher/jobs',
      {
        method: 'POST',
        headers: {
          'X-Api-Key': process.env.SEEK_API_KEY,
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({ profileUrl: url }),
      }
    );
    const { job_uuid } = await res.json();
    return job_uuid;
  })
);

Then poll all jobs. Because each job runs independently, a 100-profile enrichment completes in roughly the same time as a single profile.

Company data extraction

Company workers work the same way:

curl -X POST https://api.seek-api.com/v1/workers/linkedin-company-scraper/jobs \
  -H "X-Api-Key: YOUR_KEY" \
  -d '{"companyUrl": "https://linkedin.com/company/stripe"}'

Returns: name, tagline, industry, employee count, founded year, website, follower count, recent posts summary.

Practical workflows

CRM enrichment: Import a CSV of LinkedIn URLs, run them through the enricher, write results back to your CRM. Works with HubSpot, Salesforce, Notion, Airtable — anywhere you can read/write via API.

Recruiting pipeline: Search for candidates matching criteria, extract their profiles in bulk, filter by skills/location/title, and surface the best matches to your recruiter without manual browsing.

Account-based marketing: Build a target account list, extract company employees by title (VP, Director, Head of), and route leads to the right AE.

Rate and cost

LinkedIn enrichment costs $0.005 per profile. Enriching 1,000 leads costs $5. There’s no monthly minimum — you pay only for what you run.

For comparison, most B2B data vendors charge $0.10–$0.50 per enriched contact. The Seek API worker costs 10–100× less and uses the same public data source.