Search XING Jobs (German-speaking professional network) by free-text keyword and optional free-text location (city), via XING's own query-string job search rather than its natural-language "Tell the XING AI about the job you want" search box. Returns total (site's own counter, capped and displayed as "999+" for very broad queries - not an exact count past that point) and jobs (jobId, title, company, location, moreLocations, employmentType, salary, urgentlyHiring, postedAgo, postedAt, easyApply, sponsored, url). A few things to know: an unmatched keyword and/or an unresolvable location do not reliably produce a true zero-result signal via the total counter - XING can silently fall back to an unfiltered (or location-only-filtered) broad result set while still reporting a normal-looking "N jobs found", so total/location alone should not be trusted to detect a true no-match; an unresolvable location is silently dropped server-side to a nationwide search, same pattern as some other job boards. Pagination is reliable at its true boundary, though: once a page number goes past the site's actual result count, this script returns jobs:[] for a genuine "no matching jobs" state, ignoring that page's unrelated "jobs we found elsewhere" suggestions - those reuse the same card markup as real results but are not matches. Going further still (a page number far beyond any reasonable range) throws an explicit error instead of hanging. Some result cards are third-party syndicated listings (e.g. via jobware.de, jooble.org, meinestadt.de, heyjobs.co) rather than native XING job pages - these have sponsored:true, url pointing off-site, and jobId:null (no internal XING job id exists for them), which is the site's own real behavior, not a missing field. Pagination is 1-based via the site's own page param (page=1 default, 20 results/page).