← Holocron Logs

Job Radar: Automating My Job Search with n8n and Discord

Job Radar is an n8n workflow that runs every 6 hours and posts matching jobs to a Discord channel.

Why this matters beyond the homelab: Infrastructure automation and alerting pipelines mirror patterns used in production DevOps environments.

Building a workflow that searches four job boards and delivers results to Discord every 6 hours.

In March 2026, I was laid off from Team Liquid after 3+ years as a IT Engineer.

The first few days were rough. Checking LinkedIn. Then Indeed. Then Glassdoor. Then back to LinkedIn. Repeat until exhausted.

By day three, I decided to automate the entire thing.

The Problem

Job searching is repetitive. Every day you’re checking the same sites, running the same searches, scanning the same results. Most of the listings you’ve already seen. The new ones get buried. You miss things.

I wanted something that would:

  1. Search multiple job boards automatically
  2. Filter by my target roles and location
  3. Remove duplicates
  4. Deliver new listings to me (not the other way around)

The Solution: Job Radar

Job Radar is an n8n workflow that runs every 6 hours and posts matching jobs to a Discord channel. I wake up to fresh opportunities. No manual searching. No doom-scrolling.

Here’s what a job card looks like in Discord:

┌─────────────────────────────────────────────┐
│ Senior DevOps Engineer                      │
├─────────────────────────────────────────────┤
│ 🏢 Company    📍 Location     💰 Salary    │
│ Acme Corp      Los Angeles, CA  $150-180K   │
├─────────────────────────────────────────────┤
│ Job Radar                                   │
└─────────────────────────────────────────────┘

Clicking the title takes you directly to the application page.

Architecture

The workflow uses three main components:

JSearch API (via RapidAPI): Aggregates job listings from Indeed, LinkedIn, Glassdoor, and ZipRecruiter into a single API. Free tier gives you 500 requests per month.

n8n: Self-hosted workflow automation. Handles the scheduling, API calls, data transformation, and Discord posting.

Discord Webhooks: Simple way to post formatted messages to a channel. No bot required.

Here’s the data flow:

Schedule Trigger (every 6 hours)


   Search Config
   (15 job titles, location, radius)


   Split Job Titles
   (process each title separately)


   Wait 10 Seconds
   (rate limiting for API)


   JSearch API
   (fetch jobs for each title)


   Split Jobs
   (separate each job listing)


   Filter Valid Jobs
   (remove empty results)


   Remove Duplicates
   (dedupe by job_id)


   Format Job Data
   (extract title, company, location, salary, URL)


   Wait 5 Seconds
   (rate limiting for Discord)


   Post to Discord
   (batch: 1 message per 3 seconds)

The Job Titles

I’m targeting Cloud/DevOps/IAM roles, so my search includes:

You can customize these to whatever roles you’re targeting.

Handling Rate Limits

Both JSearch and Discord have rate limits. If you hit them, you get 429 errors and your workflow fails.

JSearch: Free tier allows 500 requests per month. Each job title counts as one request. With 15 titles running 4 times per day, that’s 60 requests per day (1,800 per month). You’ll need to either reduce titles, reduce frequency, or upgrade your plan.

I added a 10-second wait between API calls to avoid hitting per-minute limits.

Discord: Webhooks are limited to about 30 messages per minute. With 80+ jobs to post, you’ll hit this instantly.

The fix is batching. In the Post to Discord node, I configured:

This posts one job every 3 seconds. A full run with 80 jobs takes about 4 minutes.

The Discord Payload

Discord webhooks accept JSON with an embeds array. Each embed is a formatted card. Here’s the structure:

{
  embeds: [{
    title: "Senior DevOps Engineer",
    URL: "HTTPS://LinkedIn.com/jobs/view/...",
    color: 36863,
    fields: [
      { name: "🏢 Company", value: "Acme Corp", inline: true },
      { name: "📍 Location", value: "Los Angeles, CA", inline: true },
      { name: "💰 Salary", value: "$150,000 - $180,000", inline: true }
    ],
    footer: { text: "Job Radar" }
  }]
}

The color value is decimal (36863 is a nice blue). The inline: true puts fields side by side.

One gotcha: job descriptions often contain special characters that break JSON. I use JSON.stringify() around the entire payload to escape everything properly.

Setup Overview

The full setup takes about 15 minutes:

  1. RapidAPI: Create account, subscribe to JSearch (free tier)
  2. Discord: Create a webhook in your target channel
  3. n8n: Import the workflow, add credentials, update webhook URL
  4. Customize: Edit job titles and location to match your search
  5. Activate: Toggle the workflow on

I documented the entire process in the GitHub repo with screenshots and troubleshooting tips.

Lessons Learned

WebSockets matter. If you’re running n8n behind a reverse proxy (like Nginx Proxy Manager), you need to enable WebSocket support. Otherwise you’ll get “Lost connection to the server” errors constantly.

Rate limits are real. Don’t assume you can blast 15 API calls and 80 Discord messages instantly. Build in delays from the start.

Deduplication is per-run only. The current workflow removes duplicates within a single run, but if the same job appears tomorrow, it’ll post again. Persistent deduplication (with a database) is on the roadmap for v2.

Test incrementally. When debugging, test one node at a time. Click the node, run just that step, inspect the output. Much easier than running the whole workflow and guessing where it failed.

Results

On my first real run, Job Radar found 87 unique jobs within 30 miles of LA. This was an initial test, so the results were mixed.

Relevant hits:

Less relevant:

The JSearch API casts a wide net. It searches by job title, but “Cloud Engineer” might return cloud-adjacent roles that don’t quite fit. That’s expected for a first pass.

The next step is adding keyword filters to score results by relevance (bonus points for Azure, Terraform, Kubernetes, IAM, etc.) and surface the best matches first. For now, having everything in one Discord channel beats checking four job boards manually.

What’s Next

Phase 2 will add:

Get the Code

The entire project is open source:

GitHub: GitHub.com/timanlemvo

The repo includes:

If you’re navigating a layoff too, feel free to use it. And if you run into issues, open an issue or reach out.


Job Radar is part of the Alliance Fleet, my homelab infrastructure. For more projects like this, check out tima.dev/blog.

← Back to Holocron Logs