Job Posting Drift Intelligence Actor
Pricing
from $6.00 / 1,000 results
Job Posting Drift Intelligence Actor
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
Actor stats
1
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
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 dependenciesnpm install# Build TypeScriptnpm 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 platformapify login# Push to Apify cloudapify 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
| Field | Type | Description |
|---|---|---|
url | string | Job posting URL |
title | string|null | Job title |
company | string|null | Company name |
changed | boolean | True if any meaningful changes detected |
salaryChanged | boolean | True if salary range changed |
remoteStatusChanged | boolean | True if remote status changed |
seniorityChanged | boolean | True if seniority level changed |
requirementsChanged | boolean | True if requirements changed |
aiSummary | string|null | AI-generated change summary |
aiSeverity | string|null | Change severity (low/medium/high) |
aiCategory | string|null | Primary change category |
checkedAt | string | ISO 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 developmentexport 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 baselinenpm run full-test# Check output shows no changes (first run)# Output: "changed": false# Modify test data to simulate changes# Second run - detects changesnpm run full-test# Output: "changed": true with specific change flags
Test AI Analysis
# Set API keyexport OPENAI_API_KEY="sk-..."# Run with AI enablednpm run full-test# Output includes aiSummary, aiSeverity, aiCategory
Test URL Processing
# Test newline-separated URLsecho "https://example.com/job1https://example.com/job2" > test-urls.txt# Test comma-separated URLsecho "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