← All use cases
Content & MarketingCSSRegex

Job Listings Watch for Keywords

Get alerted the moment a job board posts a listing matching your filters - for recruiters, candidates, or competitive intelligence.

Verid Use Cases·3 min read·Template: job-listings-css

The scenario

There are three job titles you'd consider for your next role and they don't post often. Or you're a recruiter watching for new engineering opens at competitors. Or you're a competitive analyst watching a competitor's careers page for what skills they're hiring - a strong signal about their next product direction.

In each case, you want a low-latency notification when a new posting matches your criteria, not a daily LinkedIn email digest.

The problem

Job boards' built-in alerts are slow (often daily-batched), can't be piped into Slack, and over-fire on irrelevant matches. Building your own careers-page scraper per company is feasible but breaks every time a company switches ATS providers.

How Verid solves it

The job-listings-css template watches a careers-page URL and extracts the first posting's title. When the title changes, a new job has been added.

For ATS providers with stable layouts (Greenhouse, Lever, Ashby), a CSS extractor is reliable. For careers pages that are deeply custom, the regex extractor against the rendered HTML works as a fallback.

Build the monitor

Extraction config - Greenhouse careers page

{
  "method": "css",
  "fields": {
    "latest_title": ".opening:first-child a",
    "latest_location": ".opening:first-child .location",
    "open_count": ".level-0"
  }
}

Extraction config - Generic regex fallback

{
  "method": "regex",
  "fields": {
    "latest_title": "<h[1-3][^>]*class=\"[^\"]*(?:job|posting|opening)[^\"]*\"[^>]*>([^<]+)</h[1-3]>"
  }
}

Predicate

For broad "any new role" watch:

{ "type": "field_changes", "field": "latest_title" }

For keyword-filtered watch - only fire when the new title contains "Staff Engineer":

{
  "type": "composite",
  "operator": "AND",
  "conditions": [
    { "type": "field_changes", "field": "latest_title" },
    { "type": "field_matches_regex", "field": "latest_title", "pattern": "Staff Engineer" }
  ]
}

Create the monitor

Using the template:

curl -X POST https://api.verid.dev/v1/monitors/from-template/job-listings-css \
  -H "Authorization: Bearer vrd_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Competitor - engineering hires",
    "url": "https://boards.greenhouse.io/competitor",
    "deliveries": [
      { "type": "email", "to": "recruiting@example.com" }
    ]
  }'

SDK:

import { VeridClient } from '@verid.dev/sdk';

const client = new VeridClient({ apiKey: 'vrd_your_api_key' });

await client.monitors.createFromTemplate('job-listings-css', {
  name: 'Competitor - engineering hires',
  url: 'https://boards.greenhouse.io/competitor',
  deliveries: [{ type: 'email', to: 'recruiting@example.com' }],
});

What the webhook delivers

{
  "id": "del_01H...",
  "fired_at": "2026-05-08T11:00:00Z",
  "diff": {
    "fields_changed": ["latest_title", "latest_location", "open_count"],
    "before": {
      "latest_title": "Senior Product Designer",
      "latest_location": "Remote - US",
      "open_count": "23 jobs"
    },
    "after": {
      "latest_title": "Staff Engineer, Inference Infrastructure",
      "latest_location": "San Francisco, CA",
      "open_count": "24 jobs"
    }
  }
}

That title hints at a new ML / inference team at the competitor - a useful signal even before any product announcement.

Caveats & tips

  • Watch the ATS URL, not the company's marketing careers page. Greenhouse, Lever, and Ashby URLs are stable; the company's /careers page may rewrap them with branding and break extraction.
  • Hourly is plenty. New roles post during business hours and rarely more than once a day per company. Don't burn your interval budget here.
  • Watch the count, too. A drop in open_count is also news - a role got filled or pulled. Add a second predicate if that's signal to you.
  • The keyword-filtered composite predicate suppresses noise. Without it, you'll get a fire on every new role; with it, you only hear when a relevant one lands.

Related use cases

For government RFP / tender postings, see government contract & tender postings. For broader competitive intelligence, see competitor tech stack changes. For Etsy- or marketplace-style new listings, see Etsy shop new listings.

Ship this monitor today

5 monitors free, no credit card. Set up takes about a minute.

Get started free