LinkedIn Jobs Scraper — Hiring Intelligence for Half the Price
Pricing
from $0.80 / 1,000 results
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.80 / 1,000 results
Rating
0.0
(0)
Developer
bootforge
Maintained by CommunityActor stats
0
Bookmarked
20
Total users
4
Monthly active users
5 days ago
Last modified
Categories
Share
LinkedIn Jobs Scraper
The LinkedIn Jobs Scraper is an Apify actor that extracts job listings from LinkedIn by keyword search, location, or a pre-built search URL — no login and no LinkedIn account required. It returns 33 flat fields per job, including title, location, salary, applicant count, full job description, recruiter info, and complete company enrichment (website, employee count, industry, type, HQ).
Use it to build recruiting pipelines, track competitor hiring, feed a job board, or benchmark salaries by role and location — exported to JSON, CSV, or Excel, or pulled from the Apify API.
Table of contents
- What the LinkedIn jobs scraper does
- How to scrape LinkedIn jobs
- LinkedIn jobs scraper input
- LinkedIn jobs data output
- How much it costs
- Recommended proxies for LinkedIn jobs
- Why this LinkedIn jobs scraper
- FAQ
- Rate this actor
- Related actors
What the LinkedIn jobs scraper does
- 🔎 Keyword + location search — search by job title and filter by location, job type, experience level, workplace type, date posted, and minimum salary.
- 🔓 No login required — uses LinkedIn's public guest API; no account, cookies, or
li_attoken needed. - 🏢 Company enrichment — for every job, adds website, employee count, industry, type, HQ, founded year, and logo from the company page (cached once per company per run).
- 💰 Salary parsing — extracts min/max, currency, and period from both the search card and the detail-page compensation section.
- ♾️ Unlimited results — auto-splits searches across date, job type, experience level, and workplace to bypass LinkedIn's 1,000-result cap.
- 🛡️ Anti-blocking built in — TLS-fingerprinted HTTP (
curl_cffi), retry with exponential backoff, proxy rotation, and rate limiting with jitter. - 🔗 Search-URL support — paste saved LinkedIn search URLs for precise filter control.
How to scrape LinkedIn jobs
- Click Try for free and open the actor.
- Enter one or more
search_queries(e.g.python developer) or pastesearch_urls. - Set
location(e.g.United States,Remote,London, UK) and any filters you need. - Choose
sort_by—datefor the freshest postings,relevancefor best-match. - Keep
enrich_companyon for the full company dataset; add a residentialproxy. - Click Start, then export results as JSON, CSV, or Excel, or pull them from the Apify API.
{"search_queries": ["python developer"],"location": "United States","sort_by": "date","max_results": 100,"enrich_company": true,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
LinkedIn jobs scraper input
| Field | Description |
|---|---|
search_queries | Job-title keywords (e.g. python developer). Each query runs separately; results merge and dedupe by job_id. |
search_urls | Pre-built LinkedIn job-search URLs — use saved searches or precise URL-parameter filters. |
location | Location text, e.g. New York, Remote, United States. Empty = global. |
geo_id | Advanced: LinkedIn's internal geo ID for exact targeting (overrides location). |
job_type | full-time, part-time, contract, temporary, volunteer, internship. |
experience_level | internship, entry, associate, mid-senior, director, executive. |
workplace_type | on-site, remote, hybrid. |
date_posted | 24h, week, month — filter by posting recency. |
salary_range | Minimum salary band: 40k+, 60k+, 80k+, 100k+, 120k+ (USD/year). |
sort_by | relevance (default) or date (most recent first). |
enrich_company | Add company website, size, industry, type, HQ (default true). |
enrich_poster | Add job-poster name, title, profile URL when available (default true). |
auto_split | Bypass the 1,000-result cap by splitting the search across dimensions (default true). |
split_by | Dimension to split by when auto-split is on: date_posted, job_type, workplace_type. Leave empty to let the scraper decide. |
max_results | Cap total results across all queries (default 500, max 10,000). |
max_concurrency | Parallel requests (default 10, max 30). |
max_requests_per_minute | Rate limit (default 60; lower = safer). |
cache_provider | Cache enrichment data (company/poster info) to speed up repeat runs: memory (default, within-run only), file (persists to disk, CLI/local), apify (persists across runs via Key-Value Store). |
transport | HTTP engine used to fetch pages. auto (default, recommended) uses curl_cffi, the verified-best transport for LinkedIn. Pin a specific transport only if you know why. |
strategy_mode | Retry ordering: cost_first (default) favors the cheapest working path. |
request_delay | Fixed delay (seconds) inserted between requests. 0 (default) = no added delay beyond max_requests_per_minute. |
proxy | Proxy config — residential recommended for all runs. |
LinkedIn jobs data output
Each job is one flat, CSV-friendly dataset row with 33 fields (4 core, 9 company, 6 job metadata, 4 salary, 2 description, 3 poster, 4 engagement, scraped_at). Real output from 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_founded": null,"company_description": null,"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"}
| Field group | Fields |
|---|---|
| Core | job_id, url, title, company_name |
Company (enrich_company) | company_url, company_website, company_size, company_industry, company_type, company_headquarters, company_founded, company_description, company_logo_url |
| Job metadata | location, workplace_type, employment_type, seniority_level, job_function, industries |
| Salary | salary_min, salary_max, salary_currency, salary_period |
| Description | description_text, description_html |
Poster (enrich_poster) | poster_name, poster_title, poster_profile_url |
| Engagement | posted_at, applicants_count, apply_url, easy_apply |
| Metadata | scraped_at |
Null fields are expected, not errors: workplace_type is null when the employer doesn't specify remote/hybrid/on-site; apply_url is null on LinkedIn's sign-in-to-apply flow; salary_* is null when the employer didn't list pay; poster_* depends on what the public guest API exposes for that listing. Company enrichment is included at no extra charge.
How much it costs
This actor uses pay-per-result pricing (Apify pay-per-event, one charge per dataset item) — you pay for the jobs you collect, not for compute time. Company enrichment, salary parsing, and poster info are included at no extra charge.
| Event | USD |
|---|---|
| Actor start (per GB memory, default 2 GB → $0.02/run) | $0.01 |
| Per LinkedIn job result (33-field enriched record) | $0.001 |
| Typical run | Cost |
|---|---|
| 100 jobs | ~$0.12 |
| 1,000 jobs | ~$1.02 |
| 10,000 jobs | ~$10.02 |
The per-result price is all-in — there is no separate platform-usage line item on top. (Apify Proxy traffic, if you use the platform's residential proxy, is billed separately by Apify.)
Recommended proxies for LinkedIn jobs
LinkedIn blocks datacenter IPs, so a residential proxy is recommended for every run. This actor supports Apify Proxy natively — the simplest option is Apify's managed residential pool, which the input prefills:
{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
If you run your own scrapers (inside or outside Apify) and want reliable residential IPs for LinkedIn or other sites, DataImpulse offers pay-as-you-go residential proxies with per-country targeting and no monthly minimum:
👉 Get DataImpulse residential proxies (referral link)
You can also plug in your own provider via the proxy config — Bright Data, Oxylabs, SmartProxy, or any raw proxy URL.
Why this LinkedIn jobs scraper
- No login, no cookies — runs entirely on LinkedIn's public guest API, so there's no account to get flagged and no
li_attoken to manage. - Full company dataset, free — website, size, industry, type, HQ, and logo come with every job, cached once per company per run.
- Bypasses the 1,000-result cap — multi-dimensional auto-split (date → job type → experience → workplace) collects everything a single search would truncate.
- Salary from two sources — parses the search card and the detail-page compensation section, in annual, monthly, or hourly form.
- Resilient by design — individual failures never crash the run; you always get partial results with retry, backoff, and proxy rotation.
- Open source — the underlying
linkedin-scraperPython package ships a Typer CLI and a FastAPI server; the Apify wrapper is a thin layer.
FAQ
Do I need a LinkedIn account or login?
No. The actor uses LinkedIn's public guest job endpoints — no account, no cookies, no li_at token. It reads only publicly visible listing and company data, so there's nothing to authenticate and no session to get flagged.
Do I need a proxy?
Yes, for reliable results. LinkedIn blocks datacenter IPs like Apify's servers. Use the prefilled Apify residential proxy ({"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}) or your own residential provider. Without one you'll likely see "LinkedIn BLOCKED the request".
How many jobs can I scrape?
Effectively unlimited. LinkedIn caps a single search at ~1,000 results, but with auto_split: true (default) the actor re-runs each query split across date, job type, experience level, and workplace to collect everything, deduplicated by job_id.
Why are some salary or company fields empty? LinkedIn only shows salary when the employer includes it (roughly 40-60% of US postings, lower elsewhere). Company fields fall back to JSON-LD when the full page is unavailable. Nulls reflect missing source data, not a scraper failure.
Is scraping LinkedIn jobs legal? This actor collects only publicly available job and company data. You are responsible for complying with LinkedIn's terms and applicable laws. Do not collect personal data without a lawful basis, and avoid using output in ways that violate privacy or anti-discrimination rules.
Which proxies work best? Residential proxies with per-country targeting. Apify's managed residential pool works out of the box; for your own runs, DataImpulse (referral link) provides pay-as-you-go residential IPs with no monthly minimum.
Rate this actor ⭐
If the LinkedIn Jobs Scraper saved you time, please leave a review on its Apify Store page — ratings help other people find it and tell us what to build next. Hit a bug or missing field? Open an issue through the actor's Issues tab and we'll fix it fast — recency and reliability are what keep this actor ranking.
Related actors
Building a full data pipeline? Pair this actor with our other scrapers — same proxy config format, same Pydantic-validated output, all open source.
- LinkedIn Profile Scraper — scrape LinkedIn profiles via your
li_atcookie: structured fields, full experience history, optional email/phone/contact enrichment. - Indeed Job Scraper — Indeed job listings with structured salary across 10 country storefronts, Cloudflare-safe.
- Google Maps Business & Contact Scraper — scrape Google Maps businesses with emails, phone numbers, reviews, images, and social links.