Pipeline

How the bot decides what to send

Job Watcher keeps a shared cache of job postings, applies fast rule-based filters first, then spends AI work only on jobs that still look plausible for your profile.

Decision flow

The diagram below follows the current evaluator path from an active cached job through location checks, seniority filtering, initial AI review, daily review capacity, AI fit scoring, and Telegram delivery. Some numbers are configurable per deployment or profile, such as the recommended-job threshold, notification limit, and commute distance.

Rule-based first

Geography and seniority checks remove unsuitable jobs before the initial AI review.

Initial AI review

A faster batch pass decides whether a job is worth full AI fit scoring.

AI fit scoring

Recommended jobs are sent individually. Additional recommended jobs can be grouped into a digest.

1 Eligibility checks

Candidate active cached job
Eligible this scan? Continue: new, backfill, retry, or deferred Exit: already known → skip
Structured location valid? No: reject location contract warning
Location accepted? Quick scope, then remote, commute, city, country-wide, or fallback No: reject location pre-filter
Seniority pre-filter ok? No: reject seniority pre-filter

2 Initial review

Aggregator target-role feed? Yes: skip initial AI review
Initial AI review keeps job? Failure defaults to keep No: reject initial AI review
Candidate job
Rate company and rank priority Source config, catalog, cache, or OpenAI
Selected for full AI review? No: no fit score yet — capacity filled or company quality low

3 Scoring and delivery

Fetch full job text if needed
AI fit scoring Candidate score, then employer score when candidate score is at least 50%
Store AI result and scan record
Meets recommendation threshold? No: compact digest entry
Inside notification limit? Yes: individual Telegram alert No: compact digest entry
Scan summary and dashboard updated
Illustrative flow for a single job after it has entered the shared cache.

How jobs enter the system

Ingestion is separate from user evaluation. Company integrations and aggregator feeds fetch jobs into a shared cache first; user profiles then evaluate cached jobs against their own preferences.

Companies

Specific company ingestion

For supported companies, Job Watcher talks directly to the company's career page or ATS feed. Examples include Greenhouse, Lever, Workday, SmartRecruiters, custom APIs, and structured HTML pages.

  • Each integration has a configured parser and canonical internal name.
  • Fetched postings are normalized into one internal job shape.
  • Stable job IDs, URLs, company names, locations, timestamps, and integration metadata are stored in the shared cache.
  • Repeated scans refresh existing jobs, add new jobs, and mark missing jobs after enough successful checks.
Aggregators

Aggregator-based ingestion

Aggregator feeds cover roles and markets that are not tied to one configured company integration. They are generated from search terms and geography, then parsed like other integrations.

  • Profiles contribute search intent, such as roles and target jurisdictions.
  • The operator deduplicates compatible searches into shared aggregator feeds.
  • Aggregator postings can represent many employers, including companies that do not yet have a dedicated direct integration.
  • The same normalization, cache freshness, and profile evaluation pipeline applies after ingestion.
1

Fetch

Ingestion jobs run on a schedule and fetch postings into the shared database.

2

Normalize

Different ATS and page formats are converted into the same job model.

3

Evaluate

User profiles evaluate active cached jobs with geography, seniority, initial AI review, and AI fit scoring.

4

Notify

Recommended jobs are sent through Telegram as individual alerts or grouped digest entries.