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.