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"
}
}