Skip to content

LinkedIn Jobs Scraper

Try for free

Scrape public LinkedIn job search results by keyword and location: titles, companies, locations, posting dates, salaries, full descriptions, and optional company page details.

💼 LinkedIn Jobs Scraper

Pull public LinkedIn job search results into a dataset you can schedule, export, and hand to a recruiting or research workflow.

Built for talent teams, market researchers, and anyone tracking hiring in the open. Paste a public jobs search, or fill in the filters and leave the URL list empty.

✨ Features

  • 🔗 Accepts one or many public LinkedIn jobs search URLs. When urls is set, the filter fields below are ignored.
  • 🔎 Runs from filters alone: keywords, location, geoId, distance, datePosted, companyIds, and under10Applicants.
  • ♻️ autoConvertToAiSearch turns old experience, job type, and workplace codes from a URL into words on the keyword search. Date posted, company, easy apply, and under-10-applicants stay as URL filters.
  • 🏢 scrapeCompany loads each employer's public company page and adds the about text, the website, and an exact employee count when the page publishes one.
  • 🗺️ splitByLocation plus splitCountry repeats the search across major cities in that country and drops duplicate job ids. The city replaces location and geoId.
  • 🎯 limitPerSource caps jobs per search (and per city when a search is split). The default is 20; LinkedIn returns at most 1000 jobs per search.
  • 🛟 A URL that is not a LinkedIn jobs search, or a city split with no country, is skipped and listed under failedInputs in the run's OUTPUT record (no error rows in your dataset). A real search or job page that does not come back cleanly is retried on a new session. The run does not save a title-only row.

🚀 Why teams use this

Request-based fetches, not a browser session, so a search of public postings stays a normal actor run you can put on a schedule. Point a daily run at a past-24-hours search URL (datePosted past24Hours, or f_TPR=r86400 on a URL) and collect what was posted since yesterday.

Every saved job includes the public description from the job page. If that page comes back without the description, the actor opens a new session and tries the public job view before giving up. With scrapeCompany on, a job is saved only when the company page also yields an about blurb, a website, or an exact headcount.

A single search is sized for a 1 GB run. Raise memory when you pass many URLs or turn on city splitting, because each search paginates on its own.

💡 Use cases

  • Build a job board or alert feed from LinkedIn job searches.
  • Track which companies are hiring for a role and where.
  • Analyse salaries, seniority, and remote share for a job market.
  • Generate sales leads from companies that are hiring.

🧪 Example input

{
  "limitPerSource": 20,
  "urls": [
    "https://www.linkedin.com/jobs/search/?position=1&pageNum=0"
  ]
}

🧾 Sample output

One item from a real run of the example input, shortened. Long text is cut and lists show their first entries.

{
  "id": "4384671812",
  "link": "https://www.linkedin.com/jobs/view/cashier-at-the-home-depot-4384671812?position=1&pageNum=0&refId=lXK1dFrGNJl3IKILHSsZFA%3D%3D&trackingId=YvueRfhRvUo0stZMro…",
  "title": "Cashier",
  "companyName": "The Home Depot",
  "companyLinkedinUrl": "https://www.linkedin.com/company/the-home-depot?trk=public_jobs_topcard-org-name",
  "companyLogo": "https://media.licdn.com/…",
  "location": "Syosset, NY",
  "salaryInfo": [
    "$17.50/hr",
    "$18.50/hr"
  ],
  "postedAt": "2026-03-14",
  "benefits": [
    "Actively Hiring"
  ],
  "descriptionHtml": "78092BR<br/><br/><strong>Job Description<br/><br/></strong><strong>Position Purpose:<br/><br/></strong>Cashiers play a critical customer service role by prov…",
  "descriptionText": "78092BR Job Description Position Purpose: Cashiers play a critical customer service role by providing customers with fast, friendly, accurate and safe servic…",
  "applicantsCount": "47",
  "seniorityLevel": "Not Applicable",
  "employmentType": "Full-time",
  "industries": "Consumer Services",
  "salaryInsights": "This range is provided by The Home Depot. Your actual pay will be based on your skills and experience — talk with your recruiter to learn more.",
  "applyMethod": "Offsite",
  "companyDescription": "The Home Depot, the world’s largest home improvement specialty retailer, values and rewards dedicated, knowledgeable, and experienced professionals. We opera…",
  "companyWebsite": "http://www.careers.homedepot.com",
  "companyEmployeesCount": 142982
}

📥 Input

FieldWhat it does
urlsPublic LinkedIn jobs search URLs. Build them in a private window at linkedin.com/jobs/search. These take priority over the filters.
keywordsTitle, skills, or free text. Used only when urls is empty.
locationCity, region, country, or Remote, as you would type it on LinkedIn.
geoIdOptional LinkedIn geo id. Used instead of free-text location when it is set and city splitting is off.
distanceSearch radius in miles. Omitted when you leave it empty.
datePostedanyTime, past24Hours, pastWeek, or pastMonth.
companyIdsNumeric LinkedIn company ids, the same values as f_C on a search URL.
under10ApplicantsWhen true, keeps the under-10-applicants filter.
autoConvertToAiSearchWhen true (the default), experience, job type, and on-site/remote/hybrid codes in an old URL are appended to keywords.
scrapeCompanyWhen true (the default), requests each company page.
limitPerSourceMax jobs for each search. Default 20, up to 1000.
splitByLocationSplit one search into city searches.
splitCountryCountry whose city list is used. Required when splitting.

Industry, function, and title codes in a URL (f_I, f_F, f_T, and similar) are not converted and are not sent. Put those ideas in keywords yourself.

📤 Output

A field is present only when the public page contains it. Empty values are left off the item. A real false or 0 would be kept.

FieldWhen it is set
id, link, title, companyName, companyLinkedinUrl, locationFrom the search card, filled in from the job page when that page has them.
companyLogoCompany logo image URL from the page. Placeholder images are skipped.
postedAtThe date on the card (YYYY-MM-DD).
postedAtTimestampOnly when the page gives a full timestamp, not a date alone.
benefitsLabels such as "Actively Hiring" when the card shows them.
salaryInfoMoney amounts from a pay range on the job or the card, split into a list.
salaryInsightsThe pay-range note LinkedIn prints above the description, as text.
descriptionHtml, descriptionTextThe public job description. A job is not saved without one of these.
applicantsCountDigits from a caption that is exactly "N applicants".
insightsOther public captions, such as a non-numeric applicant line.
seniorityLevel, employmentType, jobFunction, industriesThe criteria block on the job page, including a real "Not Applicable".
applyMethodOffsite or Easy Apply when the public page labels the button that way. The offsite destination itself is behind sign-in, so no apply URL is stored.
workplaceTypesRemote, Hybrid, or On-site only when those words are in the location text.
workRemoteAllowedtrue only when the location says Remote. It is omitted otherwise, not defaulted to false.
companyDescription, companyWebsiteFrom the company page when scrapeCompany is on and the page has them.
companyEmployeesCountThe exact headcount from "Discover all N employees", "View all N employees", or the page's numberOfEmployees value. A range such as "10,001+" is not turned into a number.

Recruiter name, title, photo, and profile URL are not on the logged-out job page, so jobPosterName, jobPosterTitle, jobPosterPhoto, and jobPosterProfileUrl are not returned. expireAt is omitted for the same reason: the public job page does not include that timestamp.

💰 Pricing

You pay $0.0015 per job saved to the dataset, plus platform usage (compute and proxy traffic). Company details (scrapeCompany) are included at no extra charge.

Example: 1,000 jobs cost $1.50 in event fees plus platform usage. In our test runs platform usage was about $0.11 to $0.12 per 1,000 jobs. The default 20-job search costs $0.03 in event fees.

If you set a maximum cost per run, the run saves as many jobs as that budget pays for and then stops cleanly.

Related actors

G2
4.7/5
Excellent
Trustpilot

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.

No credit card. No setup calls.