Complete rewrite β fixes zero-output bug.
- Pagination broken: Xing uses
?page=N URL params. Old code looked for a[rel="next"] which does not exist on Xing β only one page was ever crawled. Now builds next-page URLs directly by incrementing ?page=.
- Job URL pattern wrong: Xing detail URLs follow
xing.com/jobs/{city}-{slug}-{numeric-id}. Old patterns (/jobs/details/, /stellenangebote/) are obsolete. New regex: /jobs/.+-\d{5,}$.
- list vs detail classification:
isXingListUrl now only matches /jobs/search path; isXingJobDetailUrl uses the numeric-ID regex.
- Salary missing: old code only read JSON-LD. New code falls back to DOM text-walker for
β¬ patterns when JSON-LD has no salary.
startUrls plain strings: input editor can return plain strings; now handled alongside { url } objects.
- Concurrency default reduced: from 4 to 2 β reduces Xing block rate.
- Delay defaults increased: 1000β2500 ms (was 600β1800 ms).
careerLevel β career level as reported on the listing
workplace β workplace model (On-site / Hybrid / Full Remote)
scrapedAt β ISO 8601 scrape timestamp
employmentType β Full-time / Part-time / Freelance / Student
careerLevel β Entry / Professional / Manager / Executive
workplace β Full remote / Hybrid
sortBy β Newest first / Most relevant
salaryMin / salaryMax β Annual salary range filter (β¬)
- Per-base-URL list-page counter (prevents over-crawling when multiple keyword variants are used).
seenJobUrls Set prevents duplicate detail requests across variants.
- Cleaner logging: page counts and URL shown per list page.
- Updated ACTOR.md with full input/output reference table.
- Updated dataset_schema.json with all new fields and table view.
- Fixed
listPagesLimit calculation (per variant).
- Fixed proxy group config (empty string guard).
- Corrected
maxRequestsPerCrawl formula.
- Navigation timeout 90s.
- Login wall detection + counter.
- Improved CSS fallback selectors.
- Smart search: 40+ new job titles, circular synonyms removed.