LinkedIn Jobs Scraper avatar

LinkedIn Jobs Scraper

Pricing

from $0.20 / 1,000 results

Go to Apify Store
LinkedIn Jobs Scraper

LinkedIn Jobs Scraper

Scrape LinkedIn job search results by URL, no login needed. Get title, company, logo, location, post date, applicants, seniority, employment type, job function, industry, salary & currency, full description, and Easy Apply flag, one item per job. Proxy support and automatic retries.

Pricing

from $0.20 / 1,000 results

Rating

0.0

(0)

Developer

Itamar Toledano

Itamar Toledano

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

What is LinkedIn Jobs Scraper and how does it work?

LinkedIn Jobs Scraper is an Apify Actor that extracts structured job listings from a LinkedIn job search, without logging in.

Paste a LinkedIn job search URL, configure a proxy, and run the Actor. It loads LinkedIn's public (guest) search page with a browser-like HTTP client, then opens each job's public posting page for the full details, and stores one dataset item per job. You can download the results from the dataset or pull them through the Apify API.

LinkedIn job search URLs look like this:

https://www.linkedin.com/jobs/search?keywords=Python&location=Germany&position=1&pageNum=0

The host must be www.linkedin.com, the path must be /jobs/search, and the URL needs keywords, location, or both. LinkedIn filters in the query string are kept, so the easiest way to build a URL is to search on LinkedIn while logged out and copy it from the address bar. Useful filters:

FilterExampleMeaning
f_TPRr86400, r604800Posted in the last 24 hours / week (seconds)
f_JTF, P, C, IFull-time, part-time, contract, internship
f_WT1, 2, 3On-site, remote, hybrid
f_E2, 3, 4Entry level, associate, mid-senior

Why scrape LinkedIn jobs?

  • Job market research: who is hiring for a role, where, and at what seniority
  • Salary benchmarking: LinkedIn's base pay ranges, parsed into numbers
  • Lead generation: companies actively hiring, with LinkedIn company links
  • Job alerts & aggregation: combine date filters (f_TPR) with scheduled runs to get fresh postings
  • Competition analysis: applicant counts per job

What data can LinkedIn Jobs Scraper extract?

DataFields
Searchinput, search_keywords, search_location, position
Jobjob_id, job_title, seniority_level, employment_type, job_function, industries, workplace_type
Companycompany_name, company_url, company_logo
Location & datelocation, posted_at, posted_relative, is_new
Competitionapplicants, insights
Salarysalary_text, salary_min, salary_max, salary_type, salary_currency, salary_source
Contentdescription, description_html
Applyjob_url, is_easy_apply
Metahas_details, fetched_at

Card vs. detail fields: the search page gives the title, company, logo, location, dates, and badges. With includeDetails on (the default), each job's posting page adds the description, criteria (seniority, employment type, function, industries), applicants, salary, and apply type, and has_details becomes true.

Notes:

  • salary_* is only filled when LinkedIn shows a pay range (common in the US, UK, and Canada). salary_currency is the ISO code behind the symbol ($ → USD, CA$ → CAD, £ → GBP, € → EUR…), and salary_source is employer for a company-provided range or job_post when LinkedIn found the pay in the post.
  • is_easy_apply is true for LinkedIn Easy Apply jobs and false for jobs that apply on the company's site. LinkedIn only reveals the external apply link to signed-in users, so it isn't returned.
  • workplace_type is filled when the search URL filters on exactly one f_WT value.

How many results can you scrape?

One LinkedIn search page returns up to about 60 jobs. Set maxItems (1–100, default 25) to control how many are saved. For more coverage, run narrower searches (per city, per date range, per job type), for example on a schedule.

How much will it cost?

Each run makes one search request plus one request per job when includeDetails is on (a run with maxItems: 25 makes 26 requests). Turn includeDetails off for a cheaper card-only scrape. Run a few searches first, note the cost per run, and scale from there.

This Actor only reads public job postings that LinkedIn shows to logged-out visitors; it never logs in. Job postings can still contain personal data (e.g. recruiter names), so review LinkedIn's terms and your own compliance requirements (e.g. GDPR). See Apify's post on the legality of web scraping.

How do I scrape jobs on LinkedIn?

  1. Open linkedin.com/jobs/search in a private window, search, and copy the URL
  2. Open LinkedIn Jobs Scraper in Apify Console and paste it into url
  3. Pick maxItems and whether to include job details
  4. Keep the default proxy (Apify residential) or pick your own
  5. Click Start and open the Dataset tab when the run finishes

Tips

  • LinkedIn rate-limits guest traffic per IP. Residential proxies work best for larger or frequent runs.
  • Sign-in walls and rate-limit responses (HTTP 429/999) are detected and retried automatically (default up to 4 attempts).
  • If a single posting page keeps failing, that job is still saved with its search-card fields and has_details: false, so one bad page doesn't fail the run.

Input

FieldRequiredDescription
urlYesHTTPS LinkedIn job search URL (www.linkedin.com/jobs/search?keywords=…&location=…)
maxItemsNoMaximum jobs to save (1–100, default 25)
includeDetailsNoFetch each job's posting page (default true)
proxyConfigurationRecommendedApify Proxy or custom proxy URLs
{
"url": "https://www.linkedin.com/jobs/search?keywords=Python&location=Germany&position=1&pageNum=0",
"maxItems": 25,
"includeDetails": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Sample output

One item per job:

{
"source": "linkedin",
"input": "https://www.linkedin.com/jobs/search?keywords=Python&location=Germany&position=1&pageNum=0",
"search_keywords": "Python",
"search_location": "Germany",
"position": 1,
"job_id": "4467502615",
"job_title": "(Senior) Software Developer Backend / Python",
"company_name": "Athereon GRC GmbH",
"company_url": "https://www.linkedin.com/company/athereon-grc",
"company_logo": "https://media.licdn.com/dms/image/v2/…/athereon_grc_logo?…",
"location": "Saarbrücken, Saarland, Germany",
"workplace_type": null,
"posted_at": "2026-09-17",
"posted_relative": "1 week ago",
"is_new": false,
"insights": [],
"applicants": "56 applicants",
"seniority_level": "Associate",
"employment_type": "Full-time",
"job_function": "Information Technology",
"industries": "Software Development",
"salary_text": null,
"salary_min": null,
"salary_max": null,
"salary_type": null,
"salary_currency": null,
"salary_source": null,
"description": "Ihre Aufgaben\nDu entwickelst Features und Verbesserungen für das Backend unserer SaaS-Applikation…",
"description_html": "<strong>Ihre Aufgaben</strong><ul><li>Du entwickelst Features…</li></ul>",
"job_url": "https://www.linkedin.com/jobs/view/4467502615",
"is_easy_apply": false,
"has_details": true,
"fetched_at": "2026-09-29T17:46:40.010873Z"
}

A US job with a pay range returns, for example, "salary_text": "$176,400.00/yr - $226,800.00/yr", "salary_min": 176400, "salary_max": 226800, "salary_type": "yearly", "salary_currency": "USD", "salary_source": "employer".

Integrations

Connect LinkedIn Jobs Scraper to Make, Zapier, Slack, Google Sheets, Airbyte, GitHub, and more through Apify integrations, or trigger actions with webhooks when a run finishes.

Using the Apify API

Run the Actor and fetch results programmatically with the Apify API, using apify-client for Node.js or apify-client for Python. See the API tab for code examples.

FAQ

Do I need a LinkedIn account or cookies?

No. The Actor only uses LinkedIn's public guest pages.

Does it scrape profiles, companies, or posts?

No. Only job search URLs (www.linkedin.com/jobs/search) are accepted.

Why do some jobs have has_details: false?

Either includeDetails is off, or LinkedIn blocked that job's posting page on every retry. The search-card fields are still returned.

What happens when LinkedIn shows a sign-in wall?

The Actor treats sign-in redirects, missing results, and HTTP 429/999 responses as blocks, retries, and fails the run if every attempt for the search page is blocked. Switching to residential proxies usually fixes it.

Your feedback

Found a bug or have a feature request? Open an issue on the Actor's Issues tab in Apify Console.