Job Alert — New Job Posting Watch avatar

Job Alert — New Job Posting Watch

Pricing

from $8.50 / 1,000 change founds

Go to Apify Store
Job Alert — New Job Posting Watch

Job Alert — New Job Posting Watch

Watch a saved jobs.ch, XING, or Boss.az search through built-in adapters and get only postings that are new since the last check, with no nested Actor run or second Actor charge.

Pricing

from $8.50 / 1,000 change founds

Rating

0.0

(0)

Developer

Tim Zinin

Tim Zinin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

Watch a saved job search on jobs.ch, XING Jobs (DACH) or Boss.az and get only the postings that are NEW since your last check, not the same 20 listings you already scrolled past last week. The three board adapters run directly inside this Actor: there is no child Actor run, buyer token hand-off, or second Actor charge.

What you get

  • A named "watch" (one board + that board's own search filter) that remembers what it has already shown you.
  • Every scheduled run reports ONLY postings that were not there last time — title, company, location, employment type and the posting URL.
  • Choose from 3 live boards: jobs.ch (Switzerland), XING Jobs (DACH region) and Boss.az (Azerbaijan).
  • Run several independent watches from one Actor (e.g. one on jobs.ch for "marketing" in Zurich, one on XING for remote engineering roles) — each has its own memory.
  • The very first run for a new watch tells you honestly that it's establishing a baseline, not hiding a "no new postings" run as if it found something.
  • Runs on Apify: schedule it daily, monitor it, call it from the API, export to JSON/CSV/Excel or push straight into your own pipeline.

How to run it

  1. Click Try for free — no card needed on the free plan.
  2. Pick a Board to watch, then paste that board's own filter into Board filter (JSON) — e.g. {"keywords":["marketing"]} for jobs.ch or {"keyword_filter":"marketing"} for XING/Boss.az. See the Input table below for every board's fields.
  3. Hit Start. The first run creates the baseline; schedule it to run again (daily or weekly) to get a stream of only the NEW postings each time.

Pricing

Pay-per-event. The Actor accepts only Apify's exact six-tier contract: FREE $0.005/$0.010, BRONZE $0.00475/$0.0095, SILVER $0.0045/$0.009, GOLD $0.00425/$0.0085, PLATINUM $0.0041/$0.0082, or DIAMOND $0.004/$0.008 per run start/result. A paid result is a NEW posting or a baseline snapshot from a source-confirmed complete scan. Partial snapshots, quiet checks, and error rows are free and never change the baseline. A malformed pricing contract, exhausted budget, or unconfirmed charge fails closed and never advances the baseline.

Input

FieldRequiredWhat it does
boardyesWhich board to watch: jobs-ch-swiss, xing-jobs, boss-az.
filteryesSearch fields understood by this Actor's in-process adapter for the selected board. See "Board filter fields" below.
watch_namenoName for this watch, so you can run several independent watches. Defaults to a single watch if left empty.
max_itemsnoMax NEW-posting rows delivered (and charged) per run, even if more were found (1-200, default 20).

Migration: older API clients and saved Tasks may still send baseline_key. Runtime accepts that legacy alias only when watch_name is absent, preserving the same stored baseline. New integrations should use watch_name; an explicitly empty watch_name selects the documented fallback and never revives a legacy value.

Board filter fields

BoardRequired filter fieldsExample
jobs-ch-swisskeywords (array of search terms){"keywords":["marketing"],"location":"Zurich"}
xing-jobsnone (walks its own job sitemap){"keyword_filter":"marketing","freshness_days":7}
boss-aznone (walks its own job sitemap){"keyword_filter":"marketing","freshness_days":14}

Any max_items/max_pages you set inside filter are capped at 10/2 regardless of the board's own limits, to keep each watch check fast and cheap (max_pages only applies to jobs.ch — the other two boards walk a sitemap and don't page).

{
"board": "jobs-ch-swiss",
"filter": { "keywords": ["marketing"], "max_items": 3, "max_pages": 1 },
"watch_name": "zurich-marketing"
}

Output

Baseline-created row (first run for a watch — real output, live run 30.07.2026):

{
"baselineKey": "selftest-live-run",
"board": "jobs-ch-swiss",
"found": true,
"isNew": false,
"baselineCreated": true,
"url": null,
"jobId": null,
"title": null,
"company": null,
"location": null,
"country": null,
"employmentType": null,
"postedDate": null,
"salaryRaw": null,
"currentJobsCount": 3,
"newJobsCount": null,
"sourcePartial": false,
"partialReason": null,
"sourceStats": null,
"error": "",
"summary": "First check for \"selftest-live-run\" (jobs-ch-swiss) — baseline created with 3 current posting(s) matching the filter. Future runs report only NEW postings against this baseline.",
"checkedAt": "2026-07-30T10:26:40.213Z"
}

New-posting row (real output, live run 30.07.2026 — detected via a controlled re-run after the baseline's own stored copy of this posting was removed, to prove the diff catches a real removal-then-reappearance rather than only a lucky live change):

{
"baselineKey": "selftest-live-run",
"board": "jobs-ch-swiss",
"found": true,
"isNew": true,
"baselineCreated": false,
"url": "https://www.jobs.ch/en/vacancies/detail/bfa292a6-5a59-44e9-934b-8106a6454e29/",
"jobId": "bfa292a6-5a59-44e9-934b-8106a6454e29",
"title": "Stv. Leiter/in Lager",
"company": "Plan B Personal & Marketing GmbH",
"location": "Wil ZH",
"country": "CH",
"employmentType": "Permanent position",
"postedDate": "2026-07-27T06:10:24.000Z",
"salaryRaw": null,
"currentJobsCount": null,
"newJobsCount": 1,
"sourcePartial": false,
"partialReason": null,
"sourceStats": null,
"error": "",
"summary": "New posting for \"selftest-live-run\" (jobs-ch-swiss): Stv. Leiter/in Lager — Plan B Personal & Marketing GmbH, Wil ZH.",
"checkedAt": "2026-07-30T10:27:09.481Z"
}
FieldMeaning
baselineKeyWhich watch this row belongs to.
boardWhich job board this watch scans with its built-in adapter.
foundtrue for a real result row (new posting or baseline-created); false for a notice/error row.
isNewtrue only for an actual new-posting row.
baselineCreatedtrue only on the first-ever run for this watch.
url, jobId, title, company, location, country, employmentType, postedDate, salaryRawThe posting's own fields, straight from the board.
currentJobsCountOnly set on the baseline-created row: how many postings matched at that moment.
newJobsCountTotal new postings detected this run (may exceed the rows actually delivered if capped by max_items or your remaining budget).
sourcePartial / partialReason / sourceStatstrue on a free partial-evidence notice when the board could not confirm a complete snapshot. jobs.ch reports failed keyword scans; XING and Boss propagate numeric sitemap/detail failure and cap counters. Partial snapshots are never billed or written as a baseline.
errorEmpty string when the check completed cleanly (including "nothing new"); non-empty only on a real problem.
summaryHuman-readable one-liner.

Other tools we built

Related tools for adjacent workflows in jobs and hiring.

ActorWhat it does
Company Hiring RadarPair it in the jobs and hiring workflow: Pull every open role a company is hiring for from its public job board (Greenhouse, Lever, Ashby) and turn...
Job Postings AggregatorPair it in the jobs and hiring workflow: Pull every open role from a company's public applicant-tracking system (Greenhouse, Lever, Ashby) and...
Boss.az Azerbaijan Jobs ScraperPair it in the jobs and hiring workflow: Walk boss.az's own job sitemap and pull public job listings from Azerbaijan: title, employer, location,...
jobs.ch Swiss Jobs ScraperPair it in the jobs and hiring workflow: Search jobs.ch (Switzerland) by keyword and get public job listings: title, company, location, employment...
Jobs.ge Georgia Jobs ScraperPair it in the jobs and hiring workflow: Search Jobs.ge (Georgia, the country's oldest job board) and get public job listings: title, employer,...

FAQ / Limitations

Can I watch several boards at once? Not from a single watch — each watch_name watches one board. Run several watches (different watch_name values) from the same Actor, one per board, to cover more than one job market.

What happens if I change my filter for an existing watch_name? The watch keeps comparing against whatever it last saw, so changing the filter can produce a burst of "new" postings that simply weren't checked for under the old filter. Use a new watch_name for an intentionally different watch.

If every jobs.ch keyword scan fails, the run returns source_error and does not create or update a baseline. A present but malformed stored baseline is also a fatal integrity error; it is never treated as a first run.

What this is NOT. This is not a job-application or ATS tool — it does not apply to jobs or contact employers. It surfaces public posting data only.

Found a bug or need a custom watch (e.g. tracking when a posting gets pulled)? Issues on the Actor's page.