job-scan

Scan ATS job postings from Greenhouse, Ashby, Lever, and Workday, then filter, deduplicate, verify liveness, and upload to Notion.

1|Updated Mar 6, 2026
One-click install
npx skills add https://github.com/khetansarvesh/ai_skills_repo --skill job-scan
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: job-scan
Source: https://github.com/khetansarvesh/ai_skills_repo/tree/main/skills/job-scan
Command: npx skills add https://github.com/khetansarvesh/ai_skills_repo --skill job-scan

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires playwright, and includes scripts (resource) components.

What problem does it solve?

Job scanning across Greenhouse, Ashby, Lever, and related portals is slow and error-prone, and stale listings waste time during evaluation.

Core Features & Use Cases

  • Multi-level discovery: Collects recent postings via public ATS APIs, then fills gaps with browser-based crawling and Jobright tab scraping when APIs aren’t available.
  • Title-based targeting: Filters candidates using positive/negative job-title keywords sourced from your Notion Preferences.
  • Safety guardrails: Deduplicates against your Notion applications database and verifies that postings are still live using Playwright before uploading.
  • Notion workflow integration: Writes surviving offers to the Notion applications DB with status set to "Scanned" for downstream evaluation.

Use case example: A recruiter wants only US-based AI/ML engineering roles from Dream/Big-Tech companies, refreshed daily, with dead links automatically excluded before the evaluation pipeline runs.

Quick Start

Run python3 skills/job-scan/scripts/scout_specials.py to collect recent jobs into candidate_store.json, then run python3 skills/job-scan/scripts/dedup_liveness_upload.py skills/job-scan/candidate_store.json to filter, deduplicate, verify liveness, and upload the results to Notion.

Frequently Asked Questions about job-scan

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I scrape new job postings from ATS platforms like Greenhouse and Ashby?

Job scanning automates discovering recent openings by collecting data from public ATS APIs across Greenhouse, Ashby, Lever, and Workday, filling gaps with browser-based crawling and Jobright scraping. Results are saved locally as a candidate store file.

Can I filter scraped ATS jobs by title keywords and location preferences?

Title filtering uses positive and negative keywords sourced directly from your Notion Preferences database. The scanner targets US-based and remote eligibility scenarios, ensuring only roles matching your specified criteria are retained for downstream evaluation.

How do I prevent duplicate job applications when scanning multiple ATS boards?

Deduplication checks new job discoveries against your existing Notion applications database using both URL and company-role matching. Surviving unique postings are uploaded with a "Scanned" status to prevent duplicate entries in your workflow.

Do I need Playwright installed to verify if scraped job links are still live?

Playwright is required for sequential liveness verification, which opens each posting to confirm it is still active before uploading. This safety guardrail ensures dead links and stale listings are automatically excluded from your final results.

What is the best way to automate daily job scanning and push results to Notion?

Running the Python scout script collects recent jobs into a JSON store, followed by a second script that filters titles, deduplicates, verifies liveness, and uploads surviving offers to your Notion applications database for evaluation.

Does web scraping for ATS jobs work when public APIs are not available?

Multi-level discovery uses browser-based crawling and Jobright tab scraping to fill gaps when public ATS APIs are unavailable. This ensures continuous job discovery across Greenhouse, Ashby, Lever, and Workday platforms.