apify-ads-intelligence
Research, spy on, and analyze ads across Meta (Facebook & Instagram), Google (Ads Transparency Center + paid search results),…
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,
Claude Code
$ npx -y skills add apify/awesome-skills --skill apify-jobs-data --agent claude-code
Codex
$ npx skills add apify/awesome-skills --skill apify-jobs-data -a codex -y
Cursor
$ npx skills add apify/awesome-skills --skill apify-jobs-data -a cursor -y
Gemini CLI
$ npx skills add apify/awesome-skills --skill apify-jobs-data -a gemini-cli -y
GitHub Copilot
$ npx skills add apify/awesome-skills --skill apify-jobs-data -a github-copilot -y
OpenCode
$ npx skills add apify/awesome-skills --skill apify-jobs-data -a opencode -y
Windsurf
$ npx skills add apify/awesome-skills --skill apify-jobs-data -a windsurf -y
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"
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 |
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.
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) |
This is a design goal, not an afterthought — keep every run as cheap as it can be while still answering the question:
(≈ $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**.
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.
scrape — never re-scrape to add a second mode.
keeps the billed sample honest and the counts real.
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.
(No need to check this upfront.)
Research, spy on, and analyze ads across Meta (Facebook & Instagram), Google (Ads Transparency Center + paid search results),…
Track whether a brand and its competitors get cited or mentioned across Google AI Overviews, Google AI Mode, ChatGPT Search,…
Pull structured Apple App Store and Google Play data — app metadata, price, rating, the 1–5★ ratings histogram, version,…
Scrape Ashby jobs or discover companies using Ashby with the Apify Ashby Job Board API Actor (johnvc/ashby-job-board-scraper).…
Diagnose and recover a scrape that is blocked, throttled, or served empty or partial content, in cost order, before paying for a…
Find and enrich B2B leads from Booking.com - hotels, apartments, and vacation rentals - and pull each host's or property…
Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid…
Design and build AI agents for any domain. Use when users: (1) ask to "create an agent", "build an assistant", or "design an AI…