Skip to content
AI Job Scout

Module 11 · ai · intermediate

starter.json

In n8n, copy this file and paste it onto the canvas, or use Import from File.

{
  "name": "11 - AI Job Scout (starter)",
  "nodes": [
    {
      "parameters": {
        "path": "jobs/scout",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "m11-webhook",
      "name": "Scout API",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        200
      ],
      "webhookId": "course-11-scout"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "s1",
              "name": "keywords",
              "value": "={{ ($json.query?.keywords ?? \"n8n,zapier,make.com,automation engineer,workflow automation,ai automation,ai agent,llm,integration engineer,integrations engineer,no-code,low-code\").split(\",\").map(k => k.trim().toLowerCase()).filter(Boolean) }}",
              "type": "array"
            },
            {
              "id": "s2",
              "name": "min_score",
              "value": "={{ Number($json.query?.min_score ?? 60) }}",
              "type": "number"
            },
            {
              "id": "s3",
              "name": "max_jobs",
              "value": "={{ Math.min(Number($json.query?.limit ?? 10), 25) }}",
              "type": "number"
            },
            {
              "id": "s4",
              "name": "dry_run",
              "value": "={{ $json.query?.dry_run === 'true' }}",
              "type": "boolean"
            },
            {
              "id": "s5",
              "name": "profile",
              "value": "Full-stack developer (TypeScript, Node.js, React, Python) specializing in n8n automations, AI agents and RAG (OpenAI), API integrations, Google Workspace and Supabase. Based in the Philippines (UTC+8), works fully remote, fluent English. Prefers freelance/contract work or remote roles open to Asia-based candidates.",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "m11-settings",
      "name": "Settings (edit profile)",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        220,
        100
      ]
    },
    {
      "parameters": {
        "url": "https://remoteok.com/api",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "User-Agent",
              "value": "Mozilla/5.0 (n8n job scout)"
            }
          ]
        },
        "options": {
          "timeout": 20000
        }
      },
      "id": "m11-rok",
      "name": "Fetch RemoteOK",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        440,
        0
      ],
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 2000,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "url": "https://weworkremotely.com/categories/remote-programming-jobs.rss",
        "options": {}
      },
      "id": "m11-wwr",
      "name": "Fetch We Work Remotely",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        440,
        200
      ],
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 2000,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "content": "## Your task\n1. Run both fetch nodes and compare their output shapes.\n2. Normalize each source into the same shape with a **Code** node: source, title, company, url, tags, location, salary, posted_at, description.\n3. **Merge** (append) → keyword **Filter** (whole-word) → **Sort** newest → **Limit** max_jobs.\n4. If `dry_run`, aggregate and respond. Otherwise score each job with an **Information Extractor** (score, fit_reasons, red_flags, pitch_angle) against your profile, keep score ≥ min_score, and build a report.\n\nTest: `./test/test.sh` then `WITH_CREDS=1 ./test/test.sh`",
        "height": 260,
        "width": 420
      },
      "id": "starter-task-note",
      "name": "Your Task",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        0,
        -340
      ]
    }
  ],
  "connections": {
    "Scout API": {
      "main": [
        [
          {
            "node": "Settings (edit profile)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Settings (edit profile)": {
      "main": [
        [
          {
            "node": "Fetch RemoteOK",
            "type": "main",
            "index": 0
          },
          {
            "node": "Fetch We Work Remotely",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch RemoteOK": {
      "main": [
        []
      ]
    },
    "Fetch We Work Remotely": {
      "main": [
        []
      ]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  }
}