LinkedIn Jobs Scraper — No Login · $0.0006/Job
Pricing
from $0.60 / 1,000 job posting scrapeds
LinkedIn Jobs Scraper — No Login · $0.0006/Job
Search LinkedIn Jobs by keyword and location: title, company, salary, posting date and URL. No login required. $0.0006 per job, 40% cheaper than the leading listing.
LinkedIn Jobs Scraper — No Login · Keyword & Location Search
Search LinkedIn Jobs by keyword and location and get structured job postings back in seconds: title, company, location, salary (when LinkedIn shows it), posting date and the direct job URL. No LinkedIn login, no cookies, no LinkedIn API access required.
Why use this scraper
LinkedIn's own Jobs API is not publicly available for search use cases, and most "LinkedIn jobs" tools either require you to authenticate with a real LinkedIn account (risking a ban) or charge a flat monthly subscription regardless of how many jobs you actually pull. This Actor:
- Needs no login, no session cookie, no LinkedIn account.
- Charges per job posting actually returned, not a flat monthly fee.
- Takes a keyword + location and paginates automatically up to your
maxItemslimit. - Returns a stable
jobIdyou can use to deduplicate across runs when tracking a market over time.
Overview
The Actor queries LinkedIn's public job-search results pages for the given keyword and location, paginating in batches until it collects maxItems unique postings or runs out of results. Each result card is parsed with Cheerio for job title, company, location, salary range (when LinkedIn discloses it on the results page), posting date and the canonical job URL. Requests go through an unlocking proxy layer with retries and a direct-fetch fallback, so transient blocks don't fail the whole run.
Supported inputs
| Field | Type | Description |
|---|---|---|
keyword | string (required) | Job title or search term, e.g. data analyst, software engineer |
location | string | Location filter, e.g. United States, Sao Paulo, Remote |
maxItems | integer | Maximum number of job postings to return (1–300) |
Use cases
- Job market research — pull hundreds of postings for a role and region to analyze which companies are hiring, at what volume, and for what titles.
- Salary benchmarking — collect the salary ranges LinkedIn discloses for a given role/location combination to inform compensation decisions.
- Recruiting and sourcing pipelines — feed fresh job postings into an ATS or CRM to identify companies actively hiring in a target niche (useful for both recruiters and sales teams selling to growing companies).
- Job board or aggregator — power a niche job board (e.g. remote-only, a specific city, a specific industry) with a daily scheduled run, deduplicating on
jobId.
How it works
- The Actor builds LinkedIn's public "jobs-guest" search endpoint URL from
keywordandlocation. - It fetches results in pages of 25 through an unlocking proxy layer (3 retries with backoff, then a direct-fetch fallback if the proxy is unavailable).
- Each result card is parsed with Cheerio: title, company, location, posting date (
<time datetime>), salary text (when shown) and the job's entity URN, from which a stable numericjobIdis extracted. - Pagination continues until
maxItemsunique jobs (deduplicated byjobId) are collected or LinkedIn stops returning new results. - One JSON item is pushed to the dataset per job posting.
Input configuration — 3 examples
Mode 1 — keyword only, default volume:
{"keyword": "data analyst","maxItems": 50}
Mode 2 — keyword + location, larger pull:
{"keyword": "software engineer","location": "Remote","maxItems": 200}
Mode 3 — narrow regional search:
{"keyword": "operations manager","location": "Sao Paulo, Brazil","maxItems": 30}
Output sample
Real output from a smoke test run (keyword: "data analyst", location: "United States"), unedited:
{"keyword": "data analyst","jobId": "4444390846","title": "Enterprise Data Analyst","company": "Husch Blackwell","location": "Washington, DC","salary": null,"url": "https://www.linkedin.com/jobs/view/enterprise-data-analyst-at-husch-blackwell-4444390846","postedAt": "2026-09-05","scrapedAt": "2026-09-25T07:19:12.992Z"}
{"keyword": "data analyst","jobId": "4469298297","title": "Operations Data Analyst","company": "1-800 Contacts","location": "Draper, UT","salary": null,"url": "https://www.linkedin.com/jobs/view/operations-data-analyst-at-1-800-contacts-4469298297","postedAt": "2026-09-19","scrapedAt": "2026-09-25T07:19:12.996Z"}
Key output fields
| Field | Type | Description |
|---|---|---|
keyword | string | The search keyword used for this job |
jobId | string | Stable numeric LinkedIn job ID, extracted from the posting's entity URN — use it to deduplicate across runs |
title | string | Job title as posted |
company | string | null | Hiring company name |
location | string | null | Job location as shown on the listing |
salary | string | null | Salary range text, only present when LinkedIn discloses it on the results page |
url | string | Direct URL to the job posting |
postedAt | string | null | ISO date LinkedIn attaches to the posting |
scrapedAt | string | ISO timestamp of the extraction |
Pricing
Pay per event, no subscription. You are charged once per run for the Actor start, and once per job posting actually returned.
| Event | Price | When |
|---|---|---|
| Actor start | $0.005 | Once per run |
| Job posting scraped | $0.0006 | Per job returned |
Example: a run that returns 200 job postings costs $0.005 + 200 × $0.0006 = $0.125 — about $0.62 per 1,000 postings.
What makes this richer than the competition
Compared with the two closest listings for the same target on the Apify Store:
- vs. the official LinkedIn Jobs Scraper (curious_coder, $0.001/result): this Actor prices job postings at $0.0006 each (40% cheaper) with the same core fields (title, company, location, salary, posting date, URL) and no login requirement.
- vs. 🔥 LinkedIn Jobs Scraper (bebity, flat $29.99/month subscription): this Actor has no subscription and no minimum commitment — pay only for the jobs you actually pull, which is materially cheaper for anyone running occasional or small searches instead of a constant high-volume pipeline.
Notes & limitations
- LinkedIn's public jobs-guest search pages are the data source; results match what an unauthenticated visitor sees, which is typically the same postings shown to logged-out search engines.
- Salary is only returned when LinkedIn itself discloses it on the results page (
salary: nullotherwise) — this Actor does not infer or estimate salary. - Very broad keyword + no location can return a large result set; use
locationto narrow the search and reduce cost. - On the Apify Free plan,
maxItemsis capped at 10 postings per run regardless of the input value. - LinkedIn periodically changes its markup; if a run returns 0 results for a keyword known to have open postings, that is a signal the selectors may need an update rather than a real absence of jobs.
FAQ
Do I need a LinkedIn account or login? No. The Actor reads LinkedIn's public, unauthenticated job-search results pages — no session, no cookies, no login wall.
How do I avoid duplicate jobs across daily runs?
Deduplicate on jobId, which is a stable numeric ID extracted from each posting's entity URN and does not change between runs.
Can I search multiple keywords or locations in one run?
Each run takes a single keyword + location pair; for multiple combinations, run the Actor once per combination (via the API or a batch of Schedule triggers) or an orchestration script.
Why is salary null for most jobs?
LinkedIn only shows salary information for a subset of postings (often where required by local pay-transparency law); when it is absent from the results page, this Actor returns null rather than guessing.
Is there a limit on how many jobs I can pull per run?
Up to 300 via maxItems. For larger volumes, split across multiple runs by location or narrower keywords.
Can I run this on a schedule to track new postings over time?
Yes. Add an Apify Schedule with the same keyword/location input, and deduplicate incoming items against previously seen jobId values (in a Key-Value Store or your own database) to isolate only the new postings each run.
For AI Agents & LLM Apps
This Actor is Apify MCP-compatible and can be called directly from an LLM agent:
- Via Apify MCP (
mcp.apify.com): addgio21/linkedin-jobs-scraperas a tool and pass{"keyword": "data analyst", "location": "United States", "maxItems": 50}as the call arguments. - Via API (no MCP needed):
POSTtorun-sync-get-dataset-itemsand read the response body directly as JSON:
curl -X POST "https://api.apify.com/v2/acts/gio21~linkedin-jobs-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"keyword": "data analyst", "location": "United States", "maxItems": 50}'
Disclaimer
This Actor is an independent tool that reads publicly available LinkedIn job-search result pages. It is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation or Microsoft. "LinkedIn" and related marks are trademarks of LinkedIn Corporation. Use this Actor in accordance with LinkedIn's Terms of Service and applicable data protection law; only public data is collected.
SEO Keywords
linkedin jobs scraper, linkedin job search api, scrape linkedin jobs, linkedin job postings data, linkedin job board scraper, no login linkedin scraper, linkedin job listings api, job market research tool, linkedin recruiting data, salary benchmarking linkedin