Productivity & Collaboration job-searchweb-scrapingcareercli-toolsdeduplicationportal-searchlinkedinbun

Job Scraper — Local-First Job Search Skill

Automatically searches multiple job portals for new postings matching your profile, deduplicates across runs, and presents them sorted by fit — no more manual site-hopping.

FollowSkills review · FSRS-2.0
Use with care
54/ 100 5-point scale 2.7 / 5
1 2 3 4 5 6
1Trust16 / 25 · 3.2/5

Scoped allowlist (bun-run installed CLIs, job_key.py, WebFetch/WebSearch), health check may edit only the enabled toggle and only with confirmation, Step 4.5 explicitly forbids programmatic LinkedIn people scraping; SECURITY.md and CI security-guards back least-privilege and data-boundary claims. Deducted: instruction-level defenses are not a sandbox (self-acknowledged), agent issues network requests to multiple overseas portals, no explicit rollback for state-file writes, publisher unverified. Not full marks.

2Reliability9 / 20 · 2.3/5

Highly self-consistent instructions: WebSearch fallback when bun is missing, log-and-continue on CLI failures, client-side date filtering, URL-resolvability rule, closed-at-source detection; the underlying CLIs carry fixture tests. Deducted: the orchestration itself was not executed in this static review, search-queries.md is full of placeholders requiring correct user setup, and multi-agent parallel state consistency cannot be verified statically.

3Adaptability8 / 15 · 2.7/5

Triggers and optional arguments (focus/broad/health) are explicit, scenario clear, portal skills are swappable for localization. Deducted: core search depends on LinkedIn/Google/WebSearch — poor reachability from mainland-China networks; no Chinese-language support declared; non-fit boundaries (non-job-search input) not explicitly stated.

4Convention11 / 15 · 3.7/5

Well-layered docs (SKILL.md + search-queries.md), MIT license, framework-version CI guard, upstream update tooling, and a security reporting channel; known limitations are disclosed. Deducted: the skill has no independent version/changelog, cross-file dependencies (CLAUDE.md, /rank) must be inferred, and maintenance rests on a single author.

5Effectiveness6 / 15 · 2.0/5

Dedup, state persistence, health checks and quality guardrails give clear marginal value over manual searching; output format is specified. Deducted: static review cannot verify real scrape success; substantial upfront configuration (profile, queries, CLI installs) limits out-of-box value; README author results are self-reported.

6Verifiability4 / 10 · 2.0/5

CI workflows, committed CLI fixture/mock tests, SECURITY.md, and cited concrete incidents (e.g. the stale freehire posting) provide auditable material. Deducted: no committed tests target the orchestration key path (search→dedup→present), no independent third-party reproduction, and the static-review ceiling is 5, so 4.

Evidence confidence:Low Reviewed Sep 09, 2026 Reviewed revision 8c81edc330b9
The upstream repository has new commits since this review. The score still applies to the reviewed revision shown and may not cover the latest changes.
Before you use it
  • This is a static source review; no code was executed. Real scrape success rates and cross-portal behavior are unverified.
  • Core search depends on overseas services (LinkedIn, Google/WebSearch); reachability from mainland-China networks may require a proxy.
  • Placeholders in search-queries.md and the personal profile must be configured before use, or queries will run with literal template tokens.
  • Defenses are instruction-level, not a sandbox: on untrusted job boards, review what the agent fetched and wrote before sending anything out.
  • Publisher is not verified by the FollowSkills registry; the repo contains 9 SKILL.md files and only job-scraper was scored here.
See the full review method →

What does this skill do, and when should you use it?

Job Scraper is the job-searching skill of the ai-job-search framework (.claude/skills/job-scraper). It searches installed job-portal CLIs for new postings matching your profile, falling back to web search where no CLI exists; it deduplicates across runs against a seen-jobs file and your application tracker, and gives each new job a quick high/medium/low fit assessment. Results arrive as a fit-sorted table, with LinkedIn referral-contact search links generated for high and medium matches. The surrounding framework was built and dogfooded by a geophysicist during his own job search (he reports it landed him an AI engineer role) and targets individual job seekers. Caveat: of the six bundled portal CLIs, four cover the Danish market only — users elsewhere must generate their own portal skills via the repo's /add-portal command.

Reads the search strategy in search-queries.md plus historical state in seen_jobs. and job_search_tracker.csv; primarily calls each installed portal CLI under .agents/skills/ (run with Bun, scoped to the last 14 days, capped at ~20 results per call, portals run in parallel), falling back to WebSearch/WebFetch when CLIs are missing or fail; fetches full detail via each portal's detail command for promising hits (key requirements, application deadline, description snippet) and detects closed-at-source postings, marking them expired; consolidates identical cross-city mass postings into a single flagged row; assigns a quick fit rating with a language-gate override rule; derives canonical dedup keys via tools/job_key.py and writes every fetched job to seen_jobs. (with portal, source, posted_date, and more); builds two LinkedIn people-search URLs per high/medium-fit job (recruiter path and team-peer path) — links only, never scraped; runs a bounded portal health check (at most one probe and one retry per portal) producing degraded/broken/inconclusive verdicts; finally presents new jobs in a table, noting disabled and fallback portals.

  1. A job seeker who wants to proactively surface new postings weekly instead of manually browsing Jobindex, Jobnet, LinkedIn, and other boards
  2. Existing ai-job-search users who want scraped jobs deduplicated and handed straight into the /rank and /apply pipeline
  3. Users targeting a specific direction, e.g. '/scrape data science' to prioritize a query category, or '/scrape broad' to run everything
  4. Users unsure whether their portals still work, running '/scrape health' to probe each portal CLI (e.g. '/scrape health jobnet' for a single portal) without searching
  5. Applicants hunting referrals, using the generated LinkedIn recruiter/peer search links to make warm outreach themselves

What are this skill's strengths and limitations?

Pros
  • Runs entirely on your machine; the framework is free and open source (MIT), with no subscriptions or API costs
  • Durable cross-run deduplication (seen_jobs. + application tracker + canonical keys via a helper script) means you never see the same posting twice
  • Robust engineering: per-portal enable/disable toggles, automatic WebSearch fallback on CLI failure, and a bounded health check that catches silently rotting parsers
  • Honest about data: it forbids fabricated postings, records posted_date and source for later ghost-job audits, and flags mass-posting patterns without accusing employers
  • The referral-contact step is deliberately zero-dependency — it generates LinkedIn search links only, no scraping, no credentials
Limitations
  • The four bundled Danish portal CLIs (Jobbank, Jobdanmark, Jobindex, Jobnet) cover only Denmark; other markets require generating and maintaining your own portal skills via /add-portal
  • Portal CLIs depend on target-site structure — a site redesign makes parsers silently return junk until the health check flags it and you fix the skill
  • linkedin-search rides unofficial public endpoints; automated access violates LinkedIn's Terms of Service, so it must stay low-volume personal use and carries block risk
  • Deeply tied to Claude Code: allowed-tools, the Agent tool, AskUserQuestion, and /add-portal are Claude Code mechanisms; porting to other agent tools requires adaptation
  • The quick fit rating is only a coarse signal — full evaluation lives elsewhere in the framework (/rank and 04-job-evaluation.md), so the skill alone has limited judgment

How do you install this skill?

The skill ships inside the MadsLorentzen/ai-job-search repository (MIT licensed) and installs with the framework: 1) fork and clone with gh repo fork MadsLorentzen/ai-job-search --clone; 2) run bun install inside each portal CLI directory under .agents/skills/ (jobbank-search, jobdanmark-search, jobindex-search, jobnet-search, linkedin-search, freehire-search; linkedin-search and freehire-search have zero runtime dependencies and can skip this); 3) prerequisites: Claude Code CLI, Python 3.10+, and Bun; 4) run /setup to build your profile. The skill itself lives at .claude/skills/job-scraper/ and needs no separate installation.

How do you use this skill?

Inside Claude Code, run /scrape, or say 'Find new jobs' or 'Any new positions?'. Optional arguments: '/scrape data science' (prioritize a query category), '/scrape broad' (run all categories), or '/scrape health' (portal health check only, e.g. '/scrape health jobnet' to probe one portal even if disabled). After the run, pick a table row number to hand that job to the job-application-assistant skill for full evaluation (/apply); with roughly 8+ new jobs, prefer /rank, which batch-scores everything into a ranked shortlist.

How does this skill compare with similar options?

The README contrasts the framework with 'most LaTeX-resume templates', which lack PDF compile verification — but that argument targets /apply, not scraping. For job searching itself, the de facto alternatives are manually browsing job boards or using LinkedIn's built-in alerts; this skill's differentiators are parallel multi-portal search, local deduplication, and handoff into the apply pipeline — though its coverage depends entirely on whether your market has a working portal CLI.

FAQ

Does it cost anything?
No. The repository is MIT-licensed open source, and the author explicitly states there is no affiliated cryptocurrency, token, or paid sponsorship program — anything claiming otherwise is a scam (the only support channels are Ko-fi and GitHub contributions). The searches hit portals' public interfaces and need no API keys.
I'm not in Denmark — can I still use it?
The core workflow is country-agnostic, and two portal skills are cross-market out of the box (linkedin-search takes an explicit location flag; freehire-search is a multi-market tech aggregator). But the Jobbank, Jobdanmark, Jobindex, and Jobnet CLIs are Danish-only. For your market, use the repo's /add-portal command to generate a skill against your local job board — it requires Bun.
Could results be stale 'ghost jobs'?
The skill defends against this explicitly: results are scoped to the last 14 days and stored with posted_date for auditability; LinkedIn detail responses with isActive=false are marked expired rather than silently dropped; WebSearch fallback rows are flagged since search indexes can be weeks stale. Portal-side indexing lag can't be fully eliminated, and the README advises skimming what is fetched on unfamiliar boards.
What permissions and environment does it need?
Claude Code CLI, Python 3.10+, and Bun. The skill's allowed tools cover file read/write/edit, Bash (bun and the portal CLIs), WebFetch, WebSearch, Agent, and AskUserQuestion. It reads and writes local state files (seen_jobs., job_search_tracker.csv). The referral step only generates links — it never fetches or scrapes LinkedIn people-search pages programmatically.

More skills from this repository

All from MadsLorentzen/ai-job-search

Productivity & Collaboration

LinkedIn Search Skill

Search live LinkedIn job listings for any country or remote market with no login, no API key, and zero runtime dependencies — just Bun.

Productivity & Collaboration

Jobindex Denmark Job Search

Query the public Jobindex.dk API to search live Danish job listings across all sectors from Claude Code — no account or key required.

Productivity & Collaboration

freehire Search Skill

Search tech job listings across many markets through freehire.me's public aggregator API — no keys, no signup, runs on your machine.

Productivity & Collaboration

Jobdanmark Search (Denmark Job Listings)

Query the Jobdanmark.dk public API straight from your AI assistant — search ~15,000+ live Danish job listings by keyword, city, category and employment type, with no login required.

Productivity & Collaboration

Jobnet-Search: Danish Official Job Portal Skill

Query the Jobnet.dk public API directly to search Denmark's official government job portal — 21,000+ live listings, no account or key required.

Dev & Engineering

Jobbank Search Skill

Search live Danish job listings from Akademikernes Jobbank locally, with keyword and multi-dimensional filtering for academic and highly educated positions in Denmark.

Productivity & Collaboration

Upskill — Skill Gap Analysis & Learning Plan

Compares your tracked job postings against your profile, surfaces skill gaps, and generates a prioritized learning plan with real, web-searched study resources.

Productivity & Collaboration

Job Application Assistant

A job search that runs on your machine: evaluate postings, tailor a LaTeX CV, write cover letters, and prep interviews — all inside Claude Code.

Related skills