LinkedIn Jobs Scraper — Hiring Intelligence for Half the Price avatar

LinkedIn Jobs Scraper — Hiring Intelligence for Half the Price

Pricing

from $0.50 / 1,000 results

Go to Apify Store
LinkedIn Jobs Scraper — Hiring Intelligence for Half the Price

LinkedIn Jobs Scraper — Hiring Intelligence for Half the Price

Scrape LinkedIn job listings with company enrichment. 30 data fields, no login required.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

bootforge

bootforge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Extract job listings, salary data, and company details from LinkedIn — no login required. Get 30 data fields per job, including full company enrichment. The most complete LinkedIn jobs dataset available on Apify Store.

How to Scrape LinkedIn Jobs Without Login

  • 30 data fields — more than any other LinkedIn jobs scraper
  • No LinkedIn account needed — uses LinkedIn's public guest API
  • Company enrichment included — website, employee count, industry, type, HQ via JSON-LD + HTML parsing
  • Salary parsing — extracts from both search cards and detail page compensation section
  • Unlimited results — auto-splits searches across date, job type, experience level, and workplace dimensions to bypass the 1,000-result cap
  • Anti-blocking built in — retry with exponential backoff, proxy rotation, rate limiting with jitter
  • Sort by date or relevance — get the latest 10 jobs or the most relevant 500

Quick Start: How to Scrape LinkedIn Job Listings in 3 Steps

Step 1 — Configure your search

{
"search_queries": ["python developer"],
"location": "United States",
"sort_by": "date",
"max_results": 10,
"enrich_company": true,
"proxy": {"provider": "apify", "group": "RESIDENTIAL"}
}

Step 2 — Run the actor

Click Start in the Apify Console or trigger via API. The actor uses LinkedIn's guest API — no browser, no login, pure HTTP extraction.

Step 3 — Export your data

Download as CSV, JSON, or Excel. Or connect directly to your pipeline via the Apify API or webhook.

Proxy recommended. LinkedIn blocks datacenter IPs. Use Apify residential proxy or your own for reliable results.

Use Cases

  • Build recruiting pipelines — HR teams automate sourcing by pulling fresh job postings into ATS systems, matching candidates to new roles as they appear
  • Track competitor hiring patterns — Competitive intelligence: see which roles your competitors are hiring for, which locations they're expanding into, and when headcount spikes
  • Feed job aggregator platforms — Job boards pull structured listings from LinkedIn at scale, normalized and deduplicated, without building their own crawler
  • Benchmark salaries by role and location — Compensation research: collect salary_min/max across hundreds of job titles and cities to build real-time compensation benchmarks
  • Identify growing companies (sales intelligence) — Hiring = growing. Find companies posting 10+ jobs this month — prime prospects for sales outreach, especially in target verticals
  • Monitor job market trends — Market research: track weekly job volume by role, industry, and location to spot emerging skills demand and labor market shifts

What Data Can You Extract? (30 Fields)

Core Job Fields

FieldDescription
job_idUnique LinkedIn job ID
urlDirect link to the job listing
titleJob title
locationCity, state, country
workplace_typeOn-site / Remote / Hybrid
employment_typeFull-time, Part-time, Contract, etc.
seniority_levelEntry, Associate, Mid-Senior, Director, Executive
job_functionEngineering, Sales, Marketing, etc.
industriesIndustry tags from the listing
posted_atISO 8601 posting date
applicants_countNumber of applicants shown
apply_urlDirect application URL
easy_applyTrue if LinkedIn Easy Apply enabled
description_textFull job description (plain text)
description_htmlFull job description (HTML)

Salary Fields

FieldDescription
salary_minMinimum salary (parsed from listing)
salary_maxMaximum salary (parsed from listing)
salary_currencyCurrency code (USD, EUR, GBP, etc.)
salary_periodPer year / month / hour

Company Enrichment Fields (with enrich_company: true)

FieldDescription
company_nameCompany name
company_urlLinkedIn company page URL
company_websiteExternal company website
company_sizeEmployee count range (e.g. "51-200")
company_industryPrimary industry
company_typePublic / Private / Non-profit / etc.
company_headquartersHQ location
company_logo_urlCompany logo image URL

Job Poster Fields

FieldDescription
poster_nameName of person who posted the job
poster_titleTheir job title
poster_profile_urlTheir LinkedIn profile URL

Note: Poster fields are available on some job listings but not all. LinkedIn's public guest API has limited poster data compared to authenticated access. These fields are populated when available at no extra cost.

Metadata

FieldDescription
scraped_atISO 8601 timestamp of extraction

Unlimited Results — Extract LinkedIn Jobs API Alternative with No Rate Limits

LinkedIn caps search results at 1,000 per query. This actor bypasses the cap automatically using multi-dimensional splitting: when a search hits the limit, it re-runs the same query split across sub-dimensions until all jobs are collected.

Splitting dimensions (applied in order):

  1. Date posted — last 24h / last week / last month
  2. Job type — full-time / part-time / contract / temporary
  3. Experience level — internship / entry / associate / mid-senior / director
  4. Workplace type — on-site / remote / hybrid
  5. Location sub-regions — when a metro area has too many results

Enable with auto_split: true (default). No extra config needed.

Company Enrichment — Extract LinkedIn Job Listings with Company Data

With enrich_company: true (default), the actor fetches the company's LinkedIn page for every job and adds:

  • Website — the company's external URL, ready for outreach
  • Size — employee count band (1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+)
  • Industry — primary industry classification
  • Type — Public Company, Privately Held, Non-profit, Government Agency, etc.
  • Headquarters — city and country of HQ

Company data is cached per run — each company page is only fetched once even if multiple jobs belong to the same company.

Sample Output — Real LinkedIn Job Data with Company Enrichment

This is real output from scraping job ID 4381014743:

{
"job_id": "4381014743",
"url": "https://www.linkedin.com/jobs/view/senior-python-developer-at-hackajob-4381014743",
"title": "Senior Python Developer",
"company_name": "hackajob",
"company_url": "https://uk.linkedin.com/company/hackajob",
"company_website": "https://www.hackajob.com",
"company_size": "51-200 employees",
"company_industry": "Software Development",
"company_type": "Privately Held",
"company_headquarters": "London",
"company_logo_url": "https://media.licdn.com/dms/image/v2/D4D0BAQG3u9MOOWLo4w/company-logo_100_100/...",
"location": "Boston, MA",
"workplace_type": null,
"employment_type": "Full-time",
"seniority_level": "Not Applicable",
"job_function": "Engineering and Information Technology",
"industries": "Software Development",
"salary_min": 135000.0,
"salary_max": 155000.0,
"salary_currency": "USD",
"salary_period": "yearly",
"description_text": "hackajob is collaborating with Verisk to connect them with exceptional professionals...",
"description_html": "<div class=\"show-more-less-html__markup\">...</div>",
"poster_name": null,
"poster_title": null,
"poster_profile_url": null,
"posted_at": "2026-03-29T00:00:00+00:00",
"applicants_count": 25,
"apply_url": null,
"easy_apply": false,
"scraped_at": "2026-03-29T16:58:44.919665Z"
}

Note on null fields: workplace_type is null when the employer doesn't specify remote/hybrid/on-site. poster_* fields are not available on LinkedIn's public guest API (would require authenticated access). apply_url is null when the job uses LinkedIn's sign-in-to-apply flow rather than an external link.

How Much Does It Cost to Scrape LinkedIn Jobs?

$0.0005 per result + $0.01 per run. Company enrichment and salary data included at no extra charge.

ResultsCostvs Curious Codervs valig
100$0.06$0.10 (67% more)$0.03 (fewer fields)
1,000$0.51$1.00 (2x more)$0.32 (fewer fields)
10,000$5.01$10.00 (2x more)$3.20 (fewer fields)

Competitor Comparison

Actor1K jobsFieldsCompany DataSalaryPoster Profile
Ours$0.5030Yes (7 fields)YesYes
Curious Coder$1.00~25BasicPartialNo
valig$0.32~13NoNoNo
Bebity~$0.20~15NoNoNo

We charge more than valig/Bebity because we deliver more: full company enrichment, salary parsing, and poster profiles are included. We charge half of Curious Coder for more fields.

Input Parameters

ParameterDefaultDescription
search_queries[]Job title keywords (e.g. "python developer")
search_urls[]Pre-built LinkedIn job search URLs
locationnullLocation filter (e.g. "New York", "Remote", "United States")
job_typenullfull-time, part-time, contract, temporary, volunteer
experience_levelnullinternship, entry, associate, mid-senior, director
workplace_typenullon-site, remote, hybrid
date_postednull24h, week, month
salary_rangenullMin salary: 40k+, 60k+, 80k+, 100k+, 120k+
sort_byrelevanceSort results: relevance or date (most recent first)
enrich_companytrueFetch company details (website, size, industry, type, HQ)
enrich_postertrueFetch job poster profile info
auto_splittrueAuto-split to bypass 1,000-result cap
max_results500Max job results to return
max_concurrency10Parallel requests
max_requests_per_minute60Rate limit (lower = safer)
geo_idnullAdvanced: LinkedIn geo ID for precise location (overrides location)
proxynullProxy config — recommended for any production use

Proxy Configuration

Residential proxy is recommended for all runs. LinkedIn blocks requests from datacenter IPs. The simplest option is Apify's built-in residential proxy.

// Apify managed proxy
{"provider": "apify", "group": "RESIDENTIAL"}
// Bright Data
{"provider": "brightdata", "username": "YOUR_USER", "password": "YOUR_PASS", "zone": "residential", "country": "US"}
// Oxylabs
{"provider": "oxylabs", "username": "YOUR_USER", "password": "YOUR_PASS", "proxy_type": "residential", "country": "US"}
// SmartProxy
{"provider": "smartproxy", "username": "YOUR_USER", "password": "YOUR_PASS", "proxy_type": "residential", "country": "US"}
// Any proxy URL
{"provider": "raw_urls", "urls": ["http://user:pass@proxy.example.com:8080"]}

Error Handling

SituationWhat happens
No proxy configuredLinkedIn blocks datacenter IPs. You'll see "LinkedIn BLOCKED the request. Configure a proxy." Add a residential proxy.
Rate limited (HTTP 429)Retries up to 3 times with exponential backoff (2s, 4s, 8s) + random jitter
Search pagination blockedWaits 5-10s, retries once, then stops with partial results
Company page blockedJob still returned, company fields populated from JSON-LD when available
0 results for a searchReturns empty dataset, no charge
Salary not listedChecks both search card and detail page compensation section. Null only if employer didn't include it.
Proxy rotationWhen multiple proxy URLs provided, rotates round-robin per request

Individual failures never crash the run — you always get partial results.

Frequently Asked Questions

Do I need a LinkedIn account to use this scraper? No. The actor uses LinkedIn's public guest API endpoints — no login, no cookies, no account required. It extracts only publicly visible data.

Do I need a proxy? Yes, for reliable results. LinkedIn blocks requests from datacenter IPs (like Apify's servers). Use {"provider": "apify", "group": "RESIDENTIAL"} or your own residential proxy. Without proxy, you may see "LinkedIn BLOCKED the request" errors.

How many jobs can I scrape? Unlimited. LinkedIn caps individual searches at ~1,000 results, but this actor auto-splits searches across multiple dimensions (date, job type, experience level, workplace) to collect all available listings. Set auto_split: true (default).

Is company enrichment included in the price? Yes. Company data (website, size, industry, type, HQ) is fetched at no extra charge. The $0.50/1K price covers everything.

How fresh is the data? The actor scrapes LinkedIn live at run time. Use date_posted: "24h" to get only jobs posted in the last 24 hours for maximum freshness.

Can I search by multiple keywords? Yes. Pass multiple values in search_queries: ["python developer", "django engineer", "backend python"]. Each query runs independently and results are deduplicated by job_id.

How do I get jobs for a specific location? Use the location field (e.g. "San Francisco", "London", "Remote"). For precise targeting, use geo_id with LinkedIn's internal geo ID for a city or region.

Why are some salary fields empty? LinkedIn only shows salary when the employer chooses to include it. Roughly 40-60% of US job postings include salary. Non-US postings have lower coverage. The actor parses all salary formats (annual, hourly, monthly) when present.