---
name: Apify Plugin
slug: apify-plugin
category: Automation
description: "Apify Plugin runs an Apify actor for a tracked company source and maps dataset items into the scanner. Use it in portals.yml when provider: apify is set and you want scan.mjs to ingest the results."
github: "https://github.com/career-ops-hq/career-ops/tree/main/plugins/apify"
language: JavaScript
stars: 69952
forks: 13232
install: "npx degit https://github.com/career-ops-hq/career-ops/tree/main/plugins/apify ~/.claude/skills/apify"
installs_to: ~/.claude/skills/apify
source_path: plugins/apify/skill.md
collection_size: 8
category_size: 1754
collection_url: "https://dirskills.com/collections/career-ops-hq/career-ops"
added: 2026-09-03T06:03:10.889Z
last_synced: 2026-09-03T06:03:10.889Z
canonical_url: "https://dirskills.com/skills/apify-plugin"
---

# Apify Plugin

Apify Plugin runs an Apify actor for a tracked company source and maps dataset items into the scanner. Use it in portals.yml when provider: apify is set and you want scan.mjs to ingest the results.

**Install:**

```bash
npx degit https://github.com/career-ops-hq/career-ops/tree/main/plugins/apify ~/.claude/skills/apify
```

## README

# 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/`.
