Job Posting Drift Intelligence Actor avatar
Job Posting Drift Intelligence Actor
Under maintenance

Pricing

from $6.00 / 1,000 results

Go to Apify Store
Job Posting Drift Intelligence Actor

Job Posting Drift Intelligence Actor

Under maintenance

Job Posting Drift Intelligence monitors job listings over time and detects meaningful changes like salary updates, remote/onsite shifts, seniority inflation, and requirement changes. Turn static job posts into actionable job lifecycle intelligence

Pricing

from $6.00 / 1,000 results

Rating

5.0

(1)

Developer

Muhammad Bilal

Muhammad Bilal

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Share

๐Ÿ•ต๏ธ Job Posting Drift Intelligence Actor

Competition-grade Job Intelligence system for detecting and analyzing meaningful changes in job postings over time.

Apify SDK CheerioCrawler TypeScript

๐ŸŽฏ Overview

Job Posting Drift Intelligence Actor is a production-grade Apify Actor that monitors job postings, captures structured snapshots, and intelligently detects meaningful changes in job listings such as salary, remote status, seniority, and requirements. Built with enterprise security, scalability, and extensibility in mind.

Key Capabilities

โœ… Structured Change Detection - Salary, remote status, seniority, and requirements tracking โœ… Intelligent Normalization - Converts raw HTML to structured job data โœ… Semantic Diff Engine - Detects meaningful job posting changes โœ… Optional AI Analysis - LLM-powered change explanation (OpenAI-compatible) โœ… Persistent Snapshots - SHA-256 hashed storage with Apify Key-Value Store โœ… Backward Compatible - Works as simple scraper or advanced intelligence system โœ… Cloud-Safe - No hardcoded secrets, graceful failures, input validation

๐Ÿšจ Why Job Posting Drift Intelligence Actor?

Job postings change silently โ€” salary adjustments, remote policy updates, seniority requirements, or benefit changes often go unnoticed until they impact recruitment, compensation strategies, or competitive positioning.

Job Posting Drift Intelligence Actor automatically monitors job listings and detects:

๐Ÿ“„ Content changes (description updates, requirement modifications)

๐Ÿ’ฐ Compensation changes (salary range adjustments, benefit updates)

๐Ÿข Work arrangement changes (remote/on-site policy shifts)

๐Ÿ‘ฅ Role evolution (seniority level changes, title modifications)

You get actionable job market intelligence, not raw HTML diffs.

๐ŸŽฏ Who is this for?

Recruitment teams monitoring competitor salary ranges and requirements

HR departments tracking job posting compliance and consistency

Compensation analysts monitoring market salary trends

Talent acquisition teams detecting hiring urgency signals

Job platforms providing drift intelligence to job seekers and employers

Market researchers analyzing job market dynamics and trends

โš™๏ธ How it works (4 steps)

Provide one or more job posting URLs to monitor

Configure AI analysis and sensitivity settings

Run the Actor โ†’ receive structured job drift results

Each result includes change detection, AI insights, and metadata

๐Ÿ’ฐ Pricing example (transparent)

Monitoring 100 job postings โ‰ˆ $0.15

Detecting changes across 100 postings โ‰ˆ $0.45

AI analysis for 50 changed postings โ‰ˆ $0.30

No monthly fees โ€” pay only for what you use

๐Ÿš€ Quick Start

Local Development

# Install dependencies
npm install
# Build TypeScript
npm run build
# Run Actor locally (preserves snapshots between runs)
npm start
# Or use Apify CLI (clears storage each run)
apify run

Apify Platform

# Login to Apify platform
apify login
# Push to Apify cloud
apify push

Input Configuration

Create .actor/input_schema.json or use the Apify Console input form:

{
"jobUrls": "https://example.com/job1\nhttps://example.com/job2",
"enableSemanticAnalysis": true,
"runLabel": "weekly-monitoring"
}

๐Ÿ“Š Output Format

Each monitored job posting produces structured JSON:

{
"url": "https://example.com/job1",
"title": "Senior Software Engineer",
"company": "Tech Corp",
"changed": true,
"salaryChanged": true,
"remoteStatusChanged": false,
"seniorityChanged": true,
"requirementsChanged": true,
"aiSummary": "Job title upgraded from Software Engineer to Senior Software Engineer with salary increase from $100k-120k to $120k-150k",
"aiSeverity": "high",
"aiCategory": "salary",
"checkedAt": "2025-12-20T14:00:00.000Z"
}

Field Descriptions

FieldTypeDescription
urlstringJob posting URL
titlestring|nullJob title
companystring|nullCompany name
changedbooleanTrue if any meaningful changes detected
salaryChangedbooleanTrue if salary range changed
remoteStatusChangedbooleanTrue if remote status changed
seniorityChangedbooleanTrue if seniority level changed
requirementsChangedbooleanTrue if requirements changed
aiSummarystring|nullAI-generated change summary
aiSeveritystring|nullChange severity (low/medium/high)
aiCategorystring|nullPrimary change category
checkedAtstringISO timestamp of check

โš™๏ธ Configuration Options

jobUrls (required)

Job posting URLs to monitor. One URL per line or comma-separated.

enableSemanticAnalysis (default: false)

Enable AI-powered change explanation using OpenAI. Requires OPENAI_API_KEY environment variable.

runLabel (optional)

Label for grouping related runs in the dataset.

๐Ÿ”’ Security & Best Practices

API Keys

Never hardcode API keys. Use environment variables:

# Local development
export OPENAI_API_KEY="sk-..."
# Apify platform
# Set in Actor โ†’ Settings โ†’ Environment Variables

Input Validation

All inputs are validated:

  • URLs are normalized and validated
  • AI analysis gracefully fails without API key
  • Missing fields have safe defaults

Graceful Failures

  • Missing API keys โ†’ Warning + null AI results
  • Malformed HTML โ†’ Logged + continues processing
  • Network errors โ†’ Retry mechanism with fallbacks
  • Invalid URLs โ†’ Skipped with error logging

๐Ÿ—๏ธ Architecture

Core Components

src/
โ”œโ”€โ”€ main.ts # Orchestrates the entire workflow
โ”œโ”€โ”€ crawler/ # HTML fetching and extraction
โ”œโ”€โ”€ normalizer/ # Raw text โ†’ structured job data
โ”œโ”€โ”€ diff/ # Change detection logic
โ”œโ”€โ”€ intelligence/ # AI analysis integration
โ””โ”€โ”€ storage/ # Snapshot persistence

Storage Strategy

Key-Value Store (job-snapshots)

  • Keys: job-snapshot-{sha256hash}
  • Stores complete job snapshots
  • Persistent across runs

Dataset (default)

  • One record per job URL per run
  • Structured JSON with change detection
  • Queryable and exportable

๐Ÿงช Testing & Verification

Test Change Detection

# First run - establishes baseline
npm run full-test
# Check output shows no changes (first run)
# Output: "changed": false
# Modify test data to simulate changes
# Second run - detects changes
npm run full-test
# Output: "changed": true with specific change flags

Test AI Analysis

# Set API key
export OPENAI_API_KEY="sk-..."
# Run with AI enabled
npm run full-test
# Output includes aiSummary, aiSeverity, aiCategory

Test URL Processing

# Test newline-separated URLs
echo "https://example.com/job1
https://example.com/job2" > test-urls.txt
# Test comma-separated URLs
echo "https://example.com/job1, https://example.com/job2" > test-urls.txt

๐Ÿ“ˆ Performance Characteristics

  • Memory: ~30-50MB for 100 job postings
  • Speed: ~20-40 pages/minute (network-dependent)
  • Storage: ~2KB per job snapshot
  • Scalability: Handles 1,000+ job postings efficiently
  • Cost: ~$0.10 per 100 job checks

๐Ÿ”ฎ Future Enhancements

This Actor is designed as a foundational building block for:

  • Historical Trend Analysis - Salary and requirement trends over time
  • Competitor Intelligence - Cross-company compensation comparison
  • Hiring Urgency Detection - Automated priority flagging
  • Multi-Platform Monitoring - LinkedIn, Indeed, company career pages
  • Alert System - Email/webhook notifications for critical changes
  • Custom Rules Engine - XPath/CSS-based monitoring rules
  • Visual Diff - Screenshot comparison for layout changes
  • Market Intelligence - Aggregated job market insights

๐Ÿ“š Resources

๐ŸŽ“ Technical Notes

Why CheerioCrawler?

  • Lightweight (no browser overhead)
  • Fast HTML parsing
  • Perfect for static job posting pages
  • Cost-effective at scale

Why SHA-256 Hashing?

  • Deterministic content fingerprinting
  • Collision-resistant for data integrity
  • Standard cryptographic security
  • Fast computation for large datasets

Why Structured Normalization?

  • Converts messy HTML to clean, comparable data
  • Enables intelligent change detection
  • Supports multiple job board formats
  • Future-proof for new job platforms

Why Apify Key-Value Store?

  • Persists between actor runs
  • Enables historical comparison
  • Cloud-compatible storage
  • Automatic cleanup and management

๐Ÿ“œ License

This Actor follows Apify's standard terms of service.

๐Ÿค Contributing

This Actor was built with extensibility in mind. Key extension points:

  • Custom Normalizers - Modify normalizeJobData() for new job formats
  • Alternative Diff Engines - Extend computeDiff() with custom logic
  • Additional LLM Providers - Replace OpenAI in analyzeChanges()
  • Custom Severity Scoring - Update change detection thresholds
  • New Change Categories - Add salary, benefits, location tracking

๐Ÿ† Competition-Grade Features

โœ… Deterministic output - Same input always produces same results โœ… Structured and readable - Clean JSON with meaningful field names โœ… No unnecessary dependencies - Minimal, focused tech stack โœ… Reusable foundation - Extensible for various job monitoring needs โœ… Code tells a story - Self-documenting with clear abstractions โœ… Production-ready - Error handling, logging, validation โœ… Judge-friendly demo mode - Works without API keys โœ… Extensive documentation - Complete setup and usage guides

Built with โค๏ธ for the Apify ecosystem