# Career Ops Plugin Apify

> How to scan a job source through an Apify actor as a keyed provider.

- Skill: `career-ops-hq/career-ops-plugin-apify` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add career-ops-hq/career-ops-plugin-apify`
- Raw SKILL.md: https://api.skillmd.com/api/skills/career-ops-hq/career-ops-plugin-apify/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: career-ops-hq (https://skillmd.com/u/career-ops-hq)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/career-ops-hq/career-ops-plugin-apify

---


# apify plugin

A keyed provider: runs an Apify actor and maps its dataset items into the
scanner. It fires ONLY on a `portals.yml` entry that sets `provider: apify` —
never via auto-detection. Put `APIFY_TOKEN` in `.env`.

## portals.yml entry

```yaml
tracked_companies:
  - name: "Indeed — VP Engineering (Chicago)"
    provider: apify
    actor: misceres/indeed-scraper
    input: { position: "VP of Engineering", location: "Chicago, IL", maxItems: 25 }
    field_map:
      title:    [positionName, title]    # array = first non-empty wins
      url:      url
      company:  [company, companyName]
      location: [location, formattedLocation]
```

## Then

`node scan.mjs` runs the provider for that entry and writes the results to the
pipeline like any other source. An optional `field_map.description` caches the
JD locally under `jds/`.

