LinkedIn Jobs Scraper — No Login · $0.0006/Job avatar

LinkedIn Jobs Scraper — No Login · $0.0006/Job

Pricing

from $0.60 / 1,000 job posting scrapeds

Go to Apify Store
LinkedIn Jobs Scraper — No Login · $0.0006/Job

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.

Pricing

from $0.60 / 1,000 job posting scrapeds

Rating

0.0

(0)

Developer

Gio

Gio

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

0

Monthly active users

16 days ago

Last modified

Categories

Share

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 maxItems limit.
  • Returns a stable jobId you 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

FieldTypeDescription
keywordstring (required)Job title or search term, e.g. data analyst, software engineer
locationstringLocation filter, e.g. United States, Sao Paulo, Remote
maxItemsintegerMaximum number of job postings to return (1–300)

Use cases

  1. 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.
  2. Salary benchmarking — collect the salary ranges LinkedIn discloses for a given role/location combination to inform compensation decisions.
  3. 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).
  4. 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

  1. The Actor builds LinkedIn's public "jobs-guest" search endpoint URL from keyword and location.
  2. 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).
  3. 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 numeric jobId is extracted.
  4. Pagination continues until maxItems unique jobs (deduplicated by jobId) are collected or LinkedIn stops returning new results.
  5. 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

FieldTypeDescription
keywordstringThe search keyword used for this job
jobIdstringStable numeric LinkedIn job ID, extracted from the posting's entity URN — use it to deduplicate across runs
titlestringJob title as posted
companystring | nullHiring company name
locationstring | nullJob location as shown on the listing
salarystring | nullSalary range text, only present when LinkedIn discloses it on the results page
urlstringDirect URL to the job posting
postedAtstring | nullISO date LinkedIn attaches to the posting
scrapedAtstringISO 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.

EventPriceWhen
Actor start$0.005Once per run
Job posting scraped$0.0006Per 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: null otherwise) — this Actor does not infer or estimate salary.
  • Very broad keyword + no location can return a large result set; use location to narrow the search and reduce cost.
  • On the Apify Free plan, maxItems is 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): add gio21/linkedin-jobs-scraper as a tool and pass {"keyword": "data analyst", "location": "United States", "maxItems": 50} as the call arguments.
  • Via API (no MCP needed): POST to run-sync-get-dataset-items and 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