All notable changes to the LinkedIn Jobs Scraper.
First release.
- Three ways to search — paste a LinkedIn job search URL, paste a single job link, or describe the search with keywords and locations. All three can be combined in one run; results are merged and de-duplicated, and every row records each search that found it.
- Plain-language locations and companies — type
"London" or "Stripe" and the Actor resolves it on LinkedIn itself. No numeric IDs to look up.
- Custom freshness windows —
postedWithinHours accepts any window, beyond the 24 hours / 1 week / 1 month that LinkedIn's own filter offers.
- Salary parsing — the published range is captured and split into
salary_min, salary_max, salary_currency and salary_period, so hourly and annual pay are never averaged together.
- Recruiter contacts —
poster_name, poster_title and poster_profile_url for postings that name the person who posted them.
- Exact posting dates —
posted_date is the posting's own date, not a value reconstructed from text like "3 weeks ago".
- Applicant counts — with
applicants_is_estimate flagging the cases where LinkedIn gave a range rather than a number.
- Filters that actually filter — employment type, experience level, workplace type, title and description keywords, company and location exclusions, "has a salary", "has a named recruiter" and a hard date cutoff, all applied to the collected data. When every job is filtered out, the run names the filter responsible.
- Card-only mode —
scrapeJobDetails: false returns the search-card fields roughly 10× faster, for monitoring which jobs exist.
- Five dataset views — Overview, Recruiter contacts, Salary data, Full descriptions and Problems.
- Failures are delivered as rows with an
error_type rather than being silently dropped, and RUN_SUMMARY records what each search collected, delivered and filtered.