Skip to content
AI Job Scout

Module 11 · ai · intermediate

Solutions 11 · AI Job Scout

Exercise 1

Replace the No Operation node with:

IF "Any Fits?" ({{ $json.count }} Number > 0) ─true→ Telegram (Send Message)

Telegram node: credential with your bot token, Chat ID = your ID, Text = 🎯 {{ $json.count }} new job fits\n\n{{ $json.message }}. Options → Disable Web Page Preview on, to keep the message compact. Telegram messages max out at 4096 characters; keep limit ≤ 10 or truncate with .slice(0, 4000).

Exercise 2

Insert Remove Duplicates between Dry Run? (false output) and Score Job:

  • Operation: Remove Items Processed in Previous Executions
  • Keep Items Where: Value Is New
  • Value to Dedupe On: {{ $json.url }}

Only put it on the scoring path; dry runs should always show everything. Manual test executions keep their own history, separate from production runs, so test the dedupe with production calls. To reset, use the same node with operation Clear Deduplication History.

Exercise 3

  1. HTTP Request Fetch Remotive from Settings: GET https://remotive.com/api/remote-jobs?category=software-dev&limit=50.
  2. Code Normalize Remotive:
const strip = (h) => String(h ?? '').replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
return $input.first().json.jobs.map(j => ({ json: {
  source: 'remotive', title: j.title, company: j.company_name, url: j.url,
  tags: (j.tags ?? []).map(t => t.toLowerCase()), location: j.candidate_required_location ?? '',
  salary: j.salary ?? '', posted_at: j.publication_date, description: strip(j.description).slice(0, 1500),
}}));
  1. All Jobs → Number of Inputs: 3, and connect Normalize Remotive to input 3.

Check each board's API terms before using it, especially commercially: some ask for attribution or limit how often you can poll.