Linkedin Jobs Search avatar

Linkedin Jobs Search

Pricing

$1.00 / 1,000 results

Go to Apify Store
Linkedin Jobs Search

Linkedin Jobs Search

Scrape LinkedIn job search result (including company details)

Pricing

$1.00 / 1,000 results

Rating

0.0

(0)

Developer

Benjar Scraping API

Benjar Scraping API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

LinkedIn Jobs Scraper – Extract Job Postings, Salaries & Recruiters

Scrape LinkedIn jobs at scale — no login or account required. This LinkedIn Jobs Scraper returns structured job postings enriched with full job descriptions, salary ranges, applicant counts, hiring recruiter details, and company data. Search by keywords + filters or simply paste a LinkedIn jobs search URL, and export clean JSON, CSV, or Excel.

Perfect for recruiters, sourcers, job boards, ATS integrations, market and salary research, lead generation, and labor-market analytics.

🔓 No LinkedIn login required — there's no account risk and no cookies to manage.


✨ Why use this LinkedIn job scraper?

  • ⚡ Fast — listing and enrichment are pipelined in parallel over rotating proxy IPs, and company pages use an early-abort stream that downloads only the ~5% holding the data (typically a few seconds per ~10 jobs).
  • 🔑 No login / no cookies — zero account risk.
  • 🔗 Paste-a-URL or build-a-search — drop in any linkedin.com/jobs/search/?... URL, or use keyword + filter inputs.
  • 💰 Salary extraction — parses salary into salaryMin, salaryMax, salaryCurrency, and salaryPeriod.
  • 📄 Full job descriptions — both descriptionText and descriptionHtml.
  • 🧑‍💼 Recruiter / job poster — name, title, photo, and profile URL of the person who posted the job.
  • 🏢 Company enrichment — website, description, employee count, and address.
  • 🎯 Rich filters — date posted, job type, experience level, remote/hybrid/on-site, company, distance, and sort order.
  • 🧹 Auto-deduplication — duplicate jobs are removed automatically.
  • 📦 Export anywhere — JSON, CSV, Excel, or push to your own API/webhook.

🚀 Quick start

  1. Enter Search keywords (e.g. Software Engineer) and a Location (e.g. United States) — or paste a full LinkedIn jobs search URL.
  2. Set Maximum jobs to collect (e.g. 50).
  3. Click Start and download your results as JSON, CSV, or Excel.

That's it — no LinkedIn credentials needed.


📥 Input

Provide either keywords or a searchUrl. Everything else is optional.

FieldTypeDescription
keywordsStringSearch terms, e.g. Software Engineer, Product Manager. Ignored when searchUrl is set.
searchUrlStringA full https://www.linkedin.com/jobs/search/?... URL. When provided, keywords, location, and all filters are taken from it, overriding the manual inputs.
locationStringLocation name, e.g. United States, Berlin, Germany. Use this or geoId.
geoIdStringNumeric LinkedIn geo id (e.g. 103644278 = United States). Takes precedence over location. Found in the geoId parameter of a LinkedIn jobs search URL.
maxJobsIntegerMaximum jobs to collect (default 50). See Limitations for the per-search cap.
scrapeDetailsBooleanDefault true. Enriches each job with full description, criteria (seniority, employment type, function, industries), applicant count, apply type, company URL, and recruiter.
scrapeCompanyBooleanDefault true. Adds each company's website, description, slogan, employee count, and address. Requires scrapeDetails.
maxConcurrencyIntegerParallel requests, 120 (default 10). Higher is faster.
maxTimeoutMsIntegerPer-request timeout in ms (default 12000, min 3000). A hung request aborts and retries on a fresh proxy IP; lower it to fail bad IPs faster, raise it for slow proxies.
datePostedEnum (String)Restrict by recency. One of "" (any time), r86400 (past 24h), r604800 (past week), r2592000 (past month).
jobTypeArray of EnumsOne or more of F (Full-time), P (Part-time), C (Contract), T (Temporary), I (Internship), V (Volunteer), O (Other).
experienceLevelArray of EnumsOne or more of 1 (Internship), 2 (Entry level), 3 (Associate), 4 (Mid-Senior level), 5 (Director), 6 (Executive).
workplaceTypeArray of EnumsOne or more of 1 (On-site), 2 (Remote), 3 (Hybrid).
companyIdArray of StringsRestrict to specific numeric LinkedIn company id(s).
sortByEnum (String)"" / R (Relevance) or DD (Most recent).
distanceIntegerSearch radius in miles around the location.
proxyConfigurationProxyResidential proxies strongly recommended. Defaults to Apify residential proxies.
{
"keywords": "Software Engineer",
"location": "United States",
"maxJobs": 50,
"datePosted": "r604800",
"jobType": ["F"],
"experienceLevel": ["3", "4"],
"workplaceType": ["2"],
"scrapeDetails": true,
"scrapeCompany": true,
"maxConcurrency": 10,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Example input — paste a LinkedIn jobs search URL

{
"searchUrl": "https://www.linkedin.com/jobs/search/?keywords=Product%20Manager&location=Berlin%2C%20Germany&f_WT=2&f_TPR=r86400",
"maxJobs": 100,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

📤 Output

Each result is one job posting. Results stream to the dataset and export as JSON, CSV, Excel, HTML, or XML, or to a webhook/API.

Fields

FieldTypeWhenDescription
idStringAlwaysLinkedIn job id.
titleStringAlwaysJob title.
companyNameStringAlwaysHiring company name.
companyUrlStringAlwaysLinkedIn company page URL.
companyLogoStringAlwaysCompany logo image URL.
locationStringAlwaysJob location.
jobUrlStringAlwaysLinkedIn job posting URL.
postedAtString (ISO)AlwaysPosting date/time, ISO 8601.
postedDateStringAlwaysPosting date, YYYY-MM-DD.
postedTimestampNumberAlwaysPosting time, epoch milliseconds.
salaryStringAlwaysRaw salary text (when shown).
salaryMin / salaryMaxNumberAlwaysParsed salary bounds (when shown).
salaryCurrencyStringAlwaysSalary currency, e.g. USD.
salaryPeriodStringAlwaysSalary period, e.g. yr, hr.
benefitsArrayAlwaysListed benefits (when shown).
seniorityStringscrapeDetailsSeniority level.
employmentTypeStringscrapeDetailse.g. Full-time, Contract.
jobFunctionStringscrapeDetailsJob function.
industriesStringscrapeDetailsIndustry.
applicantsCountNumberscrapeDetailsNumber of applicants.
applicantsTextStringscrapeDetailsRaw applicants text.
applyTypeStringscrapeDetailsoffsite or easy_apply.
descriptionTextStringscrapeDetailsFull description, plain text.
descriptionHtmlStringscrapeDetailsFull description, HTML.
jobPosterNameStringscrapeDetailsRecruiter / job poster name.
jobPosterTitleStringscrapeDetailsRecruiter title.
jobPosterPhotoStringscrapeDetailsRecruiter photo URL.
jobPosterProfileUrlStringscrapeDetailsRecruiter LinkedIn profile URL.
companyWebsiteStringscrapeCompanyCompany website.
companyDescriptionStringscrapeCompanyCompany description.
companySloganStringscrapeCompanyCompany slogan/tagline.
companyEmployeesCountNumberscrapeCompanyApproximate employee count.
companyAddressObjectscrapeCompany{ locality, region, country }.
applyUrlnullAlwaysExternal apply link (see Limitations).
scrapedAtString (ISO)AlwaysWhen the job was scraped.

Example output

{
"id": "3801234567",
"title": "Senior Software Engineer",
"companyName": "Acme Corp",
"companyUrl": "https://www.linkedin.com/company/acme-corp",
"companyLogo": "https://media.licdn.com/dms/image/...",
"location": "San Francisco, CA",
"jobUrl": "https://www.linkedin.com/jobs/view/3801234567",
"postedAt": "2026-06-18T12:00:00.000Z",
"postedDate": "2026-06-18",
"postedTimestamp": 1750248000000,
"salary": "$160,000 - $210,000/yr",
"salaryMin": 160000,
"salaryMax": 210000,
"salaryCurrency": "USD",
"salaryPeriod": "yr",
"benefits": ["401(k)", "Medical insurance"],
"seniority": "Mid-Senior level",
"employmentType": "Full-time",
"jobFunction": "Engineering and Information Technology",
"industries": "Software Development",
"applicantsCount": 87,
"applicantsText": "Over 80 applicants",
"applyType": "offsite",
"descriptionText": "We are looking for a Senior Software Engineer...",
"descriptionHtml": "<p>We are looking for a Senior Software Engineer...</p>",
"jobPosterName": "Jane Recruiter",
"jobPosterTitle": "Technical Recruiter at Acme Corp",
"jobPosterPhoto": "https://media.licdn.com/dms/image/...",
"jobPosterProfileUrl": "https://www.linkedin.com/in/jane-recruiter",
"companyWebsite": "https://acme.com",
"companyDescription": "Acme Corp builds...",
"companySlogan": "Build the future",
"companyEmployeesCount": 5200,
"companyAddress": { "locality": "San Francisco", "region": "CA", "country": "US" },
"applyUrl": null,
"scrapedAt": "2026-06-19T09:30:00.000Z"
}

💡 Common use cases

  • Recruiting & sourcing — build talent pipelines and reach hiring managers via the job-poster fields.
  • Job boards & aggregators — keep a fresh, deduplicated feed of postings.
  • Salary & compensation research — analyze salaryMin/salaryMax across roles, regions, and seniority.
  • Lead generation — find companies that are hiring, plus their websites and recruiters.
  • Labor-market & hiring-trend analytics — track demand by skill, location, remote vs on-site, and experience level.
  • ATS / CRM enrichment — feed structured job + company data into your own systems.

⚠️ Limitations

  • ~1000 results per search. A single search query returns at most ~1000 jobs. To collect more, slice the query (by date, location, job type, etc.) and combine the runs.
  • No apply URL. The external apply link isn't available, so applyUrl is always null. The apply type (offsite vs easy_apply) is still reported. Use jobUrl to open the posting.
  • Public data only. Fields reflect what LinkedIn publicly exposes; not every posting includes salary, applicants, or a job poster.
  • Use residential proxies and keep maxConcurrency reasonable (≤10) for the most reliable runs. If you see many timeouts on otherwise healthy runs, lower maxTimeoutMs; raise it only if your proxy is slow but reliable.

❓ FAQ

Do I need a LinkedIn account or login? No. There are no credentials, cookies, or account risk involved.

How many jobs can I scrape per run? Up to ~1000 per individual search query. Split broad searches into narrower ones (by date window, location, or filters) and combine the results to collect more.

Can I scrape remote-only jobs? Yes — set workplaceType to 2 (Remote), or add f_WT=2 to your search URL.

Does it return salaries? When LinkedIn shows a salary, it's returned as raw text plus parsed salaryMin, salaryMax, salaryCurrency, and salaryPeriod. Not every posting includes salary data.

Can I get the recruiter / job poster? Yes — with scrapeDetails enabled you get the poster's name, title, photo, and LinkedIn profile URL when available.

Why is applyUrl null? The external apply link requires a logged-in session, which this actor avoids. Use jobUrl to open the posting on LinkedIn.

Which proxies should I use? Residential proxies are strongly recommended. The default configuration already requests Apify residential proxies.

What output formats are supported? JSON, CSV, Excel, HTML, and XML, plus webhook/API integrations.


This actor collects publicly available job data only. You are responsible for using it in compliance with LinkedIn's terms, applicable laws (including GDPR/CCPA where relevant), and a valid legal basis for any personal data you process. Do not use scraped data for spam or any unlawful purpose.