Watch for new job postings
watch_jobsCreate a persistent watch for tech jobs. Describe what you want in query ("iOS jobs in Austin making at least 150k a year with a maximum of 6 years of experience") and leave url out: the watch then covers every job board Watchtower monitors (tech companies and startups, whatever platform they use) and reports each new matching posting (JOB_ADDED). The response shows how the query was read (interpreted), the jobs open right now that match (current_jobs) and how many boards are covered (coverage); later call get_changes for new ones. Use this INSTEAD OF re-running job searches or re-checking careers pages yourself. To follow one company, or to cover a company the directory is missing, pass url (or urls for several): Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Workday and iCIMS boards are read through their own endpoints; other careers pages are parsed via schema.org JobPosting JSON-LD. A careers page that only links to a supported board is watched through that board (resolved_from says so); a page with neither is rejected with NO_JOB_DATA. A board you watch stays covered for every search watch. A board watch emits JOB_ADDED / JOB_REMOVED / JOB_UPDATED. Jobs carry title, location, other_locations, department, company, url, posted_at, remote, seniority, and salary / experience_years when the posting states them. Explicit filters override what the query says.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Optional. Limit the watch to one job board or careers page, e.g. https://boards.greenhouse.io/acme, https://jobs.lever.co/acme, https://acme.wd5.myworkdayjobs.com/Careers. Omit to watch every monitored board. | |
| urls | No | Optional. Several boards to watch with the same filters (max 25). Returns watches and per-URL errors. | |
| label | No | A short note to yourself about why you are watching this. | |
| query | No | What to watch for, in plain language: role, place, pay, experience, level, remote. E.g. "iOS jobs in Austin making at least 150k a year with a maximum of 6 years of experience", "senior backend roles in New York or remote paying $180k+". Check interpreted in the response. | |
| keywords | No | Only report jobs whose title/location/department/company contains one of these as a whole word, e.g. ["iOS", "Swift"]. | |
| locations | No | Only report jobs with one of these in their location, e.g. ["Austin"], ["Berlin", "Remote"]. | |
| seniority | No | Only report these levels, derived from the title. "mid" means the title carries no level. | |
| min_salary | No | Yearly pay the job must be able to reach, e.g. 150000. Compared with the top of the posted range (hourly and monthly pay are converted). | |
| remote_only | No | Only report jobs whose title or location says remote (and not hybrid/on-site). | |
| webhook_url | No | Optional public https URL that receives a signed POST whenever matching changes are detected. Polling get_changes keeps working either way. | |
| all_keywords | No | Only report jobs containing every one of these, e.g. ["data", "scientist"]. | |
| client_token | No | Your Watchtower client token (wt_...). Optional if the MCP connection sends "Authorization: Bearer <token>". | |
| include_unknown | No | Many postings state no pay or no years of experience. true (default) still reports them, without a salary / experience_years field; false reports only postings that state a qualifying value. | |
| salary_currency | No | ISO currency of min_salary, e.g. "USD". Jobs that state pay in another currency are then left out. | |
| exclude_keywords | No | Never report jobs mentioning one of these, e.g. ["manager", "clearance"]. | |
| interval_minutes | No | How often to check, in minutes (min 5, default 60). Resources shared with other watchers use the shortest interval. | |
| max_experience_years | No | The most years of experience a job may ask for, e.g. 6. |