Quick overview
Turn a job search into a measured system. This workflow scrapes live job posts, uses an LLM to extract the skills each one is asking for, compares that demand against the skills you list, and serves the result as a live radar page.
How it works
- 🌐 Open the webhook URL → the run starts.
- ♻️ Cache gate — if nothing changed since last time, the saved page is returned instantly. Otherwise it recomputes.
- 📥Fetch jobs from a free, no-auth remote-jobs feed (Himalayas) — a wide recent window, every field, no company list.
- 🎯 Filter & rank by your keywords (title hits weighted over description), newest as tie-break, capped to keep the LLM call managable.
- 🤖 Extract (LLM) — Sends each job posting to an OpenAI-compatible chat completions API to extract seniority and a structured list of must-have vs nice-to-have skills.
- 🧠 Score — each demanded skill is "have" if it appears in your skills text, else "gap"; the score is demand-weighted coverage.
- 📊 Render & serve — the radar as a self-contained HTML page straight back to your browser.
Setup
- Add an HTTP Header Auth credential for your OpenAI-compatible LLM endpoint (for example
Authorization: Bearer <API_KEY>) and set the LLM URL/model values in the configuration.
- Edit the “Desired job config” values (keywords, maxJobs, feedPages/feedPerPage, llmUrl, llmModel) to fit your role and usage limits.
- Paste your resume/tools/skills as free text in “Your Skills” so the workflow can mark skills as covered vs gaps.
- Activate the workflow, copy the webhook Production URL, open it in a browser, and use
?refresh=1 when you want to bypass the cache.
Additional info
🎛️ Good to know
- Refreshes are stable — the page only recomputes when you edit the keywords or skills, when the daily cache expires, or when you add
?refresh=1 to the URL.
- Job-neutral — keywords that literally appear in postings (engineer, python, sales, nurse) work best; very abstract terms fall back to the recent feed.
- Cost is bounded — one LLM call per job, capped by
maxJobs (default 25), and only on a cache miss.
- Want a public, always-on page instead of on-demand? Route the rendered HTML to static hosting (GitHub Pages, etc.) after
Render.