Aller au contenu principal

Créé le

Mis à jour le

Tutorial software-engineering

AI Job Hunter Agent (Fully Automated System)

Par

I built an automated AI Job Hunter Agent that searches for developer jobs every day, extracts real job postings using AI, scores them based on relevance, and stores everything inside Google Sheets.

Overview

I built an automated job-hunting system that runs every day and collects real developer job postings from multiple sources, processes them with AI, ranks them by relevance, and stores everything in Google Sheets.

The system runs completely automatically using GitHub Actions and costs almost nothing.


What This System Does

  • Searches developer jobs daily
  • Focuses on LinkedIn, remote platforms, and Moroccan job boards
  • Filters noise (blogs, tutorials, fake listings)
  • Removes duplicates
  • Scores jobs by relevance
  • Stores everything in Google Sheets
  • Runs automatically every day via GitHub Actions

Architecture

GitHub Actions (Scheduler) ↓ Node.js Job Agent ↓ Tavily Search API ↓ OpenRouter AI (Extraction) ↓ Google Apps Script Webhook ↓ Google Sheets Database

Tech Stack

| Layer | Technology | | ------------- | ------------------ | | Scheduler | GitHub Actions | | Backend Agent | Node.js | | Search Engine | Tavily API | | Storage | Google Sheets | | Webhook | Google Apps Script |


GitHub Actions Workflow

name: Daily Job Hunter Agent on: schedule: - cron: "0 8 * * *" workflow_dispatch: jobs: hunt-jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "20" - name: Run Job Agent env: OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} GOOGLE_SHEETS_WEBHOOK: ${{ secrets.GOOGLE_SHEETS_WEBHOOK }} TAVILY_API_KEY: ${{ secrets.TAVILY_API_KEY }} run: node agent.js

Core Agent (Node.js)

The agent orchestrates the full pipeline:

  • Runs multiple search queries
  • Collects raw results
  • Sends them to AI for structured extraction
  • Applies fallback parsing if AI fails
  • Scores and filters jobs
  • Sends final data to Google Sheets

Search Strategy

The system uses multi-source queries:

const SEARCH_QUERIES = [ `"Java Spring Boot" developer Morocco jobs`, `"Node.js NestJS" developer Morocco jobs`, `"React Next.js" fullstack Morocco jobs`, `"Backend Engineer" remote Morocco`, `"Software Engineer" Casablanca CDI`, `"développeur Java Spring Boot Maroc site:rekrute.com`, `"développeur Node.js Maroc site:emploi.ma`, `"Fullstack Developer remote Africa`, ];

This ensures wide coverage across:

  • Google-indexed jobs
  • LinkedIn job posts
  • Moroccan platforms
  • Remote job boards

AI Extraction Prompt

The AI is used to extract structured jobs from messy search results:

Extract ONLY REAL JOB POSTINGS. IGNORE: - blogs - tutorials - courses - company homepages Return: [ { "title": "", "company": "", "type": "", "location": "", "stack": "", "contact": "", "link": "", "summary": "" } ]

Job Scoring System

Each job is ranked automatically:

if (text.includes("nestjs")) score += 20; if (text.includes("spring boot")) score += 20; if (text.includes("react")) score += 15; if (job.source === "LinkedIn") score += 20; if (text.includes("remote")) score += 8;

Why scoring matters

It allows prioritization of:

  • High-quality jobs
  • Modern tech stacks
  • Remote opportunities
  • Premium sources

Google Sheets Integration

The system sends structured job data via webhook:

await fetch(GOOGLE_SHEETS_WEBHOOK, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) });

Google Apps Script Backend

This script:

  • Creates spreadsheet automatically
  • Creates sheet if missing
  • Deduplicates jobs
  • Formats data
  • Applies styling
  • Handles webhook ingestion

Webhook Handler

function doPost(e) { const payload = JSON.parse(e.postData.contents); const jobs = payload.jobs || []; // Insert into Google Sheets }

Setup Steps

1. Clone repository

git clone https://github.com/MohamedAgdid/job-shark.git cd job-shark

2. Add GitHub Secrets

Go to:

Settings → Secrets and variables → Actions

Add:

  • TAVILY_API_KEY
  • GOOGLE_SHEETS_WEBHOOK

3. Deploy Google Apps Script

  • Create new Apps Script project
  • Paste backend code
  • Deploy as Web App
  • Set access to: Anyone with link

4. Run Workflow

Manually:

GitHub Actions → Run Workflow

Or wait for automatic daily run.


Output Example

| Title | Company | Location | Score | | ---------------- | ------------ | ---------- | ----- | | Backend Engineer | Startup X | Remote | 92 | | NestJS Developer | Tech Company | Casablanca | 85 | | React Developer | Agency | Rabat | 78 |


Why This Project Matters

This is not just a script.

It demonstrates:

  • AI automation pipelines
  • Data engineering
  • Real-world job scraping
  • API orchestration
  • Cloud workflows
  • Production-level architecture

Possible Improvements

Future upgrades:

  • Telegram notifications
  • Email alerts
  • Next.js dashboard
  • PostgreSQL storage
  • AI resume matching
  • Auto-apply system
  • Vector search (RAG system)

Final Note

This system is a practical example of how AI can automate job discovery and ranking at scale using modern cloud tools and free APIs.