# Changelog of LinkedIn Jobs Scraper: $0.50 per 1,000 Jobs, No Login (`fit_melon/linkedin-jobs-scraper`) Actor

- **URL**: https://apify.com/fit_melon/linkedin-jobs-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/fit_melon/linkedin-jobs-scraper.md

## Changelog

### 1.0.14

- New `onlyNewJobs` (off by default) for scheduled runs: each search remembers the jobs it delivered (job IDs only, in
  the key-value store `seenJobsStoreName` of your own Apify account, default `linkedin-jobs-seen`, last 20,000 per
  search) and skips them in later runs before reading their job page. You get and pay only for jobs you did not get
  before. A resumed run remembers the jobs it had already delivered.

### 1.0.12 (beta)

- Descriptions: clean plain text without blank lines between bullets (957 of 1,000 jobs had them in 1.0.7, 0 now), no
  leftover HTML entities; new `descriptionHtml` (safe HTML: paragraphs, lists, bold; no link, no attribute), on by
  default, can be turned off with `includeDescriptionHtml`.
- Company details: new `companyAddress` (street, city, region, postal code, country), `companyCountry`, `companySizeMin` /
  `companySizeMax`, `companyEmployeesOnLinkedIn` (members on LinkedIn), `companySlogan`, `companyDomain`, `companyId`, and
  `companySpecialties` as a list.
- Applicants: `applicantsCountMin`, `applicantsCountMax` and `applicantsCountIsExact` ("Over 200", "Be among the first 25").
- Posting time: `postedAtTimestamp` and `postedAtPrecision` (hour or minute when LinkedIn says "6 hours ago", else day).
- Salary: `salarySource` (`employer` when the employer provided the range) and `salaryAdditionalCompensation`.
- Speed: 18 parallel requests by default (was 12), still capped at 6 requests per second; company pages fetched in
  parallel.
- Empty result pages: LinkedIn sometimes returns an empty page in the middle of a list; an empty page right after a full
  one is now skipped instead of ending the search (the search ends on two empty pages in a row, an empty page after a
  partial one, or LinkedIn's limit). A 200 page without jobs is still read again through another IP first.
- Output formats: `outputFormat` (`auto`, `standard`, `curious_coder`, `valig`) adds the field names of those scrapers
  next to ours, so existing Make / n8n / Zapier mappings keep working. Recruiter fields are never delivered.
- New filters: `onlyWithSalary` (alias `requireSalaryInfo`), `excludeRecruitingAgencies`, and job industry include /
  exclude (`industriesInclude`, `industriesExclude`, aliases `jobIndustryInclude`, `jobIndustryExclude`); checked on
  the job page, you pay only for the jobs that match.
- REMOVED `jobFunction` and `reposted`: LinkedIn never shows them to logged-out visitors (always empty).
- Workplace filter (on-site / remote / hybrid) is no longer sent to LinkedIn, which ignores it logged out; the run log
  and status message say that results are not filtered by workplace.

### 1.0 (beta)

- Public LinkedIn job offers without login: keywords + location, or LinkedIn job search URLs.
- Job page data: description, seniority level, employment type, industries, applicants, salary, apply type.
- Optional public company details: industry, size, website, headquarters, type, founded year, followers.
- Filters: date posted, company (by LinkedIn); employment type, experience level, Easy Apply, company / title words (by the actor).
- Past LinkedIn's ~1,000 jobs per search: the same search is also run on the past month, week and day.
- Input names of other LinkedIn jobs scrapers accepted (urls, startUrls, titles, keyword, rows, limit, publishedAt, contractTypes, jobType…).
- Pay per job, never beyond the run's spending limit; resume without double charge; no duplicates.
