Job Finder + CV Adapter (Google Jobs/RemoteOK + OpenAI) — LinkedIn-friendly
Overview
Help applicants apply smarter, not harder. This flow finds new jobs daily based on your role/locations and generates tailored resume bullets, a concise summary, and a short cover-letter intro for each role. The results are packaged into a ZIP of Markdown files and emailed to you—ready to paste into your CV and application.
Compliance note: This template does not scrape LinkedIn pages. It uses SerpAPI Google Jobs and RemoteOK for listings, and (optionally) parses LinkedIn Job Alert emails you already receive via IMAP.
What it does
- Daily search (Cron): role, seniority, locations
- Fetch jobs from SerpAPI (Google Jobs) + RemoteOK
- Normalize + dedupe listings and filter out unwanted terms
- OpenAI: produce tailored resume summary, 5–7 bullets, cover-letter opening, and keywords for each job
- Bundle everything into a ZIP of Markdown files
- Email the ZIP to you
- Optional: Parse LinkedIn Job Alert emails by IMAP and merge into the results
Why it’s useful
- Saves hours of manual tailoring
- Consistent, metrics-driven bullets and keyword alignment for ATS
- Centralized daily pack you can apply from
🧩 Node List (by name & type)
-
Daily Trigger —
cron
-
Set Search Config —
set
-
Fetch Google Jobs (SerpAPI) —
httpRequest
-
Fetch RemoteOK —
httpRequest
-
Normalize + Merge Jobs —
function
-
Filter & Deduplicate —
function
-
OpenAI: Tailor CV + Cover —
openAi
(chat) -
Assemble Markdown —
function
-
Set Filenames —
function
-
Create ZIP (Markdown Pack) —
archive
-
Email ZIP to Me —
emailSend
-
Optional: Parse LinkedIn Alerts (IMAP) —
imap
(separate branch)
⚙️ Setup Instructions
Credentials / Keys
-
SerpAPI:
YOUR_SERPAPI_KEY
(in Fetch Google Jobs (SerpAPI) URL param) - OpenAI: add OpenAI credentials in n8n and select them in the OpenAI node
- Email: configure Email Send node (SMTP or Gmail OAuth)
- IMAP (optional): configure your mailbox to read LinkedIn Job Alerts
Configure “Set Search Config” (defaults provided)
-
role
→ e.g.,Product Manager
-
seniority
→ e.g.,mid OR senior
-
locations
→ e.g.,remote OR United States
-
exclude_terms
→ e.g.,unpaid internship, volunteer
-
email_to
→ where to send your daily ZIP -
base_resume_text
→ paste your truthful base CV text (summary + bullets + skills) -
openai_style
→feminine, warm, confident, metrics-driven, concise
(edit to taste) -
max_jobs
→ cap results (e.g.,12
)
Optional (IMAP)
Add the IMAP node to a side branch to parse your LinkedIn Job Alert emails and merge extracted job links/titles with the main job list (a note is included in the node).
🧪 Testing Tips
- Temporarily change the Cron to “Every 5 minutes” for testing.
- Start with a small
max_jobs
(e.g., 5). - Check the archive node produces a valid ZIP and that email arrives with attachment.
- Verify OpenAI outputs JSON (the flow parses it; malformed JSON will produce empty sections).
🧷 Sticky Notes (for n8n template page)
- Don’t hardcode secrets; use n8n credentials or env vars.
- Replace
YOUR_SERPAPI_KEY
. - Set OpenAI credentials in the OpenAI node.
- Configure Email Send (SMTP/Gmail OAuth).
- Paste your base_resume_text in Set Search Config.
- Optional IMAP: add mailbox creds and folder/label for LinkedIn alerts.
🏷️ Suggested Categories/Tags
AI
, Careers
, Content Generation
, Email
, HTTP
, Utilities
📄 License (suggestion)
Starter license (personal use, no resale/redistribution). Remove/adjust if submitting to public gallery with different terms.
Searches Google Jobs/RemoteOK for your role, dedupes results, and tailors your CV + a short cover letter for each posting via OpenAI. Delivers a ZIP of Markdown files to your email. Optional IMAP parsing for LinkedIn Job Alert emails.