LinkedIn Jobs Scraper (No Login Required) avatar

LinkedIn Jobs Scraper (No Login Required)

Pricing

from $0.40 / 1,000 results

Go to Apify Store
LinkedIn Jobs Scraper (No Login Required)

LinkedIn Jobs Scraper (No Login Required)

Extract LinkedIn job listings without logging in - title, company, salary, absolute post date, logo and full description. Filter by keyword, location, radius, company, date posted, Easy Apply and applicant count, paste a LinkedIn search URL, and pull past LinkedIn's 1000-result cap.

Pricing

from $0.40 / 1,000 results

Rating

5.0

(27)

Developer

Zebu Data

Zebu Data

Maintained by Community

Actor stats

36

Bookmarked

151

Total users

3

Monthly active users

3 hours ago

Last modified

Share

What does LinkedIn Jobs Scraper do?

This Actor extracts job postings from LinkedIn โ€” no login, no cookies, no LinkedIn account required. Give it a keyword and a location, or paste a LinkedIn job-search URL, and it returns clean, structured JSON with the title, company, location, salary, description and 16 more fields per job. It is a practical API alternative for anyone who needs LinkedIn hiring data on a schedule.

Why use LinkedIn Jobs Scraper?

  • ๐Ÿ”“ No login, ever. No account, no cookies, no session tokens to keep alive. Nothing to get banned.
  • ๐Ÿงฑ Breaks LinkedIn's 1000-result wall. LinkedIn stops serving results after ~1000 jobs for any single query. Ask for more and this Actor automatically splits your search into several narrower queries and de-duplicates the results, so you can pull well past that ceiling in one run.
  • ๐Ÿ“… Real dates, not "2 weeks ago". Every job carries published_at_iso, an absolute ISO date you can actually sort and filter on โ€” alongside the relative string LinkedIn shows.
  • โšก Fast mode for bulk pulls. Turn off Scrape full job details and the Actor works straight from the search results, using about a tenth of the requests. Ideal when you want thousands of job leads and will enrich the interesting ones later.
  • ๐Ÿ”— Search by keyword, by URL, or both. Build a search from keywords and filters, or paste searches you already set up on LinkedIn โ€” each URL is scraped with exactly the filters it contains, SEO landing pages like /jobs/python-developer-jobs-new-york-ny included.
  • ๐ŸŒ The location you asked for. LinkedIn quietly answers place names it does not recognise, such as Deutschland, with jobs from the whole United States. This Actor checks every location and switches to LinkedIn's own suggestion (Germany), so you get the country you meant.
  • ๐ŸŽฏ Honest filters. Every filter LinkedIn still supports for logged-out visitors is here โ€” date posted, company, search radius, Easy Apply, under 10 applicants โ€” and the input schema says plainly which extra filters run locally instead of on LinkedIn.
  • ๐Ÿ–ผ๏ธ Company logos and IDs included, ready for dashboards and CRM imports.

How it compares

This ActorTypical LinkedIn jobs scraper
LinkedIn account / cookiesNot neededOften required
Past the 1000-result capYes, automaticUsually capped
Absolute post datepublished_at_isoRelative text only
Low-cost bulk modeYes, one toggleRare
Filters that LinkedIn droppedDocumented as unavailableOften still advertised

What data can you extract?

FieldTypeDescription
job_titlestringJob title
company_namestringHiring company as shown on the posting
locationstringJob location
published_at_isodateAbsolute posting date, e.g. 2026-08-26
published_atstringRelative posting age, e.g. 3 weeks ago
salary_rangestringCompensation range, when the posting discloses one
job_urlstringCanonical LinkedIn job URL
apply_typestringeasy_apply (apply on LinkedIn) or external (apply on the employer's site)
apply_urlstringApply link โ€” populated for easy_apply only, see Tips
company_urlstringLinkedIn company page
company_logostringCompany logo image URL
company_idstringLinkedIn company ID
job_idstringLinkedIn job posting ID
applications_countstringApplicant count text, e.g. 71 applicants
seniority_levelstringe.g. Mid-Senior level, Entry level
employment_typestringe.g. Full-time, Contract
job_functionstringe.g. Information Technology and Engineering
industriesstringe.g. Hospitals and Health Care
benefitsstringBenefits listed on the posting
search_termstringThe keyword this job was found with
description_textstringFull job description as plain text
description_htmlstringFull job description as HTML

With Scrape full job details turned off, the first eleven fields plus job_id and search_term are returned and the rest are left empty.

How to scrape LinkedIn jobs

  1. Open the Actor and go to the Input tab.
  2. Option 1 โ€” Search by keyword: type one or more keywords into Keyword(s), set a Location (or Locations for several at once), and add any filters you need: Search Radius, Posted Within, Company Name or Company ID, Easy Apply only, Under 10 applicants only.
  3. Option 2 โ€” Search by URL: paste LinkedIn job-search URLs into LinkedIn Search URL(s). Each URL keeps its own filters. Use it instead of Option 1, or together with it.
  4. Under Filtering & output options, set Max Results per Search (0 means everything available) and, if you want, title and company filters or Scrape full job details.
  5. Click Start and download the results as JSON, CSV, Excel or XML from the Output tab, or pull them from the Apify API.

How much does it cost?

This Actor is priced per result: you pay for the job postings you actually receive, plus a negligible start fee. There are no charges for pages that return nothing.

Because it reads LinkedIn's public endpoints directly instead of driving a browser, it burns very little compute, which is what keeps the per-result price low. Two ways to spend less:

  • Turn off Scrape full job details for bulk lead generation โ€” roughly a tenth of the requests per job.
  • Set Max Results per Search to what you actually need instead of 0.

New Apify accounts include free monthly usage credits, so you can try a run before paying anything.

Input

Configure everything on the Input tab. There are two ways to search โ€” use either one, or both in the same run. All fields are optional except a keyword or a search URL.

Option 1 โ€” Search by keyword

These filters shape keyword searches only.

InputTypeDescription
Keyword(s)arrayJob titles or search terms. One search per keyword, per location.
LocationstringA single city, region or country. A name LinkedIn does not recognise is switched to its own suggestion.
Locations (multiple)arraySeveral places at once; overrides Location.
Geo IDstringLinkedIn's internal location ID, more precise than a location name; overrides Location.
Search RadiusselectExact location, or 5 / 10 / 25 / 50 / 100 miles.
Posted WithinselectAny time, Past month, Past week, Past 24 hours.
Easy Apply onlybooleanOnly jobs you can apply to on LinkedIn.
Under 10 applicants onlybooleanOnly jobs with fewer than 10 applicants.
Company NamearrayFilter by company; resolved via LinkedIn's own fuzzy company lookup.
Company IDarrayFilter by LinkedIn company ID โ€” exact, and preferred over name.

Option 2 โ€” Search by URL

InputTypeDescription
LinkedIn Search URL(s)arraySearches you already set up on LinkedIn. Each URL is scraped with exactly the filters it contains.

Filled in both options? Both are scraped, with duplicates removed. The one exception: if Keyword(s) and Location still hold the example values (Python Developer, New York), only the URLs are scraped.

Filtering & output options

These apply to both options.

InputTypeDescription
Job title must contain / Skip job titles containingarrayLocal title filters applied after scraping.
Skip these companiesarrayLocal company filter applied after scraping.
Scrape full job detailsbooleanOn by default. Off is much cheaper and faster.
Max Results per SearchintegerPer keyword and location, or per search URL. 0 means everything available.

Output

Each job is one dataset item:

{
"job_title": "Senior Python Engineer (Backend)",
"company_name": "Alaffia Health",
"location": "New York, NY",
"published_at_iso": "2026-08-26",
"published_at": "3 weeks ago",
"salary_range": "$180,000.00/yr - $220,000.00/yr",
"job_url": "https://www.linkedin.com/jobs/view/senior-python-engineer-backend-at-alaffia-health-4459355664",
"apply_type": "external",
"apply_url": "",
"company_url": "https://www.linkedin.com/company/alaffia-health",
"company_logo": "https://media.licdn.com/dms/image/v2/D4D0BAQFXRSx-aDACtg/company-logo_100_100/alaffia_health_logo",
"company_id": "68124272",
"job_id": "4459355664",
"applications_count": "71 applicants",
"seniority_level": "Mid-Senior level",
"employment_type": "Full-time",
"job_function": "Information Technology and Engineering",
"industries": "Hospitals and Health Care",
"benefits": "Medical insurance Vision insurance Dental insurance 401(k)",
"search_term": "Python Developer",
"description_text": "About Alaffia & Our Mission. Every year, U.S. health plans lose billions to improper payments and administrative waste...",
"description_html": "<div class=\"description__text description__text--rich\">...</div>"
}

Fields that are often empty, because LinkedIn only shows them on some postings: salary_range, benefits, applications_count.

Tips

  • apply_url is only filled in for Easy Apply jobs. When apply_type is external, LinkedIn hides the employer's destination link behind a sign-in wall for logged-out visitors, so the field is left empty rather than filled with a misleading value. Use job_url to reach the posting.
  • Work mode, employment type and experience level cannot be filtered at search time. LinkedIn removed those filters from its logged-out job search, so no no-login scraper can apply them server-side. employment_type and seniority_level are returned on every job, so filter them downstream.
  • Prefer Company ID over Company Name. LinkedIn's company lookup matches loosely. The run log always prints which company each name matched so you can catch a wrong match; if none of your names resolve, the run stops with an error instead of quietly returning every job.
  • Going past 1000 results costs more requests. Splitting a search into narrower queries is how the cap is bypassed, and overlapping results are discarded after being fetched. Narrow your search where you can.
  • Schedule it. Use Apify Schedules for a daily pull, and integrations to push results into Google Sheets, Slack, Zapier, Make or your own webhook.

FAQ and support

Is scraping LinkedIn jobs legal? This Actor collects only publicly available job postings โ€” the same pages any visitor can see without logging in. Job listings are business information published by employers, not personal data. Web scraping of public data is broadly lawful, but how you use the data is your responsibility. If you extract anything that could identify a person, you must have a lawful basis under GDPR and comparable laws. Consult a lawyer if you are unsure.

Do I need a LinkedIn account? No. That is the point of this Actor.

Why did my run return fewer jobs than Max Results? LinkedIn simply may not have that many matching postings, or your local filters removed some. Widen the keyword, the location or the radius.

Why am I getting jobs from the United States instead of my location? LinkedIn answers a place name it does not recognise with jobs from the whole United States. This Actor checks every location: when that happens, it switches to LinkedIn's own location suggestion โ€” Deutschland becomes Germany โ€” and says so in the run log. If LinkedIn has no suggestion either, the log warns you; enter the place the way LinkedIn's location box suggests it, or use Geo ID. Also make sure Geo ID is empty unless you mean it: when it is filled in, it overrides Location.

Why are some fields empty? LinkedIn does not publish salary, benefits or applicant counts on every posting. Empty means the source did not have it.

Something looks wrong. Open an issue on the Actor's Issues tab with the run ID and your input, and it will be looked at.