Skip to content
AI & Agents
Skill

/apify-jobs-data

Extract clean, de-noised job-posting data from LinkedIn, Indeed, Glassdoor, and 20+ boards in one Apify run — deduplicated across boards, with likely ghost jobs and reposts flagged (heuristic, not verified) and fields normalized — then analyze it (deduped hiring demand,

From plugin
awesome-skills
25528 skills
Install
$ npx -y skills add apify/awesome-skills --skill apify-jobs-data --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/apify-jobs-data

Context preview

The summary Claude sees to decide when to auto-load this skill.

Extract clean, de-noised job-posting data from LinkedIn, Indeed, Glassdoor, and 20+ boards in one Apify run — deduplicated across boards, with likely ghost jobs and reposts flagged (heuristic, not verified) and fields normalized — then analyze it (deduped hiring demand,

SKILL.md

apify-jobs-data.SKILL.md
name: apify-jobs-data
description: Extract clean, de-noised job-posting data from LinkedIn, Indeed, Glassdoor, and 20+ boards in one Apify run — deduplicated across boards, with likely ghost jobs and reposts flagged (heuristic, not verified) and fields normalized — then analyze it (deduped hiring demand, in-demand skills, coverage-labeled salary distribution), export it (CSV / JSON / Apify dataset) for dashboards and BI, or rank it against a résumé. Use when the user asks to scrape job postings, build a job dataset, analyze hiring demand or in-demand skills or salary ranges for a role or market, export job data for a dashboard or spreadsheet, dedupe job listings across boards, flag or filter out likely ghost jobs, or rank jobs by fit to a résumé. Triggers - "scrape job postings for X", "what skills are in demand for Y", "salary range for Z in [location]", "export job data to CSV", "filter out the ghost jobs", "which of these jobs fit my résumé".
author: Oleg Martinez
author_url: https://github.com/ezumyn-aliegm
metadata:
  category: data-extraction
  keywords: "jobs, job-data, job-postings, job-scraping, hiring-demand, salary, skills-in-demand, market-analysis, dataset-export, ghost-jobs, resume-fit, linkedin-jobs, indeed, glassdoor, data-extraction, apify"

Jobs Data

Extract clean, structured job-posting data from 20+ boards in one Apify run, then put it to use. The pipeline is the same regardless of purpose:

**acquire → de-noise → normalize → { analyze | export | rank by résumé }**

The reusable value is the cleaned dataset: postings deduplicated across boards, cross-board reposts merged, likely ghost jobs flagged, and fields normalized to a consistent schema. Ghost-job and repost pollution corrupts demand counts, salary statistics, and dashboards just as much as it wastes a job seeker's time — so de-noise is the shared core, and every output mode runs on top of it.

**Never invent a posting, a salary, a count, or a keyword.** Everything is scraped live from a named Apify Actor and carries its source; missing fields stay blank, and every statistic reports the share of postings it is computed from — see [Quality rules](#quality-rules).

Ghost-job detection is heuristic and single-run: it compares the same (company, title, location) across boards for conflicting posted dates and reads the JD for pipeline language. The data carries no first-seen or edit history, so a flag is a suspicion, never a verdict. The Actors do the data work; the agent routes, de-noises, aggregates, and grounds:

| Step | Apify Actor | Agent | |---|---|---| | Acquire across 20+ boards | `agentx/all-jobs-scraper` | routes the query | | De-noise ghost jobs / reposts | cross-board scraped fields — conflicting `posted_date` across boards, JD-body match across "company" names (no first-seen / edit-history field exists) | applies the rule | | Salary benchmark (optional) | `memo23/glassdoor-scraper-ppr` | aggregates, labels coverage |

Note on overlap with analysis-first job skills

A more analysis-first skill may also answer "hiring demand / in-demand skills / salary" questions. This skill's center of gravity is the **cleaned dataset** — cross-board duplicates and reposts merged, likely ghost jobs flagged, and fields normalized — which every mode then runs on. If you only need a quick market read, an analysis-only skill is lighter. Reach for this one when **data quality matters** (deduped demand counts, coverage-labeled salary stats), when you need the **raw rows exported** to CSV / an Apify dataset for a dashboard, or when you need a **résumé ranked** against live postings — none of which an analysis-only skill produces.

Output modes — pick one or more

The shared core (Steps 1–5) is identical; Step 6 produces whichever mode(s) the user wants. Default to whatever the request implies; if unclear, ask.

| Mode | Produces | Reference | |---|---|---| | **Market & salary analysis** | hiring demand on **deduped** counts (by company / location / seniority), in-demand skills, remote-hybrid mix, and **coverage-labeled** salary distribution | [reference/analysis.md](reference/analysis.md) | | **Structured export** | the normalized rows as CSV / JSON, or the raw Apify dataset ID for direct BI / dashboard ingestion | [reference/output-formats.md](reference/output-formats.md) | | **Résumé-fit** | postings ranked against a résumé, with ATS-keyword gaps and apply-ready briefs | [reference/fit-scoring.md](reference/fit-scoring.md) |

Cost discipline (best quality for the lowest cost)

This is a design goal, not an afterthought — keep every run as cheap as it can be while still answering the question:

  • **One cheap actor, no subscriptions.** Default to the pay-per-result aggregator

(≈ $0.0035/job + $0.01 start on the free tier, as of 2026-09-16 — check the live rate in `reference/gotchas.md` / the Apify console before quoting a number). A typical run is **cents to a few dollars**.

  • **Smallest sample that answers it.** `max_results` is *per platform* (× every

platform the Actor supports for the country unless `platforms` is pinned), so pin `platforms` and start small — a quick scan needs ~10–15/platform; a market analysis ~25–50/platform — and scale only if the result is too thin. Always estimate, and confirm before a big run.

  • **One run feeds every mode.** Analysis, export, and résumé-fit all read the *same*

scrape — never re-scrape to add a second mode.

  • **De-noise so you never pay for junk.** Removing ghost jobs / reposts / duplicates

keeps the billed sample honest and the counts real.

  • **For salary, prefer the Glassdoor benchmark over a mega-scrape.** Salary disclosure

is low (~2–6% in many markets), so scraping thousands of postings to harvest a few disclosed figures is wasteful — one cheap `memo23/glassdoor-scraper-ppr` call per company **with `maxItems` ≤ 50** (its default is 20,000 rows per URL) gives a better signal for less.

Prerequisites

(No need to check this upfront.)

Read more
Ships withawesome-skills

Community collection of Apify agent skills for AI coding assistants

Get the whole plugin

Other skills on awesome-skills.