All notable changes to Indeed Jobs Scraper are recorded here. The newest release is first.
excludeAgencies now also catches company names with Talent, Placement, Employment Services, Workforce Solutions or a trailing HR (for example "Talent Spark HR"), and descriptions saying "staffing / recruiting agency". Names such as "HR Block" or "Workforce Software" are kept. Default off; no other output changes.
- New
excludeAgencies filter (default off, so existing inputs behave as before): skips jobs posted by staffing, temp and recruitment agencies, detected from the company's industry, its name (agency words and large agency brands) and the description's own wording ("Our client is...", "Personaldienstleister"...); phrases after a negation do not count. Skipped jobs are free; the run's status message says how many were skipped.
New filters, sorting and monitoring. Existing inputs keep working; new output columns are added, none removed.
experienceLevel filter (entry, mid, senior), sent to Indeed as its own attribute filter, and a new experienceLevel column on every job Indeed tags with a level. Indeed URLs with sc=0kf:explvl(..._LEVEL); work too.
salaryMin filter: minimum yearly pay in the site's currency (hourly, daily, weekly and monthly pay converted to a year; Indeed's estimate counts; jobs without salary skipped). New salaryYearlyMin / salaryYearlyMax columns.
sort: relevance (default, unchanged) or date. Indeed's API ignores a date sort, so the Actor reads a pool of 3 x each search's share of maxItems (100-1,000 jobs) and returns the newest first. sort=date in an Indeed URL now does the same instead of being ignored.
dedupeAcrossSearches (default on): a job another keyword or URL of the same run already returned is skipped, free, instead of saved and billed twice.
onlyNewSinceLastRun + seenJobsStoreName: scheduled runs return and bill only jobs no earlier run delivered (memory in a named key-value store on the user's account).
- When filters remove every job, the run succeeds with one free
not_found row instead of failing.
- A second contact scrubber (the one built for LinkedIn Jobs Scraper) now runs before the existing one, so more contact-person names ("please contact Jane Doe, Ward Manager", sign-offs, contact blocks) are replaced with
[name removed].
- Every attribute filter (job type, remote, experience) is now also checked on each returned job.
First release.
- Search Indeed by keywords, location, radius and country (22 Indeed sites), or paste Indeed search URLs, job URLs or job keys.
- Filters: date posted (1, 3, 7, 14 days), job type, remote or hybrid. Results come in relevance order (Indeed's API accepts a date sort but does not apply it, so the Actor offers no sort option).
- Job URLs and bare job keys fetch exactly that posting (free
not_found when it is gone); malformed keys and non-search pages give a free error row instead of an unrelated search.
- Every job comes with the full description as plain text, company rating, size, revenue and industry, the salary range parsed into numbers with period and currency, and the employer's own apply link.
- Emails (also spelled "name(at)company.com" or "name [at] company [dot] com"), phone numbers in any format (any run of 7-15 digits, with or without separators or an extension, that is not a salary, date, year or zip code), personal profile links (LinkedIn, XING, Facebook, Instagram, X) and contact names after labels such as "Contact:", "Recruiter:" or "Ansprechpartner:" or next to a removed phone or email are removed from
description and descriptionHtml before a row is saved. A long ID number in the text can also be removed; a phone number is never kept.
- Every row carries
status, so a search without matches (not_found) and a failure (error) are told apart from real data. Only ok rows are charged.